Commit Graph
7009 Commits
Author SHA1 Message Date
Tianyi Cui 8b5527b8da fix(plugins): preserve Web and Desktop identities on managed native bundles 2026-10-07 01:26:01 +08:00
Tianyi Cui ddbf39cbcb fix(build): retain on-demand dependency lock and event references 2026-10-07 01:26:00 +08:00
Tianyi Cui e9a68b2484 fix(plugin): clarify on-demand recovery and preserve package diagnostics 2026-10-07 01:26:00 +08:00
Tianyi Cui f730199b94 test(plugin): classify on-demand composition and document mock events 2026-10-07 01:26:00 +08:00
Tianyi Cui a453218aff fix(plugins): retain unreadable official catalog entries 2026-10-07 01:26:00 +08:00
Tianyi Cui c135bdf483 test(plugin): refresh official discovery browser and API evidence 2026-10-07 01:26:00 +08:00
Tianyi Cui 8ed0b530ed feat(plugins): offer official bundles through on-demand installation 2026-10-07 01:26:00 +08:00
Tianyi Cui 2b0dd1567d fix(plugins): preserve Creator drafts and refresh bundle validation 2026-10-06 23:48:59 +08:00
Tianyi Cui 55dfd3bab1 fix(plugins): narrow optional bundles and create fresh session agents 2026-10-06 23:48:59 +08:00
Tianyi Cui fbb95c0f16 fix(plugin): preserve final pinned composition and browser inventories 2026-10-06 23:48:59 +08:00
Tianyi Cui d68ae3bf51 fix(plugin): preserve bundled resource identity in executables 2026-10-06 23:48:59 +08:00
Tianyi Cui 7e65d1119b fix(plugin): preserve scoped identities across inspection consumers 2026-10-06 23:48:59 +08:00
Tianyi Cui 996007e103 fix(plugin): retain scoped row identity and source diagnostics 2026-10-06 23:48:59 +08:00
Tianyi Cui b6ef9d5503 fix(plugin): identify retained scoped bundle rows precisely 2026-10-06 23:48:59 +08:00
Tianyi Cui de27882007 test(plugin): refresh optional bundle inventory and browser evidence 2026-10-06 23:48:59 +08:00
Tianyi Cui 8a9767c25e feat(plugin): validate optional bundle lifecycles and session output 2026-10-06 23:48:58 +08:00
Tianyi Cui 3aa1cab43a feat(plugin): compose optional bundles inside agent presets 2026-10-06 23:48:58 +08:00
Tianyi Cui c2d528bb6d refactor(experimental): classify optional session search tools 2026-10-06 23:20:51 +08:00
Tianyi Cui 582c9ab7b7 fix(experimental): retain published names and centralize identity policy 2026-10-06 16:42:25 +08:00
Tianyi Cui 5990ccbb4a fix(experimental): align package guidance and platform source ownership 2026-10-06 16:41:35 +08:00
Tianyi Cui b48384223a refactor(experimental)!: classify optional packages and move prototypes 2026-10-06 16:41:04 +08:00
Tianyi Cui b98b76c9a5 feat(translator): add opt-in native DeepSeek Flash translation 2026-10-06 15:38:24 +08:00
Tianyi Cui cfc6be809c feat(reasoning): persist opt-in machine translations 2026-10-06 15:36:14 +08:00
Dudu-0223 bf1c4e01ba Merge pull request #4394 from deepseek-harness/refactor/subagent
refactor(subagent): unify activations and reuse parent catalog
2026-10-06 15:08:30 +08:00
Tianyi Cui 8f3959a196 Merge branch 'master' into worktree/client-control/cli-help-reference 2026-10-06 10:59:23 +08:00
Tianyi Cui a3cb678875 Merge master current-directory support into subagent activations
Integrate the observed master checkpoint 7ab215e23e5d977aae7eb5d4fb91782d39969dbb without rewriting the earlier published checkpoints. Master adds current-directory events, directory-aware consumers, and retained Git worktrees; its old subagent startup paths overlapped the unified activation implementation.

Resolve directory selection within managed startup after acquiring parent ownership. Preserve the original Session origin while setting each new local child directory, retain persisted directory state on cold resume, and pass a required absolute cwd to external providers. Keep unified local/external ownership, full completion notices, parked-input host completion, SDK wait/error/shutdown behavior, and ACP cancellation semantics. Retain removal of the old in-process driver and continuation managers.

Combine SDK wait with the new directory requests, preserve the new master directory/worktree fixtures, regenerate derived catalogs from the combined sources, and refresh only the four stale prompt/schema sidecars. Preserve every protected historical schema, archived note, catalog-v2 acknowledgement, and recorded predecessor input.

