Commit Graph
11797 Commits
Author SHA1 Message Date
Tianyi Cui a0200376a1 fix(pty): defer the first readiness poll 2026-08-08 21:27:56 +08:00
Tianyi Cui 65264f6c80 refactor(subprocess): share terminal lifecycle 2026-08-08 21:27:56 +08:00
Tianyi Cui 32bce339da fix(runtime): close lifecycle teardown races 2026-08-08 21:27:56 +08:00
Tianyi Cui c17727d43d test(subprocess): cover terminal release cleanup 2026-08-08 21:27:56 +08:00
Tianyi Cui e5f3a67363 fix(runtime): publish completion before pipe cleanup 2026-08-08 21:27:56 +08:00
Tianyi Cui ac81165662 fix(runtime): close async cleanup and framing races 2026-08-08 21:27:56 +08:00
Tianyi Cui 16cac3b5af fix(runtime): close remote cleanup and readiness races 2026-08-08 21:27:56 +08:00
Tianyi Cui 8917ff8ef4 refactor(runtime): compose consumers over fs and subprocess 2026-08-08 21:27:55 +08:00
Tianyi Cui 72efc6f522 Merge remote-tracking branch 'origin/master' into worktree/ci-native-windows-20260808 2026-08-08 21:27:25 +08:00
Tianyi Cui b1ccca71ef fix(windows): stabilize native coverage watchers 2026-08-08 21:26:38 +08:00
Tianyi Cui 75570ba31e test(i18n): deduplicate merge conflict setup 2026-08-08 21:26:31 +08:00
Tianyi Cui 987d477cfc Merge pull request #2066 from deepseek-harness/worktree/1737-1751-review-fixes
fix(web): keep Send beside subagent Stop
2026-08-08 21:23:49 +08:00
Tianyi Cui 3abe813fd3 docs(i18n): document automatic pairing merges 2026-08-08 21:12:00 +08:00
Tianyi Cui 542c029c80 feat(i18n): compose pairing records during merges 2026-08-08 21:11:59 +08:00
Tianyi Cui d21917f4cf refactor(subagent): resolve list tool inputs explicitly 2026-08-08 21:05:58 +08:00
Tianyi Cui 07fbc2cda8 test(subagent): execute control tools in ACP replay 2026-08-08 21:05:58 +08:00
Tianyi Cui ce16cf1b3b test(web): exercise interrupt with parent offline 2026-08-08 21:05:58 +08:00
Tianyi Cui 5f755d5717 fix(web): keep Send beside subagent Stop 2026-08-08 21:05:58 +08:00
Tianyi Cui ded7f8ffd1 Merge latest native Windows CI base into coverage follow-up 2026-08-08 20:44:36 +08:00
Tianyi Cui 0ad10e0f9d Merge latest master into native Windows CI 2026-08-08 20:41:54 +08:00
Ziya 05cbc185f0 Merge pull request #1661 from deepseek-harness/agent/task-surface-rfc
docs: propose Task Surface for structured session interaction
2026-08-08 05:37:01 -07:00
Tianyi Cui f96be1db13 test(windows): make native coverage fixtures portable 2026-08-08 20:36:31 +08:00
hypatiamay ede2510f52 Merge pull request #1751 from deepseek-harness/feat/1535-interrupt-tool
feat(subagent): let ancestors interrupt descendants
2026-08-08 20:35:43 +08:00
Yichen Jiang 2cea99409f test(web): re-record goldens with the header preset label now rendering live
20 files, each +2 lines: the label icon and 标准模式 in the banner — the DOM
the label fix makes appear for sessions created in-tab, which these goldens
recorded the absence of.
2026-08-08 20:34:03 +08:00
ZiyaZhang 3a05ddec79 docs: compile the self-contained Task Surface model sketches
The doc-typecheck opt-out ratio gate now fails at 74/146 after merging
master. The model and branded-ID blocks are self-contained, so check
them as ordinary ts fences (72/146 remain opted out); re-record the
pairing sidecar.
2026-08-08 05:28:14 -07:00
Tianyi Cui 582fafee5a test(snapshot): refresh subagent control schema pin 2026-08-08 20:25:41 +08:00
Huanqi Cao 9d10a1888b fix(pwsh): record the tool-pwsh user-approval dependency in the lockfile 2026-08-08 20:24:19 +08:00
Yichen Jiang 66e9b01fbd fix(tools,client): chain-mode resolution and a live preset label
modeFor read only the exact scope's layer, so a `code`-preset session
advertised the native catalog: the mode is declared on the preset's STANDING
scope, and the agent only parents to it. Nearest scope wins along the chain —
the mode decides what the model SEES, which is the class of fact the chain
inherits. Caught live (the model politely computed with bash and said
run_code was not in its list); the chain test pins it.

