Skip to content

feat(studio): Chats core surface + Playwright e2e infrastructure - #972

Closed
jtenniswood wants to merge 1 commit into
studio/S06from
studio/S07
Closed

feat(studio): Chats core surface + Playwright e2e infrastructure#972
jtenniswood wants to merge 1 commit into
studio/S06from
studio/S07

Conversation

@jtenniswood

Copy link
Copy Markdown

Stack 7/21 — Studio: Chats core + Playwright e2e infrastructure

The first surface, shaped like the original branch's own wiring commit — proof by history that this is a coherent, working slice — plus the browser e2e infrastructure (a Playwright job with zero specs fails, so the job and its first spec land together).

Chat core:

  • chat/[[...sessionId]] (draft + session in one optional-catch-all mount), chat-workspace / chat-view core, message-bubble core (text / reasoning / tool-call summary / static delegation badge / failed-turn strip), session-sidebar (recency buckets, capability-gated rename/delete), three-way approval-panel with ask retraction, tool-call-list core, markdown + shiki code rendering, side-panel, mock-provider-notice, clarification-panel (kept as the branch has it; flagged vestigial for a follow-up issue).
  • chat-input — the TipTap composer: @-mentions from GET /v1/agents, slash commands from GET /v1/commands (both via composer-capabilities), plain Enter = send.
  • use-agent-chat core: lazy session mint, prompt SSE, transcript rehydrate, approvals + retract, resend, live usage.
  • Deps: the tiptap family, shiki, react-markdown/remark-gfm (+ lockfile via the pinned npm).
  • Later chat tiers (attachments, tool drill-down, queue/steer, threads, re-attach, modes, mobile) arrive as bounded deltas onto this PR's named seams — that is the review structure of PRs 13–20.

E2e infrastructure:

  • playwright.config.mts — webServer boots the fixture daemon + a real next start in external mode, so the e2e path is browser → the real PR-3 proxy tier → fixture wire. Fully hermetic: no Go toolchain, no bin/mecated, no secrets, no live model.
  • tests/e2e/fixture-daemon.mjs lands whole (~127-line node:http test double behind the API seam — not a UI demo fallback, which Studio forbids); tests/e2e/workspace.spec.ts starts with the chat spec and grows one spec per surface PR.
  • studio.yml gains the isolated e2e job; the hermetic suite's SSR assertion moves from root branding to /workspace/chat.

Docs: ADR 0289 (server-backed chats; renumbered from the branch's 0281, which collided on main), README row, user-docs Chats section, readiness-tracker flip, llms regen.

Demo at this stack point: create a chat, stream tokens/reasoning/tool cards, approve/deny/retract, rename/delete sessions.

Part of the stacked landing of #618. Size note: flagged over the series' review budget and irreducible — a composer without a chat view is not a CI-testable unit; ~700 lines of it is review-light e2e infra.

🤖 Generated with Claude Code

The first surface, shaped like the original branch's own wiring commit:
draft-on-first-send chat over the prompt SSE (lazy session mint, transcript
rehydrate), message rendering (text / reasoning / tool-call summaries /
static delegation badges / failed-turn strips), three-way approvals with ask
retraction, the recency-bucketed session sidebar with capability-gated
rename/delete, and the TipTap composer (@-mentions from /v1/agents, slash
commands from /v1/commands, plain Enter = send). Later chat tiers arrive as
bounded deltas onto this PR's named seams.

E2e lands here with its first spec (a zero-spec Playwright run fails):
playwright.config boots the fixture daemon (a ~130-line node:http test
double behind the API seam — not a UI demo fallback, which Studio forbids)
plus a real next start in external mode, so the browser drives the real
proxy tier end to end — no Go toolchain, no live model. studio.yml gains the
isolated e2e job; the hermetic suite's SSR assertion moves to
/workspace/chat.

Docs: ADR 0289 (server-backed chats; renumbered off the branch's 0281 which
collided on main, and stating the watch-based re-attach consequence
honestly), README row, user-docs Chats section, readiness flips, llms regen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jtenniswood jtenniswood added documentation Improvements or additions to documentation enhancement New feature or request ux ui WebUI Applies to the WebUI interface labels Sep 2, 2026
@jhrozek jhrozek closed this Sep 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request ui ux WebUI Applies to the WebUI interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants