Commit Graph
11600 Commits
Author SHA1 Message Date
Tianyi Cui 32a9a0ac61 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 19:10:26 +08:00
Tianyi Cui 274c3c13c4 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 19:06:02 +08:00
pku-xht 7957c0f491 Merge pull request #2179 from deepseek-harness/codex/workflow-runs-chat-node-f6
feat(workflow): show durable run records in Chat
2026-08-11 19:05:44 +08:00
Tianyi Cui 3f01ff8291 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 19:05:13 +08:00
Turtle 35b4214e4e Merge pull request #2260 from deepseek-harness/codex/add-contributing-guide
docs: add contribution guide
2026-08-11 19:04:42 +08:00
pku-xht 53ee85308e Merge commit '001af891c33ef1466caa64539be0afa5fe7d2191' into codex/workflow-runs-chat-node-f6 2026-08-11 18:56:12 +08:00
Tianyi Cui eb83e0c615 Merge pull request #2258 from deepseek-harness/worktree/pr2177-export-fixes-20260811
fix(web): harden session-log downloads
2026-08-11 18:43:05 +08:00
pku-xht 8e3418e925 test(workflow): avoid unbound view builder reference 2026-08-11 18:41:10 +08:00
pku-xht fba82eb87a Merge commit 'ee223e65457ca717a2596b33afcaf604c94ba774' into codex/workflow-runs-chat-node-f6 2026-08-11 18:29:19 +08:00
Tianyi Cui d29a8261e0 fix(vendor): realign the rescope log anchor
PR #2239 removed the old in-memory activation entry and renumbered the local-modification log so Cordis source publication is item 16 and the rescope is item 17. It updated vendor/README.md but left this exact edit expecting the rescope before an item 18, so the current master post-state matched neither side and pnpm run hygiene failed.

Treat item 16 as the pre-rescope anchor and append item 17 in the replacement. The forward edit now produces the checked-in ordering, while reversing it removes only the rescope entry and preserves the independent Cordis publication note.

Verified with the rescope-vendor unit suite, pnpm run rescope-vendor:check, pnpm run hygiene, and git diff --cached --check.
2026-08-11 18:24:17 +08:00
pku-xht 2e2ca4f5bb Merge commit 'e03b51d7db18bffe4b1988a8a5d35e01c18fc2c1' into codex/workflow-runs-chat-node-f6 2026-08-11 18:20:37 +08:00
Tianyi Cui 7df8bad6a0 merge(master): checkpoint post-review base movement
Master advanced from e03b51d7db to ee223e6545 after bot-thread resolution and the PR-body policy fix. Merge-forward preserves the reviewed issue commits and explicit checkpoint history instead of rewriting the branch.

The only textual conflict was the generated translation-pairing record for docs/config-catalog. Regenerate the English catalog from the combined source tree and re-record the bilingual hashes so current-master command-line changes and this PR's compression configuration coexist.

