Commit Graph

3919 Commits

Author SHA1 Message Date
imccyu 3f7c2a25b6 docs: record trajectory context assembly 2026-08-11 03:29:04 +08:00
imccyu e27dba8457 perf(ui-trajectory): defer trajectory text processing 2026-08-11 03:29:04 +08:00
imccyu 62f5d05039 fix(ui-trajectory): tighten conversation assembly contracts 2026-08-11 03:29:04 +08:00
imccyu a342b329e3 docs(client): document trajectory conversation assembly 2026-08-11 03:29:04 +08:00
imccyu 9840d39ba0 feat(release): rehearse a vendored publication with a prerelease
release:vendor --prerelease rc.1 appends the identifier to the version each
package would take, so a first publication can be thrown away instead of holding
the stable dist-tag: publish already routes any version with a prerelease
segment to --tag next.

A prerelease does not consume its release numbers, so the stable release that
follows takes the same ones rather than skipping a patch. Deciding that needs
semver precedence, which git's version sort does not provide — it places
4.0.1-rc.1 above 4.0.1 — so the newest published version is chosen by comparing
versions here, numeric prerelease fields numerically.
2026-08-11 02:43:12 +08:00
imccyu ae75aca776 fix(release): supply the Landlock entry tarball to the packed install
dsh-sandbox-local declares @deepseek-ai/node-addon-landlock-run in
dependencies, not optionalDependencies, so omitting optional dependencies left
npm resolving it from a registry that does not carry it. The dsh pack job now
packs that entry for verification; its own platform packages stay out, being
optional and needing a musl toolchain per architecture.

The verification reads each directory by its contents rather than a pack order
file, because a directory packed only to satisfy a cross-sequence dependency has
no release order to describe.
2026-08-11 01:48:56 +08:00
imccyu 21db3220d6 fix(release): omit optional dependencies from the packed install
The Landlock platform packages sit behind optionalDependencies, and npm fails
the install on their 404 rather than skipping them: they belong to the native
sequence, whose pack needs a musl toolchain and one build per architecture, so
this job cannot produce them and holds no credentials to fetch them. A consumer
that cannot install them must still start, which is what optional means here.

The release spec also gains block bodies where the lint rule rejects returning a
void expression from an arrow shorthand.
2026-08-11 01:39:01 +08:00
imccyu d9dcf5a484 fix(release): close the review findings on the release sequences
The root manifest carries the dsh family version. bump writes it with the
members, because the workspace constraint requires them to match, and that
constraint now accepts a prerelease segment: without both, release:dsh 0.0.2
left the root behind and 0.0.1-rc.1 could satisfy neither check.

The Landlock workflow no longer passes --access public, which overrode the
restricted publishConfig this repository just adopted for those packages.

Vendored change detection reads build inputs when a package publishes build
output, and vendor/cordis publishes the src its export map already pointed at:
its lib/ is untracked, so a real source edit read as 'nothing changed' and the
next publish would fail on a version whose bytes moved. The next version also
takes the last published version as its baseline, so a re-sync that restores a
lower upstream version cannot recompute a version already on the registry, and
bump confirms the registry carries what the newest tag names.

Tag prefixes are constructed rather than recovered from a full tag, which a
hyphenated version defeated. Pack runs group per ref so concurrent pull requests
stop displacing each other, the publish job carries the global group, and the
unused id-token permission is gone.

Every release script sits behind an entry guard, which is what lets the pure
judgements carry tests: tag naming, publish order and cycle reporting, version
arithmetic, payload policy, and the change judgement.

The Agent Note moves to implemented and states what shipped: one probe command,
the registry confirmation that now exists, and byte reproducibility recorded as
assumed rather than measured.
2026-08-11 01:26:36 +08:00
Turtle 45b300dc58 docs(notes): archive superseded dsh run decision 2026-08-10 23:45:05 +08:00
Turtle 09e2d2ddc1 refactor(cmdline): make command providers ordinary 2026-08-10 23:45:05 +08:00
Turtle 668bdb3d8e refactor(cmdline): keep readiness in web app 2026-08-10 23:45:05 +08:00
Turtle a4d8c0da9b fix(web): include the HMR receiver in the initial client graph 2026-08-10 23:45:04 +08:00
Turtle 37ee7b0f24 fix(cmdline): reject multiple command-line owners 2026-08-10 23:45:04 +08:00
Turtle d4ccfbd80f refactor(cli)!: complete app-owned profile startup 2026-08-10 23:45:04 +08:00
Turtle 7e3a82eacc refactor(loader): resolve config after injected services 2026-08-10 23:45:04 +08:00
Turtle b692f38506 refactor(cli): discover app startup rows from injection 2026-08-10 23:45:04 +08:00
Turtle 1f0a0440f3 refactor(cmdline)!: an app's entrypoint provides values its rows read
Replaces the patch round trip. An app's entrypoint resolves the command
line into a service, and the rows it configures read that service from
their own config — port: !!js ctx.get('webStartup')?.port ?? 3080 — so the
resolved value beats the value written beside it and nothing is written
back into a row or handed to the launcher.

