Commit Graph
366 Commits
Author SHA1 Message Date
imccyu f5f0448bee refactor(subagent): consume shared session observations 2026-08-25 06:09:25 +08:00
Tianyi Cui 4125514a08 refactor(repo): retire top-level examples 2026-08-24 22:02:44 +08:00
Tianyi Cui caf386f59c fix(test): use expected-output naming 2026-08-24 21:37:14 +08:00
Tianyi Cui 1cfe0f9942 refactor(test): reserve snapshots for session recordings 2026-08-24 21:37:14 +08:00
Tianyi Cui 28442337cf feat(python-example): select the persistent shell by platform
Make the checked-in minimal SDK overlay disable both one-shot shell rows and mount exactly one persistent PTY stack: Bash on Linux/macOS and PowerShell on Windows. The SDK server, explicit dsh home, persistence, editor, timeout, and reduced tool catalog remain unchanged.

Update the runnable example and tutorial to list Windows x64 as supported, describe the platform-selected shell, and remove the obsolete POSIX-only restriction. This keeps the documented first Python task executable through the packaged Windows dsh profile instead of advertising a Linux-only overlay on a Windows-capable SDK.
2026-08-24 19:09:40 +08:00
Dudu-0223 f76a225a7d Merge pull request #2663 from deepseek-harness/feat/subagent-provider
让 subagent 按需发现并选择子 Agent 模型
2026-08-24 18:23:42 +08:00
Tianyi Cui 8dc3b0380e feat(bundle): ship the standalone sdk-minimal profile
Add a startup-only sdk-minimal template whose sole bundle inserts the complete JSON-RPC agent tree over the empty profile root. The roster is an explicit composition allowlist: it contains one DeepSeek adapter, the minimal agent spine, persistent Bash, the string-replace editor, local execution, and JSONL persistence, while dsh-base and Web remain absent.

Reuse the SDK app startup provider so the new profile retains help, stdin EOF, and bounded launcher shutdown semantics. Make that provider render its configured profile name, which keeps both sdk and sdk-minimal help truthful without duplicating process lifecycle code.

Register the package in the CLI closure, TypeScript graph, lockfile, Knip policy, and bilingual bundle references. Exact manifest, row-roster, profile-template, config-dump, and HMR tests make later additions visible instead of relying on a blacklist.
2026-08-24 17:28:28 +08:00
Tianyi Cui 9edf1b9f10 fix(python-sdk): harden profile runtime startup
Resolve packaged profile proxies with Node ESM import conditions from each package installation, and fail loud when an explicit runtime export or legacy main entry is missing. Serialize the shared profile fallback under the existing cross-process writer lock so concurrent dsh processes cannot observe partial proxies; either carrier now replaces the other carrier’s managed entry without manual cleanup.

Give Python initialize its own 10-second default bound and name the selected profile in timeout diagnostics, while leaving ordinary agent turns unbounded by default. Package the dynamically resolved web frontend and skill-badge assets so the runtime wheel’s normal dsh profiles do not depend on pkg static-discovery accidents.

Rewrite the root launch rule and every active stale SDK-runtime note to the shipped dsh profile architecture in both languages. Focused tests prove import-only and transitive package exports, lock contention, cross-carrier transitions, missing-entry failures, asset inventory, and bounded initialization.
2026-08-24 17:28:27 +08:00
Yichen Jiang 91e30d6f82 Merge remote-tracking branch 'origin/master' into fix/derive-shipped-preset-root-per-composition
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.md
#	.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md
#	scripts/check-workspace-constraints.ts
#	scripts/rescope-vendor.ts
2026-08-24 10:11:11 +08:00
Magolor 4b7b039129 Merge pull request #2777 from deepseek-harness/fix/minimal-disable-goal-plugin
fix: 在 Minimal preset 中禁用 /goal
2026-08-24 09:18:48 +08:00
imccyu ddcab34c0e test(api): close stream transport coverage gaps 2026-08-23 16:16:05 +08:00
Tianyi Cui fd814589fb refactor(profiles): make module HMR opt-in
Move the shared module-reload policy into dsh-base by inserting its HMR row disabled, then remove the redundant disabled overrides from Web, headless, SDK, and ACP. No shipped profile enables server module reload; live profile patch watching continues through the launcher-owned config-only fallback, and browser client HMR remains a separate mechanism.

