Commit Graph

7392 Commits

Author SHA1 Message Date
CreatixChu
5335d61d11 Merge pull request #943 from deepseek-harness/feat/directory-picker-quiet-navigation
feat(directory-picker-browse): quiet navigation — one-frame landings and a slow-scan loading pill
2026-07-30 20:47:36 +08:00
Hypatia May
c6e06e289e Merge origin/master into fix/human-transcript-projection
Build-review integration round 1.
2026-07-30 20:45:39 +08:00
Yichen Jiang
a56678e115 Merge remote worktree-config-settings-seam 2026-07-30 20:28:53 +08:00
Yichen Jiang
ff5b65bb62 Merge latest master into worktree-config-settings-seam
# Conflicts:
#	packages/typert/generator/tests/cordis-catalog-contract.spec.ts
2026-07-30 20:28:25 +08:00
Tianyi Cui
780a601635 Merge latest master into worktree-config-settings-seam
# Conflicts:
#	packages/typert/generator/tests/cordis-catalog-contract.spec.ts
2026-07-30 20:26:36 +08:00
Yichen Jiang
990d1bbc35 fix(cli): declare the config-plane providers the shared base config mounts
The master merge moved the TUI composition into `apps/cli/config/base.cordis.yml`
and I carried the `settings-local` / `credentials-local` rows across without
adding them to the resolver manifest. Bare specifiers in an app config resolve
through that manifest's dependencies, so the whole tree failed to boot:

  dsh: plugin(s) failed to load: @deepseek-ai/dsh-settings-local,
  @deepseek-ai/dsh-credentials-local

which took every TUI PTY smoke with it. `verify-cordis-config` did not catch
it, so the boot smoke was the first signal.
2026-07-30 20:25:13 +08:00
Wenlu Wang
9dc5b4f58d Merge branch 'master' into codex/queue-collapse 2026-07-30 20:24:12 +08:00
creatixchu
0ea0aef41a Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 20:23:11 +08:00
Chinesezjc
83c93bb18f Merge remote-tracking branch 'origin/master' into feat/web-presenter 2026-07-30 20:22:51 +08:00
creatixchu
b6fc6328f3 Merge remote-tracking branch 'origin/master' into feat/directory-picker-quiet-navigation 2026-07-30 20:22:35 +08:00
Tianyi Cui
bdc21717c0 Merge branch 'master' into worktree/fix-macos-web-replay 2026-07-30 20:22:12 +08:00
Tianyi Cui
2fb90a744e Merge pull request #929 from deepseek-harness/worktree-optgate
perf(scripts): gen-doc-graphs and typert gen
2026-07-30 20:21:18 +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
e3388cee87 ci: reduce typert cost 2026-07-30 20:03:58 +08:00
Chinesezjc
cc1bba31d8 fix(tool-web): align fetch card truncation, drop view content copies, sync card docs
Address the code-review bot findings on the web result card:
- web_fetch's card truncated now derives from the shared renderFetchOutput
  helper, matching the effective truncation the model-facing text reflects
  (provider cap, source cut, or output cap), instead of the provider-only flag.
- Drop the redundant content copy from both web result views; a UI without the
  web capability falls back to the raw tool/result content. Narrow the TUI
  transcript view.content access accordingly.
- Set the result-state title from the call args (query/url) so a window-
  truncated replay keeps a title.
- Project meta from the seam result types rather than hand-rolled value types.
- Sync the card vocabulary across core tools README, docs/core-data-structures,
  the adding-a-tool cookbook, and the tool-web package README (both languages,
  re-recorded pairings); regenerate the cordis api-catalog and cordis-inspect
  snapshot; revise the Agent Note.