A bundle names the entrypoint row in its manifest (dsh.bundle.entrypoint),
which is what lets the boot mount in two passes: entrypoints alone, then
the whole composition. That ordering is required, not cosmetic — a row's
config expressions are evaluated when the include applies the row, and a
strict ctx.get only answers for a service whose providing fiber is already
active.

What this removes: ctx.appPatches and the launcher-owned patch layer, the
disable/re-enable recycle and its in-flight-mount barrier, overrideConfig,
and the reload hazard they existed for. A live config edit now re-applies
the second pass against services that are still up, so a served port
survives by construction.

What it adds: ctx.appReady, because Loader settlement no longer means the
app is up — a row mounted in the second pass can observe a settled tree
while that pass is still running, or already rolling back. The web URL line
waits for it, so a boot that fails in the second pass announces nothing.
2026-08-10 23:45:04 +08:00
Turtle f749e04881 docs: record how an app comes to own its command line
The Agent Note keeps the three vendored-Loader facts the mechanism turns on
— a row's config is resolved and validated when its fiber is created, while
it is still waiting; an inject update loses the plugin's static injections;
a row cannot be inserted from inside a mounting plugin — with the
alternatives they ruled out.
2026-08-10 23:45:04 +08:00
pku-xht 396925ad4c Merge pull request #2137 from deepseek-harness/codex/product-subagent-presets
feat(agent-presets): add Codex and Claude Code subagent tools
2026-08-10 23:43:23 +08:00
Yichen Jiang 2e59ff5ef0 Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
2026-08-10 22:49:25 +08:00
Yichen Jiang 114b41eca4 refactor(presets): use one editor family 2026-08-10 22:47:28 +08:00
Yichen Jiang a7e8805340 fix(packaging): materialize runtime dependencies 2026-08-10 22:47:18 +08:00
Hypatia May 29c00d59a5 Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance
# Conflicts:
#	packages/subagent/subagent-inprocess/package.json
#	packages/subagent/subagent/package.json
#	pnpm-lock.yaml
2026-08-10 22:24:56 +08:00
pku-xht c3362d0e60 Merge master at f4c0ba1489 2026-08-10 22:20:59 +08:00
Yichen Jiang b87a3b1baf Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 22:18:22 +08:00
Yichen Jiang a4e679853f Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 22:15:30 +08:00
imccyu 194828e8b8 build(vendor): add the @deepseek-ai rescope codemod, its mapping doc, and its Agent Note
Every harness package declares cordis as a peer dependency, so publishing the
harness publishes the vendored framework layer too; under the upstream names
that publication would squat them on the registry.

scripts/rescope-vendor.ts owns the rename: the nine-package mapping, a
delimited-token rule that leaves cordis.yml, the Loader's cordis: builtins and
vendor directory names alone, per-file exemptions where a name is a directory
or an upstream runtime identifier, and the exact edits for sites a token rule
cannot express — dot-notation lookups, unquoted manifest keys, a regex literal
whose failure would make every Context-merge scan silently find nothing, the
vendored-manifest table, and the contracts that told readers vendored packages
keep their upstream names.

Markdown follows the rename inside every fence, because a fence is code a
reader copies or configuration they mount, and in `docs/` prose as well, where
a sentence quoting a name teaches something this repository no longer resolves.
Prose elsewhere records what was true when it was written, and the same
spelling can mean something else: the Python SDK's `cordis` option, or the
unvendored `@cordisjs/plugin-http`. `docs/rescope.md` states both names on
purpose and is exempt.

exactEditState() classifies every exact edit as pending, applied, or invalid.
An insertion keeps its anchor and a deletion keeps its remainder, so each side
counts the form that survives: a duplicated insertion, a half-applied
replacement, and a deletion whose remainder moved are all invalid. The run
classifies every edit before writing anything and aborts on the first invalid
one, so a disagreement between the mapping and the tree cannot leave a
half-rescoped checkout; each write re-reads its file, because two edits can
target one. rescope-vendor.spec.ts pins those rejections, and --check asserts
the whole post-state from the hygiene gate, so CI owns the invariant.

--reverse restores the upstream names, verified as a round trip: reverse, then
apply, reproduces this tree byte for byte.

docs/rescope.md is the consumer-facing reference: the old-name/new-name table
with each package's role, what the rename deliberately leaves alone, the sites
callers must change, and the commands to apply, verify, and revert. The Agent
Note carries the decision and its consequences.

