Commit Graph

12231 Commits

Author SHA1 Message Date
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
Yichen Jiang
f736e6f584 feat(web-search-deepseek): resolve provider options from the settings section
The provider now takes a thunk rather than a value: it projects the
authoritative section per search, so a stored endpoint, model, or key
reference reaches the next call without re-registering the provider — which
would make the seam's provider selection observable as a flicker.

apiKey already carries role('secret'), so the section is safe to describe:
the literal never rides a response in any layer and a configuration surface
learns only that a key is set.
2026-08-10 18:06:27 +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
Yichen Jiang
fdf9bddbf8 feat(agent-loop): make the parallel tool-call cap a user setting
The section is a strict subset of the plugin config: `agents` is consumed
once when the service starts, so a stored change there could only look like
it had an effect. The cap resolves through a getter over the settings source,
which the scheduler destructures at the start of each tool group, so a
committed change bounds the next group without disturbing the one in flight.
`resolveMaxParallelToolCalls` becomes the section validator, refusing a value
at the write instead of at that group.

The deferred-resume effect-shape assertion now allows the one plugin effect
the optional settings wiring adds at the fiber's own level; a resumed agent
joining it there is still the regression it pins.
2026-08-10 18:00:03 +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
NI0317
cce148f20d Merge master into feature/workspace-picker-composer 2026-08-10 16:50:03 +08:00
Yichen Jiang
be7bf24169 Merge remote-tracking branch 'origin/master' into fix/preset-host-plane-task-registry 2026-08-10 16:45:13 +08:00
Tianyi Cui
2e34861739 Merge commit 'b916cf8aab5bd8bca5ae47df16f72717c0a56b4a' into HEAD
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-08-10 16:38:17 +08:00
Tianyi Cui
10ba0f8ad2 docs(windows): align sandbox ownership 2026-08-10 16:38:00 +08:00
Yichen Jiang
2e55964865 Merge remote-tracking branch 'origin/master' into worktree/web-theme-settings-integration-fde706 2026-08-10 16:37:14 +08:00
Yichen Jiang
76feeece55 test(web): pin the assembled snapshot lane's locale through the browser
The assembled Web snapshot lane selected its locale with a `dsh.locale`
localStorage key. That key stopped selecting anything once the locale
preference moved to the Host settings document, so the image-display
scenario's Chinese expectations met the English default and failed.

Pin the navigator languages the boot env already documents, and state the
image-display expectations in the lane's English copy — the fixture session
title stays Chinese because it is fixture data, not product copy.
2026-08-10 16:37:01 +08:00
Turtle
3c7e7262c1 Merge pull request #2147 from deepseek-harness/codex/ignore-archived-agent-notes-in-rg
chore: exclude archived Agent Notes from default rg search
2026-08-10 16:35:41 +08:00
Yichen Jiang
cf5fbd02b8 fix(tasks-local): return the layer disposer directly and cover scoped teardown
`ScopedLayers.effect` already returns an exact `() => void`, so the inherited
`() => void dispose()` wrapper voided a void — two lint rules, four errors.

The scoped layer's own teardown had no test, which is the registry-contribution
disposal contract the testing policy requires and the only path that calls
`TaskLayer.isEmpty()`: `ScopedLayers` prunes a scope's layer when its last
contribution disposes. The new case mounts one plugin contributing both a
surface and a listener into one scope, then unloads it and observes that the
agents which joined that scope are refused again.

Refs #2141
2026-08-10 16:34:29 +08:00
Turtle
51b2fc35f3 docs: refresh translation prompt snapshot 2026-08-10 16:34:20 +08:00
Turtle
a27efdef36 docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
Turtle
673e7cddc5 Merge pull request #1878 from deepseek-harness/codex/feedback-session-id
fix(feedback): report session and user ids
2026-08-10 16:32:58 +08:00