@zhushanwen/subagent-core 0.5.1 → 0.7.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 (318) hide show
  1. package/README.md +1 -1
  2. package/dist/chunk-KXVBIVOU.js +16 -0
  3. package/dist/chunk-T2SYBW3I.js +24 -0
  4. package/dist/chunk-VURUAGMM.js +2305 -0
  5. package/dist/{types-Dv4QhSJ_.d.cts → engine-discovery-scan-ocpM8FmI.d.cts} +835 -668
  6. package/dist/{types-Dv4QhSJ_.d.ts → engine-discovery-scan-ocpM8FmI.d.ts} +835 -668
  7. package/dist/execution/engine/engine-discovery-scan.cjs +2210 -0
  8. package/dist/execution/engine/engine-discovery-scan.d.cts +4 -0
  9. package/dist/execution/engine/engine-discovery-scan.d.ts +4 -0
  10. package/dist/execution/engine/engine-discovery-scan.js +20 -0
  11. package/dist/execution/engine/paths.cjs +6 -23
  12. package/dist/execution/engine/paths.d.cts +1 -8
  13. package/dist/execution/engine/paths.d.ts +1 -8
  14. package/dist/execution/engine/paths.js +1 -1
  15. package/dist/execution/relay-env.cjs +12 -28
  16. package/dist/execution/relay-env.d.cts +1 -33
  17. package/dist/execution/relay-env.d.ts +1 -33
  18. package/dist/execution/relay-env.js +5 -3
  19. package/dist/index.cjs +14123 -15467
  20. package/dist/index.d.cts +1179 -1540
  21. package/dist/index.d.ts +1179 -1540
  22. package/dist/index.js +7694 -10986
  23. package/dist.bundle/index.cjs +33485 -0
  24. package/package.json +20 -26
  25. package/src/__tests__/record-store-last-line.test.ts +16 -7
  26. package/src/core/error-message.ts +7 -6
  27. package/src/core/host-services.ts +8 -2
  28. package/src/core/notify-ports.ts +17 -2
  29. package/src/execution/__tests__/agent-registry.test.ts +1 -1
  30. package/src/execution/__tests__/alive-store.test.ts +1 -1
  31. package/src/execution/__tests__/chat-engine-routing.test.ts +62 -28
  32. package/src/execution/__tests__/chat-round-first-round-watchdog.test.ts +255 -0
  33. package/src/execution/__tests__/collect-budget.test.ts +291 -0
  34. package/src/execution/__tests__/collect-coordinator-service.test.ts +316 -0
  35. package/src/execution/__tests__/collect-coordinator.test.ts +371 -0
  36. package/src/execution/__tests__/collect-mixed-dispatch.test.ts +229 -0
  37. package/src/execution/__tests__/config-collect-sync.test.ts +120 -0
  38. package/src/execution/__tests__/config.test.ts +1 -1
  39. package/src/execution/__tests__/delivery-methods.test.ts +179 -237
  40. package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -2
  41. package/src/execution/__tests__/execute-nesting.test.ts +20 -13
  42. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +21 -34
  43. package/src/execution/__tests__/finalized-marker.test.ts +1 -1
  44. package/src/execution/__tests__/gc-timer.test.ts +8 -23
  45. package/src/execution/__tests__/get-record-for-action-restart.test.ts +20 -10
  46. package/src/execution/__tests__/helpers/fake-engine-port.ts +187 -0
  47. package/src/execution/__tests__/helpers/spawn-mock.ts +36 -9
  48. package/src/execution/__tests__/helpers/subagent-service-mocks.ts +1 -1
  49. package/src/execution/__tests__/idle-gc.test.ts +200 -0
  50. package/src/execution/__tests__/lifecycle-predicates.test.ts +26 -21
  51. package/src/execution/__tests__/manifest-store-tmp-recovery.test.ts +1 -1
  52. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +5 -2
  53. package/src/execution/__tests__/notify-batch.test.ts +500 -0
  54. package/src/execution/__tests__/notify-ledger.test.ts +27 -0
  55. package/src/execution/__tests__/reconcile-sweep.test.ts +200 -0
  56. package/src/execution/__tests__/record-entry-collect.test.ts +102 -0
  57. package/src/execution/__tests__/record-store.test.ts +60 -6
  58. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +20 -13
  59. package/src/execution/__tests__/relay-env.test.ts +12 -1
  60. package/src/execution/__tests__/round-supervisor.test.ts +293 -0
  61. package/src/execution/__tests__/session-file-gc.test.ts +1 -1
  62. package/src/execution/__tests__/session-pending.test.ts +119 -17
  63. package/src/execution/__tests__/start-collect-guard.test.ts +255 -0
  64. package/src/execution/__tests__/stream-sink-retirement.test.ts +10 -10
  65. package/src/execution/__tests__/subagent-actions-core.test.ts +6 -0
  66. package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +14 -11
  67. package/src/execution/__tests__/subagent-service-notify-gate.test.ts +33 -30
  68. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +2 -9
  69. package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +59 -129
  70. package/src/execution/__tests__/subagent-service.test.ts +2 -2
  71. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +109 -7
  72. package/src/execution/__tests__/subprocess-agent-runner.test.ts +108 -36
  73. package/src/execution/__tests__/sync-collect-recovery.test.ts +1102 -0
  74. package/src/execution/__tests__/tombstone-store.test.ts +1 -1
  75. package/src/execution/__tests__/workflow-state-root.test.ts +232 -0
  76. package/src/execution/__tests__/worktree-git-ops.test.ts +1 -1
  77. package/src/execution/__tests__/worktree-reconcile-aging.test.ts +2 -2
  78. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +1 -1
  79. package/src/execution/__tests__/worktree-registry.test.ts +1 -1
  80. package/src/execution/agent-registry.ts +6 -2
  81. package/src/execution/collect-coordinator.ts +200 -0
  82. package/src/execution/config.ts +77 -5
  83. package/src/execution/dialog-queue.ts +6 -73
  84. package/src/execution/engine/__tests__/common/capability-gate.test.ts +115 -15
  85. package/src/execution/engine/__tests__/common/errors.test.ts +11 -18
  86. package/src/execution/engine/__tests__/common/event-journal.test.ts +1 -1
  87. package/src/execution/engine/__tests__/common/kill-chain.test.ts +7 -0
  88. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +9 -3
  89. package/src/execution/engine/__tests__/common/pool-manager.test.ts +2 -2
  90. package/src/execution/engine/__tests__/common/session-view-service.test.ts +90 -3
  91. package/src/execution/engine/__tests__/conformance/H9-test-disposition.md +116 -0
  92. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/fake-engine-protocol.mjs +377 -0
  93. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/recorded.fixture.json +331 -0
  94. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/smoke-run.fixture.json +213 -0
  95. package/src/execution/engine/__tests__/conformance/chat-round-protocol.test.ts +230 -0
  96. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +69 -42
  97. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +4 -81
  98. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +67 -44
  99. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +82 -55
  100. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +133 -70
  101. package/src/execution/engine/__tests__/conformance/engine-crash.test.ts +143 -0
  102. package/src/execution/engine/__tests__/conformance/fake-engine-capabilities.ts +19 -0
  103. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +8 -3
  104. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +6 -5
  105. package/src/execution/engine/__tests__/conformance/protocol-blackbox.test.ts +398 -0
  106. package/src/execution/engine/__tests__/conformance/registry-fork-filter.test.ts +221 -0
  107. package/src/execution/engine/__tests__/conformance/round-liveness-supervisor.test.ts +302 -0
  108. package/src/execution/engine/__tests__/conformance/static-spawn-guard.test.ts +58 -0
  109. package/src/execution/engine/__tests__/engine-discovery-scan.test.ts +558 -0
  110. package/src/execution/engine/__tests__/host-task-spec.test.ts +45 -0
  111. package/src/execution/engine/__tests__/model-ref-split.test.ts +74 -0
  112. package/src/execution/engine/__tests__/registry.test.ts +206 -1
  113. package/src/execution/engine/__tests__/routing.test.ts +97 -0
  114. package/src/execution/engine/__tests__/run-failure-worktree-cleanup.test.ts +97 -0
  115. package/src/execution/engine/client/__tests__/__fixtures__/fake-engine.mjs +294 -0
  116. package/src/execution/engine/client/__tests__/engine-client.test.ts +516 -0
  117. package/src/execution/engine/client/__tests__/mirror.test.ts +67 -0
  118. package/src/execution/engine/client/__tests__/pid-file.test.ts +257 -0
  119. package/src/execution/engine/client/__tests__/protocol-closure.test.ts +95 -0
  120. package/src/execution/engine/client/__tests__/remote-engine.test.ts +457 -0
  121. package/src/execution/engine/client/client-options.ts +103 -0
  122. package/src/execution/engine/client/engine-client.ts +687 -0
  123. package/src/execution/engine/client/mirror.ts +167 -0
  124. package/src/execution/engine/client/pid-file.ts +392 -0
  125. package/src/execution/engine/client/reaper.ts +95 -0
  126. package/src/execution/engine/client/remote-engine.ts +441 -0
  127. package/src/execution/engine/client/reverse-router.ts +255 -0
  128. package/src/execution/engine/common/capability-gate.ts +109 -22
  129. package/src/execution/engine/common/errors.ts +9 -25
  130. package/src/execution/engine/common/event-journal.ts +4 -50
  131. package/src/execution/engine/common/journal-replay.ts +3 -1
  132. package/src/execution/engine/common/kill-chain.ts +18 -251
  133. package/src/execution/engine/common/nesting-guard.ts +18 -114
  134. package/src/execution/engine/common/pool-manager.ts +4 -0
  135. package/src/execution/engine/common/session-view-service.ts +56 -84
  136. package/src/execution/engine/config.ts +151 -0
  137. package/src/execution/engine/d8-compat.ts +346 -0
  138. package/src/execution/engine/engine-discovery-roots.ts +107 -0
  139. package/src/execution/engine/engine-discovery-scan.ts +269 -0
  140. package/src/execution/engine/engine-discovery.ts +30 -7
  141. package/src/execution/engine/engine-inspect-package.ts +282 -0
  142. package/src/execution/engine/engine-manifest.ts +244 -0
  143. package/src/execution/engine/host/__tests__/host-askuser-endpoint.test.ts +123 -0
  144. package/src/execution/engine/host/__tests__/host-bridge.test.ts +135 -0
  145. package/src/execution/engine/host/__tests__/spawned-children.test.ts +73 -0
  146. package/src/execution/engine/host/host-bridge.ts +150 -0
  147. package/src/execution/engine/host/host-ui-endpoint.ts +47 -0
  148. package/src/execution/engine/host/pi-host-binding.ts +91 -0
  149. package/src/execution/engine/host/spawned-children.ts +139 -0
  150. package/src/execution/engine/host-task-spec.ts +29 -2
  151. package/src/execution/engine/model-validation.ts +55 -2
  152. package/src/execution/engine/paths.ts +16 -41
  153. package/src/execution/engine/port.ts +48 -2
  154. package/src/execution/engine/registry.ts +153 -34
  155. package/src/execution/engine/routing.ts +225 -52
  156. package/src/execution/engine/types.ts +25 -200
  157. package/src/execution/execution-record.ts +7 -0
  158. package/src/execution/finalize-record.ts +40 -11
  159. package/src/execution/idle-gc.ts +89 -14
  160. package/src/execution/lifecycle-manager.ts +10 -7
  161. package/src/execution/lifecycle-predicates.ts +10 -8
  162. package/src/execution/notifier.ts +234 -25
  163. package/src/execution/notify-host.ts +21 -1
  164. package/src/execution/record-entry.ts +16 -0
  165. package/src/execution/record-store.ts +189 -31
  166. package/src/execution/relay-env.ts +19 -36
  167. package/src/execution/round-supervisor/domain.ts +89 -0
  168. package/src/execution/round-supervisor/index.ts +33 -0
  169. package/src/execution/round-supervisor/notify-accounting.ts +87 -0
  170. package/src/execution/round-supervisor/reconcile-sweep.ts +235 -0
  171. package/src/execution/round-supervisor/service-binding.test.ts +661 -0
  172. package/src/execution/round-supervisor/service-binding.ts +273 -0
  173. package/src/execution/round-supervisor/supervisor.ts +426 -0
  174. package/src/execution/session-pending.ts +68 -74
  175. package/src/execution/settled-watchdog.ts +39 -0
  176. package/src/execution/subagent-actions-core.ts +62 -6
  177. package/src/execution/subagent-service.ts +1161 -406
  178. package/src/execution/subprocess-agent-runner.ts +16 -8
  179. package/src/execution/sync-rebuild.ts +87 -0
  180. package/src/execution/types.ts +104 -117
  181. package/src/execution/ui-channels.ts +13 -214
  182. package/src/execution/ui-request-handler-factory.ts +7 -4
  183. package/src/execution/ui-request-observability.ts +2 -2
  184. package/src/execution/workflow-state-root.ts +67 -0
  185. package/src/execution/worktree-git-ops.ts +5 -0
  186. package/src/execution/worktree-manager.ts +11 -1
  187. package/src/index.ts +55 -26
  188. package/src/orchestration/__tests__/config-loader.test.ts +1 -1
  189. package/src/orchestration/__tests__/execute-agent-call.test.ts +1 -1
  190. package/src/orchestration/__tests__/file-run-store-prune.test.ts +1 -1
  191. package/src/orchestration/__tests__/file-run-store-throttle.test.ts +1 -1
  192. package/src/orchestration/__tests__/review-fix-loop-scriptpath-failfast.test.ts +1 -1
  193. package/src/orchestration/__tests__/script-generate.test.ts +5 -5
  194. package/src/orchestration/__tests__/skill-discovery.test.ts +2 -2
  195. package/src/orchestration/__tests__/workflow-files.test.ts +10 -10
  196. package/src/orchestration/__tests__/workflow-script-registry-impl.test.ts +1 -1
  197. package/src/orchestration/execute-agent-call.ts +1 -1
  198. package/src/orchestration/file-run-store.ts +144 -59
  199. package/src/orchestration/models/types.ts +43 -42
  200. package/src/shared/__tests__/atomic-write.test.ts +1 -1
  201. package/src/shared/__tests__/resource-discovery-host-roots.test.ts +5 -5
  202. package/src/shared/zcode-model-ref.ts +31 -0
  203. package/dist/chunk-43ONBFZX.js +0 -240
  204. package/dist/chunk-A4IVZWVX.js +0 -31
  205. package/dist/chunk-APZY4IME.js +0 -27
  206. package/dist/chunk-V3VHZ2VX.js +0 -59
  207. package/dist/execution/engine/engines/zcode/constants.cjs +0 -107
  208. package/dist/execution/engine/engines/zcode/constants.d.cts +0 -135
  209. package/dist/execution/engine/engines/zcode/constants.d.ts +0 -135
  210. package/dist/execution/engine/engines/zcode/constants.js +0 -54
  211. package/dist/execution/engine/engines/zcode/reader.cjs +0 -276
  212. package/dist/execution/engine/engines/zcode/reader.d.cts +0 -21
  213. package/dist/execution/engine/engines/zcode/reader.d.ts +0 -21
  214. package/dist/execution/engine/engines/zcode/reader.js +0 -9
  215. package/src/__tests__/append-system-prompt-assembly.test.ts +0 -243
  216. package/src/__tests__/fr4-get-state-handshake.test.ts +0 -125
  217. package/src/__tests__/session-runner.test.ts +0 -69
  218. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
  219. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -191
  220. package/src/execution/__tests__/descendant-sweep-guards.test.ts +0 -220
  221. package/src/execution/__tests__/descendant-sweep.test.ts +0 -269
  222. package/src/execution/__tests__/engine-model-validation.test.ts +0 -741
  223. package/src/execution/__tests__/epipe-fallback.test.ts +0 -248
  224. package/src/execution/__tests__/execution-runtime-face.test.ts +0 -272
  225. package/src/execution/__tests__/get-state-handshake.test.ts +0 -127
  226. package/src/execution/__tests__/helpers/session-runner-mocks.ts +0 -113
  227. package/src/execution/__tests__/keep-alive-no-progress.test.ts +0 -280
  228. package/src/execution/__tests__/kill-all-escalation.test.ts +0 -196
  229. package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +0 -113
  230. package/src/execution/__tests__/output-collector.test.ts +0 -469
  231. package/src/execution/__tests__/pi-invocation.test.ts +0 -134
  232. package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -149
  233. package/src/execution/__tests__/rpc-mode.test.ts +0 -89
  234. package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +0 -387
  235. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -277
  236. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -254
  237. package/src/execution/__tests__/run-spawn-edges.test.ts +0 -1079
  238. package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
  239. package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
  240. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
  241. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +0 -207
  242. package/src/execution/__tests__/service-kill-escalation.test.ts +0 -91
  243. package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +0 -110
  244. package/src/execution/__tests__/session-runner-close-prune.test.ts +0 -181
  245. package/src/execution/__tests__/session-runner-dispatch.test.ts +0 -489
  246. package/src/execution/__tests__/session-runner-epipe.test.ts +0 -179
  247. package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +0 -227
  248. package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +0 -290
  249. package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -352
  250. package/src/execution/__tests__/settled-watchdog.test.ts +0 -524
  251. package/src/execution/__tests__/spawn-args.test.ts +0 -446
  252. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -192
  253. package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
  254. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -208
  255. package/src/execution/__tests__/spawned-children.test.ts +0 -236
  256. package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
  257. package/src/execution/__tests__/stdin-writer.test.ts +0 -464
  258. package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -693
  259. package/src/execution/__tests__/temp-prompt.test.ts +0 -53
  260. package/src/execution/__tests__/timeout-integration.test.ts +0 -616
  261. package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
  262. package/src/execution/__tests__/turn-limiter.test.ts +0 -65
  263. package/src/execution/__tests__/ui-request-handler.test.ts +0 -205
  264. package/src/execution/__tests__/ui-request-queue.test.ts +0 -298
  265. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -230
  266. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
  267. package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +0 -149
  268. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
  269. package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +0 -128
  270. package/src/execution/engine/__tests__/paths.test.ts +0 -39
  271. package/src/execution/engine/common/schema-emulation.ts +0 -189
  272. package/src/execution/engine/common/session-view-projection.ts +0 -51
  273. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -615
  274. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
  275. package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +0 -257
  276. package/src/execution/engine/engines/pi/argv-mirror.ts +0 -135
  277. package/src/execution/engine/engines/pi/get-state-handshake.ts +0 -179
  278. package/src/execution/engine/engines/pi/output-collector.ts +0 -317
  279. package/src/execution/engine/engines/pi/pi-engine.ts +0 -811
  280. package/src/execution/engine/engines/pi/pi-invocation.ts +0 -120
  281. package/src/execution/engine/engines/pi/reader.ts +0 -59
  282. package/src/execution/engine/engines/pi/registration.ts +0 -37
  283. package/src/execution/engine/engines/pi/session-runner.ts +0 -2840
  284. package/src/execution/engine/engines/pi/spawn-event-adapter.ts +0 -404
  285. package/src/execution/engine/engines/pi/stdin-writer.ts +0 -199
  286. package/src/execution/engine/engines/pi/temp-prompt.ts +0 -62
  287. package/src/execution/engine/engines/pi/turn-limiter.ts +0 -102
  288. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +0 -301
  289. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-appserver.json +0 -36
  290. package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +0 -321
  291. package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +0 -473
  292. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -43
  293. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -124
  294. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
  295. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -71
  296. package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +0 -247
  297. package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +0 -451
  298. package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +0 -792
  299. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +0 -782
  300. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +0 -168
  301. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +0 -210
  302. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +0 -353
  303. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +0 -282
  304. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +0 -372
  305. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -145
  306. package/src/execution/engine/engines/zcode/appserver-launcher.ts +0 -167
  307. package/src/execution/engine/engines/zcode/connection.ts +0 -598
  308. package/src/execution/engine/engines/zcode/constants.ts +0 -176
  309. package/src/execution/engine/engines/zcode/golden-sample.ts +0 -47
  310. package/src/execution/engine/engines/zcode/parser.ts +0 -102
  311. package/src/execution/engine/engines/zcode/preparer.ts +0 -235
  312. package/src/execution/engine/engines/zcode/reader.ts +0 -381
  313. package/src/execution/engine/engines/zcode/registration.ts +0 -37
  314. package/src/execution/engine/engines/zcode/session-channel.ts +0 -968
  315. package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -1431
  316. package/src/execution/round-settlement.ts +0 -93
  317. package/src/execution/ui-request-queue.ts +0 -215
  318. package/src/shared/schema-env.ts +0 -44
