Commit Graph
189 Commits
Author SHA1 Message Date
pku-xht 2a9b940ef5 feat(web): list active reminders in the session header 2026-08-25 18:50:50 +08:00
Tianyi Cui 4125514a08 refactor(repo): retire top-level examples 2026-08-24 22:02:44 +08:00
Yichen Jiang f94495e527 refactor(preset): bundle the shipped presets inside dsh-agent-presets
Review asked why the launcher special-cases one plugin's row. It no
longer does: the four shipped compositions move into the package
(presets/, in files), dsh-agent-presets resolves its own shipped root
and prepends it before configured roots (includeShippedRoot, default
true, opt-out for bare-machinery embedders), and the per-composition
derived patch, its spec, and the dump layer are deleted — profile-boot
and dump-config return to plain layer stacking. The always-load
guarantee now rides the schema default instead of patch ordering, so a
whole-config replacement keeps the shipped set and the squash, reload
freeze, and dump divergence stop being possible.

Gate globs, the web scaffold, and both preset browser lanes drop their
hand-fed shipped roots; the roster e2e keeps asserting configured roots
beside the shipped four against the built lib.

Fixes #2863.
2026-08-21 12:37:57 +08:00
_Kerman 450a1f8811 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2300 2026-08-19 10:33:31 +08:00
pku-xht 89e09b0023 Merge codex/installable-product-subagents into codex/installable-codex-provider 2026-08-18 18:59:40 +08:00
pku-xht 02a32d93f2 Merge master into codex/installable-product-subagents 2026-08-18 18:47:34 +08:00
pku-xht 75cece4b92 docs(subagent): finalize named instance guidance 2026-08-18 04:48:07 +08:00
pku-xht 7dd6436d52 docs(subagent): scope named guidance to Claude layer 2026-08-18 04:44:42 +08:00
pku-xht cde7ffe6e3 fix(subagent): align named instance guidance and evidence 2026-08-18 04:29:48 +08:00
pku-xht b85cb981ef docs(subagent): allow multiple product provider instances 2026-08-18 04:13:14 +08:00
Huanqi Cao bc6a775a31 merge: bring master into feat/pwsh-persistent-pty 2026-08-15 11:14:45 +08:00
pku-xht b2178ade80 feat(subagent): make Codex provider directly installable 2026-08-15 03:25:43 +08:00
pku-xht 21b93a4568 Merge commit '61e35fb8ebb2fd8b68ed0c64f586602bb825bd06' into codex/installable-product-subagents
# Conflicts:
#	.agents/notes/implemented/architecture/2026-08-10-product-subagent-providers-in-shared-host.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-10-product-subagent-providers-in-shared-host.md
#	.agents/notes/implemented/architecture/2026-08-10-product-subagent-providers-in-shared-host.zh.md
#	.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.md
#	.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
#	apps/cli/config/agent-presets/code/agent.cordis.yml
#	apps/cli/config/agent-presets/cordis/agent.cordis.yml
#	apps/cli/config/agent-presets/cordis/skills/editing-cordis-compositions/SKILL.md
#	apps/cli/config/agent-presets/standard/agent.cordis.yml
#	apps/cli/tests/web-agent-presets.e2e.ts
#	examples/acp-agent/tests/fixtures/subagent/subagent-claude-code/cordis.yml
#	examples/acp-agent/tests/fixtures/subagent/subagent-claude-code/driver.ts
#	packages/bundle/base/README.i18n.yaml
#	packages/bundle/base/README.md
#	packages/bundle/base/README.zh.md
#	packages/subagent/subagent-claude-code/README.i18n.yaml
#	packages/subagent/subagent-claude-code/README.md
#	packages/subagent/subagent-claude-code/README.zh.md
#	packages/subagent/subagent-claude-code/tests/loader-composition.e2e.ts
2026-08-14 16:18:47 +08:00
pku-xht b4366e711d feat(subagent): make Claude Code provider directly installable 2026-08-14 16:05:48 +08:00
pku-xht bb3010a8df fix(subagent): use bundled Claude Code CLI 2026-08-13 18:45:16 +08:00
pku-xht 339c30ed14 docs(bundle): correct product provider opt-in guidance 2026-08-13 16:50:05 +08:00
pku-xht 208f37157a fix(subagent): simplify optional provider delivery 2026-08-13 16:41:25 +08:00
pku-xht 93c0032216 docs(subagent): document explicit product provider opt-in 2026-08-13 16:27:48 +08:00
pku-xht 22152e39be Merge commit 'f2685aa648d9d7239ae553ff42f3811ced59d393' into codex/installable-product-subagents
# Conflicts:
#	.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.i18n.yaml
#	.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.zh.md
#	.agents/notes/implemented/simplification/2026-08-12-production-dsh-excludes-product-subagent-providers.i18n.yaml
#	.agents/notes/implemented/simplification/2026-08-12-production-dsh-excludes-product-subagent-providers.md
#	.agents/notes/implemented/simplification/2026-08-12-production-dsh-excludes-product-subagent-providers.zh.md
#	apps/cli/composition.md
#	apps/cli/tests/web-agent-presets.e2e.ts
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	packages/bundle/base/README.i18n.yaml
#	packages/bundle/base/README.zh.md
#	packages/bundle/base/package.json
#	packages/subagent/subagent-claude-code/package.json
#	packages/subagent/subagent-codex/package.json
#	pnpm-lock.yaml
2026-08-13 15:58:24 +08:00
pku-xht ad34a89472 Merge commit '5ae8c6487ad9556b8793b890a4fe5ece24c55805' into codex/product-subagent-one-shot-background
# Conflicts:
#	packages/subagent/subagent-codex/README.i18n.yaml
#	packages/subagent/subagent-codex/README.zh.md
#	packages/subagent/tool-subagent/tests/tool-subagent.spec.ts
2026-08-13 15:50:23 +08:00
Huanqi Cao f5c0d7e522 merge: bring master's rc.5 release and cordis tool renames into feat/pwsh-persistent-pty 2026-08-13 11:54:16 +08:00
Yichen Jiang 3bcc1a0bf7 Merge remote-tracking branch 'origin/master' into worktree/minimal-no-runtime-context
# Conflicts:
#	packages/core/system-prompt/README.i18n.yaml
#	packages/core/system-prompt/README.md
#	packages/core/system-prompt/README.zh.md
#	packages/examples/agent-spine-demo/README.i18n.yaml
#	packages/examples/agent-spine-demo/README.md
#	packages/examples/agent-spine-demo/README.zh.md
#	packages/self-modification/tool-cordis/src/api-catalog.ts
2026-08-13 10:24:29 +08:00
imccyu 499d397631 feat: optimze skill and tool 2026-08-13 03:46:20 +08:00
imccyu 96d8f9516b feat: optimize prompt 2026-08-13 03:18:04 +08:00
Huanqi Cao 1ae9df33eb merge: bring master's naming-contract refactor into feat/pwsh-persistent-pty 2026-08-13 01:52:47 +08:00
imccyu a7d4cd8e1b fix: ci 2026-08-13 01:33:31 +08:00
Huanqi Cao bc319d0a3b merge: bring master into feat/pwsh-persistent-pty 2026-08-13 01:33:16 +08:00
imccyu 4064198560 • feat(self-modification): add dynamic Cordis plugin runtime and UI 2026-08-13 01:29:36 +08:00
Tianyi Cui a2d0f7f411 refactor: apply repository naming contract
Apply the accepted pre-release package, service, type, directory, and role renames as one repository-wide change.
2026-08-13 00:54:38 +08:00
Yichen Jiang ece8645080 fix: suppress runtime context in minimal profiles 2026-08-12 23:28:15 +08:00
fz 47e3e6f0ed feat(web): rename code preset to PTC mode 2026-08-12 21:47:28 +08:00
pku-xht d1629eed45 feat(subagent): make product providers directly installable 2026-08-12 19:28:31 +08:00
pku-xht 28fcda2751 feat(agent-presets): enable background Codex and Claude Code subagent tasks 2026-08-12 17:07:34 +08:00
Yichen Jiang d4e06d6dd8 Merge pull request #2279 from deepseek-harness/worktree/preset-user-root-in-package
agent-presets owns the writable preset root instead of awaiting an app
2026-08-12 11:53:55 +08:00
Huanqi Cao 50bedaf03b Merge pull request #2234 from deepseek-harness/feat/loader-entry-disabled-interpolation
feat(loader): interpolate the entry disabled field
2026-08-12 11:40:02 +08:00
Yichen Jiang dfa2d91dcb Merge master into worktree/preset-user-root-in-package
Overlaps master on the preset e2e, the web scaffold, and the generated
config-catalog triplet; all merged textually, so the catalog is regenerated and
its pairing hashes re-recorded rather than trusted.
2026-08-12 11:08:55 +08:00
Huanqi Cao 0441312768 feat(pty): persistent pwsh tool and the minimal-preset Windows stack
Adds @deepseek-ai/dsh-tool-pwsh-persistent, the mirror of
tool-bash-persistent for PowerShell: one owner-scoped persistent pwsh
per agent, an Invoke-Expression wrapper with backtick-escaped bodies and
exact native exit codes ( reset, \True fallback, catch to 1),
PSReadLine-echo tolerance (the echoed wrapper is stripped from captured
output and can never fabricate completion), and the same
timeout/cancel/exit reset semantics with pwsh-flavored diagnostics.

