8171 Commits

Author SHA1 Message Date
lintianle
517449d85f Merge remote-tracking branch 'origin/master' into feat/mcp-auto-reconnect 2026-08-10 20:28:46 +08:00
pku-xht
e6b6f1a047 Merge master at 35eeb4a112 2026-08-10 20:25:58 +08:00
creatixchu
2b90207770 Merge remote-tracking branch 'origin/master' into feat/read-image-context
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	packages/support/llm-replay/src/index.ts
#	packages/support/llm-replay/tests/llm-replay.spec.ts
2026-08-10 20:25:25 +08:00
Tianyi Cui
ad37ee33c5 Merge remote-tracking branch 'origin/master' into worktree/windows-acl-hardening-followup
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-08-10 20:24:28 +08:00
Yichen Jiang
5a69fa9258 Merge branch 'master' into worktree/fix-session-header-preset-order 2026-08-10 20:21:52 +08:00
Ziya
216b5eab42 Merge pull request #967 from deepseek-harness/fix/workspace-context-rendered-change-proof
fix(workspace-context): commit only represented changes
2026-08-10 05:19:17 -07:00
_Kerman
fa2dce28ce test(web): adapt ui-trajectory benches to the merged locale settings scope
The locale plugin now derives its durable preference from a settings scope
bound to the connection service, so the trajectory benches provide a
connection handle before loading it.
2026-08-10 20:15:31 +08:00
lintianle
00f68d7e93 feat(mcp-client): auto-reconnect with bounded backoff after transport close
A per-instance connection supervisor restarts the original server config
with exponential backoff when the transport closes, re-runs tool discovery
on success, and atomically replaces the previous generation. Default policy
retries for ~2.5 minutes (10 attempts, 500ms→30s doubling) before giving up
and unregistering the server's tools.

New config block reconnect { enabled, initialDelayMs, maxDelayMs, maxAttempts }
on both transports; misconfiguration fails plugin load. A connection that
survives past the stability window (maxDelayMs) resets the attempt budget,
so occasional crashes recover indefinitely while a crash loop still exhausts
the cap.

Integrates with the upstream failOnStartupError: the initial sync uses
registrationFailure:'throw' when that flag is set so a squatted namespace
still rejects activation.

Fixes #1746
2026-08-10 20:10:54 +08:00
ZiyaZhang
4ec9e310c3 Merge remote-tracking branch 'upstream/master' into fix/workspace-context-rendered-change-proof 2026-08-10 05:10:39 -07:00
Ziya
5cdebcf5f3 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-10 05:10:30 -07:00
Yichen Jiang
eacd5e2167 fix(prompt): remove unreachable complete branches 2026-08-10 20:09:06 +08:00
Yichen Jiang
1b473be886 docs(agent-notes): record the web plugin configuration decision
Also folds the duplication the three controls had grown: the draft-and-commit
input both editable fields render is now one component, and the two sibling
executors' identical import surface is marked as the deliberate mirror their
READMEs already describe.
2026-08-10 20:06:18 +08:00
_Kerman
9b96a1380b Merge remote-tracking branch 'origin/master' into feat/web-session-log-export 2026-08-10 20:02:24 +08:00
creatixchu
767e5a5723 fix(fs): close read-image review gaps 2026-08-10 19:56:18 +08:00
Yichen Jiang
9ce8340dd9 fix(web): pin preset before subagent header action 2026-08-10 19:54:08 +08:00
ZiyaZhang
bf39cef48f fix(ci): tolerate platform-specific coverage and curl retries 2026-08-10 04:52:07 -07:00
_Kerman
fbd09a70f3 docs: document SessionRawArtifact and fix backpressure claims
The persistence subsystem page gains the SessionRawArtifact section (with a
type-equiv manifest entry and zh counterpart), and the README and Agent Note
describe the drain-based backpressure instead of claiming the archive never
accumulates.
2026-08-10 19:50:43 +08:00
_Kerman
53d9810461 fix(web): localize the trajectory toolbar and simplify the download
Toolbar strings route through the locale dictionary's standard t seat (the
export button no longer mixes languages in the English golden), exportLog
passes the response blob straight to the browser save instead of copying it
three times, the client id sanitizer rejects dot segments like the host one,
and the fixture stub comment no longer misattributes the 404.
2026-08-10 19:50:20 +08:00
_Kerman
beb1d0601f fix(apiproxy): address session-export review — surrogate-safe chunks, backpressure drain, strict flag
Chunk boundaries never split a surrogate pair (a lone high surrogate
re-encodes as U+FFFD and silently corrupts the exported artifact), production
yields whenever the response queue fills so a slow consumer bounds the
accumulation, includeDescendants rejects values other than true/false instead
of silently under-exporting, the dead missing-services arm is deleted by
narrowing the streaming deps, and the readRaw failure answers 500 without
leaking host paths into the browser error bar.
2026-08-10 19:50:09 +08:00
_Kerman
bf70da473b fix(session-persistence): async readRaw default and full branch coverage
The inherited readRaw default now rejects like the async backend overrides
instead of throwing synchronously, and its arms plus the JSONL override's
retry loop, zero-frame, and corrupt-header branches get dedicated tests.
2026-08-10 19:49:57 +08:00
Yichen Jiang
cec716717f Merge branch 'master' into worktree/fix-session-header-preset-order 2026-08-10 19:46:29 +08:00
Hypatia May
5ba4055ed4 docs(subagent): trim comments in the delegated-policy additions 2026-08-10 19:46:07 +08:00
Yichen Jiang
13d4d4b3f3 fix(web): focus creator preset description 2026-08-10 19:44:42 +08:00
Yichen Jiang
5e3dd2fd34 fix(web): clarify shipped preset capabilities 2026-08-10 19:40:19 +08:00
Hypatia May
9e40fc7f6b Merge remote-tracking branch 'origin/master' into fix/continuable-subagent-policy-inheritance 2026-08-10 19:40:14 +08:00
Huanqi Cao
0a17575040 fix(sandbox): address review: leak FIXME, legal ACL fixture, stronger offset test, prose 2026-08-10 19:34:01 +08:00
pku-xht
fff7dfac8e test(workflow): follow locale settings prerequisites 2026-08-10 19:33:24 +08:00
Yichen Jiang
dc524c2c93 Merge remote-tracking branch 'origin/master' into worktree/fix-minimal-preset-prompt 2026-08-10 19:30:51 +08:00
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
pku-xht
850b78144a Merge commit '598bfdb91462c0402a6a11a32176c9f48f0df9fa' into codex/workflow-runs-chat-node-f6 2026-08-10 19:27:57 +08:00
pku-xht
4eb0a52840 fix(workflow): close review and snapshot gaps 2026-08-10 19:25:21 +08:00
creatixchu
888538dd5b Merge remote-tracking branch 'origin/master' into feat/read-image-context 2026-08-10 19:24:28 +08:00
Yichen Jiang
8c5e0f7b6a Merge remote-tracking branch 'origin/master' into worktree/web-plugin-config
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.i18n.yaml
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.zh.md
2026-08-10 19:18:11 +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
Yichen Jiang
f8555b5561 feat(client): configure host-plane plugins from a settings section
The section knows no namespace: it declares `settings.plugin.item` and
renders whatever cards were registered into it, so a plugin that ships a
browser half owns its card and its controls. The three cards here cover the
host-plane sections this deployment exposes.

A field shows its effective value and, when the raw user layer carries it, an
override badge and a reset that clears it back to the composition layer.
Controls commit on blur and Enter rather than per keystroke, which would burn
namespace revisions and race its own reads. The search key is the one value
that never rides a response: the card reports only whether one is configured
and writes it through the credentials domain, addressed by the reference the
section names.

A card renders nothing while its namespace is unavailable — a deployment that
does not compose the owning plugin should show no trace of it rather than a
disabled card the user cannot act on.
2026-08-10 19:14:59 +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
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
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
pku-xht
8de6df19d9 feat(workflow): show durable run records in Chat 2026-08-10 18:37:30 +08:00
Yichen Jiang
8a3c5daad7 feat(client-runtime): carry the layered view and a field reset through the settings scope
A form needs two things the snapshot did not carry. The `user` layer tells it
which fields the user overrode — presence, not value equality, because an
override equal to the composition default is still an override — and `base`
is what a cleared field reverts to. `unset` is that clear, sharing `set`'s
queue, revision fence, and rejected-write recovery through one write path.
2026-08-10 18:27:01 +08:00
Yichen Jiang
bd0563bff6 feat(apiproxy): expose the shell, agent-loop and web-search sections to the browser
Registration alone still never crosses the boundary: the three host-plane
sections the plugin configuration page edits join the explicit allowlist, and
the assertion that pins the served set is what catches a namespace silently
dropping out of the page.
2026-08-10 18:09: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
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