@zhushanwen/pi-subagent-workflow 8.6.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 (347) hide show
  1. package/package.json +9 -13
  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 +89 -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 +2 -2
  16. package/src/interface/__tests__/tool-workflow-script-generate.test.ts +2 -2
  17. package/src/interface/__tests__/tool-workflow-throw-paths.test.ts +1 -1
  18. package/src/interface/bg-notify-render.ts +4 -4
  19. package/src/interface/commands.ts +3 -3
  20. package/src/interface/format.ts +2 -2
  21. package/src/interface/helpers.ts +1 -1
  22. package/src/interface/list-component.ts +4 -4
  23. package/src/interface/list-shared.ts +2 -2
  24. package/src/interface/list-view.ts +2 -2
  25. package/src/interface/subagent-actions.ts +263 -11
  26. package/src/interface/subagent-tool-schema.ts +20 -13
  27. package/src/interface/subagent-tool.ts +11 -6
  28. package/src/interface/subagents.ts +3 -3
  29. package/src/interface/tool-render.ts +34 -2
  30. package/src/interface/tool-workflow-script.ts +4 -4
  31. package/src/interface/tool-workflow.ts +6 -6
  32. package/src/interface/views/WorkflowsView.ts +5 -5
  33. package/src/interface/views/__tests__/WorkflowsView-signature.test.ts +3 -3
  34. package/src/interface/views/__tests__/detail-content-session-file.test.ts +2 -2
  35. package/src/interface/views/detail-content.ts +4 -4
  36. package/src/interface/views/format.ts +4 -4
  37. package/src/{orchestration/jsonl-run-store.ts → jsonl-run-store.ts} +11 -11
  38. package/src/execution/__tests__/__fixtures__/notifier-golden-snapshots.json +0 -53
  39. package/src/execution/__tests__/__fixtures__/truncline.snapshot.json +0 -1
  40. package/src/execution/__tests__/agent-registry.test.ts +0 -363
  41. package/src/execution/__tests__/agent-result-mapper.test.ts +0 -150
  42. package/src/execution/__tests__/alive-store.test.ts +0 -147
  43. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
  44. package/src/execution/__tests__/before-agent-start-injection.test.ts +0 -132
  45. package/src/execution/__tests__/bg-notify-render.test.ts +0 -329
  46. package/src/execution/__tests__/channel-registry-handshake.test.ts +0 -243
  47. package/src/execution/__tests__/chat-engine-routing.test.ts +0 -601
  48. package/src/execution/__tests__/chatmode-first-round-closure-service.test.ts +0 -365
  49. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -190
  50. package/src/execution/__tests__/chatmode-round-notify-real-chain.test.ts +0 -215
  51. package/src/execution/__tests__/concurrency-pool.test.ts +0 -250
  52. package/src/execution/__tests__/config.test.ts +0 -110
  53. package/src/execution/__tests__/conversation-wiring.test.ts +0 -198
  54. package/src/execution/__tests__/crash-recovery.test.ts +0 -320
  55. package/src/execution/__tests__/delivery-methods.test.ts +0 -422
  56. package/src/execution/__tests__/dialog-queue.test.ts +0 -299
  57. package/src/execution/__tests__/epipe-fallback.test.ts +0 -241
  58. package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -243
  59. package/src/execution/__tests__/execute-nesting.test.ts +0 -323
  60. package/src/execution/__tests__/execute-options-mapper.test.ts +0 -200
  61. package/src/execution/__tests__/execution-record.test.ts +0 -1394
  62. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +0 -171
  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 -169
  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 -242
  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 -672
  75. package/src/execution/__tests__/lifecycle-manager-lock.test.ts +0 -211
  76. package/src/execution/__tests__/lifecycle-manager.test.ts +0 -383
  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 -140
  80. package/src/execution/__tests__/manifest-parentid.test.ts +0 -117
  81. package/src/execution/__tests__/model-resolver.test.ts +0 -465
  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 -612
  85. package/src/execution/__tests__/notifier-golden-snapshot.test.ts +0 -261
  86. package/src/execution/__tests__/notify-ledger.test.ts +0 -826
  87. package/src/execution/__tests__/one-shot-upgrade.test.ts +0 -205
  88. package/src/execution/__tests__/output-collector.test.ts +0 -358
  89. package/src/execution/__tests__/parent-child-matrix.test.ts +0 -336
  90. package/src/execution/__tests__/path-encoding.test.ts +0 -104
  91. package/src/execution/__tests__/pi-invocation.test.ts +0 -134
  92. package/src/execution/__tests__/record-store.test.ts +0 -1057
  93. package/src/execution/__tests__/records-cwd-isolation.test.ts +0 -91
  94. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +0 -339
  95. package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -273
  96. package/src/execution/__tests__/relay-agent.test.ts +0 -448
  97. package/src/execution/__tests__/relay-env.test.ts +0 -42
  98. package/src/execution/__tests__/resource-policy.test.ts +0 -109
  99. package/src/execution/__tests__/rpc-mode.test.ts +0 -89
  100. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -267
  101. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -253
  102. package/src/execution/__tests__/run-spawn-edges.test.ts +0 -687
  103. package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
  104. package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
  105. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
  106. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +0 -199
  107. package/src/execution/__tests__/sdk-contract.test.ts +0 -273
  108. package/src/execution/__tests__/session-context-resolver.test.ts +0 -167
  109. package/src/execution/__tests__/session-file-gc.test.ts +0 -293
  110. package/src/execution/__tests__/session-pending.test.ts +0 -197
  111. package/src/execution/__tests__/session-reconstructor.test.ts +0 -379
  112. package/src/execution/__tests__/session-runner-epipe.test.ts +0 -178
  113. package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -350
  114. package/src/execution/__tests__/session-start-reaper.test.ts +0 -233
  115. package/src/execution/__tests__/spawn-args.test.ts +0 -445
  116. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -189
  117. package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
  118. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -207
  119. package/src/execution/__tests__/spawned-children.test.ts +0 -92
  120. package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
  121. package/src/execution/__tests__/startup-config-declaration.test.ts +0 -35
  122. package/src/execution/__tests__/status-refactor.test.ts +0 -345
  123. package/src/execution/__tests__/stdin-writer.test.ts +0 -463
  124. package/src/execution/__tests__/stream-sink-retirement.test.ts +0 -261
  125. package/src/execution/__tests__/subagent-service-abort.test.ts +0 -60
  126. package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -629
  127. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +0 -180
  128. package/src/execution/__tests__/subagent-service.test.ts +0 -788
  129. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +0 -310
  130. package/src/execution/__tests__/subprocess-agent-runner.test.ts +0 -599
  131. package/src/execution/__tests__/temp-prompt.test.ts +0 -53
  132. package/src/execution/__tests__/timeout-integration.test.ts +0 -615
  133. package/src/execution/__tests__/tombstone-store.test.ts +0 -73
  134. package/src/execution/__tests__/tool-action.test.ts +0 -476
  135. package/src/execution/__tests__/truncline-snapshot.test.ts +0 -81
  136. package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
  137. package/src/execution/__tests__/turn-limiter.test.ts +0 -65
  138. package/src/execution/__tests__/ui-channels.test.ts +0 -187
  139. package/src/execution/__tests__/ui-interaction-model.test.ts +0 -67
  140. package/src/execution/__tests__/ui-request-handler-factory.test.ts +0 -370
  141. package/src/execution/__tests__/ui-request-handler.test.ts +0 -204
  142. package/src/execution/__tests__/ui-request-observability.test.ts +0 -114
  143. package/src/execution/__tests__/ui-request-queue.test.ts +0 -133
  144. package/src/execution/__tests__/worktree-manager.test.ts +0 -633
  145. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -229
  146. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +0 -181
  147. package/src/execution/__tests__/worktree-registry.test.ts +0 -199
  148. package/src/execution/agent-registry.ts +0 -199
  149. package/src/execution/agent-result-mapper.ts +0 -90
  150. package/src/execution/alive-store.ts +0 -92
  151. package/src/execution/argv-mirror.ts +0 -113
  152. package/src/execution/best-effort.ts +0 -38
  153. package/src/execution/channel-registry-access.ts +0 -144
  154. package/src/execution/concurrency-pool.ts +0 -116
  155. package/src/execution/config.ts +0 -96
  156. package/src/execution/dialog-queue.ts +0 -330
  157. package/src/execution/engine/__tests__/common/data-dir.test.ts +0 -53
  158. package/src/execution/engine/__tests__/common/errors.test.ts +0 -132
  159. package/src/execution/engine/__tests__/common/event-journal.test.ts +0 -177
  160. package/src/execution/engine/__tests__/common/kill-chain.test.ts +0 -192
  161. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +0 -81
  162. package/src/execution/engine/__tests__/common/persona-router.test.ts +0 -123
  163. package/src/execution/engine/__tests__/common/pool-manager.test.ts +0 -154
  164. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
  165. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
  166. package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +0 -141
  167. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +0 -109
  168. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +0 -101
  169. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +0 -77
  170. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +0 -104
  171. package/src/execution/engine/__tests__/conformance/contract.relay.test.ts +0 -342
  172. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +0 -201
  173. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +0 -76
  174. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +0 -79
  175. package/src/execution/engine/__tests__/engine-discovery.test.ts +0 -87
  176. package/src/execution/engine/__tests__/engines-declaration.test.ts +0 -36
  177. package/src/execution/engine/__tests__/model-prompt.test.ts +0 -85
  178. package/src/execution/engine/__tests__/paths.test.ts +0 -39
  179. package/src/execution/engine/__tests__/registry.test.ts +0 -120
  180. package/src/execution/engine/__tests__/routing.test.ts +0 -231
  181. package/src/execution/engine/common/data-dir.ts +0 -62
  182. package/src/execution/engine/common/errors.ts +0 -183
  183. package/src/execution/engine/common/event-journal.ts +0 -254
  184. package/src/execution/engine/common/journal-replay.ts +0 -62
  185. package/src/execution/engine/common/kill-chain.ts +0 -221
  186. package/src/execution/engine/common/nesting-guard.ts +0 -50
  187. package/src/execution/engine/common/persona-router.ts +0 -108
  188. package/src/execution/engine/common/pool-manager.ts +0 -226
  189. package/src/execution/engine/common/schema-emulation.ts +0 -189
  190. package/src/execution/engine/common/session-view-projection.ts +0 -51
  191. package/src/execution/engine/engine-discovery.ts +0 -65
  192. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -469
  193. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
  194. package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +0 -164
  195. package/src/execution/engine/engines/pi/pi-engine.ts +0 -415
  196. package/src/execution/engine/engines/pi/reader.ts +0 -48
  197. package/src/execution/engine/engines/pi/registration.ts +0 -35
  198. package/src/execution/engine/engines/pi/task-spec-mapper.ts +0 -100
  199. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +0 -39
  200. package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +0 -150
  201. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -246
  202. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -228
  203. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
  204. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -64
  205. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -127
  206. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +0 -580
  207. package/src/execution/engine/engines/zcode/constants.ts +0 -43
  208. package/src/execution/engine/engines/zcode/golden-sample.ts +0 -39
  209. package/src/execution/engine/engines/zcode/launcher.ts +0 -161
  210. package/src/execution/engine/engines/zcode/parser.ts +0 -436
  211. package/src/execution/engine/engines/zcode/preparer.ts +0 -363
  212. package/src/execution/engine/engines/zcode/reader.ts +0 -381
  213. package/src/execution/engine/engines/zcode/registration.ts +0 -37
  214. package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -658
  215. package/src/execution/engine/host-task-spec.ts +0 -47
  216. package/src/execution/engine/model-prompt.ts +0 -59
  217. package/src/execution/engine/paths.ts +0 -42
  218. package/src/execution/engine/port.ts +0 -153
  219. package/src/execution/engine/registry.ts +0 -123
  220. package/src/execution/engine/routing.ts +0 -218
  221. package/src/execution/engine/types.ts +0 -309
  222. package/src/execution/execute-options-mapper.ts +0 -112
  223. package/src/execution/execution-record.ts +0 -965
  224. package/src/execution/finalize-record.ts +0 -251
  225. package/src/execution/finalized-marker.ts +0 -51
  226. package/src/execution/get-state-handshake.ts +0 -104
  227. package/src/execution/host-mode.ts +0 -56
  228. package/src/execution/idle-gc.ts +0 -47
  229. package/src/execution/lifecycle-manager.ts +0 -513
  230. package/src/execution/lifecycle-predicates.ts +0 -65
  231. package/src/execution/manifest-store.ts +0 -256
  232. package/src/execution/model-config-service.ts +0 -219
  233. package/src/execution/model-resolver.ts +0 -248
  234. package/src/execution/notifier.ts +0 -330
  235. package/src/execution/notify-ledger.ts +0 -580
  236. package/src/execution/output-collector.ts +0 -228
  237. package/src/execution/path-encoding.ts +0 -60
  238. package/src/execution/pi-invocation.ts +0 -120
  239. package/src/execution/record-entry.ts +0 -132
  240. package/src/execution/record-store.ts +0 -1234
  241. package/src/execution/relay-env.ts +0 -37
  242. package/src/execution/session-context-resolver.ts +0 -64
  243. package/src/execution/session-file-gc.ts +0 -120
  244. package/src/execution/session-pending.ts +0 -164
  245. package/src/execution/session-reconstructor.ts +0 -678
  246. package/src/execution/session-runner.ts +0 -1781
  247. package/src/execution/sessions-index.ts +0 -304
  248. package/src/execution/spawn-event-adapter.ts +0 -363
  249. package/src/execution/stdin-writer.ts +0 -198
  250. package/src/execution/stream-sink.ts +0 -126
  251. package/src/execution/subagent-service.ts +0 -2141
  252. package/src/execution/subprocess-agent-runner.ts +0 -317
  253. package/src/execution/temp-prompt.ts +0 -62
  254. package/src/execution/tombstone-store.ts +0 -72
  255. package/src/execution/turn-limiter.ts +0 -102
  256. package/src/execution/types.ts +0 -973
  257. package/src/execution/ui-channels.ts +0 -216
  258. package/src/execution/ui-interaction-model.ts +0 -48
  259. package/src/execution/ui-request-handler-factory.ts +0 -212
  260. package/src/execution/ui-request-observability.ts +0 -81
  261. package/src/execution/ui-request-queue.ts +0 -184
  262. package/src/execution/worktree-manager.ts +0 -688
  263. package/src/execution/worktree-registry.ts +0 -222
  264. package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +0 -349
  265. package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +0 -202
  266. package/src/orchestration/__tests__/agent-call-stream.test.ts +0 -152
  267. package/src/orchestration/__tests__/args-validator.test.ts +0 -143
  268. package/src/orchestration/__tests__/config-loader.test.ts +0 -503
  269. package/src/orchestration/__tests__/error-recovery-handlers.test.ts +0 -809
  270. package/src/orchestration/__tests__/error-recovery-postmessage-defense.test.ts +0 -405
  271. package/src/orchestration/__tests__/error-recovery-serialize-failed-result.test.ts +0 -56
  272. package/src/orchestration/__tests__/error-recovery-workflow-call.test.ts +0 -166
  273. package/src/orchestration/__tests__/execute-agent-call.test.ts +0 -451
  274. package/src/orchestration/__tests__/jsonl-run-store-corrupt-entry.test.ts +0 -150
  275. package/src/orchestration/__tests__/jsonl-run-store-loadall-sources.test.ts +0 -171
  276. package/src/orchestration/__tests__/jsonl-run-store-retention.test.ts +0 -202
  277. package/src/orchestration/__tests__/jsonl-run-store-session-file.test.ts +0 -1030
  278. package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +0 -600
  279. package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +0 -96
  280. package/src/orchestration/__tests__/lifecycle.test.ts +0 -659
  281. package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +0 -95
  282. package/src/orchestration/__tests__/review-fix-loop-e2e.test.ts +0 -2025
  283. package/src/orchestration/__tests__/script-lint.test.ts +0 -831
  284. package/src/orchestration/__tests__/skill-discovery.test.ts +0 -201
  285. package/src/orchestration/__tests__/test-mocks.ts +0 -197
  286. package/src/orchestration/__tests__/worker-exit-without-result.test.ts +0 -368
  287. package/src/orchestration/__tests__/worker-host.test.ts +0 -120
  288. package/src/orchestration/__tests__/worker-returnmeta-passthrough.test.ts +0 -164
  289. package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +0 -563
  290. package/src/orchestration/__tests__/worker-script-builder.test.ts +0 -309
  291. package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +0 -129
  292. package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +0 -317
  293. package/src/orchestration/__tests__/workflow-script-lint-memo.test.ts +0 -110
  294. package/src/orchestration/__tests__/workflows-e2e.test.ts +0 -537
  295. package/src/orchestration/agent-opts-resolver.ts +0 -174
  296. package/src/orchestration/args-validator.ts +0 -127
  297. package/src/orchestration/config-loader.ts +0 -315
  298. package/src/orchestration/error-recovery.ts +0 -1018
  299. package/src/orchestration/execute-agent-call.ts +0 -256
  300. package/src/orchestration/launcher.ts +0 -455
  301. package/src/orchestration/lifecycle.ts +0 -399
  302. package/src/orchestration/models/__tests__/budget.test.ts +0 -307
  303. package/src/orchestration/models/__tests__/trace.test.ts +0 -408
  304. package/src/orchestration/models/agent-call.ts +0 -83
  305. package/src/orchestration/models/budget.ts +0 -118
  306. package/src/orchestration/models/ports.ts +0 -164
  307. package/src/orchestration/models/run-runtime.ts +0 -104
  308. package/src/orchestration/models/run-spec.ts +0 -83
  309. package/src/orchestration/models/run-state.ts +0 -44
  310. package/src/orchestration/models/trace.ts +0 -183
  311. package/src/orchestration/models/types.ts +0 -301
  312. package/src/orchestration/models/workflow-run.ts +0 -254
  313. package/src/orchestration/models/workflow-script-registry.ts +0 -35
  314. package/src/orchestration/models/workflow-script.ts +0 -117
  315. package/src/orchestration/script-lint.ts +0 -766
  316. package/src/orchestration/skill-discovery.ts +0 -115
  317. package/src/orchestration/worker-handle.ts +0 -115
  318. package/src/orchestration/worker-host.ts +0 -98
  319. package/src/orchestration/worker-script-builder.ts +0 -421
  320. package/src/orchestration/workflow-files.ts +0 -85
  321. package/src/orchestration/workflow-script-registry-impl.ts +0 -133
  322. package/src/shared/__tests__/agent-ref.test.ts +0 -34
  323. package/src/shared/__tests__/meta-parser.test.ts +0 -304
  324. package/src/shared/__tests__/model-ref.test.ts +0 -306
  325. package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +0 -280
  326. package/src/shared/__tests__/resource-discovery.test.ts +0 -736
  327. package/src/shared/__tests__/resource-meta.test.ts +0 -51
  328. package/src/shared/__tests__/schema-jsonify.test.ts +0 -81
  329. package/src/shared/__tests__/timer-delay.test.ts +0 -61
  330. package/src/shared/agent-event.ts +0 -13
  331. package/src/shared/agent-ref.ts +0 -57
  332. package/src/shared/meta-parser.ts +0 -261
  333. package/src/shared/model-ref.ts +0 -286
  334. package/src/shared/resource-discovery.ts +0 -811
  335. package/src/shared/resource-meta.ts +0 -65
  336. package/src/shared/schema-env.ts +0 -44
  337. package/src/shared/schema-jsonify.ts +0 -58
  338. package/src/shared/timer-delay.ts +0 -54
  339. package/src/shared/xml-injection.ts +0 -35
  340. package/workflows/README.md +0 -81
  341. package/workflows/_shared/agent-refs.cjs +0 -40
  342. package/workflows/chain.js +0 -131
  343. package/workflows/map-reduce.js +0 -174
  344. package/workflows/parallel.js +0 -148
  345. package/workflows/review-fix-loop-utils.cjs +0 -1309
  346. package/workflows/review-fix-loop.js +0 -1404
  347. 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
- }