Commit Graph
100 Commits
Author SHA1 Message Date
Dudu-0223 5e52e7eaef Merge pull request #2555 from deepseek-harness/codex/agentteams-web
feat(team): add experimental Agent Teams Web profile
2026-08-26 11:15:48 +08:00
Dudu-0223 8852161662 docs(team): link deferred Web preset work 2026-08-26 10:56:57 +08:00
Dudu-0223 80e033efe5 fix(team): address Agent Teams Web review 2026-08-26 10:56:57 +08:00
Dudu-0223 c6cab2aada fix(agent-team): isolate generated Remote browser entry 2026-08-26 10:56:57 +08:00
Dudu-0223 61dea35bd2 refactor: let Team own browser remotes 2026-08-26 10:56:57 +08:00
Dudu-0223 36588ade22 fix(team): isolate browser remote adapter 2026-08-26 10:56:57 +08:00
Dudu-0223 806642b064 feat(team): add experimental Agent Teams Web profile 2026-08-26 10:56:57 +08:00
Dudu-0223 0eccabd5c3 Merge pull request #2556 from deepseek-harness/codex/agentteams-cli
feat(team): add experimental Agent Teams CLI profile
2026-08-26 02:34:32 +08:00
Dudu-0223 2c16c20d2a fix(profile): address Agent Teams CLI review 2026-08-26 00:13:36 +08:00
Dudu-0223 6e4fabdc1f fix(boot): stabilize profile module fallbacks 2026-08-26 00:13:36 +08:00
Dudu-0223 fd53e479b4 fix(profile): isolate bundle module fallbacks 2026-08-26 00:13:35 +08:00
Dudu-0223 a6c274e250 feat(team): add experimental Agent Teams CLI profile 2026-08-26 00:13:35 +08:00
Dudu-0223 ee57508c26 Merge pull request #2985 from deepseek-harness/fix/web-fetch-ssrf
feat(web): enable public WebFetch by default
2026-08-25 18:25:58 +08:00
Dudu-0223 560729be76 ci(windows): serialize native test files 2026-08-25 18:12:03 +08:00
Dudu-0223 aeb83639c4 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf
# Conflicts:
#	packages/subagent/subagent-acp/tests/subagent-acp.spec.ts
2026-08-25 17:20:48 +08:00
Dudu-0223 b68f36a1ca test(web): authenticate folding snapshot 2026-08-25 17:20:06 +08:00
Dudu-0223 637e029365 fix(subagent-acp): use supported skipIf signature 2026-08-25 17:10:03 +08:00
Dudu-0223 2abd486f8f Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf 2026-08-25 17:07:57 +08:00
Dudu-0223 f858caa9c2 test(subagent-acp): skip half-close cases on Windows 2026-08-25 17:07:31 +08:00
Dudu-0223 6199f477de test(snapshot): sync web search trust prompt 2026-08-25 16:04:38 +08:00
Dudu-0223 44468d4583 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf 2026-08-25 15:53:46 +08:00
Dudu-0223 6625c94449 Merge branch 'master' into fix/web-fetch-ssrf 2026-08-25 15:24:04 +08:00
Dudu-0223 8da063441b Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf 2026-08-25 15:17:09 +08:00
Dudu-0223 8e681a66b9 Merge origin/master into fix/web-fetch-ssrf 2026-08-25 14:46:26 +08:00
Dudu-0223 aaf0924b48 Merge origin/master into fix/web-fetch-ssrf 2026-08-25 14:40:51 +08:00
Dudu-0223 797c711e11 refactor(web): remove fetch approval policy 2026-08-25 14:25:12 +08:00
Dudu-0223 04e946ed8b test(web): refresh fetch and trust snapshots 2026-08-25 11:37:22 +08:00
Dudu-0223 433aab2724 test(web): refresh fetch tool schema snapshots 2026-08-25 11:22:42 +08:00
Dudu-0223 1af98028fa test(web): refresh external content prompt snapshots 2026-08-25 11:17:25 +08:00
Dudu-0223 8bf8e42b63 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf 2026-08-25 09:38:28 +08:00
Dudu-0223 070a180a10 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf
# Conflicts:
#	examples/acp-agent/tests/acp.snapshot.ts
#	examples/acp-agent/tests/snapshots/web-fetch/input.json
#	examples/acp-agent/tests/snapshots/web-fetch/stdout.expected.jsonl
#	knip.json
#	packages/test-support/session-snapshot/tests/fixtures/web-fetch-network.ts
#	snapshots/sdk/subagent-mixed/session.1.jsonl
#	snapshots/sdk/subagent-mixed/session.2.jsonl
#	snapshots/session/advanced-toolchain-runtime/session.1.jsonl
#	snapshots/session/advanced-toolchain-runtime/session.2.jsonl
#	snapshots/session/subagent-depth-two-rejection/session.1.jsonl
#	snapshots/session/subagent-depth-two-rejection/session.2.jsonl
#	snapshots/session/subagent-multi/session.1.jsonl
#	snapshots/session/subagent-multi/session.2.jsonl
#	snapshots/session/subagent-parallel/session.1.jsonl
#	snapshots/session/subagent-parallel/session.2.jsonl
#	snapshots/session/web-fetch/session.jsonl
#	snapshots/session/web-fetch/web-fetch-fixture-server.mjs
2026-08-25 09:14:36 +08:00
Dudu-0223 77e0b121df test(web): exercise fetch snapshot across build faces 2026-08-25 03:35:09 +08:00
Dudu-0223 2ac9072996 test(web): register snapshot network fixture 2026-08-24 21:47:19 +08:00
Dudu-0223 3b6cb9e83d Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf
# Conflicts:
#	examples/acp-agent/tests/snapshots/advanced-toolchain/session.1.jsonl
#	examples/acp-agent/tests/snapshots/advanced-toolchain/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-depth-two-rejection/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-mixed/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-multi/session.2.jsonl
#	examples/acp-agent/tests/snapshots/subagent-parallel/session.1.jsonl
#	examples/acp-agent/tests/snapshots/subagent-parallel/session.2.jsonl
2026-08-24 21:42:27 +08:00
Dudu-0223 709e5edaba fix(web): enforce approval before DNS resolution 2026-08-24 21:39:24 +08:00
Dudu-0223 b44a139ab7 Merge pull request #365 from deepseek-harness/pr-186
feat(spill-local): one-shot startup cleanup for local spill files
2026-08-24 21:31:37 +08:00
Dudu-0223 d6f9931c4b test(spill-local): exclude POSIX identity branches on Windows 2026-08-24 21:20:23 +08:00
Dudu-0223 357d9749d1 Merge remote-tracking branch 'origin/master' into fix/web-fetch-ssrf
# Conflicts:
#	apps/web/tests/preview-boot.e2e.ts
2026-08-24 21:13:00 +08:00
Dudu-0223 ca0e6f9707 Merge remote-tracking branch 'origin/master' into codex/pr-365-fixes 2026-08-24 21:07:22 +08:00
Dudu-0223 97693bbc85 test(spill-local): cover platform-specific cleanup paths 2026-08-24 21:07:12 +08:00
Dudu-0223 202a2fe60f Merge remote-tracking branch 'origin/master' into codex/pr-365-fixes 2026-08-24 20:53:45 +08:00
Dudu-0223 9f9cc130e2 test(spill-local): normalize Windows realpaths consistently 2026-08-24 20:53:40 +08:00
Dudu-0223 a0c1f7a6a7 Merge remote-tracking branch 'origin/master' into codex/pr-365-fixes 2026-08-24 20:31:27 +08:00
Dudu-0223 f76a225a7d Merge pull request #2663 from deepseek-harness/feat/subagent-provider
让 subagent 按需发现并选择子 Agent 模型
2026-08-24 18:23:42 +08:00
Dudu-0223 32d7092c84 Merge remote-tracking branch 'origin/master' into codex/pr-365-fixes 2026-08-24 16:33:31 +08:00
Dudu-0223 a268aada8c fix(spill-local): harden startup cleanup 2026-08-24 16:33:15 +08:00
Dudu-0223 545d177911 fix(spill-local): make startup cleanup race-safe 2026-08-24 15:36:51 +08:00
Dudu-0223 dbb3bcca8e test(spill-local): v8-ignore the two race-only sweep catch branches
The exact-shape fix added two filesystem-failure catch branches that only
fire on a race/permission fault the caller already guards against (the
session-dir readdir after an isDirectory() check, and the discovered-root
rmdir after the root was observed empty). Neither is deterministically
reproducible in-process, so tag both with the same reasoned v8 ignore the
sibling catch blocks already use, restoring per-file 100% coverage and the
symmetry between the parallel rmdir handlers.
2026-08-24 15:36:51 +08:00
Dudu-0223 c6a4de6207 fix(spill-local): exact-shape root/session matching and prune discovered roots
Tighten the startup sweep to backend-generated name shapes and fix the tests
that had drifted from the SweepRoot-based API:

- Match roots by the exact `dsh-spill-<6>` mkdtemp shape and session dirs by
  `session-<12 hex>` (DEFAULT_ROOT_RE / SESSION_DIR_RE), replacing loose
  startsWith checks so foreign or fixture-shaped directories are never swept.
- Carry `SweepRoot { path, pruneWhenEmpty }` through SweepOptions so a discovered
  prior-default root is removed once emptied while the active root is never
  pruned; lstat each session entry so a symlinked session dir is not followed.
- Fix the tests to the SweepRoot API: import SweepRoot, correct the gatherRoots
  override return shapes, build discovery fixtures with the real mkdtemp shape,
  and route the warn-wiring test through a deterministic failure path.
2026-08-24 15:36:51 +08:00
Dudu-0223 2f430f2fbd feat(spill-local): one-shot startup cleanup for local spill files
The local spill backend never reclaimed its files, so configured roots
grew without bound and default per-process dsh-spill-* temp roots piled
up across runs. Immediate deletion is unsafe because persisted, resumed,
and forked sessions may still reference an older locator.

Add a fiber-owned, best-effort sweep that runs once after activation
(never delaying availability, awaited on disposal): it deletes regular
files older than cleanupPeriodDays (default 30; 0 disables) across the
configured root and prior default temp roots, prunes emptied dirs, and
skips symlinks/unknown entries. Every filesystem failure is contained
and logged, so the sweep cannot fail activation or a concurrent write.
2026-08-24 15:36:51 +08:00
Dudu-0223 470af0a404 fix(web): preserve preview fetch composition 2026-08-24 14:18:15 +08:00
Dudu-0223 14e4d3f078 docs(web): document shipped fetch policy 2026-08-24 13:40:08 +08:00
Dudu-0223 9fbcea099b feat(web): require one-shot fetch approval 2026-08-24 13:38:06 +08:00
Dudu-0223 2fbe199a1c test(web): permit loopback spill fixture 2026-08-24 12:35:32 +08:00
Dudu-0223 c406560452 test(web): permit loopback integration fixture 2026-08-24 12:05:17 +08:00
Dudu-0223 9d5fa7a593 test(web): snapshot blocked loopback fetch 2026-08-24 11:57:27 +08:00
Dudu-0223 b2219bba63 fix(web): block non-public fetch destinations 2026-08-24 11:47:08 +08:00
Dudu-0223 36d8a2ae9a Merge pull request #2603 from deepseek-harness/codex/web-search-multiple-queries
Support bounded multi-query web search
2026-08-19 10:41:14 +08:00
Dudu-0223 d57c2d19db fix(web): require queries array for web search 2026-08-19 10:33:43 +08:00
Dudu-0223 6b4df99c44 fix multi-query web search review feedback 2026-08-19 10:33:43 +08:00
Dudu-0223 d792a89c8c test web search title fallback 2026-08-19 10:33:43 +08:00
Dudu-0223 b06722e2d4 support bounded multi-query web search 2026-08-19 10:33:43 +08:00
Dudu-0223 570aff0e27 refactor(team): incubate Agent Teams packages 2026-08-18 11:58:11 +08:00
Dudu-0223 0283d62c76 fix(team): address runtime review feedback 2026-08-18 11:58:11 +08:00
Dudu-0223 3546f595b9 feat(team): add durable Agent Teams runtime 2026-08-18 11:58:11 +08:00
Dudu-0223 f2653b81d7 Merge pull request #2601 from deepseek-harness/codex/subagent-report-next-step
Deliver subagent reports at the next step
2026-08-18 11:39:49 +08:00
Dudu-0223 20cd777753 Cover next-step report delivery in subagent runtime 2026-08-18 11:14:10 +08:00
Dudu-0223 d91df8cbd5 Deliver subagent reports at next step 2026-08-18 11:14:10 +08:00
Dudu-0223 c778b5b0db fix(subagent): address background-first review 2026-08-11 21:52:59 +08:00
Dudu-0223 98d4551597 docs: refresh module graph 2026-08-11 21:52:59 +08:00
Dudu-0223 8344d64363 feat(subagent): default continuable delegation to background 2026-08-11 21:52:59 +08:00
Dudu-0223 431fb4b035 feat(subagent): add explicit child reports 2026-08-02 12:51:10 +08:00
Dudu-0223 9a7be21b7f fix(host): preserve subagent continuation ownership 2026-08-02 12:51:10 +08:00
Dudu-0223 8a518e353b feat(web): rewrite subagent conversations for FIFO activation 2026-08-02 12:51:09 +08:00
Dudu-0223 f0ab04273d fix(web): deduplicate subagent navigation 2026-08-02 12:51:09 +08:00
Dudu-0223 16ffd63115 feat(web): add nested subagent conversations 2026-08-02 12:51:09 +08:00
Dudu-0223 a27492507d feat(web): add subagent conversation transport 2026-08-02 12:51:09 +08:00
Dudu-0223 a977ef30ee fix(subagent): preserve published run failures 2026-08-02 12:51:09 +08:00
Dudu-0223 8b0a7a5d8d fix(subagent): close stacked catalog integration gaps 2026-08-02 12:51:09 +08:00
Dudu-0223 a967f5174a test(snapshot): update unlabeled workflow children 2026-08-02 12:51:09 +08:00
Dudu-0223 03d95d0d84 fix(subagent): keep one-shot labels optional 2026-08-02 12:51:09 +08:00
Dudu-0223 774ee34b9a feat(subagent): catalog one-shot child sessions 2026-08-02 12:51:09 +08:00
Dudu-0223 de6e572e51 fix(subagent): make session query peer optional 2026-08-02 12:51:09 +08:00
Dudu-0223 2e5c439ecf fix(subagent): decouple child listing runtime 2026-08-02 12:51:09 +08:00
Dudu-0223 30b9d0464a fix: address codex review round 3
Recheck the listing cancellation signal after each child inspection settles:
a per-child read failing with a diagnostic-mapped code during an abort
previously bypassed the inspection's own checkpoints, letting a cancelled
single-child scan return a successful result.
2026-08-02 12:51:09 +08:00
Dudu-0223 13631134aa fix: address codex review round 2
- listChildren() checks its cancellation signal before starting the corpus
  trace and immediately after it resolves, so a pre-aborted or trace-time
  abort fails CANCELLED instead of returning a successful empty result.