A later profile layer can opt into source-module reload explicitly with disabled: false while retaining the base root configuration. Composition tests cover every shipped mode and the explicit enable path, and the bundle references plus launcher Agent Notes document the resulting ownership and safety rationale.
2026-08-23 10:59:01 +08:00
Tianyi Cui fdac6cffcb test: refresh profile migration catalogs and built smokes
Regenerate the configuration catalog and module graph after replacing standalone application packages with dsh profile bundles and renaming the private Python carrier. Update built-bin coverage to launch the shipped sdk and acp profiles, assert retired bins stay absent, and keep the Web golden text aligned with the same assembled runtime.

Clarify that headless is a startup profile whose patches freeze after boot. This commit is projection and verification work: it contains no application implementation, and every generated document is produced from source committed earlier in the series.
2026-08-23 10:59:01 +08:00
Tianyi Cui 47a46e4cca feat(profiles): add the ACP application bundle
Introduce @deepseek-ai/dsh-acp-app as the thin application layer for the built-in acp profile. It contributes only the ACP protocol bridge and profile metadata; dsh-base remains the single owner of shared agent composition, providers, persistence, permissions, and tools.

Wire the bundle into CLI resolution, catalogs, workspace configuration, and built-bin coverage. The focused bundle and startup tests prove that base plus acp-app exposes automation sessions while keeping stdout reserved for ACP JSON-RPC.
2026-08-23 10:59:00 +08:00
Tianyi Cui a16822944b feat(profiles): add the SDK application bundle
Introduce @deepseek-ai/dsh-sdk-app as the thin application layer for the built-in sdk profile. The bundle contributes the JSON-RPC server and startup-only profile metadata, while dsh-base continues to own the shared agent, provider, persistence, and tool composition.

Publish ctx.appReady from the launcher only after the Loader tree and launcher-owned setup succeed. The stdio lifetime binding leaves stdin unread until the protocol transport claims it and defers EOF exit 0 until readiness commits, so early protocol frames remain buffered and a racing startup failure remains the nonzero process outcome. Fiber disposal cancels both pending lifecycle listeners.

