deepseek-harness/packages/client
Chinesezjc d2bb2a809b fix(web-todo): dock-owned selection, keyboard-openable row, documented tail todos field
Three ds-review-bot round-8 findings on the todo display surfaces.

TodoPanel took the whole `useSession` hook and cast the snapshot to reach
`todos`, which put slot plumbing and an unchecked cast inside the presentation
component. The panel now takes `todos: readonly TodoItem[]`; TodoDock does the
selecting, matching the QueueDock posture the dock slot already establishes.

The todo row carried `onClick` with no keyboard route, so its details panel was
mouse-only. It now takes ToolRow's route verbatim: `role="button"`,
`tabIndex={0}`, and an Enter/Space handler that claims the event. The row stays
a `<div>` because a `<button>` flattens its inline spans.

`session.history`'s tail-only `todos` field was documented at the TS signature
but not in the apiproxy README pair, and the Agent Note claimed the feature
added no new wire vocabulary. Both README sides now state the tail/omission
semantics (an omitted field on a tail response is the empty plan, not unchanged
state), and the note records the one added field instead of denying it.

Tests: TodoPanel specs render the plain list; new TodoDock specs cover selection,
live follow, rollback-to-empty, and the registration shape; a new row spec pins
Enter/Space activation and non-activating keys.
2026-07-27 12:08:46 +08:00
..
connection Merge remote-tracking branch 'origin/master' into web2-todo 2026-07-27 10:07:51 +08:00
hmr docs: translate remaining READMEs 2026-07-26 05:06:39 +08:00
locale feat: slash system / input service / agent scope 2026-07-27 03:28:39 +08:00
modules docs: translate remaining READMEs 2026-07-26 05:06:39 +08:00
runtime reset the plan when a tail history response omits the todo projection 2026-07-27 11:41:26 +08:00
ui-command feat(web): wire startup Workspace selection and sync docs 2026-07-27 06:24:09 +08:00
ui-conversation fix(web-todo): dock-owned selection, keyboard-openable row, documented tail todos field 2026-07-27 12:08:46 +08:00
ui-layout refactor: dedupe the jscpd clones; drop the baseline loading gate 2026-07-27 08:51:05 +08:00
ui-models Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme 2026-07-26 14:37:46 +08:00
ui-primitives Merge branch 'code-mode-ui/dispatch-spill' into code-mode-ui/shiki 2026-07-26 21:44:17 +08:00
ui-question feat: slash system / input service / agent scope 2026-07-27 03:28:39 +08:00
ui-settings Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme 2026-07-26 14:37:46 +08:00
ui-settings-general Merge remote-tracking branch 'origin/master' into worktree/i18n-complete-non-readme 2026-07-26 14:37:46 +08:00
ui-sidebar refactor: dedupe the jscpd clones; drop the baseline loading gate 2026-07-27 08:51:05 +08:00
ui-skill feat(web): wire startup Workspace selection and sync docs 2026-07-27 06:24:09 +08:00
ui-slash feat(web): wire startup Workspace selection and sync docs 2026-07-27 06:24:09 +08:00
ui-slots style: fix lint across client packages 2026-07-27 04:13:00 +08:00
ui-subagent fix: restore master's test casts mangled by a stale-types eslint --fix 2026-07-27 09:41:23 +08:00
ui-theme feat: slash system / input service / agent scope 2026-07-27 03:28:39 +08:00
ui-trajectory feat: slash system / input service / agent scope 2026-07-27 03:28:39 +08:00
ui-workspace refactor: dedupe the jscpd clones; drop the baseline loading gate 2026-07-27 08:51:05 +08:00
web Merge branch 'code-mode-ui/dispatch-spill' into code-mode-ui/shiki 2026-07-26 21:44:17 +08:00
web-react test: adapt suites to the provider-hosted conversation shell 2026-07-27 04:28:42 +08:00
AGENTS.md Merge remote-tracking branch 'origin/master' into web-e2e-lane 2026-07-25 18:19:22 +08:00
tsdown.client.ts feat(gui): settings panel with locale and theme preferences 2026-07-26 00:28:43 +08:00