- Corrected the persistence-repair claims: session query resolves persisted
  candidates through the non-mutating inspect() read, so listing is
  storage-read-only and a torn child tail is surfaced (shorter valid prefix)
  rather than repaired; the Agent Note, README, and JSDoc now state that,
  and the zh pair is re-recorded.
2026-08-02 12:51:09 +08:00
Dudu-0223 4bd98407a9 fix: address codex review round 1
- listChildren() takes an optional AbortSignal and rechecks it after every
  un-signalled session-query await (the cold-resume cooperative-cancellation
  boundary); list_agents forwards exec.signal so the registry's drain of
  started tool bodies cannot block on a slow or large catalog.
- The list_agents description now presents running/complete as a stored-record
  snapshot and defers deliverability to send_message, matching the ownership-
  conflict semantics the service tests pin.
2026-08-02 12:51:09 +08:00
Dudu-0223 8bbae77ae6 docs: regenerate module graph; drop unused devDep 2026-08-02 12:51:09 +08:00
Dudu-0223 4240c7dd7b feat(subagent): durable child catalog and list_agents
Implements the durable-subagent-catalog RFC: SubagentControlService.listChildren()
enumerates a parent's direct continuable children from one sessionQuery trace,
validates each child's sole subagent/descriptor event (now carrying the durable
creation label), and returns one ordered SubagentListEntry[] with per-child
corrupt/unsupported/unavailable diagnostics. The list_agents tool ships as a
separately loadable plugin of dsh-tool-subagent-control requiring sessionQuery
at load; send_message stays usable without it.
2026-08-02 12:51:09 +08:00
Dudu-0223 c7acc8fc6c docs: finalize list_agents RFC contract 2026-08-02 12:51:09 +08:00
Dudu-0223 e63f22f2f1 temp commit 2026-08-02 12:51:09 +08:00
Dudu-0223 ceaef2c3d0 Clarify durable subagent catalog and list_agents behavior 2026-08-02 12:51:09 +08:00
Dudu-0223 fc59b63c8c docs: propose durable subagent catalog 2026-08-02 12:51:09 +08:00
Dudu-0223 f4a65a34e6 cleanup(subagent): hide manager-wide continuation drain 2026-08-02 12:51:08 +08:00
Dudu-0223 191c8cd640 fix(acp): scope connection-owned continuation drain 2026-08-02 12:51:08 +08:00
Dudu-0223 8f3613c4b7 fix(subagent): close final continuation races 2026-08-02 12:51:08 +08:00
Dudu-0223 a91b20f6be fix(subagent): close continuation lifecycle gaps 2026-08-02 12:51:08 +08:00
Dudu-0223 853f4d5cfb refactor(subagent): drop host-user authority and split lifecycle publication
Remove the host-user continuation capability and the public residency query,
then separate the seam's public event payloads from its internal lifecycle
control interfaces.

