@zhushanwen/pi-subagent-workflow 8.5.0 → 8.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 (336) hide show
  1. package/package.json +13 -16
  2. package/relay/relay.mjs +1 -1
  3. package/src/host/__tests__/pi-host.test.ts +214 -0
  4. package/src/host/pi-host.ts +109 -0
  5. package/src/index.ts +142 -32
  6. package/src/injectors/__tests__/engine-awareness.test.ts +292 -0
  7. package/src/injectors/__tests__/engine-section-stability.test.ts +341 -0
  8. package/src/injectors/__tests__/subagent-list-injector.test.ts +5 -5
  9. package/src/injectors/__tests__/workflow-list-injector.test.ts +5 -5
  10. package/src/injectors/engine-awareness.ts +123 -0
  11. package/src/injectors/model-list-injector.ts +1 -1
  12. package/src/injectors/subagent-list-injector.ts +8 -8
  13. package/src/injectors/workflow-list-injector.ts +8 -8
  14. package/src/interface/__tests__/detectors.test.ts +3 -3
  15. package/src/interface/__tests__/subagent-tool-path-guard.test.ts +157 -0
  16. package/src/interface/__tests__/subagent-tool-prompt.test.ts +12 -0
  17. package/src/interface/__tests__/tool-workflow-script-generate.test.ts +2 -2
  18. package/src/interface/__tests__/tool-workflow-throw-paths.test.ts +1 -1
  19. package/src/interface/bg-notify-render.ts +34 -13
  20. package/src/interface/commands.ts +3 -3
  21. package/src/interface/format.ts +2 -2
  22. package/src/interface/helpers.ts +3 -3
  23. package/src/interface/list-component.ts +4 -4
  24. package/src/interface/list-shared.ts +2 -2
  25. package/src/interface/list-view.ts +2 -2
  26. package/src/interface/subagent-actions.ts +288 -19
  27. package/src/interface/subagent-tool-schema.ts +163 -0
  28. package/src/interface/subagent-tool.ts +65 -129
  29. package/src/interface/subagents.ts +5 -5
  30. package/src/interface/tool-render.ts +34 -2
  31. package/src/interface/tool-workflow-script.ts +4 -4
  32. package/src/interface/tool-workflow.ts +6 -6
  33. package/src/interface/views/WorkflowsView.ts +5 -5
  34. package/src/interface/views/__tests__/WorkflowsView-signature.test.ts +3 -3
  35. package/src/interface/views/__tests__/detail-content-session-file.test.ts +2 -2
  36. package/src/interface/views/detail-content.ts +4 -4
  37. package/src/interface/views/format.ts +4 -4
  38. package/src/{orchestration/jsonl-run-store.ts → jsonl-run-store.ts} +132 -18
  39. package/src/execution/__tests__/__fixtures__/notifier-golden-snapshots.json +0 -53
  40. package/src/execution/__tests__/__fixtures__/truncline.snapshot.json +0 -1
  41. package/src/execution/__tests__/agent-registry.test.ts +0 -363
  42. package/src/execution/__tests__/agent-result-mapper.test.ts +0 -150
  43. package/src/execution/__tests__/alive-store.test.ts +0 -147
  44. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
  45. package/src/execution/__tests__/before-agent-start-injection.test.ts +0 -132
  46. package/src/execution/__tests__/bg-notify-render.test.ts +0 -256
  47. package/src/execution/__tests__/channel-registry-handshake.test.ts +0 -243
  48. package/src/execution/__tests__/chat-engine-routing.test.ts +0 -597
  49. package/src/execution/__tests__/chatmode-first-round-closure-service.test.ts +0 -365
  50. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -190
  51. package/src/execution/__tests__/chatmode-round-notify-real-chain.test.ts +0 -215
  52. package/src/execution/__tests__/concurrency-pool.test.ts +0 -250
  53. package/src/execution/__tests__/config.test.ts +0 -110
  54. package/src/execution/__tests__/conversation-wiring.test.ts +0 -198
  55. package/src/execution/__tests__/crash-recovery.test.ts +0 -320
  56. package/src/execution/__tests__/delivery-methods.test.ts +0 -385
  57. package/src/execution/__tests__/dialog-queue.test.ts +0 -299
  58. package/src/execution/__tests__/epipe-fallback.test.ts +0 -241
  59. package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -243
  60. package/src/execution/__tests__/execute-nesting.test.ts +0 -323
  61. package/src/execution/__tests__/execute-options-mapper.test.ts +0 -189
  62. package/src/execution/__tests__/execution-record.test.ts +0 -1284
  63. package/src/execution/__tests__/finalize-record.test.ts +0 -368
  64. package/src/execution/__tests__/finalized-marker.test.ts +0 -82
  65. package/src/execution/__tests__/format-schema-instruction.test.ts +0 -138
  66. package/src/execution/__tests__/format.test.ts +0 -458
  67. package/src/execution/__tests__/gc-timer.test.ts +0 -184
  68. package/src/execution/__tests__/get-record-for-action-restart.test.ts +0 -254
  69. package/src/execution/__tests__/gui-mode-dispatch.test.ts +0 -59
  70. package/src/execution/__tests__/helpers/mock-extension-api.ts +0 -30
  71. package/src/execution/__tests__/helpers/spawn-mock.ts +0 -238
  72. package/src/execution/__tests__/host-mode.test.ts +0 -87
  73. package/src/execution/__tests__/index-session-start-identity.test.ts +0 -371
  74. package/src/execution/__tests__/index-session-start.test.ts +0 -593
  75. package/src/execution/__tests__/lifecycle-manager-lock.test.ts +0 -211
  76. package/src/execution/__tests__/lifecycle-manager.test.ts +0 -337
  77. package/src/execution/__tests__/lifecycle-predicates.test.ts +0 -116
  78. package/src/execution/__tests__/list-component.test.ts +0 -401
  79. package/src/execution/__tests__/list-fields.test.ts +0 -109
  80. package/src/execution/__tests__/manifest-parentid.test.ts +0 -117
  81. package/src/execution/__tests__/model-resolver.test.ts +0 -413
  82. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +0 -287
  83. package/src/execution/__tests__/nested-visibility.test.ts +0 -325
  84. package/src/execution/__tests__/notifier-flush.test.ts +0 -574
  85. package/src/execution/__tests__/notifier-golden-snapshot.test.ts +0 -261
  86. package/src/execution/__tests__/one-shot-upgrade.test.ts +0 -205
  87. package/src/execution/__tests__/output-collector.test.ts +0 -61
  88. package/src/execution/__tests__/parent-child-matrix.test.ts +0 -336
  89. package/src/execution/__tests__/path-encoding.test.ts +0 -104
  90. package/src/execution/__tests__/pi-invocation.test.ts +0 -134
  91. package/src/execution/__tests__/record-store.test.ts +0 -1057
  92. package/src/execution/__tests__/records-cwd-isolation.test.ts +0 -91
  93. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +0 -339
  94. package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -273
  95. package/src/execution/__tests__/relay-agent.test.ts +0 -448
  96. package/src/execution/__tests__/relay-env.test.ts +0 -42
  97. package/src/execution/__tests__/resource-policy.test.ts +0 -109
  98. package/src/execution/__tests__/rpc-mode.test.ts +0 -89
  99. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -267
  100. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -253
  101. package/src/execution/__tests__/run-spawn-edges.test.ts +0 -644
  102. package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
  103. package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
  104. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
  105. package/src/execution/__tests__/sdk-contract.test.ts +0 -273
  106. package/src/execution/__tests__/session-context-resolver.test.ts +0 -167
  107. package/src/execution/__tests__/session-file-gc.test.ts +0 -293
  108. package/src/execution/__tests__/session-pending.test.ts +0 -197
  109. package/src/execution/__tests__/session-reconstructor.test.ts +0 -379
  110. package/src/execution/__tests__/session-runner-epipe.test.ts +0 -178
  111. package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -311
  112. package/src/execution/__tests__/session-start-reaper.test.ts +0 -233
  113. package/src/execution/__tests__/spawn-args.test.ts +0 -434
  114. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -189
  115. package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
  116. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -207
  117. package/src/execution/__tests__/spawned-children.test.ts +0 -92
  118. package/src/execution/__tests__/startup-config-declaration.test.ts +0 -35
  119. package/src/execution/__tests__/status-refactor.test.ts +0 -345
  120. package/src/execution/__tests__/stdin-writer.test.ts +0 -463
  121. package/src/execution/__tests__/stream-sink-retirement.test.ts +0 -261
  122. package/src/execution/__tests__/subagent-service-abort.test.ts +0 -60
  123. package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -629
  124. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +0 -180
  125. package/src/execution/__tests__/subagent-service.test.ts +0 -788
  126. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +0 -310
  127. package/src/execution/__tests__/subprocess-agent-runner.test.ts +0 -506
  128. package/src/execution/__tests__/temp-prompt.test.ts +0 -53
  129. package/src/execution/__tests__/timeout-integration.test.ts +0 -397
  130. package/src/execution/__tests__/tombstone-store.test.ts +0 -73
  131. package/src/execution/__tests__/tool-action.test.ts +0 -385
  132. package/src/execution/__tests__/truncline-snapshot.test.ts +0 -81
  133. package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
  134. package/src/execution/__tests__/turn-limiter.test.ts +0 -65
  135. package/src/execution/__tests__/ui-channels.test.ts +0 -187
  136. package/src/execution/__tests__/ui-interaction-model.test.ts +0 -67
  137. package/src/execution/__tests__/ui-request-handler-factory.test.ts +0 -370
  138. package/src/execution/__tests__/ui-request-handler.test.ts +0 -204
  139. package/src/execution/__tests__/ui-request-observability.test.ts +0 -114
  140. package/src/execution/__tests__/ui-request-queue.test.ts +0 -133
  141. package/src/execution/__tests__/worktree-manager.test.ts +0 -633
  142. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -229
  143. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +0 -181
  144. package/src/execution/__tests__/worktree-registry.test.ts +0 -199
  145. package/src/execution/agent-registry.ts +0 -193
  146. package/src/execution/agent-result-mapper.ts +0 -90
  147. package/src/execution/alive-store.ts +0 -92
  148. package/src/execution/argv-mirror.ts +0 -109
  149. package/src/execution/best-effort.ts +0 -38
  150. package/src/execution/channel-registry-access.ts +0 -144
  151. package/src/execution/concurrency-pool.ts +0 -116
  152. package/src/execution/config.ts +0 -96
  153. package/src/execution/dialog-queue.ts +0 -330
  154. package/src/execution/engine/__tests__/common/data-dir.test.ts +0 -53
  155. package/src/execution/engine/__tests__/common/errors.test.ts +0 -132
  156. package/src/execution/engine/__tests__/common/event-journal.test.ts +0 -177
  157. package/src/execution/engine/__tests__/common/kill-chain.test.ts +0 -192
  158. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +0 -81
  159. package/src/execution/engine/__tests__/common/persona-router.test.ts +0 -123
  160. package/src/execution/engine/__tests__/common/pool-manager.test.ts +0 -154
  161. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
  162. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
  163. package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +0 -141
  164. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +0 -109
  165. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +0 -101
  166. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +0 -77
  167. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +0 -104
  168. package/src/execution/engine/__tests__/conformance/contract.relay.test.ts +0 -342
  169. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +0 -201
  170. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +0 -76
  171. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +0 -79
  172. package/src/execution/engine/__tests__/engine-discovery.test.ts +0 -87
  173. package/src/execution/engine/__tests__/engines-declaration.test.ts +0 -36
  174. package/src/execution/engine/__tests__/model-prompt.test.ts +0 -85
  175. package/src/execution/engine/__tests__/paths.test.ts +0 -39
  176. package/src/execution/engine/__tests__/registry.test.ts +0 -120
  177. package/src/execution/engine/__tests__/routing.test.ts +0 -231
  178. package/src/execution/engine/common/data-dir.ts +0 -62
  179. package/src/execution/engine/common/errors.ts +0 -183
  180. package/src/execution/engine/common/event-journal.ts +0 -254
  181. package/src/execution/engine/common/journal-replay.ts +0 -62
  182. package/src/execution/engine/common/kill-chain.ts +0 -221
  183. package/src/execution/engine/common/nesting-guard.ts +0 -50
  184. package/src/execution/engine/common/persona-router.ts +0 -108
  185. package/src/execution/engine/common/pool-manager.ts +0 -226
  186. package/src/execution/engine/common/schema-emulation.ts +0 -189
  187. package/src/execution/engine/common/session-view-projection.ts +0 -51
  188. package/src/execution/engine/engine-discovery.ts +0 -65
  189. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -469
  190. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
  191. package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
  192. package/src/execution/engine/engines/pi/pi-engine.ts +0 -415
  193. package/src/execution/engine/engines/pi/reader.ts +0 -48
  194. package/src/execution/engine/engines/pi/registration.ts +0 -35
  195. package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
  196. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
  197. package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
  198. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -246
  199. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -228
  200. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
  201. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -64
  202. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -127
  203. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -567
  204. package/src/execution/engine/engines/zcode/constants.ts +0 -43
  205. package/src/execution/engine/engines/zcode/golden-sample.ts +0 -39
  206. package/src/execution/engine/engines/zcode/launcher.ts +0 -161
  207. package/src/execution/engine/engines/zcode/parser.ts +0 -436
  208. package/src/execution/engine/engines/zcode/preparer.ts +0 -363
  209. package/src/execution/engine/engines/zcode/reader.ts +0 -381
  210. package/src/execution/engine/engines/zcode/registration.ts +0 -37
  211. package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -648
  212. package/src/execution/engine/host-task-spec.ts +0 -47
  213. package/src/execution/engine/model-prompt.ts +0 -59
  214. package/src/execution/engine/paths.ts +0 -42
  215. package/src/execution/engine/port.ts +0 -153
  216. package/src/execution/engine/registry.ts +0 -123
  217. package/src/execution/engine/routing.ts +0 -218
  218. package/src/execution/engine/types.ts +0 -304
  219. package/src/execution/execute-options-mapper.ts +0 -111
  220. package/src/execution/execution-record.ts +0 -906
  221. package/src/execution/finalize-record.ts +0 -251
  222. package/src/execution/finalized-marker.ts +0 -51
  223. package/src/execution/get-state-handshake.ts +0 -104
  224. package/src/execution/host-mode.ts +0 -56
  225. package/src/execution/idle-gc.ts +0 -47
  226. package/src/execution/lifecycle-manager.ts +0 -491
  227. package/src/execution/lifecycle-predicates.ts +0 -65
  228. package/src/execution/manifest-store.ts +0 -256
  229. package/src/execution/model-config-service.ts +0 -204
  230. package/src/execution/model-resolver.ts +0 -276
  231. package/src/execution/notifier.ts +0 -260
  232. package/src/execution/output-collector.ts +0 -88
  233. package/src/execution/path-encoding.ts +0 -60
  234. package/src/execution/pi-invocation.ts +0 -120
  235. package/src/execution/record-entry.ts +0 -132
  236. package/src/execution/record-store.ts +0 -1234
  237. package/src/execution/relay-env.ts +0 -37
  238. package/src/execution/session-context-resolver.ts +0 -64
  239. package/src/execution/session-file-gc.ts +0 -120
  240. package/src/execution/session-pending.ts +0 -164
  241. package/src/execution/session-reconstructor.ts +0 -678
  242. package/src/execution/session-runner.ts +0 -1548
  243. package/src/execution/sessions-index.ts +0 -304
  244. package/src/execution/spawn-event-adapter.ts +0 -363
  245. package/src/execution/stdin-writer.ts +0 -198
  246. package/src/execution/stream-sink.ts +0 -126
  247. package/src/execution/subagent-service.ts +0 -2119
  248. package/src/execution/subprocess-agent-runner.ts +0 -303
  249. package/src/execution/temp-prompt.ts +0 -62
  250. package/src/execution/tombstone-store.ts +0 -72
  251. package/src/execution/turn-limiter.ts +0 -102
  252. package/src/execution/types.ts +0 -910
  253. package/src/execution/ui-channels.ts +0 -216
  254. package/src/execution/ui-interaction-model.ts +0 -48
  255. package/src/execution/ui-request-handler-factory.ts +0 -212
  256. package/src/execution/ui-request-observability.ts +0 -81
  257. package/src/execution/ui-request-queue.ts +0 -174
  258. package/src/execution/worktree-manager.ts +0 -688
  259. package/src/execution/worktree-registry.ts +0 -222
  260. package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +0 -336
  261. package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +0 -208
  262. package/src/orchestration/__tests__/agent-call-stream.test.ts +0 -157
  263. package/src/orchestration/__tests__/args-validator.test.ts +0 -143
  264. package/src/orchestration/__tests__/concurrency-gate.test.ts +0 -125
  265. package/src/orchestration/__tests__/config-loader.test.ts +0 -503
  266. package/src/orchestration/__tests__/error-recovery-handlers.test.ts +0 -724
  267. package/src/orchestration/__tests__/error-recovery-postmessage-defense.test.ts +0 -405
  268. package/src/orchestration/__tests__/error-recovery-serialize-failed-result.test.ts +0 -56
  269. package/src/orchestration/__tests__/error-recovery-workflow-call.test.ts +0 -166
  270. package/src/orchestration/__tests__/execute-agent-call.test.ts +0 -314
  271. package/src/orchestration/__tests__/jsonl-run-store-loadall-sources.test.ts +0 -171
  272. package/src/orchestration/__tests__/jsonl-run-store-session-file.test.ts +0 -1030
  273. package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +0 -277
  274. package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +0 -96
  275. package/src/orchestration/__tests__/lifecycle.test.ts +0 -625
  276. package/src/orchestration/__tests__/review-fix-loop-e2e.test.ts +0 -1971
  277. package/src/orchestration/__tests__/script-lint.test.ts +0 -831
  278. package/src/orchestration/__tests__/skill-discovery.test.ts +0 -157
  279. package/src/orchestration/__tests__/test-mocks.ts +0 -197
  280. package/src/orchestration/__tests__/worker-host.test.ts +0 -120
  281. package/src/orchestration/__tests__/worker-returnmeta-passthrough.test.ts +0 -164
  282. package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +0 -520
  283. package/src/orchestration/__tests__/worker-script-builder.test.ts +0 -309
  284. package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +0 -110
  285. package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +0 -317
  286. package/src/orchestration/__tests__/workflow-script-lint-memo.test.ts +0 -110
  287. package/src/orchestration/__tests__/workflows-e2e.test.ts +0 -537
  288. package/src/orchestration/agent-opts-resolver.ts +0 -93
  289. package/src/orchestration/args-validator.ts +0 -127
  290. package/src/orchestration/concurrency-gate.ts +0 -69
  291. package/src/orchestration/config-loader.ts +0 -315
  292. package/src/orchestration/error-recovery.ts +0 -862
  293. package/src/orchestration/execute-agent-call.ts +0 -217
  294. package/src/orchestration/launcher.ts +0 -410
  295. package/src/orchestration/lifecycle.ts +0 -396
  296. package/src/orchestration/models/__tests__/budget.test.ts +0 -367
  297. package/src/orchestration/models/__tests__/trace.test.ts +0 -408
  298. package/src/orchestration/models/agent-call.ts +0 -83
  299. package/src/orchestration/models/budget.ts +0 -148
  300. package/src/orchestration/models/ports.ts +0 -164
  301. package/src/orchestration/models/run-runtime.ts +0 -89
  302. package/src/orchestration/models/run-spec.ts +0 -83
  303. package/src/orchestration/models/run-state.ts +0 -44
  304. package/src/orchestration/models/trace.ts +0 -183
  305. package/src/orchestration/models/types.ts +0 -292
  306. package/src/orchestration/models/workflow-run.ts +0 -254
  307. package/src/orchestration/models/workflow-script-registry.ts +0 -35
  308. package/src/orchestration/models/workflow-script.ts +0 -117
  309. package/src/orchestration/script-lint.ts +0 -766
  310. package/src/orchestration/skill-discovery.ts +0 -92
  311. package/src/orchestration/worker-handle.ts +0 -115
  312. package/src/orchestration/worker-host.ts +0 -98
  313. package/src/orchestration/worker-script-builder.ts +0 -408
  314. package/src/orchestration/workflow-files.ts +0 -85
  315. package/src/orchestration/workflow-script-registry-impl.ts +0 -133
  316. package/src/shared/__tests__/agent-ref.test.ts +0 -34
  317. package/src/shared/__tests__/meta-parser.test.ts +0 -304
  318. package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -280
  319. package/src/shared/__tests__/resource-discovery.test.ts +0 -736
  320. package/src/shared/__tests__/resource-meta.test.ts +0 -51
  321. package/src/shared/__tests__/schema-jsonify.test.ts +0 -81
  322. package/src/shared/agent-event.ts +0 -13
  323. package/src/shared/agent-ref.ts +0 -57
  324. package/src/shared/meta-parser.ts +0 -261
  325. package/src/shared/resource-discovery.ts +0 -811
  326. package/src/shared/resource-meta.ts +0 -65
  327. package/src/shared/schema-jsonify.ts +0 -56
  328. package/src/shared/xml-injection.ts +0 -35
  329. package/workflows/README.md +0 -81
  330. package/workflows/_shared/agent-refs.cjs +0 -40
  331. package/workflows/chain.js +0 -131
  332. package/workflows/map-reduce.js +0 -174
  333. package/workflows/parallel.js +0 -148
  334. package/workflows/review-fix-loop-utils.cjs +0 -1307
  335. package/workflows/review-fix-loop.js +0 -1396
  336. package/workflows/scatter-gather.js +0 -178
