Commit Graph
11509 Commits
Author SHA1 Message Date
Yichen Jiang 2f481fa352 fix(apiproxy): echo the preset a created session runs, not its header
`session.create` also adopts an already-live session, and the preceding
commit newly allows adopting one under the preset it switched to while
blank. Its response still echoed `header.agentPreset`, so that adoption
answered with the preset the session had just left — contradicting the
request it had accepted and the row `session.list` serves for the same
session from `resolveSessionPreset()`. The echo now resolves the same way.

The `assertPresetUnchanged` parameter doc said `existing` was the preset
the session was created under; both callers now pass what it runs.

`composeFrom()` was documented as "infallible" and "cannot fail" beside two
`@throws`. It has no composition failure mode — no roster read, no mount, no
file — but it does reject a caller error, and the wording now says which.

The package-level "switched preset" test re-linked to the same preset id,
so it could not tell reading the parent's live scope chain from reading its
creation header. A second fixture preset makes the switch real.

The Web browser lane's subagent goldens gain the preset badge a child now
shows, which is the visible consequence of recording its composition. That
lane runs only under DSH_EXAMPLE_MODE=lib and was missed before.

The Agent Note records two limits found in review: a cold-resumed
continuable child joins its parent's current composition rather than the one
its header names, and `toolFilter` does not constrain a joined child. The
latter is a regression from the agent-plane move rather than anything this
change introduces — with the same tools in the global layer the filter
applies normally — and is tracked in #2185.