Validation: full build; 59 CI static gates; 855 subagent tests with 100% coverage on changed core/external sources; affected consumer suites including 119 repaired-fixture tests; SDK 11 and headless 16 recorded scenarios; two local headless expected cases; six built nested SDK/ACP cases; lint, strict cast inventory, workspace constraints, and whitespace checks. Native Windows worker diagnostics remain additive and require the next CI run to classify the original crash.
2026-10-06 10:52:35 +08:00
Tianyi CuiandChinesezjc 9bc34fa962 ci: reuse reviewed coverage fork exit diagnostics
Repeated native Windows coverage runs stopped a Vitest fork while a JSONL
migration suite was unfinished. Vitest's generic unexpected-exit error
discarded the process exit code and signal, preventing classification of
the failure despite identifying the missing test file from the inventory.

Reuse the public ForksPoolWorker diagnostic implementation and protocol
fixtures from independently reviewed PR #4388, pinned at
77e215ff76711ec75ed8aa08aa5b414780e539ae. The runtime helper is unchanged.
It reports PID, project, worker identity, outstanding file request, code,
and signal before stock Vitest reports the original failure. It clears
ownership only on the typed testfileFinished response, suppresses expected
stop, and leaves cancellation and failure handling with the original pool.

Wire that existing pool into generated coverage partition configs. Keep
the original worker counts, partition scheduling, test timeouts, coverage
thresholds, and failure verdicts. No environment, raw argv, or test object
is serialized. This commit adds diagnostic evidence; it does not claim to
repair the still-unidentified Windows crash. PR #4388 remains the separate
reviewable owner; no duplicate diagnostic framework or PR is introduced.

Adapt the copied fixtures to the current no-new-unknown-assertions rule:
declare the private preload exit function, validate consumed logger fields
with the public logger type, and assign matcher/rejection values to typed
unknown locals without assertions. Add a concise bilingual testing note.

Validation:
- Diagnostic suite: 10 passed, including a real configured Vitest fork
  exiting 23, stock-pool negative control, successful silent shutdown,
  unexpected exit 0, early exit, independent forks, and signal metadata.
- Coverage coordinator suite: 51 passed.
- Targeted lint and focused strict TypeScript check passed.
- pnpm exec tsc -b tsconfig.host.json passed.
- verify-no-unknown-casts passed; 1430 existing assertions unchanged.
- doc-sync passed 40 gates; the two initially failing gates were repaired
  and rerun successfully: doc-typecheck and verify-doc-budgets.
- Translation pairing and git diff --check passed.

Refs #4387, #4388, #4394.

Co-authored-by: Chinesezjc <[email protected]>
2026-10-06 10:17:44 +08:00
Tianyi Cui b730d6c0c9 fix(subagent): let parked inboxes stop delaying host completion
Interrupting a local child can preserve unclaimed steering while leaving the Agent idle. Activation residency intentionally continues in that state, but completion barriers joined its result forever. The real SDK server reproduced the hang for both direct children and a nested parked leaf.

Join progressing work and cleanup while retaining parked inboxes and their activation results. Observe local activity and maintenance, external execution, unpublished ownership holds, and materialization; rescan after changes. Recheck resumed Agents after concurrent idle observations. Inbox insertion and ownership publication wake pending observations, so late non-waking injection cannot strand a result wait. Existing descendants remain responsible for their own work; no second state store or polling timer is introduced.

Document that persistent SDK/ACP hosts keep these children available for later wake-up, while headless shutdown discards unclaimed input. Simplify the final settlement recheck to retry changed readiness uniformly. Update generated API and event references from their sources.

Validation: real SDK negative controls fail at both depths on the prior manager with clean teardown; 545 tests pass across 27 files. Manager, local activation, and headless runner each reach 100% statements/branches/functions/lines. Six deterministic races cover revival, preparation publication/rollback, flush-time injection, and late children. doc-sync 42/42, targeted build, lint, and whitespace checks pass.
2026-10-06 03:07:24 +08:00
Tianyi Cui 9b1fc3be05 docs(subagent-acp): refresh the generated configuration source link
Removing the duplicate ACP directory helpers moved its Config declaration by one line. The generated English and Chinese catalogs still referenced the old line, so the exact-source freshness gate rejected the otherwise unchanged configuration.

Regenerate only the affected source links. No configuration fields, defaults, examples, or translated prose change.