`followup()` now takes the exact live direct parent `Agent` instead of a
`SubagentAuthority` union. No production adapter ever supplied user authority,
so the `UserAuthorityGrant` brand token existed only to stop a forged
discriminant from bypassing the direct-parent check — deleting the branch
retires the token, its mint method, and that attack surface together.

Narrowing `parent` from `Agent | undefined` to `Agent` removes three special
cases, including the path where a parentless epoch dispatched its lifecycle
events unscoped. Scoped-versus-global dispatch is now decided by the event, not
by whether a caller happened to have a parent.

`activationState()` had no caller; `ActivationState`, `ActivationObserver`, and
`ContinuationHost` are package-private.

New `src/lifecycle.ts` owns the contained emitter, the one-shot run observer,
and the Activation observer, while `SubagentRunInfo`/`SubagentRunEndInfo` move
to `src/types.ts` beside the other consumer-facing contracts. Those payloads are
public API — dsh-jsonrpc, hooks-claude, and the package invariant all consume
them — whereas the observer is a contract between two in-package collaborators,
so they no longer share a home merely for both being lifecycle-shaped. The
service keeps ownership of the scope carrier: `scopeTarget()` composes the
service's own context filter, so a narrowed stand-in would silently change
scope filtering.

Also drops now-unused dsh-tasks-local and dsh-tool-tasks dev dependencies, and
corrects the README claim that a pre-residency failure emits a terminal edge —
that path only ever rethrew.
2026-08-02 12:51:08 +08:00
Dudu-0223 7428cdf41e fix(subagent): address codex review round 3
- Make host-user authority unforgeable. `{ kind: 'user' }` was a bare
  discriminant, so any plugin holding `ctx.subagents` — including
  model-generated cordis_mount code, which the advanced ACP composition ships
  alongside continuable subagents — could construct it and skip the
  direct-parent check for any known child id. It now carries an opaque grant
  that only SubagentService.userAuthority() mints, which composition hands to
  trusted host adapters; a model-facing tool uses parent authority from its own
  execution context.
