Commit Graph

1259 Commits

Author SHA1 Message Date
Tianyi Cui
dc0c52bb03 Merge commit 'aab64371402d93293bde384139aaa607906928a8' into worktree/pr977-merge-20260731 2026-07-31 00:32:10 +08:00
NI0317
75a0366a52 feat(web): present onboarding as a continuous page 2026-07-31 00:28:17 +08:00
Hypatia May
ceb37f3377 Merge final master into Web transcript 2026-07-31 00:27:16 +08:00
Yichen Jiang
52c997d01d Merge worktree-llm-web-config (939, with latest master) into worktree/onboarding-deepseek-config 2026-07-31 00:22:45 +08:00
imccyu
e4e78e7a31 Merge remote-tracking branch 'origin/master' into mergebot/pr981 2026-07-31 00:22:36 +08:00
Yichen Jiang
ce3a75ecca Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config 2026-07-31 00:21:49 +08:00
ZiyaZhang
bf4ff3a696 Merge remote-tracking branch 'upstream/master' into feat/gui-full-access-confirmation
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-07-30 09:20:43 -07:00
Hypatia May
be44f073e1 Fix invariant readiness after CI sync 2026-07-31 00:20:18 +08:00
Wenlu Wang
edefdd96b9 Merge remote-tracking branch 'origin/master' into codex/new-task 2026-07-31 00:10:46 +08:00
Hypatia May
25ad9015e3 Merge final CI coverage parent into manual compact 2026-07-31 00:09:28 +08:00
Yichen Jiang
39072f8c58 Merge worktree-llm-web-config (939, with latest master) into worktree/onboarding-deepseek-config 2026-07-31 00:07:11 +08:00
Yichen Jiang
307fea8ae9 Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config 2026-07-31 00:06:29 +08:00
imccyu
95242698e0 Merge branch 'master' into worktree/command-row-copy 2026-07-31 00:06:04 +08:00
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
5c4398c96c Merge branch 'master' into worktree/command-row-copy 2026-07-30 23:45:49 +08:00
imccyu
57845e02ee Merge branch 'master' into xtr/trajectory-timeline-click-focus 2026-07-30 23:44:32 +08:00
Hypatia May
cc91724157 Fix invariant startup gate after CI sync 2026-07-30 23:43:53 +08:00
Yichen Jiang
b05b0a80fd Merge worktree-llm-web-config (939, with latest master) into worktree/onboarding-deepseek-config 2026-07-30 23:33:14 +08:00
Yichen Jiang
8c0d626cd5 Merge worktree-llm-dynamic-config (884, with latest master) into worktree-llm-web-config
# Conflicts:
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/core.i18n.yaml
#	packages/client/runtime/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/README.md
#	packages/host/apiproxy/README.zh.md
2026-07-30 23:32:31 +08:00
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
e1408c2a44 refactor(ui-primitives): extract shared head/tail cap and copy-feedback helpers
The tail-header cap fix pushed SearchBlock's head/tail slicing arithmetic and
its copy-feedback hook over the duplication gate's threshold against the
byte-identical logic in TerminalBlock. Extract both into head-tail-cap.ts
(headTailCap) and use-copy-feedback.ts (useCopyFeedback) and consume them from
both blocks, deleting the clone rather than nudging it under the limit.
2026-07-30 23:09:12 +08:00
Chinesezjc
f9a40d555f docs: record ui-conversation README pairing hash after master merge 2026-07-30 22:59:34 +08:00
NI0317
04f8b30db1 fix(web): make the welcome notice scan-first 2026-07-30 22:58:52 +08:00
Hypatia May
8bfaa4c9fb Merge Web queue collapse parent into manual compact 2026-07-30 22:56:16 +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
kingwl
1986de9ac1 fix(web): show plan status only while active 2026-07-30 22:42:25 +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
NI0317
c311400945 Merge updated DeepSeek onboarding base
# Conflicts:
#	packages/host/apiproxy/README.i18n.yaml
2026-07-30 22:19:31 +08:00
NI0317
bef8db3add feat(web): add versioned first-run welcome 2026-07-30 22:17:56 +08:00
creatixchu
1102cfc1f3 Merge remote-tracking branch 'origin/master' into worktree/plan-review-layout 2026-07-30 22:10:56 +08:00
Hypatia May
db1cbf0bcc fix(compact): address manual compaction review 2026-07-30 22:00:34 +08:00
Yichen Jiang
e5d7fa4cef Merge worktree-llm-web-config (939, with latest master) into worktree/onboarding-deepseek-config 2026-07-30 21:52:25 +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
Turtle
f04b35c6a4 fix(test): isolate jsdom storage on Node 26 2026-07-30 21:49:33 +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
ZiyaZhang
c2bce3cac6 fix(client): unblock full access CI gates 2026-07-30 06:45:36 -07: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
Chinesezjc
e98f458852 perf(web-read-card): lazy-load read grammars and guard empty-window copy
Only TypeScript, shell, and JSON grammars load at Web boot; the read card's
wider langFromPath extension set loads through dynamic imports on first use,
so a session that never opens a read card in one of those languages avoids
~1.6 MB of grammar modules and their synchronous init. ReadBlock/CodeBlock
re-render on grammar-load via useSyncExternalStore, picking up highlighting
once the grammar registers. ReadBlock hides the copy control on an empty
window (a successful read of an empty file settles to lines: [] with
card:'read'), matching TerminalBlock so it cannot wipe the clipboard.
2026-07-30 21:28:38 +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
2f8f47e500 feat(ui-workspace): flatten session fork rows 2026-07-30 21:28:17 +08:00