Validation: pnpm run gen-config-catalog produced exactly these two link updates; the combined doc-sync run verifies freshness.
2026-10-06 03:06:34 +08:00
Tianyi Cui b023791481 fix(headless): retain live failures without a later terminal
A child completion can wake the parent after its first completed turn. If
that summary cannot append turn/start or turn/end, AgentLoop reports an
agent/error and contains the rejected driver. Whole-agent idleness then
resolves, but the headless runner previously reused the older completed
terminal and exited successfully, sometimes printing the older answer.

Retain failures from the exact owned Agent with the current Session log
offset. Only a later terminal committed by the same Session clears that
failure. After work and persistence drain, fail the run before emitting a
final answer when no such terminal exists. Dispose both observers with
the run. Ordinary durable error outcomes and later successful recovery
continue to use the log's final terminal.

Add real AgentLoop regressions for missing summary start/end commits in
plain and JSON output, ordinary hook failures with and without recovery,
recovery after persistence failures, and unrelated Agent errors. Update
the bilingual exit contract and generated event consumer matrix.

Validation: 106 headless package tests; 100% runner statements, branches,
functions, and lines; 9 focused terminal-failure tests after the typed
append wrapper correction; package TypeScript build; full lint including
host build; 21 quick documentation checks; 42 doc-sync checks; diff check.
2026-10-06 02:53:04 +08:00
Tianyi Cui 1dbbc59d3e fix(subagent): retain local failures without a durable ending
Local activation results were derived only from committed Session events.
When the first turn/end append failed, no ending existed and the result
defaulted to completed. When the first turn/start append failed, the initial
message remained unclaimed and kept the idle activation resident forever.
Both paths emitted agent/error but had no durable terminal to project.

Retain the log offset of the latest exact-Agent live failure on the local
activation. Clear it only when the same Session commits a turn/end at or
after that offset, so a later recovery can supply its own outcome and a
reentrant older terminal notification cannot erase a newer failure. The
child scope owns both observers and removes them with its Agent handle.

Capture error while that live failure remains. Let the failed local
activation settle despite its own unclaimed inbox, while preserving the
existing requirement to wait for owned descendants. Wake its settlement
observer when a live failure changes readiness. No public API, raw Agent
idle semantics, or descendant teardown policy changes.

Add regressions through real local activation creation for first start/end
append failures, recovery by later durable endings, exact-Agent isolation,
and an error emitted reentrantly during an older terminal notification.
Update the bilingual package contract and generated event consumer graph.

Validation:
- Both first-append regressions reproduced before the fix: turn/start
  remained pending; turn/end returned completed instead of error.
- Six focused behavior cases passed after the fix.
- 423 subagent package tests passed; activation.ts and manager.ts reached
  100% statements, branches, functions, and lines under scoped coverage.
- pnpm exec tsc -b packages/subagent/subagent/tsconfig.json passed.
- Focused source/test oxlint and git diff --check passed.
- doc-sync passed 41 gates; its sole stale event-graph failure was corrected
  with gen-doc-graphs, then verify-doc-graphs passed for all seven graphs.
- README translation pairing regenerated and passed the doc-sync check.
2026-10-06 02:46:21 +08:00
Tianyi Cui 1595e34656 docs(subagent): distinguish execution results from cleanup failure signals
The subsystem result paragraph still said that a parent log records the
final cleanup-failure status and that the result had already been returned.
The manager instead captures the execution result, performs cleanup, sends
that preserved result in the parent notice, and then resolves the public
result. Cleanup failure separately rejects dispose and marks the live
subagent/end event as error.

Correct the bilingual paragraph to name those actual recipients and timing.
Do not imply that the successful execution notice becomes a failed notice,
or change the runtime's independent execution/cleanup outcomes.

Validation: the updated bilingual pair passes. The statement is checked
against finishDisposal/notifySettlement and the existing cleanup-failure
regressions; final documentation gates run before publication.
2026-10-06 02:06:05 +08:00
Tianyi Cui cbf618845a fix(acp): bind cancellation to the interrupted root activity
Cancelling during the prompt's initial whenIdle() wait could retain its
slot indefinitely. If a child delivered a result while the aborted root
was unwinding, Agent.whenIdle() followed the replacement driver and waited
for the newly autonomous summary. The earlier child-wait recheck could
not help because settlement had not yet reached that child wait.

This is an inherited latent issue: the pre-PR ACP bridge also awaited the
same replacement-following whenIdle() after cancellation. Existing
continuable spawn children could expose it; the unified asynchronous fork
default makes the ordering possible for fork delegations as well.

Give the existing InflightPrompt one cancellation-completion promise,
replacing the local cancellation wake-up and its listener. The private
admission AbortSignal is the cancellation flag instead of duplicated
boolean state. The exact root's emitted status identifies the interrupted
activity's retirement and synchronously adopts that output queue. Later
root work and later output cannot replace the first captured completion.

Record whether cancellation began at public idle. Maintenance has that
public status too, so its next running transition establishes release of
work behind maintenance; the ordinary whenIdle promise provides a
fallback when no transition occurs or plugin disposal detaches observers.
Both observations settle the same promise. Settlement races that promise
against initial idle and child waits, then waits only for the interrupted
activity/output on the cancellation path. No future work is re-cancelled,
child admission remains open, and session close keeps its separate full
quiescence and descendant teardown.

Add two deterministic real-Agent regressions. One gates aborted model
cleanup, previously queued image delivery, and the later autonomous
summary independently. The other gates cancelled maintenance cleanup and
the later summary. Both failed before this fix; both now wait for old work
and output, return cancelled while later work remains gated, and permit a
subsequent ACP prompt to execute another real local delegation. Existing
plugin-disposal tests also verify the idle fallback after observer cutoff.
Update the bilingual ACP semantics and generated event-consumer matrix.

Validation:
- Both focused regressions reproduced pending cancellation before the fix.
- pnpm exec vitest run packages/acp/acp/tests --coverage --coverage.include=packages/acp/acp/src/session.ts --coverage.include=packages/acp/acp/src/index.ts --coverage.reportsDirectory=/tmp/pr4394-acp-owned-cancel-89ec33e5788-consumer-v2
  (150 passed; both changed source files have 100% statements, branches,
  functions, and lines)
- pnpm exec tsc -b packages/acp/acp/tsconfig.json
- pnpm exec tsdown --config-loader native --env.DSH_BUILD_FACE host --filter '@deepseek-ai/dsh-acp'
- DSH_EXAMPLE_MODE=lib pnpm run test:e2e packages/subagent/subagent-dsh-sdk/tests/nested-delegation.e2e.ts -t '^external tasks.*acp'
  (3 passed, 3 unselected)
- Focused lint, named translation pairing, generated graph verification,
  and git diff --check passed.

Independent ACP rereview found no remaining issue, passed seven focused
turn/disposal cases, and verified a prepended idle listener can start a
new hanging root before ACP handles the old idle event without retaining
the cancelled prompt.
2026-10-06 01:55:26 +08:00
Tianyi Cui cfad6ba882 fix(worktrees): isolate inherited attributes and clarify Git content 2026-10-06 01:39:48 +08:00
Tianyi Cui 2b6040c40c fix(worktrees): suppress configured checkout filters 2026-10-06 01:39:48 +08:00
Tianyi Cui 2481ad8eb6 docs(worktree): keep the capability seam translation paired 2026-10-06 01:39:47 +08:00
Tianyi Cui a1363f7f47 fix(worktree): offer GUI opt-in through official plugins 2026-10-06 01:39:47 +08:00
Tianyi Cui 171cf5d70f fix(experimental): align worktree fixtures and catalogs with current runtime 2026-10-06 01:39:47 +08:00
Tianyi Cui d26fe1ab4e fix(experimental): address worktree review findings 2026-10-06 01:39:46 +08:00
Tianyi Cui c67a2d6fdf feat(experimental): create and enter retained Git worktrees 2026-10-06 01:39:46 +08:00
Tianyi Cui 43928bf03f refactor(workspace): remove obsolete mutation path parser 2026-10-06 01:31:52 +08:00
Tianyi Cui f5b7fdcadb docs(system-prompt): align dynamic context evaluation contract 2026-10-06 01:31:52 +08:00
Tianyi Cui 96c4a89a72 docs(system-prompt): sync admission context API references 2026-10-06 01:31:52 +08:00
Tianyi Cui 9c679b21f4 fix(agent-loop): refresh provider context at actual request admission 2026-10-06 01:31:52 +08:00
Tianyi Cui 2489bbba16 test(session): acknowledge metadata and replay corrected directory state 2026-10-06 01:31:52 +08:00
Tianyi Cui ffd791a110 fix(session): use committed directories in hooks and consumers 2026-10-06 01:31:51 +08:00
Tianyi Cui df655fd11e fix(agent-loop): restore runtime context after compaction before request admission 2026-10-06 01:31:51 +08:00
Tianyi Cui caef1d5d5f docs(upgrade): explain current-directory migration 2026-10-06 01:31:51 +08:00
Tianyi Cui 0c6b1ef7bb fix(session): port directory consumers and fixtures to current runtime 2026-10-06 01:31:51 +08:00
Tianyi Cui 3f35ca7b5b test(session): align fixtures with awaited agent creation 2026-10-06 01:27:55 +08:00