@zhushanwen/subagent-core 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/dist/{chunk-4KN4TTG7.js → chunk-43ONBFZX.js} +1 -1
  2. package/dist/{chunk-X7SZ5HLQ.js → chunk-V3VHZ2VX.js} +20 -27
  3. package/dist/execution/engine/engines/zcode/constants.cjs +29 -41
  4. package/dist/execution/engine/engines/zcode/constants.d.cts +65 -53
  5. package/dist/execution/engine/engines/zcode/constants.d.ts +65 -53
  6. package/dist/execution/engine/engines/zcode/constants.js +17 -27
  7. package/dist/execution/engine/engines/zcode/reader.d.cts +2 -1
  8. package/dist/execution/engine/engines/zcode/reader.d.ts +2 -1
  9. package/dist/execution/engine/engines/zcode/reader.js +2 -2
  10. package/dist/index.cjs +17100 -14082
  11. package/dist/index.d.cts +5336 -4033
  12. package/dist/index.d.ts +5336 -4033
  13. package/dist/index.js +17020 -14055
  14. package/dist/{types-DpUO16pj.d.cts → types-C3fE3R9x.d.cts} +280 -112
  15. package/dist/{types-DpUO16pj.d.ts → types-C3fE3R9x.d.ts} +280 -112
  16. package/dist.bundle/index.cjs +34933 -0
  17. package/package.json +3 -3
  18. package/src/__tests__/agent-opts-resolver-schema-prompt.test.ts +0 -1
  19. package/src/__tests__/append-system-prompt-assembly.test.ts +8 -7
  20. package/src/__tests__/fr4-get-state-handshake.test.ts +2 -2
  21. package/src/__tests__/m2-append-content-probe.test.ts +0 -1
  22. package/src/__tests__/manifest-store.test.ts +10 -9
  23. package/src/__tests__/record-store-cache.test.ts +0 -2
  24. package/src/__tests__/record-store-index.test.ts +1 -2
  25. package/src/__tests__/review-fix-loop-script.test.ts +4 -2
  26. package/src/__tests__/review-fix-loop-utils.test.ts +10 -10
  27. package/src/__tests__/robustness-low-batch1.test.ts +6 -5
  28. package/src/__tests__/robustness-medium-batch1.test.ts +2 -2
  29. package/src/__tests__/robustness-medium-batch2.test.ts +17 -6
  30. package/src/__tests__/robustness-medium-batch4.test.ts +2 -2
  31. package/src/__tests__/session-runner.test.ts +1 -1
  32. package/src/core/__tests__/host-services.test.ts +2 -2
  33. package/src/core/__tests__/logger.test.ts +1 -1
  34. package/src/core/error-message.ts +9 -0
  35. package/src/core/host-services.ts +21 -5
  36. package/src/core/notify-ports.ts +18 -5
  37. package/src/execution/__tests__/agent-profile.test.ts +4 -4
  38. package/src/execution/__tests__/agent-registry.test.ts +370 -0
  39. package/src/execution/__tests__/agent-result-mapper.test.ts +18 -2
  40. package/src/execution/__tests__/agents-assembly.test.ts +2 -2
  41. package/src/execution/__tests__/alive-store.test.ts +1 -1
  42. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +6 -6
  43. package/src/execution/__tests__/chat-engine-routing.test.ts +68 -33
  44. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +4 -4
  45. package/src/execution/__tests__/cold-resurrect.test.ts +283 -0
  46. package/src/execution/__tests__/collect-budget.test.ts +291 -0
  47. package/src/execution/__tests__/collect-coordinator-service.test.ts +327 -0
  48. package/src/execution/__tests__/collect-coordinator.test.ts +371 -0
  49. package/src/execution/__tests__/collect-mixed-dispatch.test.ts +262 -0
  50. package/src/execution/__tests__/config-collect-sync.test.ts +120 -0
  51. package/src/execution/__tests__/config.test.ts +1 -1
  52. package/src/execution/__tests__/delivery-methods.test.ts +75 -62
  53. package/src/execution/__tests__/descendant-sweep-guards.test.ts +220 -0
  54. package/src/execution/__tests__/descendant-sweep.test.ts +6 -6
  55. package/src/execution/__tests__/dialog-queue.test.ts +2 -2
  56. package/src/execution/__tests__/engine-model-validation.test.ts +741 -0
  57. package/src/execution/__tests__/epipe-fallback.test.ts +29 -24
  58. package/src/execution/__tests__/execute-and-await-worktree.test.ts +21 -91
  59. package/src/execution/__tests__/execute-nesting.test.ts +34 -188
  60. package/src/execution/__tests__/execution-record.test.ts +217 -60
  61. package/src/execution/__tests__/execution-runtime-face.test.ts +5 -5
  62. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +4 -4
  63. package/src/execution/__tests__/finalize-record.test.ts +173 -17
  64. package/src/execution/__tests__/finalized-marker.test.ts +1 -1
  65. package/src/execution/__tests__/gc-timer.test.ts +56 -3
  66. package/src/execution/__tests__/get-record-for-action-restart.test.ts +12 -12
  67. package/src/execution/__tests__/get-state-handshake.test.ts +1 -1
  68. package/src/execution/__tests__/helpers/mock-extension-api.ts +1 -1
  69. package/src/execution/__tests__/helpers/session-runner-mocks.ts +113 -0
  70. package/src/execution/__tests__/helpers/spawn-mock.ts +150 -3
  71. package/src/execution/__tests__/helpers/subagent-service-mocks.ts +137 -0
  72. package/src/execution/__tests__/keep-alive-no-progress.test.ts +50 -148
  73. package/src/execution/__tests__/kill-all-escalation.test.ts +2 -2
  74. package/src/execution/__tests__/lifecycle-predicates.test.ts +1 -2
  75. package/src/execution/__tests__/manifest-parentid.test.ts +4 -4
  76. package/src/execution/__tests__/manifest-store-tmp-recovery.test.ts +1 -1
  77. package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +1 -1
  78. package/src/execution/__tests__/model-resolver.test.ts +2 -2
  79. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +23 -121
  80. package/src/execution/__tests__/nested-visibility.test.ts +2 -0
  81. package/src/execution/__tests__/notify-batch.test.ts +500 -0
  82. package/src/execution/__tests__/notify-ledger.test.ts +1000 -18
  83. package/src/execution/__tests__/output-collector.test.ts +117 -6
  84. package/src/execution/__tests__/pi-invocation.test.ts +36 -4
  85. package/src/execution/__tests__/record-entry-collect.test.ts +102 -0
  86. package/src/execution/__tests__/record-store.test.ts +10 -9
  87. package/src/execution/__tests__/records-cwd-isolation.test.ts +2 -2
  88. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +29 -132
  89. package/src/execution/__tests__/recursive-visibility-env.test.ts +55 -179
  90. package/src/execution/__tests__/relay-env.test.ts +12 -1
  91. package/src/execution/__tests__/rpc-mode.test.ts +2 -2
  92. package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +387 -0
  93. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +15 -9
  94. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +4 -4
  95. package/src/execution/__tests__/run-spawn-edges.test.ts +17 -15
  96. package/src/execution/__tests__/run-spawn-integration.test.ts +2 -2
  97. package/src/execution/__tests__/run-spawn-resume.test.ts +2 -2
  98. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +2 -2
  99. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +4 -4
  100. package/src/execution/__tests__/service-kill-escalation.test.ts +7 -5
  101. package/src/execution/__tests__/session-context-resolver.test.ts +0 -2
  102. package/src/execution/__tests__/session-file-gc.test.ts +36 -1
  103. package/src/execution/__tests__/session-pending.test.ts +257 -14
  104. package/src/execution/__tests__/session-reconstructor.test.ts +366 -15
  105. package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +1 -1
  106. package/src/execution/__tests__/session-runner-close-prune.test.ts +2 -2
  107. package/src/execution/__tests__/session-runner-dispatch.test.ts +489 -0
  108. package/src/execution/__tests__/session-runner-epipe.test.ts +3 -3
  109. package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +5 -4
  110. package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +290 -0
  111. package/src/execution/__tests__/session-runner-schema-env.test.ts +7 -5
  112. package/src/execution/__tests__/settled-watchdog.test.ts +282 -47
  113. package/src/execution/__tests__/spawn-args.test.ts +11 -10
  114. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +26 -23
  115. package/src/execution/__tests__/spawn-event-adapter.test.ts +3 -3
  116. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +5 -4
  117. package/src/execution/__tests__/spawned-children.test.ts +2 -1
  118. package/src/execution/__tests__/start-collect-guard.test.ts +255 -0
  119. package/src/execution/__tests__/start-sync-model-guard.test.ts +5 -5
  120. package/src/execution/__tests__/stdin-writer.test.ts +6 -4
  121. package/src/execution/__tests__/stream-sink-retirement.test.ts +6 -6
  122. package/src/execution/__tests__/subagent-actions-core.test.ts +48 -22
  123. package/src/execution/__tests__/subagent-service-message-close.test.ts +29 -26
  124. package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +21 -8
  125. package/src/execution/__tests__/subagent-service-notify-gate.test.ts +27 -22
  126. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +30 -29
  127. package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +45 -20
  128. package/src/execution/__tests__/subagent-service.test.ts +37 -30
  129. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +88 -12
  130. package/src/execution/__tests__/subprocess-agent-runner-timeout.test.ts +75 -0
  131. package/src/execution/__tests__/subprocess-agent-runner.test.ts +22 -20
  132. package/src/execution/__tests__/sync-collect-recovery.test.ts +1117 -0
  133. package/src/execution/__tests__/temp-prompt.test.ts +1 -1
  134. package/src/execution/__tests__/timeout-integration.test.ts +6 -5
  135. package/src/execution/__tests__/tombstone-store.test.ts +1 -1
  136. package/src/execution/__tests__/turn-limiter-semantics.test.ts +1 -1
  137. package/src/execution/__tests__/turn-limiter.test.ts +1 -1
  138. package/src/execution/__tests__/ui-request-handler-factory.test.ts +12 -6
  139. package/src/execution/__tests__/ui-request-handler.test.ts +4 -3
  140. package/src/execution/__tests__/ui-request-queue.test.ts +142 -2
  141. package/src/execution/__tests__/worktree-git-ops.test.ts +1 -1
  142. package/src/execution/__tests__/worktree-manager.test.ts +14 -5
  143. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +4 -3
  144. package/src/execution/__tests__/worktree-reconcile-aging.test.ts +2 -2
  145. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +1 -1
  146. package/src/execution/__tests__/worktree-registry.test.ts +1 -1
  147. package/src/execution/agent-registry.ts +74 -30
  148. package/src/execution/agent-result-mapper.ts +3 -0
  149. package/src/execution/cold-resurrect.ts +199 -0
  150. package/src/execution/collect-coordinator.ts +200 -0
  151. package/src/execution/config.ts +77 -5
  152. package/src/execution/engine/__tests__/common/capability-gate.test.ts +91 -0
  153. package/src/execution/engine/__tests__/common/data-dir.test.ts +1 -1
  154. package/src/execution/engine/__tests__/common/event-journal.test.ts +1 -1
  155. package/src/execution/engine/__tests__/common/journal-wiring.test.ts +84 -0
  156. package/src/execution/engine/__tests__/common/kill-chain.test.ts +34 -7
  157. package/src/execution/engine/__tests__/common/persona-router.test.ts +4 -5
  158. package/src/execution/engine/__tests__/common/pool-manager.test.ts +213 -53
  159. package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +149 -0
  160. package/src/execution/engine/__tests__/common/session-view-service.test.ts +499 -0
  161. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +22 -112
  162. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +15 -28
  163. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +1 -1
  164. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +12 -12
  165. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +2 -2
  166. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +21 -82
  167. package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +4 -7
  168. package/src/execution/engine/__tests__/engine-discovery.test.ts +15 -3
  169. package/src/execution/engine/__tests__/model-prompt.test.ts +15 -3
  170. package/src/execution/engine/__tests__/registry.test.ts +4 -2
  171. package/src/execution/engine/__tests__/routing.test.ts +115 -6
  172. package/src/execution/engine/common/capability-gate.ts +92 -0
  173. package/src/execution/engine/common/journal-wiring.ts +97 -0
  174. package/src/execution/engine/common/kill-chain.ts +42 -10
  175. package/src/execution/engine/common/nesting-guard.ts +66 -0
  176. package/src/execution/engine/common/persona-router.ts +18 -8
  177. package/src/execution/engine/common/pool-manager.ts +332 -78
  178. package/src/execution/engine/common/session-view-service.ts +506 -0
  179. package/src/execution/engine/common/session-view-types.ts +125 -0
  180. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +174 -28
  181. package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +257 -0
  182. package/src/execution/{argv-mirror.ts → engine/engines/pi/argv-mirror.ts} +43 -21
  183. package/src/execution/{get-state-handshake.ts → engine/engines/pi/get-state-handshake.ts} +1 -1
  184. package/src/execution/{output-collector.ts → engine/engines/pi/output-collector.ts} +108 -19
  185. package/src/execution/engine/engines/pi/pi-engine.ts +434 -38
  186. package/src/execution/{pi-invocation.ts → engine/engines/pi/pi-invocation.ts} +2 -2
  187. package/src/execution/engine/engines/pi/reader.ts +11 -0
  188. package/src/execution/engine/engines/pi/registration.ts +4 -2
  189. package/src/execution/{session-runner.ts → engine/engines/pi/session-runner.ts} +617 -412
  190. package/src/execution/{spawn-event-adapter.ts → engine/engines/pi/spawn-event-adapter.ts} +75 -34
  191. package/src/execution/{stdin-writer.ts → engine/engines/pi/stdin-writer.ts} +10 -9
  192. package/src/execution/{temp-prompt.ts → engine/engines/pi/temp-prompt.ts} +2 -2
  193. package/src/execution/{turn-limiter.ts → engine/engines/pi/turn-limiter.ts} +1 -1
  194. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +54 -27
  195. package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +321 -0
  196. package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +13 -12
  197. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +7 -210
  198. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +6 -110
  199. package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +247 -0
  200. package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +451 -0
  201. package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +20 -8
  202. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +77 -110
  203. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +26 -320
  204. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +210 -0
  205. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +353 -0
  206. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +282 -0
  207. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +372 -0
  208. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +48 -148
  209. package/src/execution/engine/engines/zcode/appserver-launcher.ts +167 -0
  210. package/src/execution/engine/engines/zcode/connection.ts +24 -11
  211. package/src/execution/engine/engines/zcode/constants.ts +75 -71
  212. package/src/execution/engine/engines/zcode/golden-sample.ts +8 -46
  213. package/src/execution/engine/engines/zcode/parser.ts +12 -346
  214. package/src/execution/engine/engines/zcode/preparer.ts +12 -143
  215. package/src/execution/engine/engines/zcode/session-channel.ts +351 -39
  216. package/src/execution/engine/engines/zcode/zcode-engine.ts +665 -760
  217. package/src/execution/engine/host-task-spec.ts +32 -36
  218. package/src/execution/engine/model-validation.ts +177 -0
  219. package/src/execution/engine/port.ts +24 -6
  220. package/src/execution/engine/routing.ts +75 -1
  221. package/src/execution/engine/types.ts +30 -103
  222. package/src/execution/execution-record.ts +229 -144
  223. package/src/execution/finalize-record.ts +141 -99
  224. package/src/execution/idle-gc.ts +28 -0
  225. package/src/execution/lifecycle-predicates.ts +1 -1
  226. package/src/execution/notifier.ts +234 -25
  227. package/src/execution/notify-host.ts +232 -0
  228. package/src/execution/record-entry.ts +16 -0
  229. package/src/execution/record-store.ts +280 -103
  230. package/src/execution/round-settlement.ts +93 -0
  231. package/src/execution/session-file-gc.ts +96 -62
  232. package/src/execution/session-reconstructor.ts +256 -143
  233. package/src/execution/sessions-index.ts +117 -47
  234. package/src/execution/settled-watchdog.ts +264 -52
  235. package/src/execution/subagent-actions-core.ts +84 -28
  236. package/src/execution/subagent-service.ts +1225 -964
  237. package/src/execution/subprocess-agent-runner.ts +144 -97
  238. package/src/execution/sync-rebuild.ts +87 -0
  239. package/src/execution/types.ts +72 -0
  240. package/src/execution/ui-request-handler-factory.ts +102 -74
  241. package/src/execution/ui-request-queue.ts +50 -19
  242. package/src/index.ts +442 -316
  243. package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +1 -1
  244. package/src/orchestration/__tests__/agent-call-stream.test.ts +2 -2
  245. package/src/orchestration/__tests__/args-validator.test.ts +14 -0
  246. package/src/orchestration/__tests__/config-loader.test.ts +1 -1
  247. package/src/orchestration/__tests__/error-recovery-rebuild-failure.test.ts +1 -1
  248. package/src/orchestration/__tests__/error-recovery-terminal-hardening.test.ts +11 -9
  249. package/src/orchestration/__tests__/execute-agent-call.test.ts +151 -11
  250. package/src/orchestration/__tests__/file-run-store-prune.test.ts +1 -1
  251. package/src/orchestration/__tests__/file-run-store-throttle.test.ts +1 -1
  252. package/src/orchestration/__tests__/file-run-store.test.ts +7 -6
  253. package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +2 -2
  254. package/src/orchestration/__tests__/lifecycle-abort-broadcast-signal.test.ts +1 -1
  255. package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +3 -3
  256. package/src/orchestration/__tests__/lifecycle.test.ts +7 -5
  257. package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +1 -1
  258. package/src/orchestration/__tests__/review-fix-loop-scriptpath-failfast.test.ts +1 -1
  259. package/src/orchestration/__tests__/run-snapshot.test.ts +8 -5
  260. package/src/orchestration/__tests__/script-generate.test.ts +5 -5
  261. package/src/orchestration/__tests__/script-lint.test.ts +17 -0
  262. package/src/orchestration/__tests__/skill-discovery.test.ts +2 -2
  263. package/src/orchestration/__tests__/test-mocks.ts +2 -0
  264. package/src/orchestration/__tests__/worker-exit-without-result.test.ts +7 -6
  265. package/src/orchestration/__tests__/worker-message-pump-finalize-run.test.ts +229 -0
  266. package/src/orchestration/__tests__/{error-recovery-handlers.test.ts → worker-message-pump-handlers.test.ts} +27 -19
  267. package/src/orchestration/__tests__/{error-recovery-postmessage-defense.test.ts → worker-message-pump-postmessage-defense.test.ts} +8 -8
  268. package/src/orchestration/__tests__/{error-recovery-serialize-failed-result.test.ts → worker-message-pump-serialize-failed-result.test.ts} +2 -2
  269. package/src/orchestration/__tests__/{error-recovery-workflow-call.test.ts → worker-message-pump-workflow-call.test.ts} +1 -1
  270. package/src/orchestration/__tests__/worker-pending-timeout-abort.test.ts +1 -1
  271. package/src/orchestration/__tests__/worker-script-builder.test.ts +1 -1
  272. package/src/orchestration/__tests__/workflow-files.test.ts +10 -10
  273. package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +1 -1
  274. package/src/orchestration/__tests__/workflow-script-registry-impl.test.ts +1 -1
  275. package/src/orchestration/agent-opts-resolver.ts +1 -1
  276. package/src/orchestration/args-validator.ts +53 -31
  277. package/src/orchestration/execute-agent-call.ts +19 -73
  278. package/src/orchestration/launcher.ts +128 -81
  279. package/src/orchestration/lifecycle.ts +43 -45
  280. package/src/orchestration/models/ports.ts +4 -4
  281. package/src/orchestration/models/run-runtime.ts +2 -2
  282. package/src/orchestration/models/trace.ts +1 -1
  283. package/src/orchestration/models/types.ts +111 -22
  284. package/src/orchestration/models/workflow-run.ts +1 -1
  285. package/src/orchestration/script-lint.ts +91 -58
  286. package/src/orchestration/{error-recovery.ts → worker-message-pump.ts} +157 -150
  287. package/src/shared/__tests__/atomic-write.test.ts +1 -1
  288. package/src/shared/__tests__/meta-parser.test.ts +151 -0
  289. package/src/shared/__tests__/resource-discovery-host-roots.test.ts +5 -5
  290. package/src/shared/__tests__/resource-discovery.test.ts +258 -215
  291. package/src/shared/atomic-write.ts +12 -9
  292. package/src/shared/meta-parser.ts +158 -84
  293. package/src/shared/model-ref.ts +15 -2
  294. package/src/shared/resource-discovery.ts +9 -183
  295. package/src/shared/schema-jsonify.ts +1 -1
  296. package/workflows/review-fix-loop-utils.cjs +151 -89
  297. package/workflows/review-fix-loop-utils.d.cts +287 -0
  298. package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
  299. package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
  300. package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
  301. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
  302. package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
  303. package/src/execution/engine/engines/zcode/__tests__/preparer-appserver.test.ts +0 -387
  304. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -710
  305. package/src/execution/engine/engines/zcode/appserver-home.ts +0 -442
  306. package/src/execution/engine/engines/zcode/appserver-probe.ts +0 -141
  307. package/src/execution/engine/engines/zcode/launcher.ts +0 -161
  308. package/src/execution/execute-options-mapper.ts +0 -115
  309. package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -288
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { computeElapsedSeconds, projectOutcome } from "./execution-record.ts";
18
18
  import { isResumable } from "./lifecycle-predicates.ts";
