Commit Graph

9763 Commits

Author SHA1 Message Date
Yichen Jiang
d41e8d9da8 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 15:12:27 +08:00
Yichen Jiang
4c70e2e17c Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 15:12:27 +08:00
Yichen Jiang
67a681c9bd Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui
# Conflicts:
#	packages/preset/agent-presets/tests/mount.spec.ts
2026-08-07 15:12:16 +08:00
Yichen Jiang
44e9bfca75 test(agent-presets): keep one write regression after the merge
The lower layer now carries the same test, and the merge kept both copies.
2026-08-07 15:11:39 +08:00
Yichen Jiang
e432428006 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 15:10:04 +08:00
Yichen Jiang
4a18f1edbb Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 15:10:04 +08:00
Yichen Jiang
8d94b99d58 test(agent-presets): drop the write regression this layer no longer introduces
The lower layer now carries it, and the merge kept both copies.
2026-08-07 15:06:05 +08:00
Yichen Jiang
61895808a6 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings 2026-08-07 15:04:30 +08:00
Yichen Jiang
7b9783fb76 Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui 2026-08-07 15:04:30 +08:00
Yichen Jiang
6435463edc test(agent-presets): prove the write override where it is introduced
The regression for `PresetTree.write` lived two layers up, so this layer's own
assertion could not fail: it checked the file after an ordinary teardown, and
the Loader's unload listener returns early when the whole tree is being
disposed, so the override never ran. Moves the self-disposing-row test down to
the layer that adds the override, in a temp root so a committed fixture cannot
be damaged by the run that proves the bug.
2026-08-07 15:04:23 +08:00
Yichen Jiang
6a953fb674 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 15:01:30 +08:00
Yichen Jiang
3d9ef4e0e4 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 15:01:29 +08:00
Yichen Jiang
c96b480bc4 test(ui-agent-preset): cover the surface where it is introduced
The package landed here with one store spec; the rest of its tests were written
three layers up, so this layer and the two above it failed the per-file
coverage gate on 191 locations while every test passed.

Adds the node half's invariant companion, the two components, the registration
apply, and the stores' failure paths. `currentValue` drops a `?? ''` that an
empty roster already returned before reaching — the same shape the later layer
arrived at, so the two converge instead of conflicting.
2026-08-07 14:58:03 +08:00
Yichen Jiang
ce468c87f2 chore(docs): re-record the agent-preset note pairing after the merge 2026-08-07 14:47:08 +08:00
Yichen Jiang
c5f3dc3317 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs
# Conflicts:
#	.agents/notes/implemented/architecture/2026-08-03-per-session-agent-presets.i18n.yaml
2026-08-07 14:46:46 +08:00
Yichen Jiang
51e1f48540 fix(cli): keep the subagent registry host-plane in the cordis preset
The cordis preset moved `bash-env`, the `subagents` registry, and its
spawn/fork backends into entry-local realms. A host row that injects a service
is the criterion for host-plane ownership: `apps/cli/src/web.ts` injects
`bash-env`, and `dsh-host-apiproxy` injects `subagents` to answer the
browser's cross-session queries, so both waited forever for a service only
sessions provided. A provider name also registers once, so the second session
would have collided regardless.

This layer introduces the preset, so it is where the plane belongs — a later
layer already corrected it, which left this layer and the docs one unmountable
on their own. The composition test stops disabling `api-gateway` with it: the
row whose pending injection names the break cannot be the row the test turns
off, so the boot audit now covers the whole host-plane injection graph.
2026-08-07 14:45:30 +08:00
Yichen Jiang
17adcf8557 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 14:26:32 +08:00
Yichen Jiang
f1ac260a70 fix(cli): give the cordis preset's todo tool its required config
Same required field as the standard preset: master made
`allowParallelInProgress` mandatory on dsh-tool-todo, and a preset that names
the row owns the choice.
2026-08-07 14:26:27 +08:00
Yichen Jiang
6c315d2cb6 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings 2026-08-07 14:25:59 +08:00
Yichen Jiang
5ee6b13ecb Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui 2026-08-07 14:25:59 +08:00
Yichen Jiang
04e97d16e3 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 14:25:59 +08:00
Yichen Jiang
bdf5e39986 fix(cli): give the shipped preset's todo tool its required config
master made `allowParallelInProgress` a required field on dsh-tool-todo, so
every composition must choose it. The base patch was updated with the field,
but the Web surface takes `tool-todo` from the mounted preset instead, and
that row carried no config — so the `standard` preset failed to mount and
every session on the Web surface died at setup.