Refs #2185
2026-08-10 19:28:40 +08:00
Yichen Jiang 08b85654f4 feat(web): localize shipped agent presets 2026-08-10 19:28:02 +08:00
creatixchu 888538dd5b Merge remote-tracking branch 'origin/master' into feat/read-image-context 2026-08-10 19:24:28 +08:00
Hypatia May 501c3a8ab6 fix(subagent): pin delegated child approvals to 'never' within the inherited sandbox scope
A delegated in-process child now acts only within the sandbox scope fixed
at delegation: captureDelegatedPolicyOverrides still snapshots the parent's
explicit sandbox override but pins the child approval policy to 'never'
(instead of inheriting the parent's), so every child ask — sandbox_permissions
escalations included — is rejected deterministically by ApprovalService
before any answerer, with the audit pair still logged. Every in-process
child additionally receives the scoped subagent:delegation runtime-context
statement telling it to report a scope limitation instead of retrying.

Supersedes the approval half of the policy-inheritance decision (new Agent
Note cross-linked from both prior notes and the approval-seam Q&A); refreshed
child snapshot fixtures carry the pinned event, and
subagent-published-run-failure now persists a one-event child log.
2026-08-10 19:17:37 +08:00
creatixchu 528c776e1b fix(e2b): release bounded read stream locks
Release the Web Stream reader after either completion or cancellation. Strengthen the oversized-file test so a regression that downloads content before applying the stat bound fails directly.
2026-08-10 19:11:06 +08:00
Turtle 243ed09aaf Merge pull request #2046 from deepseek-harness/worktree/lightweight-doc-translation-20260808
docs(skill): make routine translation lightweight
2026-08-10 19:09:30 +08:00
Tianyi Cui 8ea27971e3 Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup 2026-08-10 19:09:06 +08:00
Huanqi Cao 59a2e4d825 fix(ci): restore the native Windows coverage denominator to green
The windows-native job has been red since #1990 put the sandbox-windows-acl sources into the Windows 100%-per-file denominator without tests carrying them, and #1543 dropped the authoring.ts V8 ignore for the POSIX-only owner-execute branch. Non-blocking at merge time, the red state has propagated to every later pull request.

Cover every in-process ACL-sandbox failure branch with stub-based failure-path suites (ffi/acl/token/spawn/index), following the package's existing failure-paths pattern; the package now measures 100% per file under the Windows denominator. Exclude only the runner entry from the win32 denominator: it executes exclusively as a spawned child outside the instrumented run, and its behavior is pinned end-to-end by the runner suite. Restore the authoring.ts narrow V8 ignore and add one for the dispose token guard whose absent-token arm is lifecycle-unreachable. Update the dual-lane Agent Note with the denominator composition.
2026-08-10 19:07:35 +08:00
Yichen Jiang da5f60300a Merge pull request #1808 from deepseek-harness/worktree/persist-web-theme-settings
fix(web): persist general preferences in settings
2026-08-10 19:05:19 +08:00
creatixchu b07844dd4c Merge branch 'master' into feat/read-image-context
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-08-10 19:01:47 +08:00
Tianyi Cui 8143f01678 test(sandbox): satisfy path boundary lint 2026-08-10 18:57:29 +08:00
_Kerman 61a0530061 Merge branch 'master' into fix/web-favicon-dark-mode 2026-08-10 18:57:09 +08:00
Tianyi Cui ee21d593b6 test(sandbox): isolate temp cleanup failures 2026-08-10 18:08:22 +08:00
Tianyi Cui 6f21d00169 docs(sandbox): align capability SID terminology 2026-08-10 18:08:22 +08:00
Tianyi Cui ba63251c48 fix(sandbox): clear failed ACL temp state 2026-08-10 18:08:22 +08:00
Tianyi Cui be880473e2 fix(tool-pwsh): scope named-pipe warning 2026-08-10 18:08:22 +08:00
Tianyi Cui 9435ca62a6 fix(sandbox): reject overlapping Windows temp roots 2026-08-10 18:08:22 +08:00
Tianyi Cui ef7195a00a fix(skill): enforce manual invocation policy 2026-08-10 18:04:26 +08:00
Yichen Jiang 86d5dd4384 fix(preset): align minimal agent with RL composition 2026-08-10 18:02:11 +08:00
Tianyi Cui b4581c8b97 test(snapshot): refresh translation prompt fixture 2026-08-10 17:58:37 +08:00
Tianyi Cui c5dd99124c docs: make routine translation lightweight 2026-08-10 17:58:09 +08:00
Yichen Jiang da5d9aaee9 Merge remote-tracking branch 'origin/master' into worktree/subagent-missing-tools-fb2359 2026-08-10 17:57:59 +08:00
_Kerman ced7caabf8 docs(notes): agent note for web session-log export 2026-08-10 17:57:40 +08:00
_Kerman 9574a99f45 feat(web): export the session log from the trajectory toolbar
The 导出 button fetches GET /api/session.export and saves the ZIP (root
artifact plus subagent descendants). The plugin exposes exportLog through
the view's inject face, resolves the tab label through the locale service,
and disables the button while in flight; fixture mode answers 404 so the
error bar explains the gap.
2026-08-10 17:57:40 +08:00
_Kerman ded90bffba feat(apiproxy): host session-log download surface
Streams one ZIP of the root session artifact plus each subagent descendant
verbatim (the persistence readRaw bytes) from GET /api/session.export as a
host-only download — no wire envelope, absent from IApiClient. The downloads
domain owns the query schema, the fetch handler answers the GET alongside the
SSE routes, and compression runs on the host with fflate's streaming Zip API.
2026-08-10 17:57:40 +08:00
_Kerman 80b7f929ea feat(session-persistence): expose readRaw for per-session artifacts
The persistence contract gains a concrete readRaw default (undefined for
backends without a per-session artifact) and the JSONL backend overrides it
with the decode of its physical zstd frames, so a consumer can read the
stored artifact text verbatim — the session-log export depends on it.
2026-08-10 17:57:40 +08:00
Chinesezjc e389900f7d ci: run real-windows check on self-hosted runners
Enable serial-windows to execute the complete check:ci on the in-house
self-hosted Windows pool instead of the disabled hosted windows-2025
lane. Point the job at [self-hosted, dsh-win-ci, windows] and wire it
into all-checks-passed so it gates pull requests.

The Wine-emulated windows job remains the required win32 signal for
PRs that cannot reach the self-hosted pool; this lane adds a real
native-Windows run where one is available.
2026-08-10 17:56:36 +08:00
Yichen Jiang e53f448650 fix(subagent): compose children from their parent's preset
Tool and prompt-section visibility is inherited along dsh-scope's parent
chain, and an agent's scope key is minted with no parent. Per-session agent
presets moved every model-facing row onto the agent plane and made
AgentPresets.mount() the one thing that binds that link, from the api-proxy's
session create, resume, and fork paths. The two in-process subagent drivers
installed only the per-child persona and tool filter, so a child's scope chain
had length one and its registry view resolved the global layer alone — which
is empty wherever a preset roster is composed. One-shot children reached the
model with no tools, continuable ones with only the host-plane `report`, and
neither carried its parent's persona, workspace context, or skill catalog.

AgentPresets.composeFrom() joins one agent to the standing composition another
already runs on. It is a bind, not a mount: the child gets its parent's exact
generation, so a composition edited since the parent started cannot fork it
onto another one, and it is synchronous, which is what lets a child creation
window use it. applyChildComposition() now takes the parent and performs the
join first, making a child composed without it unrepresentable at the call
sites. childSessionMeta() records the joined id so a cold read rebuilds the
composition the child actually ran under.

The audit that followed found two api-proxy readers on the wrong authority:
presenterScopeFor() and the live-agent branch of assertPresetUnchanged() both
read header.agentPreset, which goes stale the moment a blank session switches
preset. A switched session's cold transcript resolved presenters in the older
composition's layer and silently degraded to generic cards, and the gateway
refused to adopt a live session under the preset it actually runs while
accepting the one it left. Both now resolve through resolveSessionPreset(),
matching the resume branch fifteen lines above. The owning architecture Agent
Note carried the stale claim that the header records what a session runs; it
is corrected to name the header/log pair and its three readers.

Fixes #2165
2026-08-10 17:46:34 +08:00
Tianyi Cui 1762d2b3d7 refactor(sandbox): share best-effort SID cleanup 2026-08-10 17:29:11 +08:00
Tianyi Cui 5c9ff7bede Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup 2026-08-10 17:16:24 +08:00
Tianyi Cui be47fcec08 test(sandbox): cover workspace grant cleanup failure 2026-08-10 17:15:16 +08:00
NI0317 4f23eb4ae5 Merge remote-tracking branch 'origin/master' into feature/workspace-picker-composer 2026-08-10 17:12:17 +08:00
Hypatia May 08e4f1b17c Merge remote-tracking branch 'origin/master' into fix/subagent-empty-terminal-message-output 2026-08-10 17:11:30 +08:00
ZiyaZhang c969d69f10 Merge latest master into PR branch 2026-08-10 02:10:57 -07:00
ZiyaZhang c950366bd9 fix(ci): bound native ACL coverage gate 2026-08-10 02:09:14 -07:00
Hypatia May 0a4bdd8ee8 docs(subagent): note the settlement-fold optimization condition 2026-08-10 17:06:07 +08:00
Yichen Jiang f3a075434c Merge branch 'master' into worktree/fix-session-header-preset-order 2026-08-10 17:06:01 +08:00
Yichen Jiang 94f4183afd Merge remote-tracking branch 'origin/master' into worktree/web-theme-settings-integration-fde706 2026-08-10 17:05:18 +08:00
Yichen Jiang d2321d210a Merge pull request #2143 from deepseek-harness/fix/preset-host-plane-task-registry
fix(web-app,agent-presets): 让后台任务注册表回到宿主平面
2026-08-10 17:04:11 +08:00
Yichen Jiang cc527dfa9a fix(web): order preset before subagent list 2026-08-10 17:02:20 +08:00
pku-xht 14dc8cd349 docs(agent-presets): record shared product provider placement 2026-08-10 16:57:56 +08:00
Hypatia May 1ac58714d1 Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance 2026-08-10 16:54:44 +08:00
_Kerman 3c0217b17e Merge branch 'master' into fix/web-favicon-dark-mode 2026-08-10 16:54:33 +08:00
Tianyi Cui c4edb6fc8c Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	packages/sandbox/sandbox-local/README.i18n.yaml
2026-08-10 16:53:10 +08:00
Yichen Jiang 8ae1a9d6a8 Merge remote-tracking branch 'origin/master' into fix/preset-host-plane-task-registry 2026-08-10 16:53:03 +08:00
NI0317 12b992b0bb Merge remote-tracking branch 'origin/master' into feature/workspace-picker-composer 2026-08-10 16:52:21 +08:00
Turtle 09c3622697 Merge pull request #2103 from deepseek-harness/codex/concrete-technical-prose
docs: make technical prose concrete
2026-08-10 16:51:18 +08:00
NI0317 b8994d552d Merge remote-tracking branch 'origin/master' into feature/workspace-picker-composer 2026-08-10 16:50:48 +08:00
Tianyi Cui 390683ee27 Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-08-10 16:50:19 +08:00
Hypatia May 9bb3a203ce Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance 2026-08-10 16:50:09 +08:00