Commit Graph
85 Commits
Author SHA1 Message Date
pku-xht cd59acd6f6 refactor(schedule): simplify request zone authority 2026-08-06 19:33:19 +08:00
pku-xht a667ec55d6 feat(session): persist optional time zones 2026-08-06 05:06:57 +08:00
pku-xht d61059364e feat(schedule): add absolute-time reminders 2026-08-06 15:03:48 +08:00
pku-xht 31e83f8ee7 fix(session): render observer failures safely 2026-08-08 01:17:06 +08:00
pku-xht 93c9782fda fix(session): contain checkpoint dispatch resolution 2026-08-08 01:03:46 +08:00
pku-xht fa466cf673 fix(schedule): stop cancelled mutations 2026-08-07 23:59:57 +08:00
pku-xht c4d9e2edb6 fix(schedule): validate restored seed logs 2026-08-07 23:11:25 +08:00
pku-xht cbda2b9d43 fix(schedule): narrow persistence error operation 2026-08-07 22:43:21 +08:00
pku-xht e21f331078 docs(schedule): correct durable change callback timing 2026-08-07 20:41:43 +08:00
pku-xht 9d73b527de fix(schedule): close concurrent durability gaps 2026-08-07 19:06:34 +08:00
pku-xht 76da9e3f9f docs(client): complete merged UI inventory 2026-08-07 18:22:07 +08:00
pku-xht 9c5d23f0ce test(cli): pin removed web config alias 2026-08-07 17:14:14 +08:00
pku-xht e8c7d4bef8 docs(schedule): align simplified persistence contracts 2026-08-07 17:08:56 +08:00
pku-xht b669ae46bc fix(schedule): preserve resumed ancestor receipts 2026-08-06 07:03:49 +08:00
pku-xht 2e187ccf14 fix(schedule): close review gaps 2026-08-06 06:35:50 +08:00
pku-xht c3058e8d46 fix(client): preserve paged event views during gap repair 2026-08-06 05:14:08 +08:00
pku-xht acbeaf2d74 fix(schedule): preserve late views during pagination 2026-08-06 04:47:31 +08:00
pku-xht 75d9676a77 test(schedule): close coverage gaps 2026-08-06 04:06:13 +08:00
pku-xht 8b69252664 feat(schedule): add durable after reminders 2026-08-06 03:47:37 +08:00
pku-xht f7e7851e3f feat(schedule): add durable after reminders 2026-08-05 19:00:02 +08:00
pku-xht a229b42e24 feat(schedule): add durable after package 2026-08-05 17:10:52 +08:00
pku-xht f09986a02b Merge commit '6da4bd5f593e2f633df9e99721fb62e559b56012' into codex/product-providers-pr2-claude-code 2026-08-05 07:40:22 +08:00
pku-xht 9e91e206d4 refactor(subagent-codex): centralize cancellation settlement 2026-08-05 07:36:54 +08:00
pku-xht 6d8095825b fix(subagent-claude-code): tighten provider evidence 2026-08-05 07:32:27 +08:00
pku-xht 80adf8c7f4 Merge commit '3e630a3bce76aedf0fe351cf7b22d1f28b7fb731' into codex/product-providers-pr2-claude-code
# Conflicts:
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.md
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
2026-08-05 07:09:16 +08:00
pku-xht 2e00a93eda fix(subagent-codex): support Windows command shims 2026-08-05 07:03:04 +08:00
pku-xht ed6f0c8774 Merge commit 'ecbb7896d3deeeac0bca71cef6b0d17e5b23896b' into codex/product-providers-pr2-claude-code
# Conflicts:
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.md
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
#	docs/capability-seams.md
#	docs/module-graph.md
#	packages/subagent/README.i18n.yaml
#	packages/subagent/README.md
#	packages/subagent/README.zh.md
#	scripts/gen-doc-graphs.ts
2026-08-05 06:40:45 +08:00
pku-xht 13d7318dac Fix provider diagnostics and ownership docs 2026-08-05 06:12:42 +08:00
pku-xht e2b73d278c Regenerate module graph 2026-08-05 05:34:32 +08:00
pku-xht 0ccd847ef3 Fix timer bounds and ACP teardown ownership 2026-08-05 05:24:23 +08:00
pku-xht ecedbbda56 Merge commit '4cca942ed6ce3087d3cbe0f95a48209e51241254' into codex/product-providers-pr2-claude-code 2026-08-05 04:49:25 +08:00
pku-xht 075b6b0756 fix(subagent-codex): drop unused initialize metadata gate 2026-08-05 04:45:11 +08:00
pku-xht 17caa8a676 Merge commit 'a9cc0fddb40be295c43cb2badb4cbcb2b032556c' into codex/product-providers-pr2-claude-code
# Conflicts:
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.md
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
#	docs/core-data-structures/subprocess.i18n.yaml
#	packages/subprocess/subprocess/README.i18n.yaml
2026-08-05 04:41:27 +08:00
pku-xht a49ef7581f Fix Codex wire frames and bound grace timers 2026-08-05 04:21:29 +08:00
pku-xht 73f33c1ddf Merge synchronized PR1 into Claude provider
# Conflicts:
#	docs/capability-seams.md
2026-08-05 02:34:58 +08:00
pku-xht c4650c0eab Merge current master into Codex provider
# Conflicts:
#	docs/capability-seams.md
2026-08-05 02:21:49 +08:00
pku-xht 98dc55511d Merge PR1 DeepSeek e2e into Claude provider
# Conflicts:
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.md
#	.agents/notes/proposed/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
2026-08-05 02:17:02 +08:00
pku-xht 01704b9a3a Add Codex DeepSeek credentialed e2e 2026-08-05 01:30:42 +08:00
pku-xht 96d6853a96 Preserve Claude SDK child environment 2026-08-05 01:07:58 +08:00
pku-xht 34b6cb91ed Keep provider adapters private 2026-08-05 00:26:39 +08:00
pku-xht 2cf637480c Merge PR1 review fixes into Claude provider
# Conflicts:
#	vitest.config.ts
2026-08-04 23:47:33 +08:00
pku-xht 46db608843 Align Codex provider review evidence 2026-08-04 23:42:35 +08:00
pku-xht 606a65740f Merge commit 'ba21ca122496e1038993378753de863e571cdc2a' into codex/product-providers-pr2-claude-code 2026-08-04 22:52:07 +08:00
pku-xht a93968bf93 fix(subagent-codex): await managed tree exit 2026-08-04 22:36:31 +08:00
pku-xht 32f829c4e6 fix(subagent): complete product provider lifecycle 2026-08-04 22:18:35 +08:00
pku-xht d780902679 refactor(subagent): share provider dispose window 2026-08-04 21:25:48 +08:00
pku-xht 8dae2ee5eb Merge PR1 Codex provider fixes into PR2 2026-08-04 21:01:32 +08:00
pku-xht be56f64b7a feat(subagent): add Claude Code provider 2026-08-04 20:57:55 +08:00
pku-xht 74f2ab90e1 refactor(subprocess): derive termination state 2026-08-04 20:55:29 +08:00
pku-xht 8067701b92 fix(subprocess): stop escalation after tree exit 2026-08-04 20:45:12 +08:00
pku-xht 451c2929ed fix(subagent): close terminal teardown races 2026-08-04 20:26:45 +08:00
pku-xht f96acad438 fix(subagent): preserve Codex fatal and grace semantics 2026-08-04 19:55:39 +08:00
pku-xht c09b20f96b fix(subagent): finalize Codex provider composition 2026-08-04 18:38:05 +08:00
pku-xht 8a24a68333 Merge origin/master at 52ec34f796 2026-08-04 18:01:22 +08:00
pku-xht 8e4a1b3396 fix(subagent): keep Codex provider opt-in 2026-08-04 18:00:09 +08:00
pku-xht d7ee0e798a feat(subagent): mount Codex provider in shipped CLI 2026-08-04 17:34:19 +08:00
pku-xht 36b562e4e9 fix(subagent): close Codex provider review findings 2026-08-04 17:13:38 +08:00
pku-xht 9d65894314 docs(agent-notes): replace product provider proposal 2026-08-04 16:45:04 +08:00
pku-xht 270b8e0acc fix(subagent): close Codex provider CI gaps 2026-08-04 16:25:38 +08:00
pku-xht 1daa35b6e3 feat(subagent): add Codex product provider 2026-08-04 16:02:17 +08:00
pku-xht f899b857a6 review fix: explain one-send turns plainly 2026-07-20 15:48:42 +08:00
pku-xht 7ffac135a6 review fix: disambiguate steering checkpoint timing 2026-07-20 14:51:38 +08:00
pku-xht c16e1078f5 docs(agent): clarify late steering timing 2026-07-20 14:42:55 +08:00
pku-xht 7d7d69e225 review fix: cover post-cancel replacement 2026-07-20 13:20:51 +08:00
pku-xht da70e47048 review fix: preserve idle waiter quiescence 2026-07-20 13:15:11 +08:00
pku-xht d9a9c223e4 Merge remote-tracking branch 'origin/master' into codex/send-one-turn 2026-07-20 12:52:17 +08:00
pku-xht d59149a221 review fix: restore idle after between-turn cancellation 2026-07-20 12:51:44 +08:00
pku-xht a6e96c47f3 review fix: pin ordinary-send batching removal 2026-07-20 11:53:49 +08:00
pku-xht 0891465ee0 Merge origin/master into codex/send-one-turn 2026-07-20 11:52:30 +08:00
pku-xht 915c727e14 review fix: distinguish checkpoint settlement 2026-07-17 17:38:39 +08:00
pku-xht 0b720942df review fix: qualify one-turn documentation 2026-07-17 17:31:35 +08:00
pku-xht 2cf689301c review fix: close one-turn lifecycle gaps 2026-07-17 17:27:53 +08:00
pku-xht 55f61189b1 Merge remote-tracking branch 'origin/master' into codex/send-one-turn
# Conflicts:
#	docs/architecture.md
#	docs/core-data-structures/core.md
#	docs/rfc/implemented/feature/2026-06-30-interception-seams.md
#	packages/core/agent-loop/src/loop.ts
#	packages/core/agent/src/types.ts
2026-07-17 17:25:06 +08:00
pku-xht aa4e629874 feat(agent-loop): give each send its own turn 2026-07-17 17:14:52 +08:00
pku-xht 97c5ca940d review fix: preserve blocked-prompt RFC contract 2026-07-17 16:58:56 +08:00
pku-xht a425aff586 docs(rfc): propose one-send-one-turn simplification 2026-07-17 16:52:35 +08:00
pku-xht dd2f37b80f fix(workflow-workerthread): tighten post-result promptness waits back down
Review follow-up: the blanket 10s default correctly targets worker-thread
cold-start races (starting, first-script-line, async child-registration
messages — genuinely CPU-bound under CI contention), but four waits assert
something different — that the HOST reacted PROMPTLY to an event that
already happened (a settled result, an observed worker death). Those had no
cold-start left to wait on, so the generous default just widened the window
a real regression could hide in.