@@ -1,292 +0,0 @@
1
- /**
2
- * Workflow Extension — Engine 共享类型
3
- *
4
- * Engine 层全局基础类型。零 infra 依赖——不 import 任何 infra 文件,
5
- * 可独立编译测试(D-12 三层架构,AC-1)。
6
- *
7
- * 核心内容:
8
- * - 状态机:RunStatus = "running" | "done"(2 态,一次性生命周期,FR-3)
9
- * + DoneReason(completed/failed/aborted/budget_limited/time_limited)
10
- * - AgentCallOpts / AgentResult / AgentUsage(单次 agent 调用的输入/输出)
11
- * - ExecutionTraceNode / TracePatch / ToolCallEntry / WorkerLogEntry(trace 数据)
12
- *
13
- * 层归属:Engine(数据结构 + 不变式守卫)。
14
- */
15
-
16
- import type { ExecutionRecord } from "../../execution/types.ts";
17
-
18
- // ── 状态机 ────────────────────────────────────────────────────
19
-
20
- /**
21
- * 状态机:2 态(D-12 / FR-3,一次性生命周期——run 不可挂起)。
22
- *
23
- * running → done
24
- *
25
- * `done` 是唯一终态,具体原因由 DoneReason 区分。
26
- */
27
- export type RunStatus = "running" | "done";
28
-
29
- /** 终态原因。done 时必有(WorkflowRun 不变式)。 */
30
- export type DoneReason =
31
- | "completed"
32
- | "failed"
33
- | "aborted"
34
- | "budget_limited"
35
- | "time_limited"
36
- // m3:runAndWait 合成返回值专用——参数校验失败(run 从未创建,不进入 run.state.reason)
37
- | "invalid_args";
38
-
39
- /** 合法的状态转换。空数组 = 无出边(done 终态)。 */
40
- export const VALID_RUN_TRANSITIONS: Record<RunStatus, readonly RunStatus[]> = {
41
- running: ["done"] as const,
42
- done: [] as const,
43
- };
44
-
45
- export const ALL_RUN_STATUSES: readonly RunStatus[] = ["running", "done"] as const;
46
-
47
- export const ALL_DONE_REASONS: readonly DoneReason[] = [
48
- "completed",
49
- "failed",
50
- "aborted",
51
- "invalid_args",
52
- "budget_limited",
53
- "time_limited",
54
- ] as const;
55
-
56
- /** done 为终态,无出边。 */
57
- export function isDone(status: RunStatus): boolean {
58
- return status === "done";
59
- }
60
-
61
- export function canRunTransition(from: RunStatus, to: RunStatus): boolean {
62
- return (VALID_RUN_TRANSITIONS[from] as readonly RunStatus[]).includes(to);
63
- }
64
-
65
- // ── Agent 调用 ────────────────────────────────────────────────
66
-
67
- /**
68
- * 单次 agent 调用的输入选项。
69
- *
70
- * D-12 仅重组执行编排,AgentCallOpts 形状保持兼容。
71
- */
72
- export interface AgentCallOpts {
73
- /** The task prompt to send to the agent. */
74
- prompt: string;
75
- /**
76
- * Optional JSON schema for structured output.
77
- * When provided, the schema is passed via PI_WORKFLOW_SCHEMA env to the subprocess,
78
- * which activates the structured-output tool + turn_end hook.
79
- * The tool's execute validates model output against the schema.
80
- * On success, `parsedOutput` on the result is set to `tool_execution_end.result.details`
81
- * (the validated, parsed data object — not the raw tool call args).
82
- */
83
- schema?: Record<string, unknown>;
84
- /**
85
- * Model to use (e.g. "router-openai/glm-5.1").
86
- * When omitted, pi's default model is used.
87
- */
88
- model?: string;
89
- /**
90
- * Thinking level override (e.g. "high", "medium", "low").
91
- * M2: Added to align with subagent path's ExecuteOptions.thinkingLevel.
92
- * When omitted, agent .md frontmatter thinkingLevel is used (via resolveIdentity/getAgentConfig).
93
- */
94
- thinkingLevel?: string;
95
- /** Scene name passed through to the worker for model-selection hints. */
96
- scene?: string;
97
- /**
98
- * Wall-clock timeout in milliseconds. When > 0, aborts the subprocess
99
- * if it runs longer than this, regardless of external signal.
100
- * Per-call,归 AgentCall 实体(G-027)。
101
- */
102
- timeoutMs?: number;
103
- /**
104
- * Skill name to load (e.g. "code-review"). Resolved to SKILL.md path
105
- * and injected via --skill flag in the subprocess.
106
- */
107
- skill?: string;
108
- /**
109
- * Resolved absolute path to the skill directory or SKILL.md file.
110
- * Set by agent-opts-resolver when opts.skill is present.
111
- */
112
- skillPath?: string;
113
- /** Human-readable description for logging and debugging. */
114
- description?: string;
115
- /**
116
- * Agent ref (absolute .md path). Resolved by resolveIdentity via getAgentConfig,
117
- * which injects the agent's systemPrompt/model/tools/thinkingLevel. Not handled by
118
- * resolveAgentOpts (single-responsibility: agent ref ownership belongs to resolveIdentity,
119
- * M2 fix — previously overlapped causing double-injection + model-tier confusion).
120
- */
121
- agent?: string;
122
- /**
123
- * System prompt injection CONTENT (not file paths).
124
- * Set by agent-opts-resolver: schema structured-output instruction string.
125
- * Agent systemPrompt is NOT included here (handled by resolveIdentity/agentConfig).
126
- * mapToExecuteOptions passes this through to ExecuteOptions.appendSystemPrompt
127
- * (same name/semantics, transparent passthrough).
128
- */
129
- appendSystemPrompt?: string[];
130
- /**
131
- * Schema JSON for PI_WORKFLOW_SCHEMA env var.
132
- * Set by agent-opts-resolver when opts.schema is present; passed as env var
133
- * to activate the structured-output tool + hook.
134
- */
135
- schemaEnv?: string;
136
- /**
137
- * Per-call 工作目录(ADR-029 决策 1)。传给 child_process.spawn 的 cwd option。
138
- *
139
- * 用于 worktree 隔离:传入 worktree 绝对路径,spawn 的 pi 子进程绑定到该目录,
140
- * 其内部的 createAgentSession/ResourceLoader/bash 工具都在该目录运行。
141
- * undefined 时 spawn 继承 workflow 进程的 cwd(向后兼容)。
142
- */
143
- cwd?: string;
144
- /** Inherit parent session context (fork mode). Independent of worktree (file isolation). */
145
- fork?: boolean;
146
- /**
147
- * 执行引擎 id(P4 D9 三层优先级的第一层:调用参数级,workflow step 显式指定)。
148
- * 仅限「必须某引擎独有能力」的场景使用并注释原因(D9③ workflow 脚本不写死
149
- * engine——环境差异由 frontmatter/全局默认承载);透传链 worker-script-builder
150
- * agent() → execute-agent-call → SAR 路由层。
151
- */
152
- engine?: string;
153
- /** Filesystem isolation: when true, creates a new git worktree for the agent. Independent of fork. */
154
- worktree?: boolean;
155
- /** When true, agent() resolves {value, sessionFile, worktreePath, error} instead of a bare value.
156
- * Worker-layer flag only — not forwarded to ExecuteOptions (mapToExecuteOptions drops it). */
157
- returnMeta?: boolean;
158
- }
159
-
160
- /**
161
- * 单次 agent 调用的资源用量(FR-7 跨 turn 累积)。
162
- */
163
- export interface AgentUsage {
164
- input: number;
165
- output: number;
166
- cacheRead: number;
167
- cacheWrite: number;
168
- cost: number;
169
- contextTokens: number;
170
- turns: number;
171
- }
172
-
173
- /**
174
- * 单次 tool 调用记录(FR-7 从 agent JSONL 流采)。
175
- */
176
- export interface ToolCallEntry {
177
- /** Tool name. */
178
- name: string;
179
- /** Args preview string. */
180
- input: string;
181
- }
182
-
183
- /**
184
- * 单次 agent 调用的结果(统一形态)。
185
- *
186
- * Engine 直接消费 SubprocessAgentRunner 返回值;callCache replay 时 worker
187
- * 取 parsedOutput ?? content(见 worker-script-builder.ts 消息处理)。
188
- */
189
- export interface AgentResult {
190
- /** Raw text output from the agent. */
191
- content: string;
192
- /**
193
- * Parsed structured output.
194
- * Present when `schema` was provided and the output was valid JSON.
195
- * Source: tool_execution_end.result.details(validated data object)。
196
- */
197
- parsedOutput?: unknown;
198
- /** Token and cost usage accumulated across all assistant turns. */
199
- usage?: AgentUsage;
200
- /** Wall-clock duration in milliseconds. */
201
- durationMs?: number;
202
- /** True when the pi process exited with code 0. */
203
- error?: string;
204
- /**
205
- * Pi session ID for the subagent process (uuidv7).
206
- * Present when pi emits a session header (default in --mode json).
207
- * Can be used to locate the session JSONL file for post-run inspection (G-017)。
208
- */
209
- sessionId?: string;
210
- /**
211
- * Session JSONL 绝对路径(不含目录的文件名在 subagents 侧 AgentResult.sessionFile)。
212
- * 由 mapToWorkflowAgentResult 从 subagents AgentResult 透传——让 workflow 编排层
213
- * 继承 subagent 执行管道产出的 session 文件路径,overlay/GUI 可直接定位。
214
- * 窗口期内可能 undefined(session 尚未创建成功)。
215
- */
216
- sessionFile?: string;
217
- /**
218
- * Absolute path of the git worktree used for filesystem isolation (set when
219
- * worktree isolation is active). Injected by executeAndAwait from record.worktreeHandle.path.
220
- *
221
- * ⚠️ Diagnostic only, may not exist: executeAndAwait's finalizeRecord cleans up the
222
- * worktree (git worktree remove --force) before returning, so by the time this field
223
- * reaches the caller the directory has typically been deleted. Use it only for log/trace
224
- * correlation (e.g. attributing a session jsonl to its worktree origin) — never as a cwd
225
- * for a subsequent agent or filesystem operation (would ENOENT).
226
- */
227
- worktreePath?: string;
228
- /** All tool calls collected from JSONL stream (FR-7). */
229
- toolCalls?: ToolCallEntry[];
230
- }
231
-
232
- // ── Trace ─────────────────────────────────────────────────────
233
-
234
- /**
235
- * 执行追踪节点(事件流 D-10 单一来源)。
236
- */
237
- export interface ExecutionTraceNode {
238
- stepIndex: number;
239
- agent: string;
240
- task: string;
241
- model: string;
242
- status: "pending" | "running" | "completed" | "failed";
243
- /** Phase name for TUI grouping. Set from explicit opts.phase or global _currentPhase. */
244
- phase?: string;
245
- startedAt?: string;
246
- completedAt?: string;
247
- result?: AgentResult;
248
- error?: string;
249
- /**
250
- * Pi session ID (uuidv7) for the subagent process.
251
- * Used to locate the session JSONL for post-run inspection.
252
- */
253
- sessionId?: string;
254
- /**
255
- * Session JSONL 绝对路径。finalizeCall 从 result.sessionFile 透传。
256
- * 持久化到快照(serializeRun),跨 session 重水合后保留。
257
- */
258
- sessionFile?: string;
259
- /**
260
- * Live 执行进度对象(running 时存在,done 时由 dispatchAgentCall 清除)。
261
- *
262
- * 挂在 node 上(D-10 单源延伸:AgentCall.traceNode 与 Trace.nodes 共享同一引用)。
263
- * TUI 通过 trace.toArray() 读 node.live,派生 getEventLog/getCurrentActivity 实时展示。
264
- * 不持久化(序列化时 strip;重跑时由 dispatchAgentCall 重建)。
265
- */
266
- live?: ExecutionRecord;
267
- }
268
-
269
- /**
270
- * Trace.update 用的 patch(字段全可选)。
271
- *
272
- * 不变式:只改单个 node 的 status/result/error/completedAt/sessionId。
273
- * callId 不存在时 update 为 no-op(D-10)。
274
- */
275
- export interface TracePatch {
276
- status?: "pending" | "running" | "completed" | "failed";
277
- result?: AgentResult;
278
- error?: string;
279
- completedAt?: string;
280
- sessionId?: string;
281
- sessionFile?: string;
282
- }
283
-
284
- // ── Worker 诊断 ───────────────────────────────────────────────
285
-
286
- /**
287
- * Worker console.* 捕获条目(run 级诊断,仅展示在 TUI widget,不泄漏到 input area)。
288
- */
289
- export interface WorkerLogEntry {
290
- level: "log" | "warn" | "error" | "info";
291
- message: string;
292
- }
@@ -1,254 +0,0 @@
1
- /**
2
- * Workflow Extension — WorkflowRun
3
- *
4
- * 单次 workflow run 的聚合根。封装状态机 + runtime 生命周期 + 不变式守卫。
5
- * 架构核心——所有字段变更通过方法(transition/assignRuntime/releaseRuntime/
6
- * replaceRuntime),engine 模块不直接打洞(AC-3)。
7
- *
8
- * 层归属:Engine。依赖 RunRuntime(具体类,D-12 允许)+ RunSpec/RunState + 类型。
9
- *
10
- * 关键不变式(必须全测):
11
- * I1: state.status === "running" ⟺ runtime !== undefined
12
- * I2: state.status === "done" ⟹ state.reason !== undefined
13
- *
14
- * 状态机(一次性生命周期,2 态):
15
- * 构造(status="running",I1 构造期跳过——runtime 由 assignRuntime 注入)
16
- * running ──transition("done", reason)──→ done (releaseRuntime + completedAt)
17
- * done ──(no out edges, zombie)
18
- *
19
- * 「创建即 running」与 I1 的协调(F4):构造瞬间 running 而 runtime 尚未注入,
20
- * I1 在构造期跳过(仅查 I2),完整校验由 assignRuntime/transition/replaceRuntime
21
- * 末尾的 validateInvariants 维持;构造到 assignRuntime 的 I1 窗口由调用方
22
- * (lifecycle.runWorkflow 在 assignRuntime 之后才 runs.set)保证对外不可见。
23
- *
24
- * worker-error-retry(G5-001 + G6-001):
25
- * - replaceRuntime(newRt): 前置 status==="running"(G6-001),原子释放前一个 runtime
26
- * + 绑定新 runtime,全程保持不变式 I1(中间不经过 runtime===undefined 的可见状态)。
27
- *
28
- * 参考:domain-models.md §1(聚合根定义)、clarification.md G3-001/G5-001/G6-001。
29
- */
30
-
31
- import { RunRuntime } from "./run-runtime.ts";
32
- import type { RunSpec } from "./run-spec.ts";
33
- import type { RunState } from "./run-state.ts";
34
- import type { DoneReason, RunStatus } from "./types.ts";
35
- import { canRunTransition } from "./types.ts";
36
-
37
- // ── WorkflowRunMeta ──────────────────────────────────────────
38
-
39
- /**
40
- * 聚合根级 meta(非 RunState 的一部分,不随 trace 持久化到 worker JSONL)。
41
- *
42
- * workerErrorCount/scriptErrorCount 跨 runtime 存活(C.5:error-recovery 重试计数载体),
43
- * 因为 retry 会 replaceRuntime,但计数是 run 级而非 runtime 级。
44
- */
45
- export interface WorkflowRunMeta {
46
- /** ISO 时间戳,run 创建/启动时刻。 */
47
- startedAt: string;
48
- /** ISO 时间戳,transition("done") 时设置。 */
49
- completedAt?: string;
50
- /** Worker 线程错误计数(C.5:跨 runtime 存活,重试计数载体)。 */
51
- workerErrorCount?: number;
52
- /** 脚本错误计数(C.5:跨 runtime 存活)。 */
53
- scriptErrorCount?: number;
54
- }
55
-
56
- // ── WorkflowRun ──────────────────────────────────────────────
57
-
58
- export class WorkflowRun {
59
- readonly runId: string;
60
- readonly spec: RunSpec;
61
- state: RunState;
62
- runtime?: RunRuntime;
63
- meta: WorkflowRunMeta;
64
-
65
- /**
66
- * 创建聚合根。初始状态 "running"(一次性生命周期:run 从创建起即在执行,
67
- * runtime 由紧随其后的 assignRuntime 注入)。也可传入 done 状态用于重水合
68
- * 已完成的 run(loadAll 后的只读聚合)。
69
- *
70
- * 不变式 I1 构造期跳过——「创建即 running」要求构造瞬间 runtime===undefined
71
- * 合法(runtime 必须由 assignRuntime 注入,构造函数无从持有);重水合的
72
- * running 快照同样无 worker。I1 的运行时校验在 assignRuntime/transition/
73
- * replaceRuntime 末尾的 validateInvariants 处生效。
74
- */
75
- constructor(
76
- runId: string,
77
- spec: RunSpec,
78
- state: RunState,
79
- meta: WorkflowRunMeta,
80
- ) {
81
- this.runId = runId;
82
- this.spec = spec;
83
- this.state = state;
84
- this.meta = meta;
85
- // runtime 在构造时始终为 undefined——run 创建时无活 worker,loadAll 重水合
86
- // 时也不恢复 runtime(worker 必须由 lifecycle 重新 start)。
87
- this.runtime = undefined;
88
- // 构造期仅校验 I2(I1 跳过,见方法 doc);I1 由 assignRuntime 末尾
89
- // validateInvariants 恢复。
90
- this.validateInvariantI2();
91
- }
92
-
93
- /**
94
- * 从持久化快照重水合聚合根。与构造函数同语义(构造期跳过 I1——持久化的
95
- * running 状态没有 worker,进程被杀后 worker 不可能还活着)。保留独立工厂
96
- * 标注重水合意图;调用方(D-4 kill-9 恢复)负责在 session_start 时把残留
97
- * running 转 done,failed,恢复 I1。
98
- *
99
- * @throws I2 违反(done 快照缺 reason 仍是 bug,不可跳过)
100
- */
101
- static reconstruct(runId: string, spec: RunSpec, state: RunState, meta: WorkflowRunMeta): WorkflowRun {
102
- return new WorkflowRun(runId, spec, state, meta);
103
- }
104
-
105
- // ── 不变式校验 ─────────────────────────────────────────────
106
-
107
- /**
108
- * 校验不变式 I1 + I2。违反抛错(聚合根自我保护,fail-fast)。
109
- * 在每个 mutation 方法末尾调用(防御式编程 + 测试可断言)。
110
- */
111
- private validateInvariants(): void {
112
- this.validateInvariantI2();
113
- // I1: status==="running" ⟺ runtime!==undefined
114
- if (this.state.status === "running" && this.runtime === undefined) {
115
- throw new Error(
116
- `WorkflowRun invariant I1 violated: status==="running" but runtime is undefined (runId=${this.runId})`,
117
- );
118
- }
119
- if (this.state.status !== "running" && this.runtime !== undefined) {
120
- throw new Error(
121
- `WorkflowRun invariant I1 violated: status!=="running" but runtime is defined (runId=${this.runId})`,
122
- );
123
- }
124
- }
125
-
126
- /**
127
- * 仅校验不变式 I2(done ⟹ reason)。构造期用——「创建即 running」与重水合的
128
- * running 快照都无 runtime(I1 构造期跳过),但 I2 必须保证(done 缺 reason 是真 bug)。
129
- */
130
- private validateInvariantI2(): void {
131
- if (this.state.status === "done" && this.state.reason === undefined) {
132
- throw new Error(
133
- `WorkflowRun invariant I2 violated: status==="done" but reason is undefined (runId=${this.runId})`,
134
- );
135
- }
136
- }
137
-
138
- // ── 状态机转换 ─────────────────────────────────────────────
139
-
140
- /**
141
- * 状态机转换。合法转换:running→done。
142
- *
143
- * running 的进入不走 transition——构造即 running,replaceRuntime 保持 running。
144
- * 调用 transition("running") 抛错,防止绕过 runtime 注入直接改状态。
145
- *
146
- * 副作用:
147
- * - →done: releaseRuntime + 设 state.reason + meta.completedAt
148
- *
149
- * @param target 目标状态(不允许 "running"——runtime 注入只走 assignRuntime/replaceRuntime)
150
- * @param reason →done 时必填(done ⟹ reason,不变式 I2)
151
- * @throws 非法转换 / done 缺 reason / target==="running"
152
- */
153
- transition(target: RunStatus, reason?: DoneReason): void {
154
- // "running" 必须经 assignRuntime(需 runtime 参数,transition 无法提供)
155
- if (target === "running") {
156
- throw new Error(
157
- `WorkflowRun.transition: cannot transition to "running" directly — use assignRuntime() (runId=${this.runId})`,
158
- );
159
- }
160
-
161
- if (!canRunTransition(this.state.status, target)) {
162
- throw new Error(
163
- `WorkflowRun.transition: illegal transition ${this.state.status} → ${target} (runId=${this.runId})`,
164
- );
165
- }
166
-
167
- // →done 需 reason(不变式 I2)
168
- if (target === "done" && reason === undefined) {
169
- throw new Error(
170
- `WorkflowRun.transition: transition to "done" requires a reason (runId=${this.runId})`,
171
- );
172
- }
173
-
174
- // 副作用:先清理 runtime(releaseRuntime 守不变式 I1),再改 status
175
- // (canRunTransition 已排除 target==="running",此处 target 恒为 "done")
176
- this.releaseRuntime();
177
- this.state.status = target;
178
- this.state.reason = reason;
179
- this.meta.completedAt = new Date().toISOString();
180
-
181
- this.validateInvariants();
182
- }
183
-
184
- // ── Runtime 生命周期 ───────────────────────────────────────
185
-
186
- /**
187
- * 绑定 runtime(run 创建后注入执行资源)。
188
- *
189
- * 前置:status==="running" && runtime===undefined(runWorkflow 创建路径——
190
- * 构造即 running 但 runtime 延迟到此处注入)。
191
- * 原子地:设 runtime 后末尾 validateInvariants,恢复构造期跳过的 I1
192
- * (running ⟺ runtime!==undefined)。
193
- *
194
- * @throws runtime 已定义 / status 不是 "running"(done 僵尸不可复活)
195
- */
196
- assignRuntime(rt: RunRuntime): void {
197
- if (this.runtime !== undefined) {
198
- throw new Error(
199
- `WorkflowRun.assignRuntime: runtime already defined (runId=${this.runId})`,
200
- );
201
- }
202
- if (this.state.status !== "running") {
203
- throw new Error(
204
- `WorkflowRun.assignRuntime: requires status==="running" (current: ${this.state.status}, runId=${this.runId})`,
205
- );
206
- }
207
- // 原子绑定:构造期 I1 处于跳过窗口(running 而 runtime undefined),设 runtime
208
- // 后末尾 validateInvariants 恢复 I1。调用方在 assignRuntime 后才对外注册
209
- // (lifecycle.runWorkflow 的 runs.set 后移),窗口外部不可见。
210
- this.runtime = rt;
211
- this.validateInvariants();
212
- }
213
-
214
- /**
215
- * 解绑 runtime(done 时由 transition 调用,也可独立调用)。
216
- *
217
- * 前置:无(runtime===undefined 时 no-op,幂等)。
218
- * 副作用:调 runtime.release("terminal") 释放 worker/controller,置 runtime=undefined。
219
- */
220
- releaseRuntime(): void {
221
- if (this.runtime === undefined) return;
222
- this.runtime.release("terminal");
223
- this.runtime = undefined;
224
- // 不改 status——调用方(transition)负责。独立调用时调用方需自行确保
225
- // status 一致(如 worker-error-retry 用 replaceRuntime 而非 release+assign)。
226
- }
227
-
228
- /**
229
- * 原地替换 runtime(G5-001:worker-error-retry)。
230
- *
231
- * 前置:status==="running"(G6-001:终态 run 拒绝重建)。
232
- * 原子地:释放旧 runtime(worker.terminate + abort)+ 绑定新 runtime,
233
- * 全程 status 保持 "running",不变式 I1 不违反(中间无 runtime===undefined 可见态)。
234
- *
235
- * 与 release+assign 的区别:replaceRuntime 不改 status,中间同步完成,
236
- * 外部观察不到违反不变式的瞬间。
237
- *
238
- * @throws status!=="running"
239
- */
240
- replaceRuntime(rt: RunRuntime): void {
241
- if (this.state.status !== "running") {
242
- throw new Error(
243
- `WorkflowRun.replaceRuntime: requires status==="running" (current: ${this.state.status}, runId=${this.runId})`,
244
- );
245
- }
246
- // 原子替换:旧 runtime 释放(terminate+abort),新 runtime 绑定。
247
- // status 保持 "running",runtime 全程 !== undefined,I1 不违反。
248
- if (this.runtime !== undefined) {
249
- this.runtime.release("terminal");
250
- }
251
- this.runtime = rt;
252
- this.validateInvariants();
253
- }
254
- }
@@ -1,35 +0,0 @@
1
- /**
2
- * Workflow Extension — WorkflowScriptRegistry 仓库接口
3
- *
4
- * workflow 脚本的仓库(repository)接口——Engine 定义、Infra 实现。
5
- *
6
- * 与 Ports 节的 3 个注入 port(AgentRunner/RunStore/WorkerHost)的区别:
7
- * - 3 个 port 是"执行依赖"(子进程/文件系统/线程),注入到 LifecycleDeps
8
- * - WorkflowScriptRegistry 是"发现依赖"(扫描文件系统),是 repository(§8),
9
- * 不进 LifecycleDeps,由 Interface 层 tool 直接调用(list/get 脚本)
10
- *
11
- * 优先级:tmp > project > user(domain-models.md §8)。60s TTL,按 workspaceRoot 分桶。
12
- * 实现在 Infra 层 WorkflowScriptRegistryImpl(扫描 + 缓存 + 去重)。
13
- *
14
- * 层归属:Engine(interface),Infra(impl)。
15
- *
16
- * 参考:domain-models.md §8。
17
- */
18
- import type { WorkflowScript } from "./workflow-script.ts";
19
-
20
- /**
21
- * workflow 脚本仓库接口(repository,需 mock 文件扫描)。
22
- */
23
- export interface WorkflowScriptRegistry {
24
- /** 扫描并返回所有 workflow 脚本(含 available=false 的解析失败项)。去重按 tmp>project>user。 */
25
- loadAll(): Promise<WorkflowScript[]>;
26
-
27
- /** 按名查单个脚本(含缓存)。返回 undefined 当 name 不存在。 */
28
- get(name: string): Promise<WorkflowScript | undefined>;
29
-
30
- /** 按绝对路径加载单个脚本(workflowRef 统一解析入口——S2 路径统一)。 */
31
- getPath(ref: string): Promise<WorkflowScript | undefined>;
32
-
33
- /** 失效缓存——下次 loadAll/get 重新扫描文件系统。 */
34
- invalidate(): void;
35
- }