- Reconcile a delivery discarded inside its own admission window. An enqueue
  listener that cancels fires the discard before followup() returns, so the
  discard listener could not clear an id it had not seen; submit() retained it
  and residency stayed `running` until an explicit drain.
- Recheck the caller signal after materialization. An abort landing between
  publication and inbox acceptance still submitted the prompt and returned both
  ids; it now rolls the child back.
- Stop promising the model transcript access that no shipped continuable config
  mounts. The tools now state only that a background child does not report back.
- Restate the implemented note as shipped state rather than a proposal, so it
  works as current authority.
2026-08-02 12:51:08 +08:00
Dudu-0223 cbaceb73a9 fix(subagent): address codex review round 2
Round 1 traded one teardown ordering problem for another. The observer now
splits capture from emission, which satisfies both consumers at once:

- Terminal facts are captured while the child is still registered, so consumers
  that resolve it for the child's log and scope still work.
- The edge is emitted only after handle disposal settles, so a rejecting scoped
  cleanup is reported as a failed epoch instead of a successful one.

Also:

- Keep the Activation in the map until disposal settles. Removing it first let a
  racing followup() see no Activation and cold-resume into the still-registered
  agent, and let a concurrent forest drain skip a still-disposing child and
  release its parent first.
- Derive terminal telemetry from this epoch's event suffix rather than the whole
  session, so a cold resume whose prompt is blocked no longer reports the
  previous epoch's answer and turn reason.
- Cancel the ACP bridge's own prompts before awaiting the descendant drain: a
  drain can block on persistence, and the top-level agents must not keep running
  model and tool work for its whole duration.
2026-08-02 12:51:08 +08:00