@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,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
- }