Also make the preset tree's write test reach the override. Tearing the agent
down stops in the loader's own "tree is being disposed" case before any write;
a live row reconfiguring itself is the trigger that actually gets there.
2026-08-07 14:25:35 +08:00
Yichen Jiang
4410fa3dfb Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 13:39:40 +08:00
Yichen Jiang
e95e413115 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings 2026-08-07 13:39:40 +08:00
Yichen Jiang
a184d9efde Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui 2026-08-07 13:39:40 +08:00
Yichen Jiang
f1f7a0cbaf Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 13:39:40 +08:00
Yichen Jiang
f3f2129154 Merge branch 'stack/agent-profiles-2-configs' into stack/agent-profiles-3-wire
# Conflicts:
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/host/apiproxy/tests/api-proxy-subagents.spec.ts
2026-08-07 13:39:29 +08:00
Yichen Jiang
2e15fc0bfe Merge branch 'stack/agent-profiles-1-seam' into stack/agent-profiles-2-configs 2026-08-07 13:34:19 +08:00
Yichen Jiang
a7be2ecb0f Merge remote-tracking branch 'origin/master' into stack/agent-profiles-1-seam 2026-08-07 13:34:08 +08:00
Chinesezjc
2d5256fd91 Merge pull request #1079 from deepseek-harness/feat/code-runtime-multilang-seam
feat(code-runtime): own portable-identifier exclusions at the seam
2026-08-07 13:27:50 +08:00
Yichen Jiang
ddacc8de45 Merge pull request #1735 from deepseek-harness/worktree/provider-credential-lifecycle
fix(web): recover provider credential lifecycle
2026-08-07 13:27:18 +08:00
Yichen Jiang
0e672e1796 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 13:21:57 +08:00
Yichen Jiang
a0194bdab2 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings
# Conflicts:
#	packages/preset/agent-presets/tests/mount.spec.ts
2026-08-07 13:21:57 +08:00
Yichen Jiang
e91edd7964 Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui 2026-08-07 13:21:57 +08:00
Yichen Jiang
e511d4202f Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 13:21:57 +08:00
Yichen Jiang
7233d40fc9 test: cover the two locations the composition test was carrying
Moving `web-agent-presets` to the built lane took its coverage with it, and the
per-file gate named what it had been the only reach for: the session header's
`agentPreset` type check, and the preset subtree's `write()` override. Neither
belonged to a real-composition boot — a header validation case and a subtree
behaviour are package-level facts.

The `write()` test states why the override exists: the inherited method
persists the tree whenever the Loader thinks the config moved, and disposing an
agent disposes its subtree, so inheriting it truncates the shipped preset to
`[]` the first time a session ends.
2026-08-07 13:21:03 +08:00
Chinesezjc
19e21dff52 Merge remote-tracking branch 'origin/master' into feat/code-runtime-multilang-seam
# Conflicts:
#	docs/core-data-structures/code-runtime.i18n.yaml
#	packages/code-runtime/code-runtime/README.i18n.yaml
2026-08-07 13:20:34 +08:00
Chinesezjc
a9e040a126 Merge pull request #1080 from deepseek-harness/feat/py-types-code-mode
feat(tools): render a Python SDK and dispatch Code Mode by runtime language
2026-08-07 13:14:41 +08:00
Yichen Jiang
5e38760f10 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 12:53:07 +08:00
Yichen Jiang
5bd43ee1a2 Merge branch 'stack/agent-profiles-4-settings' into stack/agent-profiles-5-web-ui 2026-08-07 12:53:06 +08:00
Yichen Jiang
67f01ca386 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 12:53:06 +08:00
Yichen Jiang
d38c32ac5c Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-4-settings
# Conflicts:
#	apps/cli/tests/web-agent-presets.e2e.ts
2026-08-07 12:52:58 +08:00
Yichen Jiang
43af75fca8 fix(cli): boot the composition test the way the preset boot now does
`apps/cli/config/base.cordis.yml` and `web.cordis.yml` no longer exist — the
bundle split replaced them with `packages/bundle/{base,web-app}/cordis.patch.yml`
— so this file booted a path that was deleted under it and every CI run since
the merge failed at `ENOENT`.

