Commit Graph

98 Commits

Author SHA1 Message Date
imccyu
bf11016bc1 Merge remote-tracking branch 'origin/master' into worktree/approval-panel-max-height 2026-07-31 00:05:48 +08:00
imccyu
c6c0f5de6a Merge branch 'master' into worktree/approval-panel-max-height 2026-07-30 23:49:19 +08:00
imccyu
7c086e40be Merge branch 'master' into worktree/plan-review-layout 2026-07-30 23:48:19 +08:00
imccyu
da9f02221e Merge remote-tracking branch 'origin/master' into worktree-forkweb 2026-07-30 22:53:07 +08:00
creatixchu
1102cfc1f3 Merge remote-tracking branch 'origin/master' into worktree/plan-review-layout 2026-07-30 22:10:56 +08:00
imccyu
3b370549a1 feat(client): increment forked session titles 2026-07-30 21:28:17 +08:00
imccyu
213de9a737 feat(ui-conversation): wire assistant session forks 2026-07-30 21:28:17 +08:00
imccyu
7d27c92851 test(web): cover row fork in the real app 2026-07-30 21:28:16 +08:00
imccyu
36f1489398 fix(web): address session fork review findings 2026-07-30 21:28:13 +08:00
kingwl
29d8ca5ee5 Merge remote-tracking branch 'origin/master' into codex/queue-collapse
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 20:11:46 +08:00
imccyu
a1f1f9c29a Merge branch 'master' into codex/figma-context-injection-row 2026-07-30 19:20:21 +08:00
kingwl
dec8173c43 Merge remote-tracking branch 'origin/master' into codex/queue-collapse 2026-07-30 19:20:20 +08:00
kingwl
5f87c7a89c fix(web): close queue collapse review gaps 2026-07-30 19:20:13 +08:00
creatixchu
2363ef01eb feat(web): render a plan review as a decision card, not a quiz
The Web composer now renders a request that declares the `plan-review` intent
as its own surface: the waiting-approval card language — amber "Plan review"
strip, the plan as the scrolling markdown body, the question as the card's
accessible name — over one decision row of Chat about it / Refuse / Approve.
Gone from that surface are the 1/1 pager, the numbered radio rows, the custom
answer row, and Skip/Submit, which made approving a plan read as sitting an
exam.

Approve and Refuse answer with the asker's own option labels and keep its
descriptions as tooltips; Chat about it cancels the request so the composer
returns and the user can simply say what they want. Copy is bilingual under the
existing `question` namespace.

The shape choice lives inside the single composer entry rather than a second
chain registration, so the two surfaces cannot race the same carrier, and
`planReviewOf` falls back to the generic flow for any request it cannot render
as a card — the client sits downstream of a wire boundary and every request
must stay answerable.
2026-07-30 19:09:35 +08:00
creatixchu
f5ab6d94a8 Merge remote-tracking branch 'origin/master' into worktree/approval-panel-max-height 2026-07-30 18:59:06 +08:00
creatixchu
12b55adf6b fix(web): keyboard reach and resting metrics on the approval scroll region
Review follow-ups on the approval takeover:

The scroll region is now a tab stop (tabIndex + named role="group"). The
question composer's scroll body needs none — its option rows are focusable and
pull the container along — but this one holds nothing but text, so a
keyboard-only user could reach the buttons and never the command's tail, and
approve what they could not finish reading.

The action row's padding reproduces the 14px gap it had inside the body: the
flex gap of 6 plus its 8px top margin, neither of which reaches it now that the
row sits outside the scroll region. The resting card is unchanged again.
2026-07-30 18:35:20 +08:00
kingwl
cdd1074805 Merge remote-tracking branch 'origin/master' into codex/queue-collapse
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 18:21:07 +08:00
creatixchu
14482fcef1 fix(web): keep the approval scenario's goldens platform-neutral
The answered-transcript golden captured the OS's own refusal of the denied
first attempt — "bash: notes.txt: Operation not permitted" on macOS against
"bash: line 1: notes.txt: Read-only file system" on Linux — so it passed
locally and failed the Linux snapshot lane.

The scenario now keeps one golden (the waiting panel, platform-neutral) and
asserts the answered state on the world instead: the decided outcome, the file
the escalated command actually wrote, DONE, the panel gone, and the composer
re-enabled. The file assertion is stronger evidence than the transcript dump
it replaces — it proves the grant reached the executor.
2026-07-30 18:11:05 +08:00
creatixchu
c0679f42b5 fix(web): cap the approval takeover at the composer's text height
The approval panel replaces the InputBar while a sandbox escalation waits,
and its justification and command are unbounded model text. With no height
cap, a long command grew the card until the refuse/allow row went under the
fold: at 900x700 the action row's bottom landed at y=749, so the user could
read the request and not answer it.

