Commit Graph

621 Commits

Author SHA1 Message Date
Chinesezjc
91244321af Merge remote-tracking branch 'origin/master' into feat/web-diff-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 23:19:36 +08:00
Chinesezjc
f9a40d555f docs: record ui-conversation README pairing hash after master merge 2026-07-30 22:59:34 +08:00
imccyu
da9f02221e Merge remote-tracking branch 'origin/master' into worktree-forkweb 2026-07-30 22:53:07 +08:00
Hypatia May
b86ce10741 Merge Web queue collapse from master 2026-07-30 22:50:09 +08:00
Chinesezjc
4a4ec6fd4d fix(web-search-card): follow base rename kind->shape and view-drops-content
The base (feat/search-presenter) renamed the search result view's discriminant
from `kind` to `shape` and removed the view's `content` field (a UI without a
card now falls back to the raw tool/result content). Adapt the web consumer:

- searchCardModel switches on `result.shape`; SearchBlock's own `kind` prop is
  mapped from it.
- The truncation recovery footer reads the block's raw `content` (where the
  `Full … stored at …` locator now lives) instead of the removed view content.
- Fixture grep/glob views use `shape` and drop `content`; the recovery footer
  rides the raw tool/result text.
- Tests and the bilingual Agent Note follow the rename and the recovery source.
2026-07-30 22:49:41 +08:00
Hypatia May
c2940f620e Merge Web queue collapse from master 2026-07-30 22:48:45 +08:00
ZiyaZhang
fa67427c39 Merge remote-tracking branch 'origin/master' into feat/gui-full-access-confirmation
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 07:48:33 -07:00
Chinesezjc
425e59119a Merge remote-tracking branch 'origin/master' into feat/web-diff-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 22:46:27 +08:00
Chinesezjc
05d48f2918 fix(web-read-card): carry the base's required read offset in fixtures and specs
The base's ReadResultView now requires `offset` (persisted so an empty window
still knows its start). The connection fixture's read sample and read-card.spec's
resultRead helper supply it (the window's first line, 41).
2026-07-30 22:40:39 +08:00
Chinesezjc
e830ed7939 fix(web-search-card): surface truncation recovery, widen cardless fallback, validate wire shape, fix tail-cap
Address the ds-review-bot findings on the search card:

- searchCardModel dropped the result view's `content`, so a capped search's
  `Full … stored at: <locator>` recovery footer vanished from the UI (the card
  replaces the raw text). Thread it through as `SearchCardModel.recovery` and
  render it below the card at all three sites, only when truncated.
- SearchRow's fallback body was gated on `state === 'error'`, so a settled
  non-error call with no card (a successful nested run_code sub-dispatch, a
  legacy generic result) showed only its summary with content lost. Widen it to
  any settled call with `search === null`.
- searchCardModel trusted the `files`/`paths` shape the host wire schema only
  string-checks; a malformed known-kind frame would crash SearchBlock. Validate
  the full shape and fall to the generic path on mismatch.
- SearchBlock's restored tail file header added a row without consuming a tail
  slot, exceeding maxLines by one and overstating the hidden count. Make it
  consume a slot so the visible count holds at maxLines and `hidden` stays exact.

Correct the fixture JSDoc (now genuinely exceeds the row cap) and the Agent Note
recovery-text claim, sync the ui-conversation bilingual README with the search
row, and add an assembled keyless snapshot (apps/web/tests/search-card.snapshot.ts)
that pins the grep card's shape from the built bundles.
2026-07-30 22:40:07 +08:00
Chinesezjc
c1d88ffb7b fix(client-web): pin keyed WebRow in boot smoke, show empty-search feedback
- built-boot smoke asserts [data-variant=web][data-tool=web_search/fetch]
  (the keyed WebRow) instead of [data-web] (which WebBlock draws even on the
  GenericToolCard fallback, so a silent keyed-registration failure passed).
- WebBlock renders an explicit empty-state note when a search returns no
  answer and no sources, instead of a blank <ol>; the chat row does not
  surface the raw result content, so the backend's 'No results found.' was
  otherwise invisible.
- README (ui-conversation, ui-primitives) and the frontend Agent Note record
  the unknown-web-kind null arm, the details-panel flattened body, and the
  empty-search copy; pairings re-recorded.
2026-07-30 22:24:57 +08:00
Chinesezjc
568c564db4 fix(web): update diff-card tests for the openFile no-double-resolve contract
The coverage lane caught a regression in the prior commit: FileMutationRow now
passes the tool's raw path to the injected openFile (which resolves against cwd
in apply.ts), but diff-card.spec still asserted the row pre-resolved. Assert on
the raw path instead. Also fix the built-boot diff assertion to match on the
line body and footer text — the `+ ` prefix is a CSS ::before, absent from
textContent.
2026-07-30 21:51:27 +08:00
Chinesezjc
c7d95f5b7f fix(web-read-card): align read spec with real schema and correct grammar docs
Top-level read samples in read-card.spec use the read tool's real file_path
schema key (web_fetch keeps its own path key); the Input-JSON assertion follows.
The LANGS/LANG_ALIASES JSDoc no longer claims the TypeScript grammar embeds
JSX/TSX — shiki's TS grammar tokenizes JSX approximately, an accepted trade to
keep one JS-family boot grammar.
2026-07-30 21:46:05 +08:00
Chinesezjc
1fd6b5a107 fix(web): diff card review — TUI parity, path-header overlap, double-resolve
Bring the TUI diff footer onto the same terminator rule and distinct-path
count the Web DiffBlock uses (a trailing newline terminates its line; two
hunks in one file read as 1 file), so the two front ends' `+A -R · N file(s)`
footers agree. Reserve space in the diff path header for the floating copy
button so a long path no longer scrolls under it. Pass the tool's raw path to
the injected openFile (which already resolves against cwd) instead of resolving
twice. Rename the shared block-body CSS class to a card-neutral cardBody so a
terminal-spacing tweak cannot silently move the diff card. Add a same-file
two-hunk TUI unit test and an assembled built-boot assertion that the write
turn renders +1 -0 · 1 file end to end.
2026-07-30 21:36:42 +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
36f1489398 fix(web): address session fork review findings 2026-07-30 21:28:13 +08:00
imccyu
57fb5b488e feat: fork 2026-07-30 21:27:14 +08:00
Yif
78e4d36214 feat(web): unify tool-row expand interaction with IN/OUT card and trajectory Inspect
Every expandable tool row shares one interaction (whole-row toggle,
icon-to-chevron hover preview) and one expanded body: an IN/OUT
gutter-labeled card with per-section 150px scroll caps and sticky labels.
toolRowModel derives result output and the error first line, terminalFailed
surfaces a failing exit as the collapsed row's red dot, a hover Inspect
pill jumps to the call's trajectory record through a one-shot store
handoff, and the chat view keeps its scroll offset across view switches.
2026-07-30 21:21:29 +08:00
Chinesezjc
c45cf2ae53 Merge remote-tracking branch 'origin/feat/search-presenter' into feat/web-search-card
# Conflicts:
#	packages/client/ui-conversation/src/client/chat/ToolRow.tsx
2026-07-30 21:05:55 +08:00
ZiyaZhang
8d4bf5ae41 chore(docs): refresh generated graph records 2026-07-30 06:01:47 -07:00
Hypatia May
538f23678a Merge origin/master into codex/status-bar-token-metrics
Build-review integration round 1; isolate Web snapshots from user skill homes.
2026-07-30 20:51:38 +08:00
Chinesezjc
6608ede1a0 fix(web-search-card): surface result text when an errored search has no card
grep/glob return no presentResult on an error result, so an errored search had
no card and the keyed SearchRow showed only a red dot — the model-facing error
text (bad pattern, missing path, a nested run_code dispatch with no card) was
nowhere on screen. Add an error-text arm mirroring the file-mutation and read
rows. Added tests for the text arm and its name/code fallback. The unknown-kind
fallback in search-card-model is already guarded (returns null → generic path).
2026-07-30 20:49:23 +08:00
ZiyaZhang
6d416b06c5 fix(client): gate every full access picker 2026-07-30 05:48:33 -07:00
kingwl
7da7d5784d Open command menu from composer plus button 2026-07-30 20:42:48 +08:00
Chinesezjc
224a9d5f09 fix(client-web): reject unknown web kind, lock fixture to contract, observe web card in boot smoke
- webCardModel returns null for an unknown web `kind` (wire from a newer host)
  instead of drawing it as a malformed fetch, matching the unknown-`card` and
  terminal-model wire-boundary default.