2026-07-30 20:01:41 +08:00
Hypatia May
fe97451604 Merge remote-tracking branch 'origin/master' into fix/human-transcript-projection
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-17-dedicated-full-screen-tui-front-door.i18n.yaml
#	docs/cordis-catalog/services.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/ui/tui/README.i18n.yaml
2026-07-30 19:57:49 +08:00
imccyu
82a151ed35 ci: increase coverage memory 2026-07-30 19:57:18 +08:00
imccyu
67de3e12b6 ci: reduce coverage cocurrency 2026-07-30 19:57:18 +08:00
imccyu
9f0febe070 perf: typert add cache 2026-07-30 19:57:17 +08:00
imccyu
7326b9b2a4 fix(scripts): share package-source selection to clear the jscpd clone
The spec duplicated collectEventRelations' source-selection block; extract
collectPackageSources and use it from both sides.
2026-07-30 19:57:17 +08:00
imccyu
f988ca9b86 fix(scripts): own the locality proof's premises in gen-doc-graphs
Review follow-up. provenLocalCallee inferred file-local calls from module
scoping but borrowed non-exportedness from its one caller and never checked
module-ness: a helper in a global script file (no import/export) is
program-visible and callable cross-file with no same-file reference, so the
proof passed and those call sites were dropped as silently missing matrix
cells. Guard both premises at the proof entry, failing toward the global
fallback.

- State the EVENT_API_METHODS obligation: a visitSource branch for an
  unlisted method name is dead because the prefilter drops the call first.
- Add gen-doc-graphs.spec.ts pinning fast path vs global fallback equivalence
  on fixture programs: a proven-local helper, an alias-escaping helper, and a
  global-script helper (negative control that keeps the fallback exercised).
- Record the demand-driven indexing decision in the Program-backed semantic
  gates Agent Note (both languages, pairing re-recorded).

Generated docs stay byte-identical (verify-doc-graphs green).
2026-07-30 19:57:17 +08:00
imccyu
0a3cf3b5a6 perf(scripts): drop the whole-repo call-site pre-index from gen-doc-graphs
The event-relation collector resolved every CallExpression in all package
sources up front (getResolvedSignature is the most expensive checker query)
and type-classified every property-access receiver before looking at the
method name. Both costs served a tiny fraction of call sites.

- Filter by event API method name first; receiver classification now runs
  on those calls only.
- Replace the eager global call-site index with demand-driven indexing:
  when a non-exported local helper's same-file references are all provably
  direct callees, only that file is indexed; any other reference shape
  (alias escape) falls back to the original full package-source index.

Generated docs are byte-identical; verify-doc-graphs stays green. Halves
the script's CPU time (23.4s -> ~13s user on a warm run).
2026-07-30 19:57:16 +08:00
creatixchu
692ada7485 Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 19:48:45 +08:00
Tianyi Cui
9d5a59eadf Merge latest master into worktree-config-settings-seam 2026-07-30 19:48:06 +08:00
creatixchu
94f115725c Merge remote-tracking branch 'origin/master' into feat/directory-picker-quiet-navigation 2026-07-30 19:48:02 +08:00
Tianyi Cui
49678f38ae test(typert): allow catalog analysis under coverage 2026-07-30 19:46:47 +08:00
Yichen Jiang
eae4219e04 Merge branch 'worktree-config-settings-seam' into worktree-llm-dynamic-config
# Conflicts:
#	apps/cli/README.i18n.yaml
#	apps/cli/composition.md
#	apps/cli/config/base.cordis.yml
#	apps/cli/src/app-cli-entry.ts
#	apps/cli/src/tui.ts
#	apps/cli/tests/tui-keyless-smoke.e2e.ts
#	examples/package.json
#	packages/ui/app-boot/README.i18n.yaml
#	packages/ui/app-boot/README.md
#	packages/ui/app-boot/README.zh.md
#	pnpm-lock.yaml
#	python/sdk-runtime/package.json
2026-07-30 19:46:04 +08:00
imccyu
e6a621d17d Merge pull request #968 from deepseek-harness/codex/figma-context-injection-row
feat(web): match context injection disclosure design
2026-07-30 19:45:57 +08:00
creatixchu
6d7bd7e703 fix(web): keep the plan card to decisions it can actually answer
Review follow-ups on the presentation intent.

The card claimed any single-question request declaring the intent, then sent one
of two labels — so a producer offering a third option, or a multi-select batch,
lost answers the generic flow would have shown. That contradicts the intent's
own contract, so `planReviewOf` now claims only a binary single choice and
leaves everything else to the flow that can express it.