@@ -0,0 +1,273 @@
1
+ // src/execution/round-supervisor/service-binding.ts
2
+ //
3
+ // [W4] SubagentService 与轮次活性监督器 / 注册对账 sweep 的装配绑定面。
4
+ //
5
+ // 从 subagent-service.ts 抽出(max-lines 纪律——监督器 deps 装配 + giveUp 编排 +
6
+ // sweep 挂点是纯绑定代码,内聚为一个文件;机制与语义注释见 supervisor.ts /
7
+ // reconcile-sweep.ts / domain.ts)。变化轴:改监督器通知文案 / giveUp 终态化编排 /
8
+ // sweep 的 store 读侧判据,只动本文件。
9
+ //
10
+ // 全部依赖经 RoundSupervisorBinding 惰性闭包注入(session 级状态运行时可变——
11
+ // 对齐 notify-host.ts createNotifyHost 的 deps 惰性求值先例)。
12
+
13
+ import { bestEffort } from "../best-effort.ts";
14
+ import { COLD_LOOKUP_SCAN_LIMIT } from "../cold-resurrect.ts";
15
+ import { tryTransition } from "../execution-record.ts";
16
+ import { writeFinalized } from "../finalized-marker.ts";
17
+ import { hasLiveProcessHandle } from "../lifecycle-predicates.ts";
18
+ import { FileRunStore } from "../../orchestration/file-run-store.ts";
19
+ import { resolvePiWorkflowStateDir } from "../workflow-state-root.ts";
20
+ import type { PiLike } from "../notify-host.ts";
21
+ import type { RecordStore } from "../record-store.ts";
22
+ import type { AgentResult, ExecutionRecord } from "../types.ts";
23
+ import {
24
+ RoundSupervisor,
25
+ runReconcileSweep,
26
+ type GiveUpKind,
27
+ type SupervisorCandidateRecord,
28
+ type SupervisorRecordView,
29
+ } from "./index.ts";
30
+
31
+ /** 绑定面(SubagentService 供给;全部惰性——见文件头注)。 */
32
+ export interface RoundSupervisorBinding {
33
+ getStore(): RecordStore;
34
+ getPi(): PiLike | null;
35
+ /** 所属根 session id(候选过滤;未初始化时 null)。 */
36
+ getSessionRootId(): string | null;
37
+ /** 主 session 文件(sweep 差集输入源;未 flush/未知时 undefined = 空跑)。 */
38
+ getMainSessionFile(): string | undefined;
39
+ /**
40
+ * record 终态化委托(service.finalizeRecord——注销合法发射点①的宿主路径)。
41
+ * 监督器 giveUp 的内存 record 分支消费;CAS 防双收尾由本文件 giveUp 先 tryTransition。
42
+ */
43
+ finalizeClosed(record: ExecutionRecord, result: AgentResult): Promise<void>;
44
+ }
45
+
46
+ /** 监督器通知出口(决策指引 / 终止 / 替代通知统一走 steer——唤醒主 agent 的注意力
47
+ * 而非自动复活任务;pi 缺席(dispose 后)静默丢弃,对齐 notify-host 语义)。 */
48
+ function supervisorNotify(binding: RoundSupervisorBinding, content: string): void {
49
+ binding.getPi()?.sendMessage(
50
+ { customType: "subagent-round-supervisor", content, display: false },
51
+ { deliverAs: "steer" },
52
+ );
53
+ }
54
+
55
+ /** record 视图(内存 getMutable 优先,磁盘 findLightById 兜底——boot 重认领面对的
56
+ * 存量 record 只在磁盘:重启后内存 records Map 为空)。 */
57
+ function supervisorRecordView(binding: RoundSupervisorBinding, id: string): SupervisorRecordView | undefined {
58
+ const memory = binding.getStore().getMutable(id);
59
+ if (memory !== undefined) {
60
+ return {
61
+ id: memory.id,
62
+ status: memory.status === "closed" ? "closed" : "running",
63
+ resumable: memory.resumable === true,
64
+ hasResult: memory.result !== undefined,
65
+ chatMode: memory.chatMode === true,
66
+ rootSessionId: memory.rootSessionId,
67
+ agent: memory.agent,
68
+ slug: memory.slug,
69
+ startedAt: memory.startedAt,
70
+ closedReason: memory.closedReason,
71
+ };
72
+ }
73
+ const disk = binding.getStore().findLightById(id);
74
+ if (disk === undefined) return undefined;
75
+ return {
76
+ id: disk.id,
77
+ status: disk.status === "closed" ? "closed" : "running",
78
+ resumable: disk.resumable === true,
79
+ hasResult: disk.result !== undefined,
80
+ chatMode: disk.chatMode === true,
81
+ rootSessionId: disk.rootSessionId,
82
+ agent: disk.agent,
83
+ slug: disk.slug,
84
+ startedAt: disk.startedAt,
85
+ closedReason: disk.closedReason,
86
+ };
87
+ }
88
+
89
+ /** 本 root session 的 running record 候选(内存 ∪ 磁盘重建投影)。 */
90
+ function supervisorCandidates(binding: RoundSupervisorBinding): SupervisorCandidateRecord[] {
91
+ const rootFilter = binding.getSessionRootId() ?? undefined;
92
+ return binding
93
+ .getStore()
94
+ .collectRecords(COLD_LOOKUP_SCAN_LIMIT, "running", rootFilter)
95
+ .map((r) => ({
96
+ id: r.id,
97
+ rootSessionId: r.rootSessionId,
98
+ agent: r.agent,
99
+ slug: r.slug,
100
+ startedAt: r.startedAt,
101
+ }));
102
+ }
103
+
104
+ /**
105
+ * 监督器「该放弃 / superseded」执行(RoundSupervisorDeps.giveUp)。
106
+ * 形态分流:
107
+ * - 内存 record:CAS tryTransition → finalizeClosed(终态化 + 注销①发射 + worktree/
108
+ * manifest 收尾)——watchdog-expired 额外发终止通知(此时可重派);superseded 的
109
+ * 替代通知已由监督器先行发出。boot 直断不经本函数(孤儿恢复层直断 + in-flight
110
+ * 的重启中断 error 语义由 finalizeOrphanRecord 落位,见 supervisor.bootPartition 头注)。
111
+ * - 磁盘态(内存无 + findLightById 命中,boot 重认领后看门狗到期的形态):终态
112
+ * entry 落盘(reportSubagentRecord)+ finalized sidecar(best-effort,对齐孤儿
113
+ * 恢复形态)——不走 finalizeRecord(无内存 record,archive/CAS 不适用),其注销
114
+ * 由对账 sweep(发射点⑤「record 终态 → 差集补发」)收口。
115
+ */
116
+ async function supervisorGiveUp(
117
+ binding: RoundSupervisorBinding,
118
+ recordId: string,
119
+ kind: GiveUpKind,
120
+ detail: { replacementId?: string },
121
+ ): Promise<void> {
122
+ const store = binding.getStore();
123
+ const memory = store.getMutable(recordId);
124
+ const errorText =
125
+ kind === "watchdog-expired"
126
+ ? "round supervisor: decision watchdog expired (guidance unanswered, no convergence) — task terminated; safe to re-dispatch"
127
+ : `round supervisor: superseded by replacement task ${detail.replacementId ?? "(unknown)"}`;
128
+ if (memory !== undefined) {
129
+ const failedResult: AgentResult = {
130
+ text: "",
131
+ turns: memory.turnCount,
132
+ durationMs: Date.now() - memory.startedAt,
133
+ success: false,
134
+ error: errorText,
135
+ sessionId: memory.id,
136
+ toolCalls: [],
137
+ };
138
+ // CAS 抢锁防与 cancel/dispose 双收尾;抢锁失败 = 对方已终态化,收尾跳过。
139
+ if (!tryTransitionClosed(memory)) return;
140
+ try {
141
+ await binding.finalizeClosed(memory, failedResult);
142
+ } catch (err) {
143
+ bestEffort(err, `round supervisor give-up finalize (${recordId})`, "error");
144
+ }
145
+ if (kind === "watchdog-expired") {
146
+ const view = supervisorRecordView(binding, recordId);
147
+ if (view !== undefined) {
148
+ supervisorNotify(
149
+ binding,
150
+ `Subagent "${view.agent}" (${view.slug || recordId}) was terminated after the decision watchdog ` +
151
+ `expired without your decision. It is now closed — you can safely re-dispatch the task if still needed.`,
152
+ );
153
+ }
154
+ }
155
+ return;
156
+ }
157
+ // 磁盘态分支(boot 重认领后的放弃——record 不在内存)。
158
+ const disk = store.findLightById(recordId);
159
+ if (disk === undefined) return;
160
+ if (disk.sessionFile) {
161
+ try {
162
+ writeFinalized(disk.sessionFile, "gc");
163
+ } catch (err) {
164
+ bestEffort(err, `round supervisor give-up sidecar (${recordId})`);
165
+ }
166
+ }
167
+ try {
168
+ store.reportSubagentRecord({
169
+ ...disk,
170
+ status: "closed",
171
+ closedReason: "gc",
172
+ endedAt: Date.now(),
173
+ error: errorText,
174
+ });
175
+ } catch (err) {
176
+ bestEffort(err, `round supervisor give-up entry (${recordId})`, "error");
177
+ }
178
+ }
179
+
180
+ /** tryTransition closed+gc 的本地命名(CAS 语义见 execution-record.ts)。 */
181
+ function tryTransitionClosed(record: ExecutionRecord): boolean {
182
+ return tryTransition(record, "closed", "gc");
183
+ }
184
+
185
+ /** 装配监督器实例(SubagentService.roundSupervisor 字段的工厂)。 */
186
+ export function createRoundSupervisorForService(binding: RoundSupervisorBinding): RoundSupervisor {
187
+ return new RoundSupervisor({
188
+ now: () => Date.now(),
189
+ getRecordView: (id) => supervisorRecordView(binding, id),
190
+ listCandidateRecords: () => supervisorCandidates(binding),
191
+ hasLiveProcess: (recordId) => hasLiveProcessHandle(recordId),
192
+ sendMergedFailureNotice: (view, errMsg) =>
193
+ supervisorNotify(
194
+ binding,
195
+ `Subagent "${view.agent}" (${view.slug || view.id}) failed: the engine/child process driving it died ` +
196
+ `(${errMsg}). The task is NOT completed and stays resumable — this supervisor has taken over and will ` +
197
+ `deliver a resume/re-dispatch guidance shortly. Do NOT re-dispatch this task before that guidance arrives.`,
198
+ ),
199
+ sendDecisionGuidance: (view, opts) =>
200
+ supervisorNotify(
201
+ binding,
202
+ `Subagent "${view.agent}" (${view.slug || view.id}, id=${view.id}) died mid-task and stays resumable. ` +
203
+ `Decide now: resume it by sending a message to id=${view.id}, or re-dispatch a replacement task. ` +
204
+ `If you take no action it will be terminated automatically when the decision watchdog expires.` +
205
+ (opts.exemptionDisclaimer
206
+ ? ` If you have already re-dispatched or no longer need this task, ignore this guidance; ` +
207
+ `the original task will be terminated automatically when the watchdog expires.`
208
+ : ""),
209
+ ),
210
+ sendReplacedNotice: (view, replacementId) =>
211
+ supervisorNotify(
212
+ binding,
213
+ `Subagent "${view.agent}" (${view.slug || view.id}, id=${view.id}) was already replaced by your new ` +
214
+ `task ${replacementId} (same agent/slug started within the watchdog window). The original record is ` +
215
+ `being terminated; no resume is needed.`,
216
+ ),
217
+ giveUp: (recordId, kind, detail) => void supervisorGiveUp(binding, recordId, kind, detail),
218
+ });
219
+ }
220
+
221
+ /**
222
+ * [W4] 注册对账 sweep(发射点枚举⑤):对「本 session register entry × 对应
223
+ * record/run ∈ 终态集 ∪ 已归档/不存在」差集补发 unregister——appendEntry 权威落盘 +
224
+ * 尽力 emit(写法论证见 reconcile-sweep.ts 头注)。[F2] 判据按类型分流:subagent 走
225
+ * RecordStore,workflow/畸形走 FileRunStore(findStateByIdSync),bash 无收口通道
226
+ * 保守跳过(显式偏差 impl-plan §5)。触发点 = initSession(session
227
+ * reattach / session_start / 监督器启动三时机的承载点,根进程 only——与孤儿恢复
228
+ * 同一单扫描者判据,isChildProcess 由调用方传)。与 registry rebuild 的先后时序
229
+ * 不作保证,残余窗口由下次 session_start 收口(设计明示容忍)。
230
+ */
231
+ export function runPendingReconcileSweepForService(binding: RoundSupervisorBinding, isChildProcess: boolean): void {
232
+ if (isChildProcess) return;
233
+ try {
234
+ // [F2] workflow run 判据供给:FileRunStore 构造轻量(无 IO 副作用,lastSavedAt
235
+ // 空 Map——findStateByIdSync 同步只读不触碰节流记账),sweep 挂点低频
236
+ // (initSession),每轮构造一次闭包持有。
237
+ // [F-1 修复] stateDir 必须与 pi 壳 JsonlRunStore 的落盘布局同源
238
+ //(<sessionDir>/workflow-state/,推导 = resolvePiWorkflowStateDir);缺省根
239
+ // <dataRoot>/workflow-state 是 zcode 宿主布局,与 pi 生产落盘不相交——曾致
240
+ // findStateByIdSync 恒 missing → sweep 按终态补注销活跃 run(W4 引入的装配错位)。
241
+ const workflowStore = new FileRunStore({ stateDir: resolvePiWorkflowStateDir() });
242
+ runReconcileSweep({
243
+ sessionFile: binding.getMainSessionFile(),
244
+ lookupRecordState: (id) => {
245
+ const memory = binding.getStore().getMutable(id);
246
+ if (memory !== undefined) {
247
+ return memory.status === "closed"
248
+ ? { terminal: true, closedReason: memory.closedReason }
249
+ : "active";
250
+ }
251
+ const disk = binding.getStore().findLightById(id);
252
+ if (disk === undefined) return "missing";
253
+ return disk.status === "closed"
254
+ ? { terminal: true, closedReason: disk.closedReason }
255
+ : "active";
256
+ },
257
+ // [F2] type=workflow 及畸形条目的收口判据(设计 D2 sweep 判据补全——
258
+ // 「终态集 ∪ 已归档/不存在」对 workflow run 同样成立)。running 映射 active
259
+ // (含全行损坏的保守形态);done → terminal(reason 即 DoneReason,经
260
+ // closedReasonToPendingReason 未知值兜底);文件缺失 → missing。
261
+ lookupWorkflowRunState: (runId) => {
262
+ const state = workflowStore.findStateByIdSync(runId);
263
+ if (state.kind === "missing") return "missing";
264
+ if (state.kind === "terminal") return { terminal: true, closedReason: state.reason };
265
+ return "active";
266
+ },
267
+ appendEntry: (customType, data) => binding.getPi()?.appendEntry(customType, data),
268
+ emit: (channel, data) => binding.getPi()?.events.emit(channel, data),
269
+ });
270
+ } catch (err) {
271
+ bestEffort(err, "pending reconcile sweep", "error");
272
+ }
273
+ }