The rename itself lands in the next commit, produced by running the script.
2026-08-10 22:04:10 +08:00
Hypatia May 76061417d9 Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance
# Conflicts:
#	examples/acp-agent/tests/snapshots/advanced-toolchain/session.1.jsonl
#	examples/acp-agent/tests/snapshots/advanced-toolchain/session.2.jsonl
#	examples/acp-agent/tests/snapshots/advanced-toolchain/session.jsonl
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.1.jsonl
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.2.jsonl
#	examples/headless-agent/tests/snapshots/advanced-toolchain/session.jsonl
2026-08-10 22:02:36 +08:00
pku-xht 9a2799e941 Merge master at 261989e36e 2026-08-10 21:55:57 +08:00
Hypatia May 2b2899b4ce Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	packages/subagent/subagent-inprocess/src/index.ts
#	packages/subagent/subagent/package.json
#	packages/subagent/subagent/src/child-agent.ts
#	packages/subagent/subagent/src/continuation.ts
#	packages/subagent/subagent/tsconfig.json
2026-08-10 21:42:45 +08:00
Yichen Jiang 523764a582 fix(runtime): separate packaged JSON-RPC resolution 2026-08-10 21:39:47 +08:00
Turtle 541591d5f6 fix: address repository removal review 2026-08-10 21:32:13 +08:00
Turtle 993550e6c8 refactor: remove repository plugin path 2026-08-10 21:32:13 +08:00
Huanqi Cao cd226191a8 Merge pull request #2182 from deepseek-harness/fix/windows-native-acl-coverage
fix(ci): restore the native Windows coverage denominator to green
2026-08-10 21:21:53 +08:00
imccyu 854f6623bb docs: rename client manifest field references 2026-08-10 21:11:09 +08:00
pku-xht 8d88edb880 Merge commit '0b307c4ea80ba603dee91b46731e4d14644d84d2' into codex/product-subagent-presets 2026-08-10 21:07:22 +08:00
Yichen Jiang 7175ba3d5e Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 21:06:25 +08:00
Huanqi Cao 539d116d57 Merge remote-tracking branch 'origin/master' into fix/windows-native-acl-coverage 2026-08-10 21:05:38 +08:00
Yichen Jiang 388ce89823 Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt
# Conflicts:
#	apps/cli/config/agent-presets/minimal/preset.yml
2026-08-10 21:05:29 +08:00
Huanqi Cao 84964ba661 Merge remote-tracking branch 'origin/master' into fix/windows-native-acl-coverage
# Conflicts:
#	packages/preset/agent-presets/src/authoring.ts
#	vitest.config.ts
2026-08-10 21:04:44 +08:00
Yichen Jiang 4481637684 fix(python): package the minimal runtime closure 2026-08-10 20:55:02 +08:00
Yichen Jiang 43f3324a7b fix(tools): restrict what a scope inherits, not just the global layer
A restriction was compiled against the global tool layer alone: only
global-layer tools were tested against `admits()`, and every chain-layer
tool was overlaid unfiltered afterward. That read the exempt set as "the
global layer" when what it means is "what this scope registers itself" —
two descriptions of the same set only while every model-facing tool sat in
the host composition.

Moving those rows onto the agent plane separated them. A preset's tools are
an ANCESTOR contribution to a joined agent, so a subagent's `toolFilter`
stopped constraining anything it was given; and with the global layer empty
`restrict()` rejected every name it received as unknown, failing the child
outright. With the same tools in the global layer the filter still admits
and applies normally, which is what makes this a regression of the move
rather than a standing limitation.

`view()` now filters everything a scope inherits — the global layer and
every ancestor layer on its chain — and exempts only the layer the scope
owns. That exemption is load-bearing rather than incidental: the delegation
runtime registers a child's `report` and structured-output tools into the
child's own layer, and a filter naming the capabilities the child may use
must not strip the machinery it answers through. Tool order, and with it
prefix-cache reuse, is unchanged: inherited names keep their global-then-
ancestor position and own-layer names still come last.

The diagnostic said "unknown global tool" while listing what is really the
inherited surface; it now names the surface it checks and says why an
own-layer name is not restrictable.

Fixes #2185
2026-08-10 20:34:45 +08:00
Yichen Jiang 6301320a63 Merge remote-tracking branch 'origin/master' into worktree/subagent-missing-tools-fb2359 2026-08-10 20:32:58 +08:00
pku-xht e6b6f1a047 Merge master at 35eeb4a112 2026-08-10 20:25:58 +08:00
Ziya 216b5eab42 Merge pull request #967 from deepseek-harness/fix/workspace-context-rendered-change-proof
fix(workspace-context): commit only represented changes
2026-08-10 05:19:17 -07:00
ZiyaZhang 4ec9e310c3 Merge remote-tracking branch 'upstream/master' into fix/workspace-context-rendered-change-proof 2026-08-10 05:10:39 -07:00
Ziya 5cdebcf5f3 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-10 05:10:30 -07:00
Yichen Jiang eacd5e2167 fix(prompt): remove unreachable complete branches 2026-08-10 20:09:06 +08:00
Yichen Jiang 299cafad01 fix(python): rename SDK distribution 2026-08-10 19:45:54 +08:00
Hypatia May 9e40fc7f6b Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance 2026-08-10 19:40:14 +08:00