`ask()` also rejects a plan-review intent on a question with no `detail`: the
intent declares detail IS the plan, and without one a honouring UI asks the
user to approve something invisible. The client keeps its own fallback — it sits
downstream of a wire boundary — but the misconfiguration now fails at the asker.

`planReviewOf` stops being a value export of the client contract face (client
export discipline: pure helpers stay internal; the tests already import it
relatively), and the ui-question README fallback list, both languages, now
states every condition the code enforces.
2026-07-30 19:38:18 +08:00
Tianyi Cui
fb30187161 fix(web): isolate replay skill discovery 2026-07-30 19:30:06 +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
132294fe8d fix(web): register the plan-review e2e lane in the host-plane program
The lane boots the host spine through the shared scaffold, so it belongs to
tsconfig.host.json and must stay out of the client-registered apps/web project
— one program cannot hold both sides of the cordis Context merges.
2026-07-30 19:12:02 +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
89d30b0ef7 feat(user-interaction): declare a plan-review presentation intent on questions
A question may now carry `intent`, a tagged declaration that it IS a decision
of a known shape, so a UI that recognises the tag can present it as such
instead of as a generic option list. The one member is
`{ kind: 'plan-review', approve }`, which plan-mode sets on the exit_plan_mode
review.

An intent shapes presentation only: a UI honouring it answers with the same
option labels a generic UI would send, so the tool reads one answer shape
either way, and a UI that does not know the tag renders the generic flow.
`approve` names the affirmative option rather than relying on option order;
since no type can tie that label to the question's own option list, `ask()`
rejects a mismatch as BAD_INTENT, and the wire schema rejects an unknown tag
outright rather than silently rendering generic.

plan-mode also stops reporting a dismissed review as "the user cancelled
ask_user_question" — a tool it never called. A dismissal now tells the model
the user took the turn back to speak, and to stay in plan mode and wait; every
other ask failure keeps its own message.
2026-07-30 19:09:19 +08:00
Tianyi Cui
b5662f918d Merge remote-tracking branch 'origin/master' into worktree/ci-independent-consumer-build 2026-07-30 19:02:32 +08:00
Tianyi Cui
6d6c146f81 ci: allocate consumer runner independently 2026-07-30 19:02:10 +08:00
Chinesezjc
6b7987d813 test(snapshot): re-apply web card type surface after master merge 2026-07-30 19:01:27 +08:00
Chinesezjc
122006bcbe Merge remote-tracking branch 'origin/master' into feat/web-presenter
# Conflicts:
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
2026-07-30 18:59:46 +08:00
creatixchu
f5ab6d94a8 Merge remote-tracking branch 'origin/master' into worktree/approval-panel-max-height 2026-07-30 18:59:06 +08:00
Tianyi Cui
0c1285e249 Merge latest master into worktree-config-settings-seam 2026-07-30 18:55:15 +08:00
creatixchu
ca3510e243 Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 18:55:13 +08:00
Chinesezjc
e034a173d6 test(snapshot): re-record ACP goldens for the web card tag
web_fetch now projects presentationMeta ({url, statusCode, truncated}) onto its
tool/result, so the web-fetch scenario carries that meta; cordis-inspect-jsdoc
shifts with the widened ToolResultView type surface. Model-facing text is
unchanged. Refreshed keyless.
2026-07-30 18:54:51 +08:00
creatixchu
50d48203fb Merge remote-tracking branch 'origin/master' into feat/directory-picker-quiet-navigation 2026-07-30 18:54:25 +08:00
CreatixChu
2e8c82634e Merge pull request #877 from deepseek-harness/feat/directory-picker-show-hidden
feat(host): show-hidden toggle, path-draft prefix filtering, and browse-dialog polish
2026-07-30 18:53:31 +08:00
creatixchu
5e4922a761 Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default
# Conflicts:
#	apps/cli/cordis.yml
#	packages/host/README.i18n.yaml
2026-07-30 18:41:41 +08:00
Tianyi Cui
86ddef6c01 docs: refresh settings catalog locations 2026-07-30 18:35:32 +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
Tianyi Cui
ff364c53a2 Merge master into worktree-config-settings-seam 2026-07-30 18:31:50 +08:00