The minimal preset now gates its persistent shell stack by platform with
the #2234 disabled interpolation: the bash rows mount on POSIX and the
pwsh rows (pty-local shellDialect pwsh + the new tool) on win32, keeping
exactly one persistent shell per host. windows-shell.spec pins the
per-platform roster; the real Loader composition proves cwd/env
persistence, multiline and here-string commands, large-output clipping,
and exit/reset over a real ConPTY pwsh.
2026-08-12 00:15:27 +08:00
Huanqi Cao 05a8846c6e refactor(preset): trim the shell-row comments
Drop the filler and factually loose comments added with the tool-pwsh rows:
the platform expressions self-explain, the web-app overlay comment repeats
the file header, and the spec comments now state only the platform-scoped
evaluation fact.
2026-08-11 21:38:51 +08:00
Yichen Jiang 715baae6c1 fix(agent-presets): let the invariant follow the roster it actually scans
The service moved its "is a roster composed" reads to the derived root set;
the invariant companion still read `config.roots`. In the shape this change
exists for — an app configures nothing and the roster is the harness home
alone — that made the advisory warning fire while the fail-loud invariant
stayed silent, so an agent could address a model against an empty global
layer unchecked.

Both now read one source: `roots` exposes the resolved set, and the invariant
asks it. That decides the behavior deliberately rather than by omission — a
composition that mounts the roster now fails an unjoined agent whether its
roots were configured or derived, and `includeUserRoot: false` with no
configured roots is how a deployment keeps its agents on the host plane. Both
shapes are pinned; the derived-only case fails against the old predicate.