Justification and command now scroll in one region capped at the same height
as the composer's draft area, with the amber strip and the action row outside
it. The cap is one value with two consumers — declared as
--dsh-composer-text-max-height on ConversationRoot's .composerSeat, the
composer chain's only shared ancestor — so the seat cannot cap its two states
differently. The card rebinds the l2 scrollbar pair like every other scrolling
surface on an elevated background.

Covered by a new web e2e scenario that drives the real composition (read-only
session, denied write, the model's escalation retry, answer clicked through
the panel) and measures the live panel at two viewport heights against the
composer's own cap, read off the textarea rather than hardcoded.
2026-07-30 17:50:04 +08:00
kingwl
f5228e7c71 Merge origin/master into codex/figma-context-injection-row
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/ToolRow.module.css
#	packages/client/ui-conversation/src/client/chat/ToolRow.tsx
2026-07-30 17:34:14 +08:00
creatixchu
b8d9fb1ede Merge remote-tracking branch 'origin/master' into feat/directory-picker-show-hidden 2026-07-30 17:17:03 +08:00
imccyu
34c124585a fix: test 2026-07-30 16:46:50 +08:00
kingwl
0a25c0d237 feat(web): add queue collapse control 2026-07-30 16:41:55 +08:00
kingwl
17893c503e feat(web): match context injection disclosure design 2026-07-30 16:20:34 +08:00
imccyu
d34bc5bfa4 test(web): pick up the plan chip in the answered composer golden
The always-visible plan-mode toggle (fe9191934) adds one composer-row
button; the answered transcript golden re-records with it.
2026-07-30 15:44:53 +08:00
imccyu
ecd07abdc0 test(web): refresh question-composer goldens for the merged composer
The master-side refresh batch recorded these goldens against master's
composer (customTrigger row, header pager); the merge keeps this
branch's redesigned composer (always-visible custom input, footer
pager) with copy on the standard locale seat, so the waiting aria and
the answered transcript re-record against the merged UI. The answered
golden also picks up the ask_user_question toolview row this branch
introduces.
2026-07-30 15:07:31 +08:00
creatixchu
0ad6bf4b06 test(web): re-record directory-browser golden after master merge
The English-locale golden refreshed on master (8c753fd8f1) was recorded
against master's pre-miller dialog; this branch's own golden predated the
miller two-pane landing and was never enforced before the web browser
snapshot CI gate landed. Re-recorded against the merged tree: two-pane
landing plus the show-hidden footer toggle.
2026-07-30 15:00:43 +08:00
imccyu
291fe1e823 test(web): refresh composer stats expected outputs 2026-07-30 13:15:57 +08:00
imccyu
23fb779f7f test(web): refresh queue expected outputs 2026-07-30 11:57:00 +08:00
imccyu
b523a04af8 Merge remote-tracking branch 'origin/master' into worktree-fetest 2026-07-30 11:51:09 +08:00
imccyu
e80d7bce17 test(web): refresh message action expected outputs 2026-07-30 11:50:12 +08:00
imccyu
2fa26cd140 test(web): refresh localized expected outputs 2026-07-30 11:39:40 +08:00
imccyu
0dbe631c3a test(web): refresh browser expected outputs 2026-07-30 10:23:23 +08:00
imccyu
e56c0699a9 Merge branch 'master' into codex/web-queue-actions 2026-07-30 01:21:13 +08:00
kingwl
c97b1d025e Merge remote-tracking branch 'origin/master' into codex/web-queue-actions
# Conflicts:
#	apps/web/tsconfig.json
#	docs/architecture.i18n.yaml
#	docs/event-producer-consumer.md
#	packages/client/runtime/README.i18n.yaml
#	packages/client/tsdown.client.ts
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/core/agent-loop/README.i18n.yaml
#	packages/core/agent/README.i18n.yaml
#	packages/core/agent/README.zh.md
#	packages/host/apiproxy/README.i18n.yaml
#	tsconfig.host.json
2026-07-30 00:30:38 +08:00
Tianyi Cui
492eef806a Merge commit 'refs/codex/pr921/master' into worktree/retarget-pr921-20260729
# Conflicts:
#	apps/web/tests/slash-flow.snapshot.ts
2026-07-30 00:06:50 +08:00
kingwl
f893e2281d feat(agent): add addressable queue operations 2026-07-30 00:05:00 +08:00
imccyu
4d1ab81f05 test(web): shrink the assembled jsdom lane to one built-bundle boot smoke
The seven behavior-pinning snapshots (workspace-flow, slash-flow,
todo-display, session-title, session-actions, terminal-card,
code-mode-fixture) asserted per-package behavior through the whole
built app: every assertion now lives in the owning package's suite at
equal strength (SlotTestRuntime benches assemble the same plugin apply
over the production slot machinery), while the assembled layer kept
re-failing on unrelated churn at 10s-timeout debugging cost.