The client half of the label fix: the create echo and the session-added
frame's agentPreset now reach the session list (newest wins in the upsert —
every producer of the field reports the CURRENT composition), and a confirmed
blank-session switch publishes through the new ISessions.noteAgentPreset, so
the header label moves with the composition instead of waiting for a reload.
2026-08-08 20:19:00 +08:00
Huanqi Cao 7eadde5c58 Merge remote-tracking branch 'origin/feat/windows-pwsh-default' into feat/windows-acl-sandbox
# Conflicts:
#	apps/cli/reference/README.i18n.yaml
2026-08-08 20:18:56 +08:00
Ziya c5dd429478 Merge branch 'master' into fs-overwrite-diff-bound-v2 2026-08-08 05:17:04 -07:00
Yichen Jiang c578ededa1 Merge branch 'stack/agent-profiles-3-wire' into stack/agent-profiles-5-web-ui 2026-08-08 20:16:58 +08:00
Yichen Jiang 3926e95c61 Merge branch 'stack/agent-profiles-5-web-ui' into stack/agent-profiles-8-authoring 2026-08-08 20:16:58 +08:00
Yichen Jiang 132debb5fe fix(apiproxy): echo the resolved agent preset on create and session-added
session.create's reply named only the id, and the session-added frame's
agentPreset — which the server already derives via sessionListFields — was
stripped by the wire schema it never joined. A client therefore could not
label a session it just created (or learned live) until the next full list
refresh: the header's preset label rendered nothing for exactly the sessions
made in this tab. The create reply is the commit point that knows the
RESOLVED composition (a caller that named none gets the default the header
recorded), so both carriers now say it.
2026-08-08 20:16:50 +08:00
Huanqi Cao 03cf9caba2 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-08 20:15:08 +08:00
Huanqi Cao 83f835e4cb feat(pwsh): mirror the bash sandbox surface — denial rendering, escalation, and the ConstrainedLanguage contract
tool-pwsh now renders sandbox denial facts (denial marker + same-turn escalation hint, runner-failed notice on background reads) and advertises the sandbox_permissions/justification escalation pair resolved through ctx.approval before execution — the shared fail-closed sequence from dsh-sandbox, with the tool name 'pwsh'. The description teaches the ConstrainedLanguage contract under the Windows sandbox (both confined modes run pwsh in CLM: Add-Type, non-core .NET statics, COM, and reflection fail; the mode cannot be lifted — probe-verified, pinned by LANGMODE assertions in the runner suite and description assertions in the tool suite). The stale pwsh-sandbox JSDoc ('the tool owns approval') and the parity notes' superseded 'minus sandbox' claims are corrected.
2026-08-08 20:11:21 +08:00
Huanqi Cao 2dd9af6f4b fix(sandbox): keep read-only strictly zero-grant by dropping the write-allowlist SID from list I
A session that materialized its workspace-write grant and then switched to read-only (or crashed and resumed under read-only) kept a writable workspace for the server lifetime: the standing orphan-SID ACE survived the downgrade and list I still carried the orphan, so the write-restricted pass-2 check granted it. List I is now [logon SID, EVERYONE] only — the standing ACE stays inert under read-only while the unrevoked ACE keeps the re-upgrade free (map hit, no re-propagation). Pinned by the runner's real-token mode-downgrade regression (standing ACE denied under read-only, effective again on re-upgrade), the acl-session mode-switch cycle (nothing under read-only, one materialization on upgrade, no revoke on downgrade), and ConstrainedLanguage pins in both modes.
2026-08-08 20:11:01 +08:00
Tianyi Cui 85e9f3b7cb Merge latest native Windows CI base into coverage follow-up 2026-08-08 20:07:25 +08:00
Tianyi Cui f91305ef5c Merge latest master into native Windows CI 2026-08-08 20:06:38 +08:00
Tianyi Cui 279e51a84c Merge native Windows CI lifecycle fixes into coverage follow-up
# Conflicts:
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.md
#	.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.zh.md
2026-08-08 20:05:46 +08:00
Hypatia May ddea7b398e docs: refresh tool catalog after stack merge 2026-08-08 20:02:37 +08:00
Hypatia May 33c4d5a164 chore(docs): report the first stale catalog line 2026-08-08 20:02:37 +08:00
Hypatia May 656dbadbad test(subagent): close descendant listing coverage 2026-08-08 20:02:37 +08:00
Hypatia May 5e1ec10d5a fix(subagent): address descendant listing review 2026-08-08 20:02:37 +08:00
Hypatia May d769d3cbb7 feat(subagent): let ancestors interrupt descendants
interrupt_agent(agent_id) passes the calling agent as the ancestor
authority for ctx.subagents.interrupt(); the service verifies live
registry identity and recorded lineage, so a direct child or deeper
descendant stops with the same generic parameter while send_message keeps
its exact-direct-parent authority.