19
- import { SLUG_MAX_LENGTH } from "./execute-options-mapper.ts";
19
+ import { SLUG_MAX_LENGTH } from "../orchestration/models/types.ts";
20
20
  import type { ModelInfo } from "./model-resolver.ts";
21
21
  import type { SubagentService } from "./subagent-service.ts";
22
22
  import { displayAgentName } from "../shared/agent-ref.ts";
@@ -34,6 +34,7 @@ import type {
34
34
  SubagentRecord,
35
35
  } from "./types.ts";
36
36
  import { ResurrectDeniedError } from "./types.ts";
37
+ import { COLLECT_SCAN_LIMIT } from "./collect-coordinator.ts";
37
38
 
38
39
  // ============================================================
39
40
  // 常量
@@ -105,6 +106,14 @@ export interface StartHandlerInput {
105
106
  idleTimeoutMs?: number;
106
107
  /** 执行引擎(三层路由第一层:本参数 > agent frontmatter engine > config defaultEngine)。 */
107
108
  engine?: string;
109
+ /**
110
+ * 同步收集模式(subagent-sync-collect U1 foundation)。undefined = config
111
+ * collectSync.default(缺省 "async")。schema 层枚举限 "async"|"sync";运行时
112
+ * 宽收 string 与 engine 字段同风格(pi 工具框架把 schema Static 解析为 string;
113
+ * 非法值 ≠ "sync" 按 async 处理,E4 守卫用精确 "sync" 判定)。透传
114
+ * service.execute(ExecuteOptions.collect;record.collectMode 落点归 U2 接线)。
115
+ */
116
+ collect?: string;
108
117
  }