Verified with pnpm run verify-config-catalog, pnpm run verify-translation-pairing docs/config-catalog.md, and git diff --cached --check.
2026-08-11 18:19:35 +08:00
Turtle 8e1c1faaad Merge pull request #2239 from deepseek-harness/refactor/trim-cmdline-seams
refactor(cmdline): trim the command-line seams to existing interfaces
2026-08-11 18:17:46 +08:00
Turtle 8a6c3736e4 docs: separate contribution links from license 2026-08-11 18:16:29 +08:00
Tianyi Cui 5931afaf87 docs(session-persistence): bind raw capability to its reader
The abstract capability flag forces every backend to state whether it owns per-session raw artifacts, but TypeScript cannot express that a true flag requires replacing the concrete unsupported default. Without an implementer-facing obligation, a backend could advertise support and then fail with a contradictory unsupported diagnostic on first use.\n\nDocument the required pairing at the capability declaration. Keep readRaw concrete so backends that correctly report false inherit one fail-loud implementation instead of duplicating rejection code.
2026-08-11 18:10:28 +08:00
pku-xht b38e02462b Merge commit '5427cbcc19cfd1ce9f3af1ae22207852cc5740fa' into codex/workflow-runs-chat-node-f6 2026-08-11 18:09:43 +08:00
Turtle a11081ac84 test: refresh contribution pairing snapshot 2026-08-11 18:09:16 +08:00
Turtle e5b8b36471 test(e2e): disable the always-on client-hmr row in the preset boot
The suite disables the webserver and browser roster rows; the reload
chain waits on both, so the activation audit failed the boot.
2026-08-11 18:01:25 +08:00
Turtle 149a5674be fix(cli): contain app-exit races in watcher setup; sync watch docs
A fast one-shot can request exit through ctx.appExit while the launcher
still awaits its watcher setup; the failure guard now also swallows the
resulting rejections when the tree is no longer live, not only on
signal shutdown. Sync the app-boot README and headless bundle comment
with unconditional patch watching, and bring the two Agent Notes still
asserting the --dev row append and the headlessIo slot current.
2026-08-11 18:01:25 +08:00
Turtle 341051603f refactor(web): remove --dev; mount the reload chain unconditionally
The client-hmr row joins the web bundle as an ordinary always-on roster
row: without a rebuild watcher rewriting client bundles it polls
unchanged files and stays idle. This deletes the --dev flag, the web
runtime's mode config, the mode-forked prompt contract, the DSH_WEB_MODE
bash variable, and the post-settlement row-creation machinery the
conditional row required. dsh web + pnpm run dev:web remains the
development loop.
2026-08-11 18:01:25 +08:00
Turtle fb301ace65 fix(web-app): defer to a user-configured client-hmr row
The whole-tree name scan (entries() recurses into subtrees) already
skips creation when any patch layer carries the row, including a
disabled one; make that contract explicit in the comment, pin it with a
test, and record it in the Agent Note.
2026-08-11 18:00:15 +08:00
Turtle c598989d08 refactor(cmdline): trim the command-line seams to existing interfaces
The web runtime creates its dev-mode client-hmr row in the root tree
after Loader settlement with plain loader.create, deleting the vendored
Entry.enableRuntime state machine and dsh-cmdline's enableRow export.
Include declares the existing EntryGroup.key tree-carrier marker instead
of the EntryConfigResolver protocol (its own path stays literal; nothing
used a dynamic path). The launcher recognizes no app row: SIGTERM exits
0 on every surface, every boot watches its user patch layers, and the
headless runner exits through ctx.appExit, deleting ctx.headlessIo. Also
restores the vendor README rescope entry to the position the
rescope-vendor exact-edit anchor requires, fixing the master hygiene
regression.
2026-08-11 18:00:15 +08:00
Tianyi Cui b52ddb2887 fix(apiproxy): omit an unresolved compression option
ApiProxyDefaults uses an exact optional property, so passing config.sessionExportCompressionLevel directly made the service object carry an explicit undefined that is not assignable to the resolved request shape. The full host build caught this distinction after the redundant fallback was removed.\n\nConditionally omit the property when Cordis has not supplied a value. Direct createApiProxy callers still receive the implementation-owned default, while configured plugin values pass through without introducing another defaulting site.
2026-08-11 17:59:07 +08:00
Turtle 2f4bf08798 docs: add Chinese contribution guide 2026-08-11 17:55:49 +08:00
Turtle 00c4664370 test: refresh translation prompt snapshot 2026-08-11 17:55:49 +08:00
Turtle 59e98ca8dd docs: add contribution guide 2026-08-11 17:55:49 +08:00
Tianyi Cui 544a17f604 Merge origin/master into worktree/pr2177-export-fixes-20260811
Master advanced again after the first merge-forward checkpoint, adding the web human-transcript command-input change. Preserve the earlier checkpoint and merge the new exact e03b51d7 base as a separate commit instead of rebasing or rewriting this merge-heavy stack.\n\nThe incremental merge is conflict-free and keeps the session-export review fixes based on the repository's current integration state.
2026-08-11 17:53:13 +08:00
Tianyi Cui c10d74ba95 fix(apiproxy): cancel attachment reads during export
Response-consumer cancellation already stopped lineage reads, persistence reads, and ZIP production, but the final attachment phase called readImage without the producer signal. A slow or stalled attachment backend could therefore keep working after the browser abandoned the download and prevent the producer from settling.\n\nExtend the attachment read seam with optional cancellation, forward it through the local backend into Node's filesystem read, and preserve the abort reason rather than wrapping it as a storage failure. The exporter now passes its combined request/consumer signal to every attachment read.\n\nCover both ownership boundaries: the local-store test proves filesystem forwarding and cancellation identity, while the assembled export test cancels a reader during a pending attachment provider call. Regenerate the Cordis API catalog and paired documentation so implementers can rely on the new contract.
2026-08-11 17:52:24 +08:00
Tianyi Cui 5e067fa7fe docs(apiproxy): state the export queue bound exactly
The response stream uses a fixed 64 KiB byte high-water mark; no deployment setting controls it. Calling that queue configured incorrectly suggested another tuning surface and obscured the concrete memory bound.\n\nName the fixed capacity directly while preserving the separate bound of one synchronous fflate push beyond the queued bytes.
2026-08-11 17:47:29 +08:00
Tianyi Cui 8d63728584 fix(apiproxy): name root export preparation failures
The pre-stream error boundary covers both the live-session flush barrier and the persistence read, but its response attributed every failure to reading storage. A flush failure therefore produced a misleading diagnostic even though the response correctly withheld private backend details.\n\nUse preparation as the shared operation name and cover the flush-failure path explicitly. Both preparation stages now retain one stable, path-safe HTTP 500 without pretending to identify the failing stage.
2026-08-11 17:47:13 +08:00
Tianyi Cui 5703ae356e refactor(apiproxy): resolve export compression once
The Cordis schema supplies the normal plugin default, while createApiProxy also owns the fallback required by direct programmatic callers. Repeating the same nullish fallback in ApiProxyService created a third defaulting site without adding a distinct invariant.\n\nPass the validated config value through unchanged and leave createApiProxy as the single implementation boundary that turns an optional request value into the required compression specification.
2026-08-11 17:46:40 +08:00
Tianyi Cui d1aae98895 docs(connection): describe native export handoff accurately
The fixture comment still said the Trajectory action used window.fetch after the implementation moved to a temporary download anchor. That wording implied client-side response handling and buffering which the browser-download design deliberately avoids.\n\nDescribe the actual native download-manager handoff while retaining the important contract: the fixture download stub only satisfies the host type and is unreachable through fixture dispatch.
2026-08-11 17:46:25 +08:00
Terra 2d2b89825e Merge pull request #1115 from deepseek-harness/codex/gui-goal-user-message
feat(web): show /goal input in the human transcript
2026-08-11 17:43:45 +08:00
Tianyi Cui c626d5f53c Merge origin/master into worktree/pr2177-export-fixes-20260811
Refresh PR #2258 onto master at 5427cbcc19 so the session-log export fixes are evaluated and mergeable against the current repository.\n\nPreserve master's SDK-toolchain removal, client theme bootstrap, and Python finish-reason changes intact. The only textual overlap is the generated config-catalog pairing record: both English and Chinese catalogs merge cleanly with the PR's compression setting and master's package moves, so regenerate that sidecar from the merged owners instead of choosing either stale hash.
2026-08-11 17:39:19 +08:00
NI0317 d06a7e07e5 feat(web): show command inputs in the human transcript 2026-08-11 17:19:51 +08:00
Tianyi Cui 1d12ae62e7 Merge pull request #2242 from deepseek-harness/worktree/remove-sdk-project-toolchain
Remove the unreleased SDK project toolchain
2026-08-11 17:09:21 +08:00
Tianyi Cui f9e8375f66 Merge remote-tracking branch 'origin/master' into worktree/remove-sdk-project-toolchain 2026-08-11 17:00:05 +08:00
_Kerman a661eeeba0 Merge pull request #2257 from deepseek-harness/xtr/python-sdk-finish-reason
fix(python): report run finish reason
2026-08-11 16:56:51 +08:00
Tianyi Cui 4d6dc77a1f Merge remote-tracking branch 'origin/master' into worktree/remove-sdk-project-toolchain 2026-08-11 16:54:34 +08:00
_Kerman dbbe55fdb1 fix(python): reject malformed finish reasons 2026-08-11 16:48:41 +08:00
imccyu ea574b5fca Merge pull request #2180 from deepseek-harness/worktree-dark
fix(client): apply theme before plugin loading
2026-08-11 16:41:50 +08:00
Tianyi Cui 175d252f77 chore: remove remaining SDK toolchain residue 2026-08-11 16:37:29 +08:00
_Kerman 6896fd1545 fix(python): report run finish reason 2026-08-11 16:25:59 +08:00
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
Tianyi Cui 454e06c8c1 Merge origin/master into worktree/remove-sdk-project-toolchain
# 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/feature/2026-07-21-continuable-background-subagents.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-continuable-background-subagents.md
#	.agents/notes/implemented/feature/2026-07-21-continuable-background-subagents.zh.md
#	.agents/notes/proposed/architecture/2026-07-15-sdk-project-editing-architecture.i18n.yaml
#	.agents/notes/proposed/architecture/2026-07-15-sdk-project-editing-architecture.md
#	.agents/notes/proposed/feature/2026-07-14-sdk-developer-projects.i18n.yaml
#	.agents/notes/proposed/feature/2026-07-14-sdk-developer-projects.md
#	.agents/notes/proposed/feature/2026-07-14-sdk-developer-projects.zh.md
#	packages/README.i18n.yaml
#	packages/README.md
#	packages/scaffold/create-sdk/README.md
#	packages/scaffold/create-sdk/src/args.ts
#	packages/scaffold/scripts/src/args.ts
#	packages/sdk/README.i18n.yaml
#	scripts/verify-package-readme-model-experience.ts
2026-08-11 15:56:06 +08:00