Discovery: list_agents gains an optional scope. descendants walks the new
SubagentService.listDescendants() — one lineage trace flattened in stable
pre-order across ordinary and one-shot intermediates, each entry carrying
its verified parentId and depth — and every status now comes from the
live Agent registry (running/idle/complete).

Refs #1535
2026-08-08 20:02:37 +08:00
Hypatia May 4b29f9ca7a test(web): refresh interrupt UI golden after master merge 2026-08-08 20:02:36 +08:00
Hypatia May 5793614b86 feat(web): expose continuable subagent interrupt
The composer's single primary action now stops a running continuable
child: Session.cancel() routes a continuable address through
subagent.interrupt (ordinary sessions keep session.cancel; one-shot
addresses stay uncancellable), and InputBar switches the same Send button
to Stop while a continuable child runs. A running parent-offline child
keeps the default composer with disabled input so that Stop stays
reachable; the read-only takeover returns once it stops.

Refs #1535
2026-08-08 20:02:36 +08:00
Hypatia May 336c84baf0 docs(subagent): clarify interrupt edge cases 2026-08-08 20:02:36 +08:00
Hypatia May 57e9e6977c docs(subagent): record the public interrupt in the continuation contract docs
The continuable-subagent core-data page and the continuation lifecycle
Agent Note claimed no public subagent cancellation existed; interrupt()
is now that one public stop. Both pages and their Chinese counterparts
state the shipped contract and link the owning interrupt note.

Refs #1535
2026-08-08 20:02:36 +08:00
Hypatia May 82019134b1 test(web): verify subagent.interrupt over the real composition
A browserless keyless-replay e2e boots the shipped web composition, holds
a continuable child's turn open with a replay hang entry, queues a
follow-up and interrupts over plain HTTP, and proves from the real
session state that the turn aborted, the follow-up parked without a new
turn, and a waking send resumed the preserved FIFO order.

Refs #1535
2026-08-08 20:02:36 +08:00
Hypatia May 66a21a38b1 feat(subagent): add current-turn interrupt RPC
ctx.subagents.interrupt() stops one live continuable child's current turn
via Agent.cancel(cause, { keepInbox: true }) under either a human durable
parent address or an exact live ancestor Agent. Fire-and-return: admission
is synchronous, quiescence is not awaited. Pending inbox work, the
Activation, and published descendants are preserved; only a later waking
send resumes the parked FIFO queue. Absent, one-shot, and disposing
targets are accepted no-ops.

The new Host RPC subagent.interrupt calls only that primitive with user
authority — no catalog, history, persistence, or parent-registry lookup —
so a live child stays stoppable while its parent Agent is offline.

Refs #1535
2026-08-08 20:02:36 +08:00