@zhushanwen/pi-subagent-workflow 8.6.0 → 8.8.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 (364) hide show
  1. package/README.md +5 -11
  2. package/package.json +13 -20
  3. package/relay/relay.mjs +1 -1
  4. package/skills/workflow-script-format/SKILL.md +32 -13
  5. package/src/host/__tests__/pi-host.test.ts +235 -0
  6. package/src/host/pi-host.ts +163 -0
  7. package/src/index.ts +141 -138
  8. package/src/injectors/__tests__/engine-awareness.test.ts +292 -0
  9. package/src/injectors/__tests__/engine-section-stability.test.ts +343 -0
  10. package/src/injectors/__tests__/model-list-injector.test.ts +18 -21
  11. package/src/injectors/__tests__/subagent-list-injector.test.ts +59 -19
  12. package/src/injectors/__tests__/workflow-list-injector.test.ts +31 -17
  13. package/src/injectors/engine-awareness.ts +119 -0
  14. package/src/injectors/model-list-injector.ts +15 -58
  15. package/src/injectors/subagent-list-injector.ts +56 -114
  16. package/src/injectors/workflow-list-injector.ts +37 -70
  17. package/src/interface/__tests__/detectors.test.ts +48 -37
  18. package/src/interface/__tests__/subagent-tool-path-guard.test.ts +2 -2
  19. package/src/interface/__tests__/subagent-tool-prompt.test.ts +6 -3
  20. package/src/interface/__tests__/tool-workflow-run-builtin-name.test.ts +216 -0
  21. package/src/interface/__tests__/tool-workflow-script-generate.test.ts +17 -6
  22. package/src/interface/__tests__/tool-workflow-throw-paths.test.ts +38 -2
  23. package/src/interface/bg-notify-render.ts +7 -17
  24. package/src/interface/command-actions.ts +5 -15
  25. package/src/interface/commands.ts +4 -4
  26. package/src/interface/format.ts +17 -6
  27. package/src/interface/gui-mappers.ts +18 -22
  28. package/src/interface/helpers.ts +9 -130
  29. package/src/interface/list-component.ts +5 -5
  30. package/src/interface/list-shared.ts +3 -3
  31. package/src/interface/list-view.ts +3 -3
  32. package/src/interface/subagent-actions.ts +66 -439
  33. package/src/interface/subagent-tool-schema.ts +21 -17
  34. package/src/interface/subagent-tool.ts +12 -7
  35. package/src/interface/subagents.ts +4 -4
  36. package/src/interface/tool-render.ts +37 -15
  37. package/src/interface/tool-workflow-script.ts +34 -76
  38. package/src/interface/tool-workflow.ts +57 -94
  39. package/src/interface/views/WorkflowsView.ts +8 -16
  40. package/src/interface/views/__tests__/WorkflowsView-signature.test.ts +3 -3
  41. package/src/interface/views/__tests__/detail-content-session-file.test.ts +2 -2
  42. package/src/interface/views/detail-content.ts +4 -4
  43. package/src/interface/views/format.ts +23 -62
  44. package/src/{orchestration/jsonl-run-store.ts → jsonl-run-store.ts} +137 -225
  45. package/agents/analyst.md +0 -61
  46. package/agents/coder.md +0 -70
  47. package/agents/debugger.md +0 -67
  48. package/agents/doc-reviewer.md +0 -50
  49. package/agents/explorer.md +0 -64
  50. package/agents/general-purpose.md +0 -32
  51. package/agents/orchestrator.md +0 -63
  52. package/agents/planner.md +0 -54
  53. package/agents/researcher.md +0 -65
  54. package/agents/reviewer.md +0 -74
  55. package/src/execution/__tests__/__fixtures__/notifier-golden-snapshots.json +0 -53
  56. package/src/execution/__tests__/__fixtures__/truncline.snapshot.json +0 -1
  57. package/src/execution/__tests__/agent-registry.test.ts +0 -363
  58. package/src/execution/__tests__/agent-result-mapper.test.ts +0 -150
  59. package/src/execution/__tests__/alive-store.test.ts +0 -147
  60. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
  61. package/src/execution/__tests__/before-agent-start-injection.test.ts +0 -132
  62. package/src/execution/__tests__/bg-notify-render.test.ts +0 -329
  63. package/src/execution/__tests__/channel-registry-handshake.test.ts +0 -243
  64. package/src/execution/__tests__/chat-engine-routing.test.ts +0 -601
  65. package/src/execution/__tests__/chatmode-first-round-closure-service.test.ts +0 -365
  66. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -190
  67. package/src/execution/__tests__/chatmode-round-notify-real-chain.test.ts +0 -215
  68. package/src/execution/__tests__/concurrency-pool.test.ts +0 -250
  69. package/src/execution/__tests__/config.test.ts +0 -110
  70. package/src/execution/__tests__/conversation-wiring.test.ts +0 -198
  71. package/src/execution/__tests__/crash-recovery.test.ts +0 -320
  72. package/src/execution/__tests__/delivery-methods.test.ts +0 -422
  73. package/src/execution/__tests__/dialog-queue.test.ts +0 -299
  74. package/src/execution/__tests__/epipe-fallback.test.ts +0 -241
  75. package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -243
  76. package/src/execution/__tests__/execute-nesting.test.ts +0 -323
  77. package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
  78. package/src/execution/__tests__/execution-record.test.ts +0 -1394
  79. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +0 -171
  80. package/src/execution/__tests__/finalize-record.test.ts +0 -368
  81. package/src/execution/__tests__/finalized-marker.test.ts +0 -82
  82. package/src/execution/__tests__/format-schema-instruction.test.ts +0 -169
  83. package/src/execution/__tests__/format.test.ts +0 -458
  84. package/src/execution/__tests__/gc-timer.test.ts +0 -184
  85. package/src/execution/__tests__/get-record-for-action-restart.test.ts +0 -254
  86. package/src/execution/__tests__/gui-mode-dispatch.test.ts +0 -59
  87. package/src/execution/__tests__/helpers/mock-extension-api.ts +0 -30
  88. package/src/execution/__tests__/helpers/spawn-mock.ts +0 -242
  89. package/src/execution/__tests__/host-mode.test.ts +0 -87
  90. package/src/execution/__tests__/index-session-start-identity.test.ts +0 -371
  91. package/src/execution/__tests__/index-session-start.test.ts +0 -672
  92. package/src/execution/__tests__/lifecycle-manager-lock.test.ts +0 -211
  93. package/src/execution/__tests__/lifecycle-manager.test.ts +0 -383
  94. package/src/execution/__tests__/lifecycle-predicates.test.ts +0 -116
  95. package/src/execution/__tests__/list-component.test.ts +0 -401
  96. package/src/execution/__tests__/list-fields.test.ts +0 -140
  97. package/src/execution/__tests__/manifest-parentid.test.ts +0 -117
  98. package/src/execution/__tests__/model-resolver.test.ts +0 -465
  99. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +0 -287
  100. package/src/execution/__tests__/nested-visibility.test.ts +0 -325
  101. package/src/execution/__tests__/notifier-flush.test.ts +0 -612
  102. package/src/execution/__tests__/notifier-golden-snapshot.test.ts +0 -261
  103. package/src/execution/__tests__/notify-ledger.test.ts +0 -826
  104. package/src/execution/__tests__/one-shot-upgrade.test.ts +0 -205
  105. package/src/execution/__tests__/output-collector.test.ts +0 -358
  106. package/src/execution/__tests__/parent-child-matrix.test.ts +0 -336
  107. package/src/execution/__tests__/path-encoding.test.ts +0 -104
  108. package/src/execution/__tests__/pi-invocation.test.ts +0 -134
  109. package/src/execution/__tests__/record-store.test.ts +0 -1057
  110. package/src/execution/__tests__/records-cwd-isolation.test.ts +0 -91
  111. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +0 -339
  112. package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -273
  113. package/src/execution/__tests__/relay-agent.test.ts +0 -448
  114. package/src/execution/__tests__/relay-env.test.ts +0 -42
  115. package/src/execution/__tests__/resource-policy.test.ts +0 -109
  116. package/src/execution/__tests__/rpc-mode.test.ts +0 -89
  117. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -267
  118. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -253
  119. package/src/execution/__tests__/run-spawn-edges.test.ts +0 -687
  120. package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
  121. package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
  122. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
  123. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +0 -199
  124. package/src/execution/__tests__/sdk-contract.test.ts +0 -273
  125. package/src/execution/__tests__/session-context-resolver.test.ts +0 -167
  126. package/src/execution/__tests__/session-file-gc.test.ts +0 -293
  127. package/src/execution/__tests__/session-pending.test.ts +0 -197
  128. package/src/execution/__tests__/session-reconstructor.test.ts +0 -379
  129. package/src/execution/__tests__/session-runner-epipe.test.ts +0 -178
  130. package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -350
  131. package/src/execution/__tests__/session-start-reaper.test.ts +0 -233
  132. package/src/execution/__tests__/spawn-args.test.ts +0 -445
  133. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -189
  134. package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
  135. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -207
  136. package/src/execution/__tests__/spawned-children.test.ts +0 -92
  137. package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
  138. package/src/execution/__tests__/startup-config-declaration.test.ts +0 -35
  139. package/src/execution/__tests__/status-refactor.test.ts +0 -345
  140. package/src/execution/__tests__/stdin-writer.test.ts +0 -463
  141. package/src/execution/__tests__/stream-sink-retirement.test.ts +0 -261
  142. package/src/execution/__tests__/subagent-service-abort.test.ts +0 -60
  143. package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -629
  144. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +0 -180
  145. package/src/execution/__tests__/subagent-service.test.ts +0 -788
  146. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +0 -310
  147. package/src/execution/__tests__/subprocess-agent-runner.test.ts +0 -599
  148. package/src/execution/__tests__/temp-prompt.test.ts +0 -53
  149. package/src/execution/__tests__/timeout-integration.test.ts +0 -615
  150. package/src/execution/__tests__/tombstone-store.test.ts +0 -73
  151. package/src/execution/__tests__/tool-action.test.ts +0 -476
  152. package/src/execution/__tests__/truncline-snapshot.test.ts +0 -81
  153. package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
  154. package/src/execution/__tests__/turn-limiter.test.ts +0 -65
  155. package/src/execution/__tests__/ui-channels.test.ts +0 -187
  156. package/src/execution/__tests__/ui-interaction-model.test.ts +0 -67
  157. package/src/execution/__tests__/ui-request-handler-factory.test.ts +0 -370
  158. package/src/execution/__tests__/ui-request-handler.test.ts +0 -204
  159. package/src/execution/__tests__/ui-request-observability.test.ts +0 -114
  160. package/src/execution/__tests__/ui-request-queue.test.ts +0 -133
  161. package/src/execution/__tests__/worktree-manager.test.ts +0 -633
  162. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -229
  163. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +0 -181
  164. package/src/execution/__tests__/worktree-registry.test.ts +0 -199
  165. package/src/execution/agent-registry.ts +0 -199
  166. package/src/execution/agent-result-mapper.ts +0 -90
  167. package/src/execution/alive-store.ts +0 -92
  168. package/src/execution/argv-mirror.ts +0 -113
  169. package/src/execution/best-effort.ts +0 -38
  170. package/src/execution/channel-registry-access.ts +0 -144
  171. package/src/execution/concurrency-pool.ts +0 -116
  172. package/src/execution/config.ts +0 -96
  173. package/src/execution/dialog-queue.ts +0 -330
  174. package/src/execution/engine/__tests__/common/data-dir.test.ts +0 -53
  175. package/src/execution/engine/__tests__/common/errors.test.ts +0 -132
  176. package/src/execution/engine/__tests__/common/event-journal.test.ts +0 -177
  177. package/src/execution/engine/__tests__/common/kill-chain.test.ts +0 -192
  178. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +0 -81
  179. package/src/execution/engine/__tests__/common/persona-router.test.ts +0 -123
  180. package/src/execution/engine/__tests__/common/pool-manager.test.ts +0 -154
  181. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
  182. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
  183. package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +0 -141
  184. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +0 -109
  185. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +0 -101
  186. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +0 -77
  187. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +0 -104
  188. package/src/execution/engine/__tests__/conformance/contract.relay.test.ts +0 -342
  189. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +0 -201
  190. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +0 -76
  191. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +0 -79
  192. package/src/execution/engine/__tests__/engine-discovery.test.ts +0 -87
  193. package/src/execution/engine/__tests__/engines-declaration.test.ts +0 -36
  194. package/src/execution/engine/__tests__/model-prompt.test.ts +0 -85
  195. package/src/execution/engine/__tests__/paths.test.ts +0 -39
  196. package/src/execution/engine/__tests__/registry.test.ts +0 -120
  197. package/src/execution/engine/__tests__/routing.test.ts +0 -231
  198. package/src/execution/engine/common/data-dir.ts +0 -62
  199. package/src/execution/engine/common/errors.ts +0 -183
  200. package/src/execution/engine/common/event-journal.ts +0 -254
  201. package/src/execution/engine/common/journal-replay.ts +0 -62
  202. package/src/execution/engine/common/kill-chain.ts +0 -221
  203. package/src/execution/engine/common/nesting-guard.ts +0 -50
  204. package/src/execution/engine/common/persona-router.ts +0 -108
  205. package/src/execution/engine/common/pool-manager.ts +0 -226
  206. package/src/execution/engine/common/schema-emulation.ts +0 -189
  207. package/src/execution/engine/common/session-view-projection.ts +0 -51
  208. package/src/execution/engine/engine-discovery.ts +0 -65
  209. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -469
  210. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
  211. package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
  212. package/src/execution/engine/engines/pi/pi-engine.ts +0 -415
  213. package/src/execution/engine/engines/pi/reader.ts +0 -48
  214. package/src/execution/engine/engines/pi/registration.ts +0 -35
  215. package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
  216. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
  217. package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
  218. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -246
  219. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -228
  220. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
  221. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -64
  222. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -127
  223. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -580
  224. package/src/execution/engine/engines/zcode/constants.ts +0 -43
  225. package/src/execution/engine/engines/zcode/golden-sample.ts +0 -39
  226. package/src/execution/engine/engines/zcode/launcher.ts +0 -161
  227. package/src/execution/engine/engines/zcode/parser.ts +0 -436
  228. package/src/execution/engine/engines/zcode/preparer.ts +0 -363
  229. package/src/execution/engine/engines/zcode/reader.ts +0 -381
  230. package/src/execution/engine/engines/zcode/registration.ts +0 -37
  231. package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -658
  232. package/src/execution/engine/host-task-spec.ts +0 -47
  233. package/src/execution/engine/model-prompt.ts +0 -59
  234. package/src/execution/engine/paths.ts +0 -42
  235. package/src/execution/engine/port.ts +0 -153
  236. package/src/execution/engine/registry.ts +0 -123
  237. package/src/execution/engine/routing.ts +0 -218
  238. package/src/execution/engine/types.ts +0 -309
  239. package/src/execution/execute-options-mapper.ts +0 -112
  240. package/src/execution/execution-record.ts +0 -965
  241. package/src/execution/finalize-record.ts +0 -251
  242. package/src/execution/finalized-marker.ts +0 -51
  243. package/src/execution/get-state-handshake.ts +0 -104
  244. package/src/execution/host-mode.ts +0 -56
  245. package/src/execution/idle-gc.ts +0 -47
  246. package/src/execution/lifecycle-manager.ts +0 -513
  247. package/src/execution/lifecycle-predicates.ts +0 -65
  248. package/src/execution/manifest-store.ts +0 -256
  249. package/src/execution/model-config-service.ts +0 -219
  250. package/src/execution/model-resolver.ts +0 -248
  251. package/src/execution/notifier.ts +0 -330
  252. package/src/execution/notify-ledger.ts +0 -580
  253. package/src/execution/output-collector.ts +0 -228
  254. package/src/execution/path-encoding.ts +0 -60
  255. package/src/execution/pi-invocation.ts +0 -120
  256. package/src/execution/record-entry.ts +0 -132
  257. package/src/execution/record-store.ts +0 -1234
  258. package/src/execution/relay-env.ts +0 -37
  259. package/src/execution/session-context-resolver.ts +0 -64
  260. package/src/execution/session-file-gc.ts +0 -120
  261. package/src/execution/session-pending.ts +0 -164
  262. package/src/execution/session-reconstructor.ts +0 -678
  263. package/src/execution/session-runner.ts +0 -1781
  264. package/src/execution/sessions-index.ts +0 -304
  265. package/src/execution/spawn-event-adapter.ts +0 -363
  266. package/src/execution/stdin-writer.ts +0 -198
  267. package/src/execution/stream-sink.ts +0 -126
  268. package/src/execution/subagent-service.ts +0 -2141
  269. package/src/execution/subprocess-agent-runner.ts +0 -317
  270. package/src/execution/temp-prompt.ts +0 -62
  271. package/src/execution/tombstone-store.ts +0 -72
  272. package/src/execution/turn-limiter.ts +0 -102
  273. package/src/execution/types.ts +0 -973
  274. package/src/execution/ui-channels.ts +0 -216
  275. package/src/execution/ui-interaction-model.ts +0 -48
  276. package/src/execution/ui-request-handler-factory.ts +0 -212
  277. package/src/execution/ui-request-observability.ts +0 -81
  278. package/src/execution/ui-request-queue.ts +0 -184
  279. package/src/execution/worktree-manager.ts +0 -688
  280. package/src/execution/worktree-registry.ts +0 -222
  281. package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +0 -349
  282. package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +0 -202
  283. package/src/orchestration/__tests__/agent-call-stream.test.ts +0 -152
  284. package/src/orchestration/__tests__/args-validator.test.ts +0 -143
  285. package/src/orchestration/__tests__/config-loader.test.ts +0 -503
  286. package/src/orchestration/__tests__/error-recovery-handlers.test.ts +0 -809
  287. package/src/orchestration/__tests__/error-recovery-postmessage-defense.test.ts +0 -405
  288. package/src/orchestration/__tests__/error-recovery-serialize-failed-result.test.ts +0 -56
  289. package/src/orchestration/__tests__/error-recovery-workflow-call.test.ts +0 -166
  290. package/src/orchestration/__tests__/execute-agent-call.test.ts +0 -451
  291. package/src/orchestration/__tests__/jsonl-run-store-corrupt-entry.test.ts +0 -150
  292. package/src/orchestration/__tests__/jsonl-run-store-loadall-sources.test.ts +0 -171
  293. package/src/orchestration/__tests__/jsonl-run-store-retention.test.ts +0 -202
  294. package/src/orchestration/__tests__/jsonl-run-store-session-file.test.ts +0 -1030
  295. package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +0 -600
  296. package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +0 -96
  297. package/src/orchestration/__tests__/lifecycle.test.ts +0 -659
  298. package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +0 -95
  299. package/src/orchestration/__tests__/review-fix-loop-e2e.test.ts +0 -2025
  300. package/src/orchestration/__tests__/script-lint.test.ts +0 -831
  301. package/src/orchestration/__tests__/skill-discovery.test.ts +0 -201
  302. package/src/orchestration/__tests__/test-mocks.ts +0 -197
  303. package/src/orchestration/__tests__/worker-exit-without-result.test.ts +0 -368
  304. package/src/orchestration/__tests__/worker-host.test.ts +0 -120
  305. package/src/orchestration/__tests__/worker-returnmeta-passthrough.test.ts +0 -164
  306. package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +0 -563
  307. package/src/orchestration/__tests__/worker-script-builder.test.ts +0 -309
  308. package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +0 -129
  309. package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +0 -317
  310. package/src/orchestration/__tests__/workflow-script-lint-memo.test.ts +0 -110
  311. package/src/orchestration/__tests__/workflows-e2e.test.ts +0 -537
  312. package/src/orchestration/agent-opts-resolver.ts +0 -174
  313. package/src/orchestration/args-validator.ts +0 -127
  314. package/src/orchestration/config-loader.ts +0 -315
  315. package/src/orchestration/error-recovery.ts +0 -1018
  316. package/src/orchestration/execute-agent-call.ts +0 -256
  317. package/src/orchestration/launcher.ts +0 -455
  318. package/src/orchestration/lifecycle.ts +0 -399
  319. package/src/orchestration/models/__tests__/budget.test.ts +0 -307
  320. package/src/orchestration/models/__tests__/trace.test.ts +0 -408
  321. package/src/orchestration/models/agent-call.ts +0 -83
  322. package/src/orchestration/models/budget.ts +0 -118
  323. package/src/orchestration/models/ports.ts +0 -164
  324. package/src/orchestration/models/run-runtime.ts +0 -104
  325. package/src/orchestration/models/run-spec.ts +0 -83
  326. package/src/orchestration/models/run-state.ts +0 -44
  327. package/src/orchestration/models/trace.ts +0 -183
  328. package/src/orchestration/models/types.ts +0 -301
  329. package/src/orchestration/models/workflow-run.ts +0 -254
  330. package/src/orchestration/models/workflow-script-registry.ts +0 -35
  331. package/src/orchestration/models/workflow-script.ts +0 -117
  332. package/src/orchestration/script-lint.ts +0 -766
  333. package/src/orchestration/skill-discovery.ts +0 -115
  334. package/src/orchestration/worker-handle.ts +0 -115
  335. package/src/orchestration/worker-host.ts +0 -98
  336. package/src/orchestration/worker-script-builder.ts +0 -421
  337. package/src/orchestration/workflow-files.ts +0 -85
  338. package/src/orchestration/workflow-script-registry-impl.ts +0 -133
  339. package/src/shared/__tests__/agent-ref.test.ts +0 -34
  340. package/src/shared/__tests__/meta-parser.test.ts +0 -304
  341. package/src/shared/__tests__/model-ref.test.ts +0 -306
  342. package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -280
  343. package/src/shared/__tests__/resource-discovery.test.ts +0 -736
  344. package/src/shared/__tests__/resource-meta.test.ts +0 -51
  345. package/src/shared/__tests__/schema-jsonify.test.ts +0 -81
  346. package/src/shared/__tests__/timer-delay.test.ts +0 -61
  347. package/src/shared/agent-event.ts +0 -13
  348. package/src/shared/agent-ref.ts +0 -57
  349. package/src/shared/meta-parser.ts +0 -261
  350. package/src/shared/model-ref.ts +0 -286
  351. package/src/shared/resource-discovery.ts +0 -811
  352. package/src/shared/resource-meta.ts +0 -65
  353. package/src/shared/schema-env.ts +0 -44
  354. package/src/shared/schema-jsonify.ts +0 -58
  355. package/src/shared/timer-delay.ts +0 -54
  356. package/src/shared/xml-injection.ts +0 -35
  357. package/workflows/README.md +0 -81
  358. package/workflows/_shared/agent-refs.cjs +0 -40
  359. package/workflows/chain.js +0 -131
  360. package/workflows/map-reduce.js +0 -174
  361. package/workflows/parallel.js +0 -148
  362. package/workflows/review-fix-loop-utils.cjs +0 -1309
  363. package/workflows/review-fix-loop.js +0 -1404
  364. package/workflows/scatter-gather.js +0 -178
