Skip to content

CL-6376/CL-6377: timeline polish + single Connect action - #122

Merged
TheGreatAxios merged 1 commit into
mainfrom
cl-6376-timeline-polish
Aug 20, 2026
Merged

TheGreatAxios merged 1 commit into
mainfrom
cl-6376-timeline-polish

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Contributor

Summary

CL-6376 (chat timeline polish, packages/chat-ui):

  • Failed-turn notice redesigned as a quiet inline system row aligned with the message column (.chat-turn-failed) instead of PrFailedTurnStrip's bordered banner — muted danger text, a small ghost Retry, "What happened" as an inline disclosure. Auto-retry-once semantics and consumer copy unchanged.
  • The three-dot typing indicator now also clears when a turn fails via postUndeliveredNotice (a chat.message with a turnFailed part) — previously that path emitted no chat.agent events, so the pulse stayed stranded until a 120s backstop.
  • The pin-toggle glyph no longer mounts for an unpinned message just because a host wires pinActions — it only renders once there's something to show (a reaction, or an already-pinned message needing a visible unpin). Pinning stays reachable via the ellipsis/context menu's "Pin message" entry.
  • Fixed the broken greeting interpolation: "Welcome in alice" → "Welcome in, alice."
  • The hover action toolbar now anchors to each message's own content wrapper rather than the whole .chat-message-group (which could include a leading day divider) — it no longer floats up into the divider's space on the first message of a new day.

CL-6377 (connect flow, packages/connections + settings-ui + plugins-ui + chat-ui):

  • Collapsed the "test key, then save" two-call flow into a single Connect action everywhere (Connections settings dialog, workbench plugins panel, plugins-ui connect card). POST /:connectorId/complete already proves the key against the connector's own probe before storing it, so the separate client-driven /credential/test round-trip was dead weight.
  • Removed the POST /:connectorId/credential/test route and its client helpers (testConnectorCredential) entirely, server and client — no fallback path left behind.
  • Button copy is "Connect"/"Connecting…" everywhere; a rejected key surfaces inline from the same connect call's 422.

CL-6378 (tool_use rendering as raw JSON): investigated but not started — didn't fit this box. tool-trace parts already render through react-ui's ToolBlock lifecycle component, not raw text, so the leak is upstream of the renderer (how a turn's final text content is assembled in chat-orchestrator.ts / @corbits/folded-runs' connectorReplyContent, or a different message path) and needs its own investigation pass.

Test plan

  • bun test + bunx tsc --noEmit green in packages/chat-ui, packages/chat, packages/settings-ui, packages/connections, packages/plugins-ui
  • bunx eslint src clean in touched packages (pre-existing warnings elsewhere untouched)
  • New/updated tests: typing-pulse clears on turnFailed (streaming-reply.test.ts), failed-turn row selectors, pin-toggle-hidden-until-pinned + reachable via context menu, connect-dialog single round-trip + inline 422 error

…greeting copy, hover toolbar anchor

- Failed-turn notice now renders as a quiet inline system row
  (.chat-turn-failed) in the timeline's own idiom instead of
  PrFailedTurnStrip's bordered banner: muted danger text, a ghost Retry,
  "What happened" as an inline disclosure.
- The three-dot typing pulse now also clears on a chat.message carrying
  postUndeliveredNotice's turnFailed part — the one failure path with no
  chat.agent events of its own to clear it otherwise.
- The message-actions row (reaction chips + pin toggle) no longer mounts
  for an unpinned message just because pinActions is wired — it only
  shows once there's something to show. Pinning stays reachable through
  the ellipsis/context menu.
- Fixed "Welcome in alice" -> "Welcome in, alice." in the canned greeting
  template.
- The hover toolbar now anchors to .chat-message-row (this message's own
  content) rather than .chat-message-group as a whole, so it no longer
  floats up into a day divider's space on the first message of a new day.

CL-6377: connect flow — single Connect action, no separate test step

- Collapsed the two-call "test key, then save" flow into the one
  /complete call everywhere (Connections settings, workbench plugins
  panel, plugins-ui connect card) — /complete already proves the key
  against the connector's own probe before storing it, so the separate
  client-driven /credential/test round-trip was redundant.
- Removed the POST /:connectorId/credential/test route and its client
  helpers (testConnectorCredential) entirely — no fallback path left
  behind.
- Renamed button copy to "Connect"/"Connecting…" throughout; a rejected
  key surfaces inline from the same connect call.

CL-6378 (tool_use rendering as raw JSON): investigated, not started —
didn't fit this box. The tool-trace part type already renders through
react-ui's ToolBlock lifecycle component, not raw text; the leak is in
how a turn's final text content gets assembled upstream (chat-orchestrator
paired with @corbits/folded-runs' connectorReplyContent) or possibly in
a different message path. Needs its own investigation pass.
@TheGreatAxios
TheGreatAxios merged commit bbc67bc into main Aug 20, 2026
0 of 2 checks passed
@TheGreatAxios
TheGreatAxios deleted the cl-6376-timeline-polish branch August 25, 2026 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant