Commit Graph

2045 Commits

Author SHA1 Message Date
Tianyi Cui
f21977383b Merge remote-tracking branch 'origin/master' into worktree/pr2177-export-fixes-20260811
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/subsystems/persistence.i18n.yaml
#	packages/session/session-persistence-jsonl/README.i18n.yaml
#	packages/session/session-persistence/README.i18n.yaml
2026-08-11 16:18:28 +08:00
Tianyi Cui
af8a8e1384 Merge remote-tracking branch 'origin/master' into worktree/pr2177-export-fixes-20260811
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-08-11 16:11:30 +08:00
Tianyi Cui
8a2a22db84 fix(apiproxy): configure session export compression
Session-log ZIP entries always used DEFLATE level 6 even though compression level is a deployment tradeoff: CPU-constrained hosts may prefer low latency while bandwidth-constrained hosts may prefer smaller archives. A hardcoded level also violated the repository rule that deployment-varying plugin choices live in validated Config.

Add sessionExportCompressionLevel to ApiProxyService.Config as an integer 0-9 with default 6, resolve the same default once for direct createApiProxy callers, and pass the required level into the streaming module. Tests prove schema defaulting and rejection as well as a level-0 versus level-9 archive-size difference with identical extracted content. The generated config catalog, bilingual gateway README, and feature note document the knob and its tradeoff.
2026-08-11 16:11:09 +08:00
Tianyi Cui
1419671f3f fix(session-export): wait for response pull capacity
The ZIP loop checked desiredSize only after a push and responded to an overfull queue with setTimeout(0). A timer turn does not mean the consumer drained anything, so a slow or disconnected client still allowed the producer to enqueue the complete compressed archive while later artifact and attachment reads ran eagerly.

Give the ReadableStream a 64 KiB byte queuing strategy and block the single producer on a pull-released capacity gate whenever desiredSize is non-positive. Cancellation wakes that gate through the existing producer signal; synchronous fflate output is therefore bounded to the queue high-water mark plus one input push. A regression test exhausts timer turns without consuming and proves the next media entry remains unread until response pulling begins, and the bilingual contracts now describe the real bound.
2026-08-11 16:09:50 +08:00
Tianyi Cui
192840e198 fix(session-export): propagate download cancellation
Only the root raw-artifact read received the request signal. Lineage discovery and descendant reads could continue after disconnect, response-body cancellation did not stop the producer, and the root error boundary converted an abort rejection into an ordinary HTTP 500.

Combine request and response-consumer cancellation into the ZIP producer signal, forward it through every cancellable read, check it around the attachment seam, and terminate fflate exactly once when production stops. The pre-stream boundary now rethrows the original abort instead of translating it. Regression tests cover signal propagation, exact cancellation identity at the HTTP boundary, and a reader cancellation interrupting an in-flight descendant read; the bilingual host contract records these lifecycle semantics.
2026-08-11 16:09:27 +08:00
Tianyi Cui
52f0b09e76 fix(session-export): flush live logs before raw reads
The exporter read persistence artifacts directly even when the requested root or a descendant was still live. Buffered session events could therefore be omitted from a successful download, so the advertised verbatim-artifact guarantee described storage accurately but captured an arbitrarily stale durability boundary.

Resolve each id against SessionStore and cross its authoritative flush barrier immediately before readRaw. Cold sessions remain a no-op, while live roots and descendants are made durable independently; this intentionally yields a per-session read-boundary snapshot rather than claiming an atomic lineage snapshot. A host-path regression test proves both artifacts change from stale to durable only through flush, and the bilingual host contract and Agent Note document the boundary.
2026-08-11 16:08:47 +08:00
Turtle
0c708cb10d refactor: replace overloaded surface terminology 2026-08-11 15:23:05 +08:00
Tianyi Cui
e58cc13de4 fix(session-export): distinguish unsupported raw artifacts
SessionPersistence.readRaw previously used undefined for two unrelated states: a supported backend could not find the requested session, or the backend had no per-session artifact concept at all. The export endpoint consequently reported an existing SQLite-backed session as HTTP 404, which falsely diagnosed storage capability as session absence.

Make raw-artifact support an explicit backend capability. Unsupported backends now fail their inherited readRaw path loudly and the host answers 501 before reading, while undefined retains the single meaning of an absent artifact on a supporting backend. First-party backends, test providers, generated API catalogs, bilingual persistence docs, and export error contracts now state that distinction; focused tests cover both the 501 and the inherited rejection.
2026-08-11 15:04:35 +08:00
Hypatia May
6e94bfd366 Merge branch 'feat/subagent-settlement-delivery' into feat/subagent-list-agents-vocabulary 2026-08-11 14:59:18 +08:00
Hypatia May
9f4159d0be Merge branch 'feat/subagent-report-semantics' into feat/subagent-settlement-delivery 2026-08-11 14:59:00 +08:00
Hypatia May
3f9c7077f9 Merge commit '5e1b3dd6536cbf4796164e7676e13c68300bb52d' into feat/subagent-report-semantics 2026-08-11 14:58:58 +08:00
Tianyi Cui
7f14c7e165 refactor(web): hand session exports to browser downloads
The export endpoint already streams a ZIP response, but the web client immediately converted that response into a Blob. That forced the complete archive through JavaScript memory before a download could start and coupled transport, buffering, object-URL lifetime, and filename handling to the trajectory view.

Navigate a temporary download anchor directly to the export endpoint instead. The browser now owns streaming and HTTP failure presentation, while a standalone delivery module owns URL construction and filename sanitization. Focused tests cover the handoff, rejection behavior, and the assembled session view; the package README and feature note record the new ownership boundary.
2026-08-11 14:57:38 +08:00
Hypatia May
6a604aaa85 Merge branch 'feat/subagent-settlement-delivery' into feat/subagent-list-agents-vocabulary 2026-08-11 14:53:11 +08:00
Hypatia May
ef8637f864 Merge branch 'feat/subagent-report-semantics' into feat/subagent-settlement-delivery
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
2026-08-11 14:52:49 +08:00
Hypatia May
fafb10eecb Merge commit '38d82c497765ce0344800e3d5af9f1ee073f4bb5' into feat/subagent-report-semantics 2026-08-11 14:50:35 +08:00
Hypatia May
6c4ed5e036 test(snapshot): refresh pins after master merge 2026-08-11 14:45:14 +08:00
Tianyi Cui
a8db48429a Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup 2026-08-11 14:43:23 +08:00
Hypatia May
7b8635d47d test(snapshot): refresh pins after master merge 2026-08-11 14:41:11 +08:00
Hypatia May
8d77761427 Merge commit '6768cbccfd2c8157f215cf7231d9c012b1b2b2d2' into feat/subagent-report-semantics 2026-08-11 14:34:21 +08:00
Yichen Jiang
c345d70f82 Merge remote-tracking branch 'origin/master' into worktree/preset-plane-fallout-p1
Only `docs/module-graph.*` conflicted; generated, so taken from master and
regenerated. `api-proxy.ts` auto-merged — this branch's history read
(`historySourceFor` / `presenterScopeFor` / `historyCutOf`, in that order)
is intact.

Hook bypassed as before: the staged-pairing check hands an archived note path
to `verify-translation-pairing`. The full-corpus gate passes.
2026-08-11 14:32:59 +08:00
Tianyi Cui
a3ca7f09b2 Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup
# Conflicts:
#	packages/sandbox/sandbox-windows-acl/package.json
2026-08-11 14:32:26 +08:00
Yichen Jiang
b06969b56f Merge remote-tracking branch 'origin/master' into worktree/preset-plane-fallout-p1
Only `docs/module-graph.*` conflicted, from master's new
`@deepseek-ai/dsh-message-feedback` package; generated, so taken from master
and regenerated.

Hook bypassed as before: the staged-pairing check hands an archived note path
to `verify-translation-pairing`. The full-corpus gate passes.
2026-08-11 14:13:32 +08:00
Hypatia May
66cdba7c6c Merge branch 'feat/subagent-settlement-delivery' into feat/subagent-list-agents-vocabulary
# 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/subagent-depth-two-rejection/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.2.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
#	examples/headless-agent/tests/snapshots/compaction-recovery/session.jsonl
#	examples/headless-agent/tests/snapshots/pty-tools/session.jsonl
2026-08-11 13:58:56 +08:00
Hypatia May
9a8a2fc206 Merge branch 'feat/subagent-report-semantics' into feat/subagent-settlement-delivery
# 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/subagent-depth-two-rejection/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.2.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
#	examples/headless-agent/tests/snapshots/compaction-recovery/session.jsonl
#	examples/headless-agent/tests/snapshots/pty-tools/session.jsonl
2026-08-11 13:55:11 +08:00
Hypatia May
d4c125ceee Merge commit '580051aeb594e683b6fe088b04d9bffe4c4b5b62' into feat/subagent-report-semantics 2026-08-11 13:50:44 +08:00
_Kerman
c8a201bebd Merge remote-tracking branch 'origin/master' into feat/web-session-log-export 2026-08-11 13:46:46 +08:00
hypatiamay
c76570a3b8 Merge pull request #2138 from deepseek-harness/feat/parallel-subagent-calls
feat(subagent): sibling delegations are concurrency-safe
2026-08-11 13:24:43 +08:00
Hypatia May
48dd924eda Merge branch 'feat/subagent-settlement-delivery' into feat/subagent-list-agents-vocabulary 2026-08-11 13:02:40 +08:00
Hypatia May
9340604ea5 Merge branch 'feat/subagent-report-semantics' into feat/subagent-settlement-delivery 2026-08-11 13:02:22 +08:00
Terra
346bfd23bf Merge pull request #1866 from deepseek-harness/feature/workspace-picker-composer
feat(web): open workspace picker from the composer
2026-08-11 13:01:38 +08:00
Hypatia May
dbcbdfa9ce Merge commit '7baf2c33efb98eeea690c5ac58579c95dc52edd1' into feat/subagent-report-semantics 2026-08-11 13:01:29 +08:00
_Kerman
1b8175ddfd Merge remote-tracking branch 'origin/master' into feat/web-session-log-export 2026-08-11 12:59:05 +08:00
Yichen Jiang
cc1cf12cb6 Merge remote-tracking branch 'origin/master' into worktree/preset-plane-fallout-p1
Generated docs (`module-graph`, `event-producer-consumer`) taken from master
and regenerated. The `cordis-inspect-jsdoc` golden likewise: master's copy is
the base, and this branch's `presentAs` per-scope rewording is re-applied on
top, since `cordis_inspect` renders that JSDoc into model-visible output.

Hook bypassed as before: the staged-pairing check hands an archived note path
to `verify-translation-pairing`. The full-corpus gate passes.
2026-08-11 12:57:58 +08:00
_Kerman
4724a69476 Merge remote-tracking branch 'origin/master' into feat/web-session-log-export 2026-08-11 12:54:33 +08:00
_Kerman
118b1a8787 Merge remote-tracking branch 'origin/master' into feat/web-session-log-export
# Conflicts:
#	docs/subsystems/persistence.i18n.yaml
#	docs/subsystems/persistence.md
#	docs/subsystems/persistence.zh.md
#	packages/client/ui-trajectory/README.i18n.yaml
#	packages/client/ui-trajectory/README.md
#	packages/client/ui-trajectory/README.zh.md
#	packages/client/ui-trajectory/package.json
#	packages/client/ui-trajectory/src/client/TrajectoryView.tsx
#	packages/client/ui-trajectory/src/client/index.ts
#	packages/client/ui-trajectory/tests/client-bundle.spec.ts
#	packages/client/ui-trajectory/tests/views.spec.tsx
#	packages/host/apiproxy/package.json
#	pnpm-lock.yaml
2026-08-11 12:42:53 +08:00
Yichen Jiang
2895113970 Merge remote-tracking branch 'origin/master' into worktree/web-background-tasks-display-258f7e 2026-08-11 12:42:30 +08:00
Hypatia May
a26d03960a feat(subagent): sibling delegations are concurrency-safe
One assistant message carrying several subagent calls now overlaps them
under the rolling pool (maxParallelToolCalls) instead of serializing each
foreground delegation behind an exclusive barrier; results still commit
in model order.

tool-subagent declares isConcurrencySafe: () => true for every call form:
children work in their own sessions, a run never mutates the parent
session, and sibling workspace coordination already belongs to the model
for background, continuable, and workflow children. The former
serial-execution pin flips to a parallel pin plus a gated genuine-overlap
test, and the authored subagent-parallel snapshot pins the assembled
transcript (tool/call, tool/call, tool/result, tool/result) with
interchangeable twin children, which replay race-free under the existing
first-call binding and createdAt harvest ordering.

The provider seam now requires concurrent starts and continuable
preparations for distinct children to isolate operation-local state,
cancellation, settlement, and cleanup; a continuable gate test proves a
cancelled preparation leaves no Agent or durable Session while its
sibling persists independently.

Closes deepseek-harness/deepseek-harness#1489
2026-08-11 12:41:24 +08:00
Hypatia May
567fcadba0 fix(subagent): report resumable children as ready
list_agents called a storage-only continuable child 'complete', inviting
parents to poll it for a result that will never appear there. Rename the
status to 'ready' — resumable, not terminal — and rewrite the tool
description to say a parent is told when a child finishes, so listing is
for recall, not polling.
2026-08-11 12:38:57 +08:00
Hypatia May
85dd22fd4f feat(subagent): deliver continuable child settlement to parents
A continuable child that stopped without reporting — an error, a token
ceiling, cancellation, teardown — left its parent nothing to act on.
The continuation manager now delivers an unconditional settlement
notice to the durable direct parent before releasing ownership, folding
consumed work (foldConsumedWork supersedes findLastMessageTurnEnd) so a
claimed-but-unrun prompt reads as aborted rather than completed, waking
an idle parent, steering a busy one, and never waking a closing tree.
2026-08-11 12:31:49 +08:00
creatixchu
10d9fd21f2 Merge remote-tracking branch 'origin/master' into feat/read-image-context 2026-08-11 12:08:33 +08:00
Turtle
a9852a2b5b Merge pull request #2152 from deepseek-harness/codex/remove-source-installer
cleanup: simplify source execution around pnpm dsh
2026-08-11 12:07:29 +08:00
Yichen Jiang
34b28f757d Merge remote-tracking branch 'origin/master' into worktree/web-background-tasks-display-258f7e 2026-08-11 11:57:40 +08:00
Yichen Jiang
1a1c81f309 Merge remote-tracking branch 'origin/master' into worktree/web-background-tasks-display-258f7e
# Conflicts:
#	docs/subsystems/tasks.i18n.yaml
#	docs/subsystems/tasks.md
#	docs/subsystems/tasks.zh.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/README.md
#	packages/host/apiproxy/README.zh.md
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/tasks/tasks-local/src/index.ts
#	packages/tasks/tasks/README.i18n.yaml
#	packages/tasks/tasks/README.md
#	packages/tasks/tasks/README.zh.md
#	packages/tasks/tasks/src/index.ts
2026-08-11 11:57:33 +08:00
creatixchu
2a755f2863 Merge remote-tracking branch 'origin/master' into feat/read-image-context 2026-08-11 11:54:22 +08:00
NI0317
53f3f4b14b Merge remote-tracking branch 'origin/master' into feature/workspace-picker-composer 2026-08-11 11:53:49 +08:00
Hypatia May
76cf6cbd0b feat(subagent): make final reports the continuable return contract
A continuable child could finish without giving its parent a usable
result: the report tool was described as optional and its default
delivery stayed quiet. Install the child-scoped report obligation (tool
description plus the tool:report prompt section), default reportDelivery
to wakeup, bind shipped subagent_fork delegations to one-shot so fork
keeps its prefix reuse, and extend the ACP snapshot harness to pin child
system prompts alongside child tool schemas.
2026-08-11 11:50:39 +08:00
Tianyi Cui
6d87182099 Merge latest master into feat/mcp-auto-reconnect
Retarget PR #2187 from master 8a763b34645fc9371c0c21595ac65438d603d9bf to c757901957abdfd87f1cd7b11ecab16f3050e65d so the reconnect changes are evaluated against the current release and package metadata.

Resolve the mcp-client package.json conflict by preserving master's publishable-package metadata and workspace peer ranges while retaining the PR's direct @deepseek-ai/dsh-timeout peer and development dependency. The reconnect implementation therefore keeps its explicit runtime contract without discarding current-master release configuration.
2026-08-11 11:24:07 +08:00
Turtle
ee9465e4b3 build before source dsh launch 2026-08-11 11:22:08 +08:00
Turtle
34abf69730 cleanup: remove managed source installer 2026-08-11 11:22:08 +08:00
creatixchu
a82253bb36 Merge remote-tracking branch 'origin/master' into feat/read-image-context 2026-08-11 11:20:47 +08:00