Three pieces of prose went stale with the first commit: the web-app bundle
comment still called the writable root an assembly fact patched in by
AppCLIEntry (removed in the profile-plugin-bundles refactor — `composeProfile`
owns it now, and only for the shipped root), and the shipped skill and its
Agent Note still called both roots "configuration". The README gains the
resolved-roster reader and the discoverable-but-undeletable preset a second
writable root produces.
2026-08-11 21:13:41 +08:00
Yichen Jiang adfd54dc5c Merge branch 'master' into worktree/minimal-profiles-bare-runtime 2026-08-11 21:11:32 +08:00
Huanqi Cao ccb3e4aaac Merge remote-tracking branch 'origin/master' into feat/loader-entry-disabled-interpolation
# Conflicts:
#	scripts/verify-cordis-config.ts
2026-08-11 21:04:49 +08:00
Huanqi Cao 32744c2b5c refactor(preset): gate tool-pwsh by platform alongside tool-bash
The web-app overlay now disables the host tool-pwsh row too, and the shipped
presets (standard/code/cordis) declare both shell tool rows with inverted
platform gates — tool-bash on POSIX, tool-pwsh on win32 — so the preset layer
exposes exactly one shell tool per host and a preset can drop or replace the
shell tool on either platform. windows-shell.spec pins both preset gates and
both host tool rows disabled in the web composition; the loader and Windows
pwsh notes are updated in place.
2026-08-11 20:21:57 +08:00
Yichen Jiang 3fb325cfec fix(preset): state the user preset root plainly, resolve the acting path
The previous pass over-corrected: presenting both roots as unknowable made the
guidance vaguer without making it truer. Every `dsh` launcher puts authored
presets under `$DSH_HOME/.agent-presets`, so the skill and persona state that
as the answer to "where do my presets live" and reserve the read-back for the
path an agent actually opens or edits, which `copy()` already reports.
2026-08-11 20:04:32 +08:00
Yichen Jiang 782d670f24 fix(preset): stop presenting the preset roots as constants
Neither root is a property of the preset layer. `Config.roots` defaults to `[]`;
the two the shipped agent sees are patched in by the dsh CLI, whose user root is
`dshHomePath('.agent-presets')` and whose system root ships beside the install.
`writableRoot()` then takes the first `user` root from whatever configuration
supplied it.

