@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,198 +0,0 @@
1
- // src/execution/stdin-writer.ts
2
- //
3
- // 向 rpc 子进程 stdin 写入命令的 helper 集合。
4
- //
5
- // pi --mode rpc 通过 stdin 的 JSON RpcCommand / RpcExtensionUIResponse 驱动:
6
- // - extension_ui_response(主进程回答子进程的 UI 请求,如 ask_user)
7
- // - prompt(驱动子进程开始处理 task)
8
- // 两者共用 child.stdin.write + 背压检查,提取到此模块统一维护。
9
-
10
- import type { ChildProcess } from "node:child_process";
11
- import * as crypto from "node:crypto";
12
-
13
- import { getLogger } from "@zhushanwen/pi-extension-logger";
14
-
15
- import type { UiResponse } from "./dialog-queue.ts";
16
-
17
- const logger = getLogger("subagents");
18
-
19
- /**
20
- * EPIPE 连续失败计数器(record.id → 连续 EPIPE 次数)。
21
- *
22
- * [v4 A-1] 计数器从 subagent-service.ts 迁移到本模块(stdin 错误域)。迁移原因:
23
- * session-runner.ts 已被 subagent-service.ts import(runSpawn 等),若 session-runner
24
- * 反向 import subagent-service 的 helper 会循环依赖。stdin-writer 不 import 两者,
25
- * 是 stdin 域中立模块,epipe 计数属 stdin 错误域,职责合理。
26
- *
27
- * 错误处理两半面共用本计数器(合并计数,防 spawn→EPIPE→resume 死循环):
28
- * ① 同步 write 抛错(writeStdinLine throw → deliverMessage catch 递增)
29
- * ② 异步 stream 'error' event(session-runner.ts child.stdin.on('error') 递增)
30
- */
31
- const epipeConsecutiveFailures = new Map<string, number>();
32
-
33
- /** 连续 EPIPE 失败阈值:达到即不再尝试 resume(避免无限 spawn → EPIPE → resume 循环)。 */
34
- export const EPIPE_FAILURE_THRESHOLD = 2;
35
-
36
- /**
37
- * 递增 recordId 的 EPIPE 连续失败计数,返回递增后的新计数。
38
- * 同步 writeStdinLine throw 与异步 child.stdin 'error' event 共用此入口(合并计数)。
39
- */
40
- export function recordEpipeFailure(recordId: string): number {
41
- const count = (epipeConsecutiveFailures.get(recordId) ?? 0) + 1;
42
- epipeConsecutiveFailures.set(recordId, count);
43
- return count;
44
- }
45
-
46
- /** 成功写入时清零某 record 的 EPIPE 连续失败计数(热路径成功 → 重置,允许后续重新计数)。 */
47
- export function clearEpipeFailure(recordId: string): void {
48
- epipeConsecutiveFailures.delete(recordId);
49
- }
50
-
51
- /** dispose 时清空所有 EPIPE 计数(防跨 session 泄漏)。 */
52
- export function resetAllEpipeFailures(): void {
53
- epipeConsecutiveFailures.clear();
54
- }
55
-
56
- /**
57
- * 按 UiResponse 形状构造 Pi 原生 extension_ui_response 并写 stdin。
58
- *
59
- * SR-5:ack(fire-and-forget)不写 stdin——Pi 对 fire-and-forget method 不期待响应,
60
- * 写入会触发协议错配。其他三种 shape(value/confirmed/cancelled)按对应字段写。
61
- *
62
- * [R1] 背压检查:child.stdin.write 返回 false 时记 warn(不阻塞,内核缓冲会随后排空)。
63
- * [R2] 序列化在本函数内逐分支完成。JSON.stringify 可能抛错(out.value 含循环引用 /
64
- * BigInt 等不可序列化结构),try/catch 降级为 cancelled——宁可取消单次 dialog 也不让
65
- * 父进程崩溃(UI 请求通道不应被脏数据拖垮)。
66
- *
67
- * @param child 子进程(stdin 写入响应)
68
- * @param id 请求 id(关联 response)
69
- * @param out UiResponse({value}/{confirmed}/{cancelled}/{ack})
70
- * @param signal abort signal(已 aborted 时跳过写入)
71
- */
72
- export function respond(child: ChildProcess, id: string, out: UiResponse, signal?: AbortSignal): void {
73
- if (signal?.aborted) return;
74
- let line: string | undefined;
75
- try {
76
- if ("value" in out) line = JSON.stringify({ type: "extension_ui_response", id, value: out.value });
77
- else if ("confirmed" in out) line = JSON.stringify({ type: "extension_ui_response", id, confirmed: out.confirmed });
78
- else if ("cancelled" in out) line = JSON.stringify({ type: "extension_ui_response", id, cancelled: true });
79
- } catch (err) {
80
- // [R2] out.value 含循环引用/BigInt 等不可序列化结构——降级 cancelled,避免父进程崩溃。
81
- logger.warn(`[subagents] JSON.stringify failed for ui response ${id}, degrading to cancelled`, {
82
- detail: err instanceof Error ? err.message : String(err),
83
- });
84
- line = JSON.stringify({ type: "extension_ui_response", id, cancelled: true });
85
- }
86
- // ack: fire-and-forget,不写 stdin(SR-5)
87
- if (line === undefined) return;
88
- writeStdinLine(child, line, `ui response for request ${id}`);
89
- }
90
-
91
- /**
92
- * spawn 后向 rpc 子进程 stdin 写 prompt 命令,驱动 agent 开始处理 task。
93
- *
94
- * pi 的 runRpcMode 只通过 stdin RpcCommand 驱动——positional task arg / -p flag
95
- * 在 rpc mode 下被 resolveAppMode 无视。必须在 spawn 后主动喂 prompt 命令,
96
- * 否则子进程阻塞等 stdin、永不进入推理(totalTokens 恒 0)。
97
- *
98
- * 时机:spawn 后立即写。stdin 是 pipe,内核缓冲保证数据不丢;
99
- * pi 在 await rebindSession() 后才挂 stdin reader(rpc-mode.ts:778-781),
100
- * reader 处理 prompt 时 session 已就绪。
101
- *
102
- * [V2 决策 3] chatMode 续聊热路径用 prompt + streamingBehavior 统一投递(替代 steer/followUp
103
- * 命令),pi 权威裁决 busy/idle(设计 F3/F4):busy 时 followUp 入队/steer 抢占;idle 时
104
- * streamingBehavior 被忽略、直接开新 turn。不传 streamingBehavior(首帧 prompt / 旧调用方)
105
- * 行为完全不变——向后兼容。
106
- *
107
- * @param child 子进程(stdin 写入 prompt 命令)
108
- * @param task 完整 task 文本(含 schema 指令)
109
- * @param options.streamingBehavior V2 统一投递语义:`"followUp"`(排队,当前轮后处理)/ `"steer"`(抢占,立即中断 streaming)。
110
- * 省略时不写入该字段(首帧 prompt / 非 chatMode 调用方,行为不变)。
111
- */
112
- export function sendPromptCommand(
113
- child: ChildProcess,
114
- task: string,
115
- options?: { streamingBehavior?: "followUp" | "steer" },
116
- ): void {
117
- if (!child.stdin || child.stdin.destroyed) return;
118
- const payload: Record<string, unknown> = {
119
- id: crypto.randomUUID(),
120
- type: "prompt",
121
- message: task,
122
- };
123
- if (options?.streamingBehavior) {
124
- payload.streamingBehavior = options.streamingBehavior;
125
- }
126
- writeStdinLine(child, JSON.stringify(payload), "prompt command");
127
- }
128
-
129
- /**
130
- * [review 修复 round2] 已删除 sendFollowUpCommand / sendSteerCommand——deliverToRunning
131
- * (busy 投递死机制,S2 删除)的唯一消费方移除后两函数成零生产调用方死 export。
132
- * busy 投递语义由 prompt + streamingBehavior(sendPromptCommand 的
133
- * options.streamingBehavior: "followUp" | "steer",pi 权威裁决)承担。
134
- */
135
-
136
- /**
137
- * 向 rpc 子进程 stdin 写 get_state 命令,查询 sessionFile/sessionId。
138
- *
139
- * FR-4: RPC get_state 握手。当 stdout header 未携带 sessionFile 时,
140
- * 通过此命令向子进程查询当前 session 状态。子进程收到后返回
141
- * {type:"response", command:"get_state", success:true, data:{sessionFile, sessionId}}。
142
- *
143
- * @param child 子进程(stdin 写入 get_state 命令)
144
- * @returns 请求 id(用于匹配 response)
145
- */
146
- export function sendGetStateCommand(child: ChildProcess): string {
147
- const id = crypto.randomUUID();
148
- const command = JSON.stringify({
149
- id,
150
- type: "get_state",
151
- });
152
- writeStdinLine(child, command, "get_state command");
153
- return id;
154
- }
155
-
156
- /**
157
- * 向子进程 stdin 写一行(自动补换行),带背压检查 + EPIPE 检测。
158
- *
159
- * [R1] write 返回 false 时记 warn(不阻塞,内核缓冲会随后排空)。
160
- * [R3] write 抛 EPIPE / ERR_STREAM_DESTROYED 时 throw 含 EPIPE 关键词的 Error,
161
- * 让上层(deliverMessage)能捕获并自动转冷路径 resume。
162
- * stdin 已关闭/销毁时跳过——respond 已检查 signal,sendPromptCommand 已检查 destroyed。
163
- *
164
- * @param child 子进程
165
- * @param line JSON 行(不含换行)
166
- * @param warnTag warn 日志的语义标记
167
- * @throws Error 含 "EPIPE" 关键词——stdin 管道已断(子进程已退出 / stdin 被销毁)
168
- */
169
- function writeStdinLine(child: ChildProcess, line: string, warnTag: string): void {
170
- if (!child.stdin || child.stdin.destroyed) return;
171
- try {
172
- const ok = child.stdin.write(line + "\n");
173
- if (!ok) logger.warn(`[subagents] stdin backpressure on ${warnTag}`);
174
- } catch (err) {
175
- // [R3] EPIPE / ERR_STREAM_DESTROYED:stdin 管道已断,子进程已退出或 stdin 被销毁。
176
- // [v4 A-1] 错误处理两半面:① 同步 write 抛错(本 catch)——上层 deliverMessage 捕获后
177
- // 调 recordEpipeFailure 递增计数;② 异步 stream 'error' event(session-runner.ts 的
178
- // child.stdin.on('error') listener)。两者共用本模块 export 的 recordEpipeFailure
179
- // helper 合并计数(防 spawn→EPIPE→resume 死循环)。
180
- // throw 让上层(deliverMessage)捕获并自动转冷路径 resume + 消息重放。
181
- if (
182
- err !== null &&
183
- typeof err === "object" &&
184
- "code" in err &&
185
- ((err as NodeJS.ErrnoException).code === "EPIPE" ||
186
- (err as NodeJS.ErrnoException).code === "ERR_STREAM_DESTROYED")
187
- ) {
188
- throw new Error(
189
- `[subagents] EPIPE on stdin write (${warnTag}): pipe broken, child process likely exited. ` +
190
- `Recovery: treat as dead process and resume via cold path.`,
191
- );
192
- }
193
- // 非 EPIPE 错误(不应发生,但兜底降级为 warn 不崩溃)
194
- logger.warn(`[subagents] unexpected stdin write error on ${warnTag}`, {
195
- detail: err instanceof Error ? err.message : String(err),
196
- });
197
- }
198
- }
@@ -1,126 +0,0 @@
1
- /**
2
- * subagent text_delta streaming sink。
3
- *
4
- * background subagent 执行期间,session-runner 的 agentEvent 出口把每个 text_delta
5
- * 传到 SubagentStream.onDelta。本模块做 100ms 时间窗合并后,通过 StreamSink.setWidget
6
- * 转发到 RPC stdout(经 ctx.ui.setWidget → extension_ui_request 通道)。
7
- *
8
- * SubagentStream 是一个生命周期对象——内聚 buffer/timer 状态 + onDelta/dispose 方法。
9
- * 调用方(subagent-service)创建后只需在 text_delta 时调 onDelta、终态时调 dispose,
10
- * 不需要拆散 push/clear 两个函数跨层透传。
11
- *
12
- * 设计要点:
13
- * - leading edge:第一个 delta 立即 flush(前端尽快看到开始)
14
- * - trailing edge:后续 delta 追加 buffer,timer 到期后 flush
15
- * - 每次 flush 把 buffer 的累积文本 split("\n") 截尾 MAX_WIDGET_LINES 行传给 setWidget
16
- * - dispose 清除 widget + 清 timer
17
- */
18
-
19
- import type { ExtensionMode } from "./host-mode.ts";
20
- import { resolveHostMode } from "./host-mode.ts";
21
- import { isRelayActive } from "./relay-env.ts";
22
-
23
- /** UI streaming sink 的最小接口(ctx.ui.setWidget 的 duck-typed 子集)。
24
- *
25
- * 当前只有一个 adapter(index.ts session_start 包装 ctx.ui.setWidget)。
26
- * 保留接口而非裸函数类型,因为 StreamSink 的语义是「UI sink 契约」——
27
- * 测试 mock 和未来可能的第二 sink(如写文件)都走此契约。 */
28
- export interface StreamSink {
29
- setWidget(key: string, lines: string[] | undefined): void;
30
- }
31
-
32
- /** delta 合并窗口时间(ms)。 */
33
- const STREAM_FLUSH_MS = 100;
34
-
35
- /** widget 发送的最大行数上限。
36
- *
37
- * flush 把 buffer 累积全文 split 后经 setWidget RPC 通道整包发送——长输出 subagent
38
- * (数百 KB)下每 100ms 一次 O(当前总量) 的序列化+传输,累计 O(n²)。widget 是实时
39
- * 预览(完整输出在 record/eventLog 与 session 文件),只保留尾部行即可;超限时以
40
- * 一行 truncated 提示替代被裁掉的头部。 */
41
- const MAX_WIDGET_LINES = 200;
42
-
43
- /**
44
- * subagent text_delta streaming 生命周期对象。
45
- *
46
- * 创建后:
47
- * - `onDelta(delta)`:session-runner 每次 text_delta 调
48
- * - `dispose()`:subagent 终态时调,清除 widget + 清 timer
49
- *
50
- * buffer/timer 状态全部内聚在此对象,调用方不需要关心合并逻辑。
51
- */
52
- export class SubagentStream {
53
- private readonly widgetKey: string;
54
- private readonly sink: StreamSink;
55
- private buffer = "";
56
- private timer: ReturnType<typeof setTimeout> | undefined;
57
- private hasFlushed = false;
58
- private disposed = false;
59
-
60
- constructor(recordId: string, sink: StreamSink) {
61
- this.widgetKey = `subagent-stream-${recordId}`;
62
- this.sink = sink;
63
- }
64
-
65
- /** 接收一个 text_delta 增量。空串静默丢弃(不消耗 leading edge)。 */
66
- onDelta(delta: string): void {
67
- if (this.disposed || delta.length === 0) return;
68
- this.buffer += delta;
69
- if (!this.hasFlushed) {
70
- // leading edge:第一个 delta 立即 flush
71
- this.hasFlushed = true;
72
- this.flush();
73
- } else if (this.timer === undefined) {
74
- // trailing edge:后续 delta 经 timer 合并
75
- this.timer = setTimeout(() => this.flush(), STREAM_FLUSH_MS);
76
- }
77
- }
78
-
79
- /** 终态清理:清除 widget + 清 timer(幂等)。 */
80
- dispose(): void {
81
- if (this.disposed) return;
82
- this.disposed = true;
83
- if (this.timer !== undefined) {
84
- clearTimeout(this.timer);
85
- this.timer = undefined;
86
- }
87
- this.sink.setWidget(this.widgetKey, undefined);
88
- }
89
-
90
- private flush(): void {
91
- this.timer = undefined;
92
- if (this.buffer.length === 0 || this.disposed) return;
93
- const lines = this.buffer.split("\n");
94
- if (lines.length <= MAX_WIDGET_LINES) {
95
- this.sink.setWidget(this.widgetKey, lines);
96
- return;
97
- }
98
- const dropped = lines.length - MAX_WIDGET_LINES;
99
- this.sink.setWidget(this.widgetKey, [
100
- `(... ${dropped} earlier lines truncated, full output in /subagents detail)`,
101
- ...lines.slice(dropped),
102
- ]);
103
- }
104
- }
105
-
106
- /**
107
- * background stream 创建策略(widget 私货通道退役步骤 2,E 方案 §6.3)。
108
- *
109
- * GUI(mode=rpc)+ relay 激活时不创建——drawer 实时改由 runtime tee 供数
110
- * (session.subagentEntriesAppended 帧),extension 停发 setWidget 私货,主 pi stdout
111
- * 卸载。TUI(widget 行是 TUI 用户的实时预览)与 relay 未激活环境(独立 pi / 无
112
- * xyz-agent runtime)原样创建——universal 包自足性不绑架。
113
- *
114
- * env/mode 显式入参而非内部读 process.env:调用方语义(本 record 的宿主形态)一次
115
- * 确定,测试可注入,函数保持纯判定。
116
- */
117
- export function createBackgroundStream(
118
- recordId: string,
119
- sink: StreamSink | null,
120
- mode: ExtensionMode | undefined,
121
- env: NodeJS.ProcessEnv | Record<string, string | undefined>,
122
- ): SubagentStream | undefined {
123
- if (sink === null) return undefined;
124
- if (isRelayActive(env) && resolveHostMode(mode) === "gui") return undefined;
125
- return new SubagentStream(recordId, sink);
126
- }