It now boots what `dsh web` boots: an empty preset root with the two bundle
patches over it. That root sits outside the workspace, so bare plugin names
cannot resolve by Node's upward walk and the flat module fallback the preset
boot maintains is what makes them resolvable — the same mechanism, not a
test-only shim. That fallback links each package's PUBLISHED entry, so this
file now consumes the artifact plane and moves to the lane that builds first
(`.e2e.ts`, beside `built-bin.e2e.ts`), rather than the coverage lane, which
installs and runs on a clean tree.
2026-08-07 12:50:09 +08:00
CreatixChu
079d71d591 Merge pull request #1678 from deepseek-harness/worktree/turn-tail-actions
fix(web): grant turn-tail IconActions only after the turn ends
2026-08-07 12:43:13 +08:00
creatixchu
666e691327 test(web): make Goal replay platform-independent 2026-08-07 12:20:24 +08:00
creatixchu
aa831f4f5e Merge remote-tracking branch 'origin/master' into worktree/turn-tail-actions
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
2026-08-07 11:55:53 +08:00
creatixchu
3c6188fb99 test(web): cover Goal actions across turns 2026-08-07 11:51:18 +08:00
Yichen Jiang
b22c853de5 Merge branch 'stack/agent-profiles-6-cordis-agent' into stack/agent-profiles-7-docs 2026-08-07 11:48:54 +08:00
Yichen Jiang
1f9cf819a5 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-6-cordis-agent 2026-08-07 11:48:53 +08:00
Yichen Jiang
d099a24cb1 fix(web): resume the preset the log records, and serialize the switch
Six review findings on the select surface, all reachable from the wire:

**Resume read the header, not the log.** The switch was recorded as
`agent-preset/selected` and every projection resolved from it, but `agentFor`
still composed from `inspected.meta.agentPreset` — the value written once at
creation. A blank session that switched and then ran turns came back after a
restart under the ORIGINAL preset, restoring that history under the tool set it
was not produced with, which is the mismatch this feature exists to prevent.
`inspected` already carries the events.

**Cold summaries dropped the preset entirely.** `summarizeCold` hand-copied
three header fields and omitted the fourth, so a restored session reported no
preset and the picker showed the deployment default. It now uses the same
projection the attached path does.

**`select` had no gate.** Two concurrent selects both passed the blank check;
the second `unmountPresetFor` then found no record, because the first had
already removed it, and both mounts installed into one agent layer. Selects on
one session now queue, and the blank check is re-read inside the queue. This is
not turn admission — a `session.prompt` racing a switch is the agent loop's to
reserve — but it closes the select-versus-select tear-down.

**A same-id restore was skipped.** The roster is a live directory, so "the same
inputs that worked a moment ago" does not hold: a changed file is exactly how a
same-id reselect fails, and skipping the restore left the agent with no
composition at all.

**`writable` was dead state**, initialized true and never set, so the row could
never disable. It now carries `settings.describe`'s bit — a browser that may
not write settings sees the current default and no control, rather than one
whose write answers `settings-not-exposed`.

**`list` was documented as id-ordered.** It is root-precedence order with each
root's own presets sorted, first root to supply an id winning.
2026-08-07 11:45:10 +08:00