What only this lane can prove is the artifact plane: lib/client.js
bundles loading through the ModuleLoader path, staged boot activation
across the inject layers, per-plugin CSS injection, and a journey
reaching chat content over the fixture transport. built-boot.snapshot.ts
pins exactly that, and nothing else — behavior assertions belong to the
package suites.
2026-07-29 23:51:21 +08:00
Tianyi Cui
4146e403ea test(web): refresh skill menu snapshot after retarget 2026-07-29 23:47:50 +08:00
Tianyi Cui
fca0c05155 Merge remote-tracking branch 'origin/master' into worktree/pr823-retarget-latest-20260729
# Conflicts:
#	docs/config-catalog.md
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/skills.i18n.yaml
#	docs/core-data-structures/skills.md
#	docs/core-data-structures/skills.zh.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/skill/skill-local/README.i18n.yaml
#	packages/skill/skill/README.i18n.yaml
#	packages/skill/skill/README.md
#	packages/skill/skill/README.zh.md
#	packages/skill/skill/src/index.ts
#	packages/skill/skill/tests/skill.spec.ts
#	packages/skill/tool-skill/README.i18n.yaml
#	packages/skill/tool-skill/src/index.ts
#	packages/ui/tui/README.i18n.yaml
#	packages/ui/tui/README.md
#	packages/ui/tui/README.zh.md
#	packages/ui/tui/src/index.ts
#	packages/ui/tui/tests/tui.spec.ts
2026-07-29 23:36:49 +08:00
Tianyi Cui
039547979d test(web): cover skill invocation policy on real host 2026-07-29 22:58:46 +08:00
imccyu
32c3d1e17f Merge remote-tracking branch 'origin/master' into worktree-renameweb
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/client/test-runtime/src/sessions.ts
2026-07-29 21:45:29 +08:00
imccyu
6e8ad4b382 Merge remote-tracking branch 'origin/master' into worktree-renameweb
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/README.zh.md
#	packages/session-title/session-title/README.i18n.yaml
#	packages/session-title/session-title/README.zh.md
2026-07-29 20:58:22 +08:00
imccyu
b23c3d596a Merge remote-tracking branch 'origin/master' into trajectory-history-source 2026-07-29 20:58:04 +08:00
imccyu
d257c3878e feat(web): session-row Rename menu action with a browser-owned dialog
The row menu's Rename item opens the same dialog pattern as workspace rename
(no client-side conflict rule; the host normalizes) and resolves through the
session face via ctx.sessions.binding. Assembled-app snapshot covers the
row-menu -> dialog -> unary-settle flow.
2026-07-29 18:59:46 +08:00
_Kerman
859452d807 Merge remote-tracking branch 'github/master' into xtr/trajectory-inspection-ui
# Conflicts:
#	apps/web/tests/snapshots/code-mode-round/ui.expected.md
#	apps/web/tests/snapshots/cordis-tool-round/ui.expected.md
#	apps/web/tests/snapshots/fresh-round-trip/ui.expected.md
#	apps/web/tests/snapshots/lifecycle-chrome/hero.expected.md
#	apps/web/tests/snapshots/lifecycle-chrome/reloaded.expected.md
#	apps/web/tests/snapshots/live-interactions/cancel.expected.md
#	apps/web/tests/snapshots/live-interactions/error-auth.expected.md
#	apps/web/tests/snapshots/live-interactions/retry.expected.md
#	apps/web/tests/snapshots/question-composer/answered.expected.md
#	apps/web/tests/snapshots/seeded-history/ui.expected.md
#	apps/web/tests/snapshots/steering/mid-steer.expected.md
#	apps/web/tests/snapshots/steering/settled.expected.md
#	packages/client/runtime/src/client/contract/session.ts
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-29 17:31:33 +08:00
Chinesezjc
c87a20b506 Merge remote-tracking branch 'origin/master' into feat/web-terminal-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.md
#	packages/client/ui-conversation/README.zh.md
2026-07-29 15:44:58 +08:00
Chinesezjc
612b3c7c4e Merge remote-tracking branch 'origin/master' into feat/web-terminal-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-29 14:45:23 +08:00
07akioni
4aa1aa4a66 test(web): refresh aria goldens for message IconActions and clocks
Settled history now exposes user/assistant chrome (including date-aware
clocks) in the accessibility tree; collapse clocks via scaffold and update
keyless scenario goldens.
2026-07-29 14:30:09 +08:00
07akioni
afab428c0c Merge branch 'master' into feat/agent-action 2026-07-29 14:21:44 +08:00