Verified by injecting a 6s delay into the settle-reap's abort call: the
un-overridden helper's test still passed in ~6s. The same mutation now fails
in ~1s with the explicit 1000ms override restored on all four sites (the
abort-on-settle test's own assertion, the two worker-death cancel/dispose
reap checks, and the dispose-ack-race check). The other 12 waits keep the
10s default — they run BEFORE a result is awaited, waiting on the worker to
actually start rather than on a host reaction. Doc comment corrected to
describe the split instead of claiming every wait is a cold-start race.
2026-07-10 20:48:14 +08:00
pku-xht 64b4e2ed2d test(workflow-workerthread): flake-proof the lifecycle spec's waits under CI load
The spec's 16 vi.waitFor sites used the 1s default timeout to wait for
worker-thread startup and child registration — CPU-bound work that blows
past 1s on a contended runner. The CI coverage lane (4 vitest workers plus
suites that spawn real subprocesses) hit this 3 times across 4 recent PR
runs, each a different subset of the cancellation/worker-death tests, each
green on rerun.

Every wait now goes through a shared helper with a 10s bound, and the file
sets a 30s test timeout to make room for it. The one deliberately tight
wait keeps its 800ms bound through the helper's override — it proves the
host (not the wedged worker's later loop turn) delivered the cancel, so a
generous bound would erase what it tests. No behavior under test changed.
2026-07-10 16:43:41 +08:00
pku-xht 62627d7625 fix(subagent-acp): contain onError sink exceptions to keep result from rejecting
spec.onError is a caller-supplied callback boundary, but the flattening
catch invoked it unguarded: a throwing sink rejected the whole async result,
breaking the seam's "result never rejects on a child-level failure"
contract (and docs/defensive-patterns.md's contain-callback-exceptions
rule). The sink's own throw is now swallowed — named as such — while the
original child failure still settles as stopReason 'error'. Regression test
drives a spawn failure through a throwing sink and asserts result resolves.

Same defect as the codex backend's, fixed there on PR #240; this is the
symmetric fix for the already-merged ACP backend.
2026-07-10 16:42:20 +08:00
pku-xht 0ba6d832f8 docs: regenerate the module graph on the merged tree
The master merge (5309ea54) resolved the module-graph conflict by hand,
placing the subagent-subprocess dependency-table row ahead of util/timeout's;
the generator's deterministic order (group order, util first) wants them
swapped, so the freshness gate (gen-module-graph --check) failed CI's static
job. Regenerated on the merged tree — a two-line swap; every other generated
catalog was already resolution-fresh (regen-all changed nothing else).
2026-07-09 14:19:36 +08:00
pku-xht c321819053 rename: @deepseek-ai/dsh-subagent-process -> @deepseek-ai/dsh-subagent-subprocess
The extracted library's name sat one edit away from @deepseek-ai/dsh-subagent-inprocess
(process/inprocess), inviting a typo'd import to silently resolve to the wrong
package. subagent-subprocess also reads as the deliberate counterpart to
subagent-inprocess (in-process vs. subprocess), matching how the two shared
drivers actually differ.

Package directory, npm name, module doc, JSDoc module tags, test-file name and
its temp-dir prefixes, the subagent-acp import and its Config/tsconfig/package.json
references, root tsconfig.json/tsconfig.build.json/knip.json entries, and the
packages/subagent group README all renamed together; regenerated
docs/module-graph.md and docs/config-catalog.md. Pure rename — no behavior,
export, or Config shape changed.
2026-07-09 13:42:03 +08:00
pku-xht a11000030a docs(subagent-acp): point the env-scrub section at its one home
The scrub pattern and layering semantics live in the dsh-subagent-process
README (the fact's home since the extraction); the ACP section restated them
in full — two prose copies drift word by word until they disagree (the
one-home-per-fact rule in docs/AGENTS.md). The section now links the library
and keeps only the backend's own story: which credential enters via
config.env and why.
2026-07-09 10:42:41 +08:00
pku-xht 2471e2b2bb fix review finding: exitsWithin cleans up its listener and timer on both arms
Each timed-out wait used to leave the once('exit') listener from its inner
waitForExit attached to the child; the dispose ladder accumulates at most a
couple, but in a shared library a caller polling exitsWithin in a loop would
pile listeners onto one child (MaxListenersExceededWarning at 11) and retain
their closures. The race now owns its wiring: the timeout arm removes the
exit listener, the exit arm clears the (still unref'ed) grace timer, and an
already-exited child short-circuits true without attaching anything. Tests
pin listenerCount('exit') === 0 after every outcome.
2026-07-09 10:42:34 +08:00
pku-xht 7ccf31a59b fix review finding: root-portable rm-failure injection in the config-dir test
The best-effort-remove test provoked a real EACCES via a chmod-000 subtree,
which only fails for unprivileged users — under root, recursive rm ignores
permission bits, deleting the subtree: the existsSync assertion goes red and
the swallow branch loses coverage, failing the per-file gate. The rejection
is now injected deterministically at the node:fs/promises boundary (rm
wrapped with a real-passthrough vi.fn; one test queues a single rejection),
the fs-failure boundary being exactly the non-deterministic seam the testing
policy sanctions mocking. Everything else in the suite stays on the real
filesystem, and the swallow contract stays error-kind agnostic.
2026-07-09 10:20:42 +08:00
pku-xht cdd1ce2ad4 feat(subagent): extract dsh-subagent-process shared out-of-process machinery
The credential env scrub (SENSITIVE_ENV_PATTERN/buildChildEnv), the
spawn-failure capture (spawnFailure), the child-exit waits
(waitForExit/exitsWithin), and the stdin-EOF -> SIGTERM -> SIGKILL dispose
ladder move out of subagent-acp into a new pure library package (the
subagent-inprocess shape), with the ladder taking its two grace periods as
parameters — defaults stay in the plugin Config. New isolated-config-dir
helpers (mkdtemp create, best-effort remove; a pinned dir is never removed)
land alongside for the CLAUDE_CONFIG_DIR / CODEX_HOME redirection the RFC
names.

The ACP backend migrates onto the library with no semantic change: its suite
passes with import-path edits only. bash-local keeps its sibling copy, per
the RFC's blast-radius call.

RFC: docs/rfc/proposed/feature/2026-07-07-claude-code-and-codex-subagent-backends.md
2026-07-08 17:09:53 +08:00