109
118
 
110
119
  /** start 领域对象(宿主 adapter 包成 bg 工具结果)。 */
@@ -209,7 +218,7 @@ export function endedMessageGuard(service: SubagentService, id: string, original
209
218
  if (original instanceof ResurrectDeniedError) return original;
210
219
  let snap: SubagentRecord | undefined;
211
220
  try {
212
- snap = service.lookupRecordAnyState(id);
221
+ snap = service.queries.lookupRecordAnyState(id);
213
222
  } catch {
214
223
  snap = undefined;
215
224
  }
@@ -340,6 +349,21 @@ export async function startHandler(
340
349
  );
341
350
  if (slug.length > SLUG_MAX_LENGTH) throw new Error(`slug must be ≤${SLUG_MAX_LENGTH} chars (got ${slug.length}). Shorten to a kebab-case label, e.g. "fix-login", "extract-urls".`);
342
351
 
352
+ // ── collect 解析(subagent-sync-collect)──
353
+ // resolved = 显式参数 ?? config collectSync.default(U2 偏差#3 接线:经 service
354
+ // 公开访问器读真实 config,内部 DEFAULT 兑底——config 未配/读失败不炸)。
355
+ // E4 守卫放在 resolved 之后:显式 collect:"sync" + conversation 即拒;config 默认
356
+ // sync + conversation 同样被拦(同一守卫,无需改判定)。
357
+ const resolvedCollect = input.collect ?? service.getCollectSyncDefault();
358
+ // E4(设计 §3.1.5):sync 仅支持 one-shot。immediate throw——校验先于 service.execute,
359
+ // 不产生半启动 record(与 skillPath 路径守卫同风格:参数语义校验前置)。
360
+ if (input.conversation === true && resolvedCollect === "sync") {
361
+ throw new Error(
362
+ 'collect:"sync" only supports one-shot subagents — it cannot be combined with conversation:true. ' +
363
+ 'Remove either conversation or collect (use collect:"async", or omit it, for conversational subagents).',
364
+ );
365
+ }
366
+
343
367
  const handle = await service.execute({
344
368
  task,
345
369
  slug,
@@ -357,11 +381,31 @@ export async function startHandler(
357
381
  conversation: input.conversation,
358
382
  idleTimeoutMs: input.idleTimeoutMs,
359
383
  engine: input.engine,
384
+ // B1(code-simplify 审查发现的行为缺口):config collectSync.default=sync 且调用方
385
+ // 省略 collect 时,record 本体也要落 sync(设计 §3.1.3「缺省 = config 默认」作用于
386
+ // record,而非仅回显)——createRecordForMode 只认 opts.collect==="sync",原样透传
387
+ // input.collect 会让 record 走 async 逐条通知而响应声称已入批。仅 sync 落值:
388
+ // async/缺省路径传 undefined 语义(旧 record 零迁移)字节不变。
389
+ collect: resolvedCollect === "sync" ? "sync" : input.collect,
360
390
  ctxModel,
361
391
  signal,
362
392
  // background detached 运行,完成由 notify 驱动新 turn。
363
393
  });
364
394
 
395
+ const response: BgResponse = {
396
+ status: "running",
397
+ mode: "background",
398
+ message: BG_MESSAGE,
399
+ notifyContract: NOTIFY_CONTRACT,
400
+ };
401
+ // 同步收集登记回显段(设计 §3.1.1):仅 resolved 为 sync 时附段——async 响应
402
+ // 字节零变化(G3)。pendingSyncCount = 未闭合批 sync 成员总数(含本条,跨轮续累)。
403
+ // 本条 record 已由 createRecordForMode 落 collectMode(U2 偏差#4 接线),
404
+ // 枚举天然含本条,无需补偿。
405
+ if (resolvedCollect === "sync") {
406
+ response.collect = { mode: "sync", pendingSyncCount: countPendingSyncRecords(service) };
407
+ }
408
+
365
409
  return {
366
410
  kind: "bg",
367
411
  subagentId: handle.subagentId,
@@ -369,15 +413,27 @@ export async function startHandler(
369
413
  slug: handle.details.slug,
370
414
  // registry 全等回显:record.model 由 resolved(裁决放行条目)拼接,原样透出。
371
415
  model: handle.details.model,
372
- response: {
373
- status: "running",
374
- mode: "background",
375
- message: BG_MESSAGE,
376
- notifyContract: NOTIFY_CONTRACT,
377
- },
416
+ response,
378
417
  };
379
418
  }
380
419
 
420
+ /**
421
+ * 当前未闭合批的 sync 成员计数(pendingSyncCount 口径,设计 §3.1.3):本进程全部
422
+ * record(含已终态未 flush 的缓冲成员,故 statusFilter="all")中 collectMode="sync"
423
+ * 且无 batchFinalized 标记的数量。含调用方刚启动的本条(record 已带 collectMode 入
424
+ * 枚举——U2 偏差#4 接线)。
425
+ *
426
+ * 扫描上限与 service 冷路径全扫兑底同量级;常量用本 feature 已导出的
427
+ * COLLECT_SCAN_LIMIT(collect 域扫描上限单点定义,S4 code-simplify)。
428
+ */
429
+ function countPendingSyncRecords(service: SubagentService): number {
430
+ let count = 0;
431
+ for (const r of service.queries.collectRecords(COLLECT_SCAN_LIMIT, "all")) {
432
+ if (r.collectMode === "sync" && r.batchFinalized !== true) count += 1;
433
+ }
434
+ return count;
435
+ }
436
+
381
437
  // ============================================================
382
438
  // list handler
383
439
  // ============================================================
@@ -400,12 +456,12 @@ export function listHandler(
400
456
  // collectRecords 是 service 核心能力:statusFilter 决定 running-only 还是全部。
401
457
  // 防截断(先多取再过滤)已下沉到 store 层——这里直接传 limit + filter。
402
458
  const filter = includeFinished ? "all" : "running";
403
- const all = service.collectRecords(limit, filter);
459
+ const all = service.queries.collectRecords(limit, filter);
404
460
  // collectRecords 磁盘源是 light(无 totalTokens/model 等):SubagentListItem 对
405
461
  // LLM 消费方暴露 totalTokens/model,逐项 getFullRecord 补全(per-file 缓存,仅首次
406
462
  // 全量解析;显式 tool 调用非渲染热路径,成本可接受)。
407
463
  const items: SubagentListItem[] = all.map((r) =>
408
- recordToListItem(service.getFullRecord(r.id) ?? r),
464
+ recordToListItem(service.queries.getFullRecord(r.id) ?? r),
409
465
  );
410
466
  const running = items.filter((i) => i.status === "running").length;
411
467
 
@@ -424,13 +480,13 @@ export async function cancelHandler(
424
480
  if (!id) throw new Error("cancelParam.subagentId is required for action:'cancel'");
425
481
 
426
482
  // step 1: id 不存在(findRecord 只查内存 running record,不从 session.jsonl 重建)
427
- const rec = service.findRecord(id);
483
+ const rec = service.queries.findRecord(id);
428
484
  if (!rec) {
429
485
  // 全树可见后,list/completion 可能列出其他进程(父/兄弟)的 running record
430
486
  //(collectRecords 扫共享 sessionsDir 按 rootSessionId 过滤,跨进程互相可见),而 cancel
431
487
  // 只作用于本进程内存 record。区分两种失败,避免「may have finished」误导(该 record 正
432
488
  // 被列出且未 finished,只是不属于本进程内存)。仅文案区分,不改 cancel 作用域。
433
- const treeRec = service.collectRecords(DEFAULT_LIST_LIMIT, "all").find((r) => r.id === id);
489
+ const treeRec = service.queries.collectRecords(DEFAULT_LIST_LIMIT, "all").find((r) => r.id === id);
434
490
  if (treeRec && treeRec.status === "running") {
435
491
  throw new Error(
436
492
  `Subagent record "${id}" is running but owned by another process in the tree ` +
@@ -448,8 +504,8 @@ export async function cancelHandler(
448
504
  // 走 close 行为路径(idle 终态化 done;running 立即 SIGTERM cancelled),
449
505
  // 返回 cancel 响应(向后兼容 cancel action 的返回类型)。非 chatMode 保持现有 cancel 行为。
450
506
  if (rec.chatMode) {
451
- const chatRecord = service.getRecordForAction(id);
452
- await service.closeSubagent(chatRecord, true);
507
+ const chatRecord = service.chatActions.getRecordForAction(id);
508
+ await service.chatActions.closeSubagent(chatRecord, true);
453
509
  return { subagentId: id, response: { cancelled: true } };
454
510
  }
455
511
  // step 3: service.cancel boolean(list-view 契约不变);false = 已终态(CAS 抢锁失败)。
@@ -459,7 +515,7 @@ export async function cancelHandler(
459
515
  // CAS 失败 = record 在 cancel 期间被 detached 路径 finalize(done/failed)。
460
516
  // re-query 查当前真实状态。终态 record 被 archive 立即移出内存,
461
517
  // 诚实报告 "unknown (evicted from memory)" 而非回落到可能过期的 rec.status。
462
- const now = service.findRecord(id);
518
+ const now = service.queries.findRecord(id);
463
519
  const statusDesc = now ? now.status : "unknown (evicted from memory)";
464
520
  throw new Error(`Subagent ${id} could not be cancelled (it likely just finished; status: ${statusDesc})`);
465
521
  }
@@ -474,9 +530,9 @@ export async function cancelHandler(
474
530
  * message action handler:向对话模式 subagent 续聊/插入消息。
475
531
  *
476
532
  * 状态 × interrupt 自动映射(agent 只表达意图):
477
- * running → deliverMessage 热路径(进程活:prompt + streamingBehavior,interrupt=true
533
+ * running → deliverChatMessage 热路径(进程活:prompt + streamingBehavior,interrupt=true
478
534
  * 抢占 / false 排队)
479
- * 进程死 → deliverMessage 冷路径(resumeRound 重开 session + prompt,interrupt 自动
535
+ * 进程死 → deliverChatMessage 冷路径(resumeRound 重开 session + prompt,interrupt 自动
480
536
  * 退化,agent 无感)
481
537
  * 终态 → throw ended(正常路径不命中——终态 record 已 archive,getRecordForAction 先 throw not found)
482
538
  *
@@ -503,13 +559,13 @@ export async function messageHandler(
503
559
  // 升级文案——close/cancel 维持原语义(它们不需要恢复通道)。
504
560
  let record: ExecutionRecord;
505
561
  try {
506
- record = service.getRecordForAction(id, { allowReconnect: true });
562
+ record = service.chatActions.getRecordForAction(id, { allowReconnect: true });
507
563
  } catch (err) {
508
564
  throw endedMessageGuard(service, id, err);
509
565
  }
510
566
 
511
567
  // one-shot upgrade:非 chatMode 的 active record(running/idle)收到 message 时
512
- // 自动升级为 chatMode,后续走 deliverMessage 统一投递路径(热路径或冷路径 resume)。
568
+ // 自动升级为 chatMode,后续走 deliverChatMessage 统一投递路径(热路径或冷路径 resume)。
513
569
  // closed/cancelled 终态 record 不可 upgrade(getRecordForAction 已抛 not found)。
514
570
  // chatMode 是 ExecutionRecord 的 readonly 字段,用 Mutable<T> 显式断言绕过 readonly 约束(upgrade 语义)。
515
571
  // Object.assign 隐式绕过 readonly 不可追踪,改为单字段显式赋值。
@@ -526,7 +582,7 @@ export async function messageHandler(
526
582
  // 不按 record.status(进程长驻,idle 态进程仍活,续聊走热路径 prompt 而非重开 session)。
527
583
  // upgrade 后 record.chatMode 已为 true,统一进此分支。
528
584
  if (record.chatMode) {
529
- await service.deliverMessage(record, text, interrupt);
585
+ await service.chatActions.deliverChatMessage(record, text, interrupt);
530
586
  } else {
531
587
  // 终态(closed/cancelled):防御性兜底(终态 record 已 archive,正常走 not found)
532
588
  throw new Error(
@@ -550,7 +606,7 @@ export async function messageHandler(
550
606
  * 有活进程在跑轮 → 置 closeAfterRound,轮完成时终态化——返回 {closed:true} 即承诺轮结束后资源已释放
551
607
  * force:true = 立即终止——running 立即 SIGTERM(cancelBackground 显式 kill)+ closed+cancelled
552
608
  *
553
- * 行为分流委托 service.closeSubagent(归属守卫由 getRecordForAction 把关)。
609
+ * 行为分流委托 chatActions.closeSubagent(归属守卫由 chatActions.getRecordForAction 把关)。
554
610
  * 已终态 record 由 getRecordForAction throw not found(「已结束的不能再操作」语义)。
555
611
  */
556
612
  export async function closeHandler(
@@ -561,9 +617,9 @@ export async function closeHandler(
561
617
  if (!id) throw new Error("closeParam.subagentId is required for action:'close'");
562
618
  const force = input?.force === true;
563
619
 
564
- // 归属守卫(决策 3)+ 行为分流(service.closeSubagent)
565
- const record = service.getRecordForAction(id);
566
- await service.closeSubagent(record, force);
620
+ // 归属守卫(决策 3)+ 行为分流(chatActions.closeSubagent)
621
+ const record = service.chatActions.getRecordForAction(id);
622
+ await service.chatActions.closeSubagent(record, force);
567
623
 
568
624
  return { kind: "close", subagentId: id, response: { closed: true } };
569
625
  }
@@ -621,7 +677,7 @@ export async function forkFromHandler(
621
677
  * (守卫 6 已保证 sessionFile 非空,返回类型随之收窄)。 */
622
678
  function assertAndLookupForkFromSource(service: SubagentService, id: string): SubagentRecord & { sessionFile: string } {
623
679
  // 守卫 1:本进程内存 running —— 直接 message 即可,fork-from 会双写其 session 文件。
624
- if (service.findRecord(id)) {
680
+ if (service.queries.findRecord(id)) {
625
681
  throw new Error(
626
682
  `subagent ${id} is still active in this process — use action:'message' to continue it directly. ` +
627
683
  `If you want a parallel branch from its history, close it first (action:'close'), then fork-from.`,
@@ -629,7 +685,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
629
685
  }
630
686
 
631
687
  // 守卫 2:全态查找(内存 archived + 磁盘重建)。
632
- const source = service.lookupRecordAnyState(id);
688
+ const source = service.queries.lookupRecordAnyState(id);
633
689
  if (!source) {
634
690
  throw new Error(
635
691
  `No subagent record with id "${id}". It may never have existed or been garbage-collected — ` +
@@ -652,7 +708,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
652
708
 
653
709
  // 守卫 4:主动告别(cancelled tombstone / user-close 正式关闭)——close 语义无旁路:
654
710
  // fork-from 与 message 一致拒绝(guard 一致性规格),文案升级为统一「主动关闭」形态
655
- //(含 closedReason 显式列入),与 deliverMessage 的同类分支同语系不同落地(此处强调不可 branch)。
711
+ //(含 closedReason 显式列入),与 deliverChatMessage 的同类分支同语系不同落地(此处强调不可 branch)。
656
712
  if (source.status === "closed" && (source.closedReason === "cancelled" || source.closedReason === "user-close")) {
657
713
  throw new Error(
658
714
  `subagent ${id} was deliberately closed by user (closedReason: ${source.closedReason}) — ` +
@@ -662,7 +718,7 @@ function assertAndLookupForkFromSource(service: SubagentService, id: string): Su
662
718
  }
663
719
 
664
720
  // 守卫 5:worktree 记录 —— WorktreeHandle 不可序列化,checkout 已被 reaper/cleanup
665
- // 回收;fork 子进程若复用旧路径会回落主 repo(破坏文件隔离)。与 deliverMessage
721
+ // 回收;fork 子进程若复用旧路径会回落主 repo(破坏文件隔离)。与 deliverChatMessage
666
722
  // hadWorktree 守卫同一判据同一理由。
667
723
  if (source.worktree === true) {
668
724
  throw new Error(