@@ -1,109 +0,0 @@
1
- // contract.abort.test.ts —— conformance C4(abort 行为):运行中 cancel → 宿主合成
2
- // 终态(exitCode=null)、无悬挂 promise(run 正常 resolve、exited 收口)、错误事件
3
- // 先于终态 emit(不变量 5 的事件面)。fake launcher 注入(不依赖真机)。
4
-
5
- import { spawn } from "node:child_process";
6
- import * as fs from "node:fs";
7
- import * as os from "node:os";
8
- import * as path from "node:path";
9
- import { PassThrough } from "node:stream";
10
-
11
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
12
-
13
- import type { RunContext } from "../../port.ts";
14
- import type { AgentEvent, AgentTaskSpec } from "../../types.ts";
15
- import { ZcodeEngine, type ZcodeEngineDeps } from "../../engines/zcode/zcode-engine.ts";
16
- import type { ZcodeLaunchedProcess } from "../../engines/zcode/launcher.ts";
17
-
18
- const PROVIDER = "provider-x";
19
-
20
- let tmpRoot: string;
21
- let dataDir: string;
22
- let v2Path: string;
23
-
24
- function writeJson(p: string, v: unknown): void {
25
- fs.mkdirSync(path.dirname(p), { recursive: true });
26
- fs.writeFileSync(p, JSON.stringify(v));
27
- }
28
-
29
- /** 长驻 fake 进程:stdout 永不结束(模拟运行中),abort 由测试主动触发。 */
30
- function makeHangingLaunch(): {
31
- launch: ZcodeEngineDeps["launch"];
32
- proc: () => ZcodeLaunchedProcess | undefined;
33
- triggerAbort: () => void;
34
- } {
35
- let launched: ZcodeLaunchedProcess | undefined;
36
- const stdout = new PassThrough();
37
- const stderr = new PassThrough();
38
- let killTriggered = false;
39
- let resolveExited: (v: { code: number | null; signal: string | undefined }) => void = () => {};
40
- const exited = new Promise<{ code: number | null; signal: string | undefined }>((resolve) => {
41
- resolveExited = resolve;
42
- });
43
- const launch = (): ZcodeLaunchedProcess => {
44
- launched = {
45
- // D10 记账形态:child = 立即退出的真实 node 短进程(本用例不消费记账面)
46
- child: spawn(process.execPath, ["-e", ""]),
47
- pid: 4242,
48
- stdout,
49
- stderr,
50
- abort: async () => {
51
- killTriggered = true;
52
- // 杀链语义:进程被信号杀死(code=null)——微任务后 settle 模拟 kill 时序
53
- setTimeout(() => resolveExited({ code: null, signal: "SIGTERM" }), 5);
54
- },
55
- exited,
56
- killedByUs: () => killTriggered,
57
- };
58
- return launched;
59
- };
60
- return { launch, proc: () => launched, triggerAbort: () => resolveExited({ code: null, signal: "SIGTERM" }) };
61
- }
62
-
63
- beforeEach(() => {
64
- tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), "c4-abort-"));
65
- dataDir = path.join(tmpRoot, "data");
66
- v2Path = path.join(tmpRoot, "v2.json");
67
- writeJson(v2Path, {
68
- provider: { [PROVIDER]: { options: { apiKey: "k" }, models: { m1: {} } } },
69
- });
70
- });
71
-
72
- afterEach(() => {
73
- fs.rmSync(tmpRoot, { recursive: true, force: true });
74
- });
75
-
76
- describe("conformance C4:abort 行为(运行中 cancel → 合成终态、无悬挂)", () => {
77
- it("abort → run 正常 resolve(不悬挂):exitCode=null + error 事件合成 + killedByUs", async () => {
78
- const fake = makeHangingLaunch();
79
- const engine = new ZcodeEngine({
80
- engineDataDir: () => dataDir,
81
- sources: { v2ConfigPath: v2Path },
82
- processEnv: { PATH: "/usr/bin" },
83
- launch: fake.launch,
84
- });
85
-
86
- const controller = new AbortController();
87
- const events: AgentEvent[] = [];
88
- const ctx: RunContext = {
89
- taskId: "sa-c4",
90
- poolKey: "",
91
- signal: controller.signal,
92
- onEvent: (ev) => events.push(ev),
93
- };
94
- const task: AgentTaskSpec = { task: "hang", slug: "abort", model: `${PROVIDER}/m1` };
95
-
96
- const runP = engine.run(task, ctx);
97
- // run 进行中触发 abort(等待 spawn 完成——微任务两拍让 launch 已执行)
98
- await new Promise((r) => setTimeout(r, 20));
99
- controller.abort();
100
- const { handle, outcome } = await runP; // 必须正常 resolve(杀链合成终态,不悬挂)
101
-
102
- expect(outcome.exitCode).toBeNull();
103
- expect(outcome.error).toContain("中止");
104
- // 终态前 error 事件已 emit(不变量 5 的事件面——journal 可重放出失败事实)
105
- expect(events.some((e) => e.type === "error")).toBe(true);
106
- expect(fake.proc()?.killedByUs()).toBe(true);
107
- expect(handle.data.engineId).toBe("zcode");
108
- }, 15_000);
109
- });
@@ -1,101 +0,0 @@
1
- // contract.agent-events.test.ts —— conformance C3(AgentEvent 不变量)+ 负例自证
2
- // (A12「套件有牙」:故意破坏一个不变量的样本必须被断言器检出——用「注入坏
3
- // parser」的形态:wrap 真实 synthesizeCoarseEvents 抽掉 message_end,断言套件转红;
4
- // 若断言器检不出破坏则本元测试失败)。
5
-
6
- import { describe, expect, it } from "vitest";
7
-
8
- import type { AgentEvent } from "../../../types.ts";
9
- import { ZCODE_GOLDEN_STDOUT } from "../../engines/zcode/golden-sample.ts";
10
- import { parseZcodeTerminal, synthesizeCoarseEvents } from "../../engines/zcode/parser.ts";
11
- import {
12
- assertAgentEventInvariants,
13
- checkAgentEventInvariants,
14
- } from "./agent-event-invariants.ts";
15
-
16
- /** golden 实录的 coarse 事件流(真实 parser + 真实合成器的产出)。 */
17
- function goldenCoarseEvents(): AgentEvent[] {
18
- const terminal = parseZcodeTerminal(ZCODE_GOLDEN_STDOUT);
19
- if (!terminal.ok) throw new Error("golden 样本解析失败");
20
- return synthesizeCoarseEvents(terminal.payload.response, terminal.payload.usage);
21
- }
22
-
23
- describe("conformance C3:AgentEvent 不变量(真实 parser 产出全绿)", () => {
24
- it("zcode golden 合成事件满足五条不变量(coarse 口径)", () => {
25
- assertAgentEventInvariants(goldenCoarseEvents(), { granularity: "coarse" });
26
- });
27
-
28
- it("不变量 1:终态唯一——turn_end 后不得再出现非 error 事件", () => {
29
- const events: AgentEvent[] = [{ type: "message_end" }, { type: "turn_end" }, { type: "text_delta", delta: "x" }];
30
- const findings = checkAgentEventInvariants(events, { granularity: "coarse" });
31
- expect(findings.some((f) => f.invariant === "1")).toBe(true);
32
- });
33
-
34
- it("不变量 2:message_end.usage 残缺对象(NaN token)被判违例", () => {
35
- const events: AgentEvent[] = [
36
- { type: "message_end", usage: { input: Number.NaN, output: 1, cacheRead: 0, cacheWrite: 0 } },
37
- { type: "turn_end" },
38
- ];
39
- const findings = checkAgentEventInvariants(events, { granularity: "coarse" });
40
- expect(findings.some((f) => f.invariant === "2")).toBe(true);
41
- });
42
-
43
- it("不变量 2 正例:usage 显式缺省整个字段 = 合法(不给残缺)", () => {
44
- const events: AgentEvent[] = [{ type: "message_end" }, { type: "turn_end" }];
45
- expect(checkAgentEventInvariants(events, { granularity: "coarse" })).toEqual([]);
46
- });
47
-
48
- it("不变量 3a:流式 text_delta 拼接 ≠ content 判违例(byte 级)", () => {
49
- const events: AgentEvent[] = [
50
- { type: "text_delta", delta: "abc" },
51
- { type: "message_end", usage: { input: 1, output: 1, cacheRead: 0, cacheWrite: 0 } },
52
- { type: "turn_end" },
53
- ];
54
- const findings = checkAgentEventInvariants(events, { granularity: "stream", content: "abd" });
55
- expect(findings.some((f) => f.invariant === "3a")).toBe(true);
56
- });
57
-
58
- it("不变量 3b:coarse 序列缺 message_end(turn_end 裸终态)判违例", () => {
59
- const events: AgentEvent[] = [{ type: "turn_end" }];
60
- const findings = checkAgentEventInvariants(events, { granularity: "coarse" });
61
- expect(findings.some((f) => f.invariant === "3b")).toBe(true);
62
- });
63
-
64
- it("不变量 4:未配对 tool_start 且无 error 兜底判违例;error 兜底合法", () => {
65
- const unpaired: AgentEvent[] = [
66
- { type: "tool_start", toolName: "bash" },
67
- { type: "turn_end" },
68
- ];
69
- expect(checkAgentEventInvariants(unpaired, { granularity: "coarse" }).some((f) => f.invariant === "4")).toBe(true);
70
-
71
- const withError: AgentEvent[] = [
72
- { type: "tool_start", toolName: "bash" },
73
- { type: "error", message: "boom" },
74
- { type: "turn_end" },
75
- ];
76
- expect(checkAgentEventInvariants(withError, { granularity: "coarse" }).some((f) => f.invariant === "4")).toBe(false);
77
- });
78
- });
79
-
80
- describe("conformance 负例自证(A12:套件有牙)", () => {
81
- it("注入坏 parser(抽掉 message_end 的合成器):断言器必须检出(不变量 3b 转红)", () => {
82
- // 坏 parser 形态:zcode 新版本漂移后合成器丢 message_end——不变量 3b 应抓到
83
- const badParser = (): AgentEvent[] => [{ type: "turn_end" }];
84
- const events = badParser();
85
- const findings = checkAgentEventInvariants(events, { granularity: "coarse" });
86
- expect(findings.length).toBeGreaterThan(0);
87
- expect(findings.some((f) => f.invariant === "3b")).toBe(true);
88
- // 断言形态同步转红(conformance 用例消费的入口)
89
- expect(() => assertAgentEventInvariants(events, { granularity: "coarse" })).toThrowError(/不变量/);
90
- });
91
-
92
- it("注入坏 parser(usage 半映射):断言器必须检出(不变量 2 转红)", () => {
93
- // 坏 parser 形态:新版本 usage 字段改名,数值映射 Number(undefined) → NaN 渗入
94
- const badParser = (): AgentEvent[] => [
95
- { type: "message_end", usage: { input: Number.NaN, output: 2, cacheRead: 0, cacheWrite: 0 } },
96
- { type: "turn_end" },
97
- ];
98
- const findings = checkAgentEventInvariants(badParser(), { granularity: "coarse" });
99
- expect(findings.some((f) => f.invariant === "2")).toBe(true);
100
- });
101
- });
@@ -1,77 +0,0 @@
1
- // contract.probe.test.ts —— conformance C1(probe 形状):ProbeReport 字段完整;
2
- // ok=false 时 error.recovery 非空(§3.3.5——恢复指引是错误闭环「错误→权威源→重试」
3
- // 的载体,空指引 = 拦截了但不知道怎么修)。pi/zcode 双引擎都过(任何 adapter 必过)。
4
- //
5
- // fake 注入(不依赖真机):pi 用 probeVersion fake + 不可解析 invocation 场景;
6
- // zcode 用不存在的 cliPath 构造 binary check 失败。
7
-
8
- import * as fs from "node:fs";
9
- import * as os from "node:os";
10
- import * as path from "node:path";
11
- import { fileURLToPath } from "node:url";
12
-
13
- import { describe, expect, it } from "vitest";
14
-
15
- import { PiEngine } from "../../engines/pi/pi-engine.ts";
16
- import { ZcodeEngine } from "../../engines/zcode/zcode-engine.ts";
17
- import type { ProbeReport } from "../../types.ts";
18
-
19
- function assertProbeShape(report: ProbeReport): void {
20
- expect(typeof report.ok).toBe("boolean");
21
- expect(typeof report.engineVersion).toBe("string");
22
- expect(Array.isArray(report.checks)).toBe(true);
23
- expect(report.checks.length).toBeGreaterThan(0);
24
- for (const c of report.checks) {
25
- expect(typeof c.name).toBe("string");
26
- expect(typeof c.ok).toBe("boolean");
27
- }
28
- if (!report.ok) {
29
- expect(report.error).toBeDefined();
30
- expect(report.error?.code).toBe("engine_probe_failed");
31
- // 恢复指引非空且指向动作(C1 断言核心——空指引直接 fail)
32
- expect(report.error?.recovery).toBeTruthy();
33
- expect(report.error?.recovery.length).toBeGreaterThan(20);
34
- }
35
- }
36
-
37
- describe("conformance C1:probe 形状(ProbeReport 字段完整 + 失败含恢复指引)", () => {
38
- it("pi:成功路径形状(fake 版本探测,不 spawn 真进程)", async () => {
39
- const engine = new PiEngine({ getService: () => null, probeVersion: async () => "0.84.1" });
40
- const report = await engine.probe();
41
- assertProbeShape(report);
42
- expect(report.ok).toBe(true);
43
- expect(report.engineVersion).toBe("0.84.1");
44
- });
45
-
46
- it("pi:失败路径(invocation 不可解析)——error.recovery 非空", async () => {
47
- const engine = new PiEngine({
48
- getService: () => null,
49
- probeVersion: async () => undefined,
50
- });
51
- // PATH 无 pi 时 invocation check 失败;有 pi 时版本 fake 失败——两形态都走断言器
52
- const report = await engine.probe({ force: true });
53
- assertProbeShape(report);
54
- });
55
-
56
- it("zcode:成功路径形状(存在的 cliPath + fake 版本探测)", async () => {
57
- const engine = new ZcodeEngine({
58
- engineDataDir: () => fs.mkdtempSync(path.join(os.tmpdir(), "probe-zcode-")),
59
- cliPath: fileURLToPath(import.meta.url),
60
- probeVersion: async () => "0.16.5",
61
- });
62
- const report = await engine.probe();
63
- assertProbeShape(report);
64
- expect(report.ok).toBe(true);
65
- });
66
-
67
- it("zcode:失败路径(二进制不存在)——error.recovery 非空且含重探指引", async () => {
68
- const engine = new ZcodeEngine({
69
- engineDataDir: () => fs.mkdtempSync(path.join(os.tmpdir(), "probe-zcode-")),
70
- cliPath: "/nonexistent/zcode.cjs",
71
- });
72
- const report = await engine.probe();
73
- assertProbeShape(report);
74
- expect(report.ok).toBe(false);
75
- expect(report.error?.recovery).toContain("--version");
76
- });
77
- });
@@ -1,104 +0,0 @@
1
- // contract.read-degradation.test.ts —— conformance C5(read 降级链):三级都不 throw、
2
- // 坏 handle → 结构化降级(outcome-only)非崩溃、②级 journal 重放与 live 一致
3
- // (重放等价性,§3.3.6——journal 重放与 live 通路共用同一 reducer 的断言面)。
4
- //
5
- // fake 注入:zcode 用坏 dbPath(①级失败)+ 临时 journal 文件(②级命中);pi 用
6
- // 不存在的 sessionFile(①级失败)+ journal(②级)。
7
-
8
- import * as fs from "node:fs";
9
- import * as os from "node:os";
10
- import * as path from "node:path";
11
-
12
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
13
-
14
- import { eventsToSessionView } from "../../common/journal-replay.ts";
15
- import { JournalWriter } from "../../common/event-journal.ts";
16
- import { PiEngine } from "../../engines/pi/pi-engine.ts";
17
- import { ZcodeEngine } from "../../engines/zcode/zcode-engine.ts";
18
- import type { AgentEvent, EngineHandle } from "../../types.ts";
19
-
20
- function makeHandle(engineId: string, sessionRef: Record<string, string>, journalPath?: string): EngineHandle {
21
- return {
22
- data: {
23
- v: 1,
24
- engineId,
25
- sessionRef,
26
- poolKey: "shared",
27
- ...(journalPath !== undefined ? { journalPath } : {}),
28
- adapterVersion: "1.0.0-test",
29
- },
30
- };
31
- }
32
-
33
- /** live 通路形态的事件序列(与 golden 回放同源——重放等价性的比对基准)。 */
34
- const liveEvents: AgentEvent[] = [
35
- { type: "text_delta", delta: "part one. " },
36
- { type: "text_delta", delta: "part two." },
37
- { type: "message_end", usage: { input: 10, output: 5, cacheRead: 0, cacheWrite: 0 } },
38
- { type: "turn_end" },
39
- ];
40
-
41
- describe("conformance C5:read 降级链(三级都不 throw)", () => {
42
- let dataDir: string;
43
- beforeEach(() => {
44
- dataDir = fs.mkdtempSync(path.join(os.tmpdir(), "c5-read-"));
45
- });
46
- afterEach(() => {
47
- fs.rmSync(dataDir, { recursive: true, force: true });
48
- });
49
-
50
- it("重放等价性:journal 重放 turns 与 live 累积一致(共用 updateFromEvent reducer)", () => {
51
- const live = eventsToSessionView(liveEvents, "pi", "sess-x");
52
- expect(live.source).toBe("journal");
53
- expect(live.turns).toHaveLength(1);
54
- expect(live.turns[0]?.text).toBe("part one. part two.");
55
- expect(live.usage?.total).toBe(15);
56
- });
57
-
58
- it("zcode:①级坏 handle(dbPath 指向不存在文件)→ ②级 journal 命中(source=journal)", async () => {
59
- const journalPath = path.join(dataDir, "journal-sa-c5.jsonl");
60
- const writer = new JournalWriter({ path: journalPath, taskId: "sa-c5", engineId: "zcode" });
61
- for (const ev of liveEvents) writer.append(ev);
62
- await writer.close();
63
-
64
- const engine = new ZcodeEngine({ engineDataDir: () => dataDir });
65
- const handle = makeHandle("zcode", { sessionId: "sess-c5", dbPath: ".zcode/cli/db/db.sqlite" }, journalPath);
66
- const view = await engine.read(handle); // ①级 db 不存在 → catch → ②级重放
67
- expect(view.source).toBe("journal");
68
- expect(view.engineId).toBe("zcode");
69
- expect(view.turns[0]?.text).toBe("part one. part two.");
70
- });
71
-
72
- it("zcode:②级也不可达(无 journalPath)→ ③级 outcome-only,不 throw", async () => {
73
- const engine = new ZcodeEngine({ engineDataDir: () => dataDir });
74
- const handle = makeHandle("zcode", { sessionId: "sess-c5", dbPath: ".zcode/cli/db/db.sqlite" });
75
- const view = await engine.read(handle);
76
- expect(view.source).toBe("outcome-only");
77
- expect(view.turns).toEqual([]);
78
- });
79
-
80
- it("zcode:跨引擎 handle(engineId 不符)→ 结构化 outcome-only,不 throw", async () => {
81
- const engine = new ZcodeEngine({ engineDataDir: () => dataDir });
82
- const view = await engine.read(makeHandle("pi", {}));
83
- expect(view.source).toBe("outcome-only");
84
- });
85
-
86
- it("pi:①级坏 handle(sessionFile 不存在)→ ②级 journal 命中;②级缺省 → ③级", async () => {
87
- const engine = new PiEngine({ getService: () => null });
88
-
89
- const journalPath = path.join(dataDir, "journal-sa-pi-c5.jsonl");
90
- const writer = new JournalWriter({ path: journalPath, taskId: "sa-pi-c5", engineId: "pi" });
91
- for (const ev of liveEvents) writer.append(ev);
92
- await writer.close();
93
-
94
- const viaJournal = await engine.read(
95
- makeHandle("pi", { sessionFile: "/nonexistent/session.jsonl" }, journalPath),
96
- );
97
- expect(viaJournal.source).toBe("journal");
98
- expect(viaJournal.turns[0]?.text).toBe("part one. part two.");
99
-
100
- const outcomeOnly = await engine.read(makeHandle("pi", { sessionFile: "/nonexistent/session.jsonl" }));
101
- expect(outcomeOnly.source).toBe("outcome-only");
102
- expect(outcomeOnly.turns).toEqual([]);
103
- });
104
- });