The skill and the persona stated `${DSH_HOME:-$HOME/.dsh}/.agent-presets/<id>/`
as where authored presets live, which is only the default install's answer, and
no call reports either root: `authorable` says whether a writable one exists,
and `list()` cannot reveal a user root that is still empty. Both now keep that
path as what to tell a user asking where to look, and direct every path an agent
acts on to `list()` or `resolve()` — which is also what `copy()` already relies
on, since it chooses the writable root itself and reports the file it created.
2026-08-11 19:56:45 +08:00
Yichen Jiang 63b564bb4b fix(preset): cover both root-realm rejections and narrow the packaging claim
Review found two errors in the first pass.

The skill quoted `service "<name>" has been registered at <Owner>` as the
rejection for a service published into the root realm. That message only
appears when the loose name collides with one the host already supplies. A
preset publishing its OWN new service name reaches the root realm successfully
and is rejected by the mount audit instead, with `row(s) published
process-global service(s) [...]` — which is the shape a forgotten realm
actually takes. Both messages are now listed, verified by mounting one preset
of each kind.

The Agent Note claimed every harness package publishes exactly three file
patterns. 139 do; 28 also publish `lib/client.js`, 22 publish
`lib/types/**/*.js`, and `dsh-message-feedback` publishes `src`. The note now
states only the fact it needs: no package's `files` includes its README.

Also from review: the copy step no longer repeats the display name it already
set, the id rule spells out `[a-z0-9][a-z0-9-]*`, and the sandbox step says
reads need no escalation.
2026-08-11 19:49:47 +08:00
Yichen Jiang 0b3ac6356b fix(preset): correct the composition-authoring skill and give it a real check
The `cordis` preset's `editing-cordis-compositions` skill is the only guidance
an agent has when it authors a preset, and four of its statements were false.

`tool-bash` was named as the worked example of a row that hides a service; it
provides nothing and injects `bashEnv` from the host's own `bash-env` row, so
following that advice strands the row behind its realm and the preset fails to
mount. The `isolate` example composed `tasks-local` with `tool-tasks`, which
the shipped compositions' own comments say breaks `run_in_background`. A string
realm label was described as pooling one instance; labels join realms and
`provide()` still throws on the second registration. Rows were to be checked
against a package README, which no harness package publishes.

Verification is now the agent's own: `standingKeyFor(id)` runs the same mount a
session start performs and rejects an unresolvable package, an invalid config, a
service in the root realm, and a row that never activated. The skill states that
`list()`'s `broken` field is a shape check that every one of those passes, ships
the `cordis_mount` plugin that reaches the roster service, and names `copy()` as
the authoring write. The prohibition on touching the shipped install is promoted
to its own section and extended to the host composition.

Fixes #2266
2026-08-11 17:43:09 +08:00
Yichen Jiang 2b5c17ab6b Merge remote-tracking branch 'origin/master' into worktree/minimal-profiles-bare-runtime
# Conflicts:
#	examples/jsonrpc-agent/README.i18n.yaml
#	examples/jsonrpc-agent/README.md
2026-08-11 15:51:03 +08:00
Huanqi Cao 2a6658252c Merge remote-tracking branch 'origin/master' into feat/loader-entry-disabled-interpolation
# Conflicts:
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.i18n.yaml
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.md
#	.agents/notes/implemented/feature/2026-08-01-windows-pwsh-default.zh.md
2026-08-11 15:33:09 +08:00
Yichen Jiang 663253099d feat: align minimal runtime profiles 2026-08-11 15:19:33 +08:00
Huanqi Cao 4308f91e88 refactor(bundle): fold the Windows shell platform layer into the base rows
Entry \disabled\ interpolation makes the launcher's separate platform layer
unnecessary: the base bundle's cordis.patch.yml now gates both shell stacks
on its own rows — bash-sandbox/tool-bash disable on win32, and their twins
pwsh-sandbox/tool-pwsh mount only there with the inverted expression — so
exactly one shell stack mounts per host from one shared patch file.

windows.cordis.patch.yml and the launcher's windows-shell.ts injection (boot,
live recomposition, config dumps) are deleted, with the workspace-constraints
entry and the dsh-base exports/files entries following. The windows-shell spec
pins the effective per-platform roster through the real bundle layers, and
base.spec pins the four symmetric gates. The superseded active notes are
updated and cross-linked; the loader note records the fold itself.
2026-08-11 15:11:45 +08:00