- Fixture WEB_SEARCH_RESULT/WEB_FETCH_RESULT and the source type derive from the
  contract's ToolResultView via Extract, so a new contract field fails at the
  type level rather than drifting silently.
- built-boot smoke asserts the web_search/web_fetch turns render their keyed
  WebRow cards, giving the registration and wire projection an assembled check.
- DetailsPanel comment no longer claims the card omits content for search.
- ui-primitives README inline-Chinese limitation now lists WebBlock's controls.
2026-07-30 20:42:29 +08:00
Chinesezjc
b832f46eff fix(web-search-card): finish search bot-review round (import, docs)
Complete the stalled review pass: drop the unused useMemo import (rows flatten
inline), add SearchBlock to the ui-primitives README (both languages) with a
Search results section, and re-record the doc pairings. Search card behavior
and tests unchanged (313 pass).
2026-07-30 20:42:25 +08:00
Chinesezjc
917e114b68 docs: re-record ui-conversation README pairing after master merge 2026-07-30 20:25:19 +08:00
Chinesezjc
ce4773d884 Merge remote-tracking branch 'origin/master' into feat/web-web-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 20:25:14 +08:00
Chinesezjc
b76a551e10 docs: re-record ui-conversation README pairing after master merge 2026-07-30 20:25:05 +08:00
Chinesezjc
5134147d63 Merge remote-tracking branch 'origin/master' into feat/web-diff-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/ToolRow.tsx
2026-07-30 20:24:47 +08:00
Chinesezjc
43583c75d2 Merge remote-tracking branch 'origin/master' into feat/web-read-card 2026-07-30 20:22:51 +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
Yichen Jiang
5b9c088fb7 Merge remote-tracking branch 'origin/master' into worktree/web-model-request-retry
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 20:09:37 +08:00
Yichen Jiang
4d0843df3e Merge remote-tracking branch 'origin/master' into worktree/web-model-request-retry
# Conflicts:
#	apps/cli/README.i18n.yaml
#	apps/cli/README.md
#	apps/cli/README.zh.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
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/src/client/sessions/session.ts
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.zh.md
2026-07-30 20:03:39 +08:00
Hypatia May
c2337bfa10 Merge remote-tracking branch 'origin/fix/human-transcript-projection' into fix/web-transcript-projection
# Conflicts:
#	apps/web/tests/scaffold.ts
#	apps/web/tests/seeded-history.e2e.ts
#	apps/web/tests/snapshots/seeded-history/ui.expected.md
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/MessageItem.tsx
2026-07-30 20:02:32 +08:00
07akioni
af01552789 fix(web): keep IconActions on turn-tail content only
Drop the running-turn withhold path; last-content-seq gating alone keeps mid-turn narration chrome-free.
2026-07-30 19:59:58 +08:00
07akioni
4bf09d508c fix: cr 2026-07-30 19:59:50 +08:00
07akioni
20db6ca4d5 feat(web): add favicon and update IconActions behavior 2026-07-30 19:59:16 +08:00
Yichen Jiang
7d8403ac73 Merge remote-tracking branch 'origin/master' into worktree/chat-ui-polish
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/MessageItem.tsx
#	packages/client/ui-conversation/tests/chat-branch-tails.spec.tsx
2026-07-30 19:58:25 +08:00
Chinesezjc
69a84e1403 fix(web-read-card): align highlight grammars with read hints, fix fixture schema, restore running sweep
Register the full grammar set the read tool's langFromPath emits (python,
go, rust, yaml, markdown, html, and the rest) so a read card highlights the
same extensions the backend recognizes instead of returning undefined for
them. Rewrite highlightLines' terminator-line check to the explicit
last !== undefined form to keep a single branch for per-file coverage.