Register the bundle in the CLI resolver closure, generated configuration catalog, workspace graph, and built-bin smoke. Startup tests prove that base plus sdk-app exposes the SDK server without taking ownership of shared runtime plugins; focused and built-bin regressions cover early input, EOF readiness, and startup-error precedence.
2026-08-23 10:59:00 +08:00
Tianyi Cui c5311d665d test(webhook): preserve real e2e environment 2026-08-23 01:56:42 +08:00
Tianyi Cui 65509a225b test(webhook): resolve the real CLI rule from examples 2026-08-23 01:48:55 +08:00
Tianyi Cui 3bf5edb5d5 test(webhook): exercise the real CLI and model flow 2026-08-23 01:48:55 +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
Yichen Jiang 25058f2658 docs(cli): sync the derived preset-root layer into launcher docs
Review follow-ups: enumerate the derived shipped agent-preset root in
apps/cli README/reference dumps and the profile-boot module JSDoc
(bilingual pairs re-recorded), correct the stale AppCLIEntry/distIndex
analogy in the web scaffold and the shipped-root cross-reference in the
web preset e2e, drop the write-only ComposedProfile.rows field, and make
the Agent Note describe the dump path as sharing the derivation rather
than the builder.
2026-08-21 11:32:02 +08:00
Yichen Jiang 9820b6a1e9 fix(cli): derive the shipped agent-preset root per composition
The boot-time agent-presets overlay replaced the composed roots with the
shipped root alone, so roots configured in a profile's cordis.patch.yml
vanished from the roster (externally reported in
deepseek-ai/deepseek-harness#3636). The overlay also froze the row's
boot-time config above every live reload and never reached the config
dump, which therefore showed roots the boot dropped.

Derive the roster patch from the current layers instead: prepend the
shipped root (system trust, wins duplicate ids) to configured roots,
share one builder across boot, live user-layer reloads, and
--dump-config, and fail loud on a roots value the launcher cannot
statically rewrite.

Fixes #2863.
2026-08-20 22:57:58 +08:00
Yichen Jiang 6428b844ef fix(ci): catch the branch up with the static and smoke gates
- dsh-authorization's manifest becomes a release member on current
  master's terms: version matches the root 0.1.0-rc.6 and
  publishConfig.access is public, which the constraints gate and the
  tarball pack's version verify both enforce after the master merge.
- Regenerate docs/module-graph (zh mirror included) for the
  authorization package and the llm-pi-ai -> authorization edge; the
  graph gate lives outside doc-sync and was never regenerated when the
  package was added.
- The built-bin smoke seeds the versioned credentials document; this
  branch's provider refuses the pre-release flat layout by design, and
  the master-side test still wrote the old shape.
2026-08-20 17:58:38 +08:00
_Kerman 917ef58f79 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2300 2026-08-19 17:09:18 +08:00
lsdsjy d66841ea3f feat(web,cli): open the ready Web UI by default 2026-08-19 15:42:12 +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
Huanqi Cao bc6a775a31 merge: bring master into feat/pwsh-persistent-pty 2026-08-15 11:14:45 +08:00
pku-xht bc91897adb test(cli): load product Bundles through Profile 2026-08-15 04:24:03 +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 0fbb5c7b81 Merge commit '2f717c0467d7174d7fe0011c4a787450f7328a78' into codex/product-subagent-one-shot-background 2026-08-13 18:54:56 +08:00
pku-xht 7de660305a Merge commit '5ccacf0fb452ec8fecd7fda4b61eb16fd8da8f64' into codex/installable-product-subagents 2026-08-13 16:54:39 +08:00
pku-xht 208f37157a fix(subagent): simplify optional provider delivery 2026-08-13 16:41:25 +08:00
Tianyi Cui 0a42836fbb fix(web): address wildcard host review 2026-08-13 16:37:49 +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
imccyu 1646b7617e fix(bundle): exclude product subagents from base
The Codex and Claude Code subagent providers were production dependencies of
@deepseek-ai/dsh-base and mounted by its Cordis composition, so every install of
the base bundle carried two providers that only some products want.

Drop both from the base bundle's dependencies and composition. The examples keep
them as explicit dependencies, base's tests lock their absence, and the product
preset e2e mounts the providers it needs explicitly.

Cherry-picked from #2387 (two commits squashed into one).
2026-08-13 14:05:46 +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
Hypatia May b6b6a72df7 feat(session-query): ship full-text session search opt-in via openAt never
The shipped bundles keep ctx.sessionQuery mounted but set the new
session-query-sqlite `openAt: never` phase: searchSessions/searchEvents
fail with the typed SESSION_QUERY_SEARCH_DISABLED code before any request
normalization, node:sqlite is never imported or opened, and no source
observation or reconciliation runs. Every inherited exact read, filter,
and trace — session export descendants, subagent-fork Workspace
inheritance, title reads — keeps working, and the Web sidebar search
degrades to its designed local title/workspace matching. Enabling content
search is a one-line openAt override in a later patch layer; the web e2e
scaffold keeps it enabled as the assembled opt-in coverage.
2026-08-13 11:46:37 +08:00
Huanqi Cao d6010c2d88 refactor(pty): follow the naming-contract renames across the persistent pwsh stack 2026-08-13 09:52:56 +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
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
pku-xht d1629eed45 feat(subagent): make product providers directly installable 2026-08-12 19:28:31 +08:00
Chinesezjc 93b400a1de Merge branch 'codex/disable-telemetry-default' into master
Resolved conflicts:
- packages/client/ui-settings-general/README.md, README.zh.md: kept PR
  opt-in telemetry description (DSH_TELEMETRY_MODE)
- scripts/snapshots/translation-prompt-v4: kept master's newer README
  structure snapshot
- i18n.yaml pairing records: resolved per file state
- pnpm-lock.yaml: regenerated
- Modify/delete conflicts (scaffold/telemetry, sdk-follow-up-capabilities):
  kept master deletions
2026-08-12 17:27:37 +08:00
pku-xht 28fcda2751 feat(agent-presets): enable background Codex and Claude Code subagent tasks 2026-08-12 17:07:34 +08:00
Turtle 4c49e7109b fix(cli): separate dsh from repository build 2026-08-12 15:37:03 +08:00
Turtle 15c84cdc4b Merge pull request #2310 from deepseek-harness/refactor/cmdline-plan-trim
refactor(cmdline): run the program's own commander action instead of a plan callback
2026-08-12 13:20:30 +08:00
Turtle 54dd75a969 refactor(cmdline): run the program's own commander action instead of a plan callback
parseCmdline(ctx, program): void only adapts commander control flow to
the launcher: it parses the immutable cmdlineArgs snapshot and turns
help, version, parse errors, and action rejections into a ctx.appExit
request. App validation and the ctx.provide of the app-owned service
live in the program's own synchronous .action(), which commander runs
inside parse — program.error(...) there shares the exit path with a
grammar rejection. Deletes the CmdlinePlan export, its unread ctx
parameter, the type-unsound (() => ({}) as T) default, and the
T | undefined return with its per-caller publish guard.
2026-08-12 13:07:41 +08:00