Add the running-state sweep animation to ReadRow, matching BashRow/ToolRow,
so a running read row shows executing feedback.

Use file_path (the real read tool schema field) in the turn 66 read fixture
sample, its presentCall branch, and the turn 64 run_code read sub-dispatches,
so the built-boot snapshot replays a production-shaped call and the details
panel shows the correct Input JSON.

Document why ReadBlock omits TerminalBlock's empty-window copy guard, and
correct the read-card-model {@link} and the turn 66 fixture comment.
2026-07-30 19:56:06 +08:00
ZiyaZhang
9eb0ef4c3e feat(client): confirm before enabling full access 2026-07-30 04:50:27 -07:00
Chinesezjc
17ee269f11 fix(web): address web card review — panel body, ol numbering, safe links, docs
- DetailsPanel: render the flattened result content below the web card, so a
  web_fetch's fetched body (and a search's answer/source markdown) stays
  visible on the panel's single-call reading surface — the card is a summary.
- WebBlock: the collapsed source tail keeps each source's original citation
  number via <li value>, and the expand control is a marker-less <li> so the
  <ol> is valid HTML; an empty-hostname URL (file:/data:) falls back to the raw
  URL so a label is never blank.
- web-row / GenericToolCard: both spread WebBlock uniformly with maxSources
  (fetch ignores it, like TerminalBlock's maxLines), dropping the duplicated
  per-kind conditional.
- Docs: WebBlock added to the ui-primitives README (both languages) with a Web
  retrieval section; the ui-conversation README's "inline licensed for this
  intent alone" claim de-absolutized and a web-card paragraph added; the Agent
  Note's safe-link description corrected to the http(s) subset of MarkdownText's
  allowlist (mailto excluded). Fixture source comment aligned with its data.
- Tests: ol numbering + marker-less expander, empty-hostname label fallback,
  the fetched body visible in the panel.
2026-07-30 19:36:17 +08:00
Yichen Jiang
b121adcf1a Polish web chat presentation 2026-07-30 19:30:58 +08:00
kingwl
5f87c7a89c fix(web): close queue collapse review gaps 2026-07-30 19:20:13 +08:00
Chinesezjc
2646d67faa Merge remote-tracking branch 'origin/feat/web-presenter' into feat/web-web-card
# Conflicts:
#	packages/client/ui-conversation/tests/chat-apply.spec.tsx
2026-07-30 19:13:53 +08:00
Chinesezjc
3dbf83e918 Merge remote-tracking branch 'origin/feat/search-presenter' into feat/web-search-card
# Conflicts:
#	packages/client/ui-conversation/src/client/chat/ToolRow.tsx
#	packages/client/ui-conversation/tests/chat-apply.spec.tsx
2026-07-30 19:12:01 +08:00
Chinesezjc
d34211d781 Merge remote-tracking branch 'origin/feat/read-presenter' into feat/web-read-card
# Conflicts:
#	packages/client/ui-conversation/tests/chat-apply.spec.tsx
2026-07-30 19:09:40 +08:00
Chinesezjc
a0a9e9733a docs: re-record ui-conversation README pairing after master merge 2026-07-30 19:04:56 +08:00
Chinesezjc
ce05304fcc Merge remote-tracking branch 'origin/master' into feat/web-diff-card
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/ToolRow.tsx
#	packages/client/ui-conversation/tests/chat-apply.spec.tsx
2026-07-30 19:04:33 +08:00