@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,381 +0,0 @@
1
- // src/execution/engine/engines/zcode/reader.ts
2
- //
3
- // ZcodeEngine reader(P3):sqlite 只读读取 session/message/part 三级 JOIN →
4
- // SessionView(设计 D6 read 降级链第①级)。
5
- //
6
- // 双端复用约束(设计 §3.3.7):本模块是唯一允许被 xyz-agent runtime import 的引擎
7
- // 模块——必须保持无状态纯函数、无 spawn/进程依赖、不 import 同包 launcher/
8
- // preparer/parser(依赖仅 node 内置 + 中立类型 + 纯常量)。runtime 侧经 workspace
9
- // 依赖引入(P5 打包登记 tsup noExternal)。
10
- //
11
- // 依赖选型:node:sqlite(零依赖)。依据:仓根 engines node>=22.19.0,node:sqlite
12
- // 自 22.13 起免 flag 可用(本机 v24.11.1 实测通过);better-sqlite3 是原生模块,
13
- // 会引入 electron rebuild / pi 进程 ABI 匹配两重打包负担(项目关键规则 12②)。
14
- // 防御:动态 import——不支持的环境(老 node)抛结构化错误供调用方降级②③级,
15
- // 不炸模块加载。
16
- //
17
- // 表结构(2026-08-25 实测 0.16.5,16 表 WAL):
18
- // session(id, ..., time_created, ...) / message(id, session_id, sequence, data)
19
- // / part(id, message_id, session_id, sequence, data)
20
- // message.data: {role: 'user'|'assistant', ...};part.data: {type: 'text'|'reasoning'|
21
- // 'tool'|'step-start'|'step-finish', ...}(tool 的 state 是 JSON 字符串)。
22
- // schema_migration 表存在——CLI 升级迁移表结构,漂移由结构化错误暴露(降级链兜底)。
23
-
24
- import * as fs from "node:fs";
25
-
26
- // 相对 import 用 .js 形态(本文件是双端复用模块,runtime tsconfig 无
27
- // allowImportingTsExtensions——.ts 形态会 TS5097;jiti 2.7 / vite / esbuild 均支持
28
- // .js→.ts 解析,pi 直载不受影响)。
29
- import type { AgentUsage, AgentUsageTotal, ToolCall } from "../../../types.js";
30
- import type { ReplayedTurn, SessionView } from "../../types.js";
31
- import { ZCODE_ENGINE_ID } from "./constants.js";
32
-
33
- // ============================================================
34
- // 结构化错误(供调用方降级②③级——不静默)
35
- // ============================================================
36
-
37
- export type ZcodeReaderErrorCode = "engine_session_read_failed";
38
-
39
- export class ZcodeReaderError extends Error {
40
- readonly code: ZcodeReaderErrorCode;
41
- /** 原始失败细节(缺文件/表漂移/运行时不支持)。 */
42
- readonly detail: string;
43
-
44
- constructor(detail: string, hint?: string) {
45
- super(
46
- `[engine_session_read_failed] zcode 原生 session 读取失败:${detail}。` +
47
- (hint ?? "调用方应降级到第②级(宿主 event journal)或第③级(outcome-only)。"),
48
- );
49
- this.name = "ZcodeReaderError";
50
- this.code = "engine_session_read_failed";
51
- this.detail = detail;
52
- }
53
- }
54
-
55
- // ============================================================
56
- // 行数据 guard(sqlite 驱动返回 unknown,禁 any)
57
- // ============================================================
58
-
59
- interface MessageRow {
60
- id: string;
61
- data: string;
62
- }
63
-
64
- interface PartRow {
65
- data: string;
66
- }
67
-
68
- interface ParsedMessage {
69
- role?: unknown;
70
- }
71
-
72
- interface ParsedPart {
73
- type?: unknown;
74
- text?: unknown;
75
- tool?: unknown;
76
- state?: unknown;
77
- cost?: unknown;
78
- tokens?: unknown;
79
- }
80
-
81
- /** sqlite 驱动的最小消费面(node:sqlite DatabaseSync 结构子集,测试可注入)。 */
82
- type SqliteDb = {
83
- prepare: (sql: string) => { get: (...a: unknown[]) => unknown; all: (...a: unknown[]) => unknown[] };
84
- };
85
-
86
- function parseJsonField(raw: string, ctx: string): Record<string, unknown> | undefined {
87
- try {
88
- const v: unknown = JSON.parse(raw);
89
- return typeof v === "object" && v !== null && !Array.isArray(v) ? (v as Record<string, unknown>) : undefined;
90
- } catch (err) {
91
- throw new ZcodeReaderError(
92
- `${ctx} 行 data 不是合法 JSON(${err instanceof Error ? err.message : String(err)})`,
93
- "db 内容损坏或版本不兼容——调用方应降级到第②级(宿主 event journal)。",
94
- );
95
- }
96
- }
97
-
98
- function finiteOr(v: unknown, fallback: number): number {
99
- const n = typeof v === "number" ? v : Number(v);
100
- return Number.isFinite(n) ? n : fallback;
101
- }
102
-
103
- /** step-finish tokens 形状 {total, input, output, reasoning, cache:{read, write}} → AgentUsage。 */
104
- function usageFromStepFinish(part: ParsedPart): AgentUsage | undefined {
105
- const tokens = part.tokens;
106
- if (typeof tokens !== "object" || tokens === null) return undefined;
107
- const t = tokens as Record<string, unknown>;
108
- const cache = typeof t.cache === "object" && t.cache !== null ? (t.cache as Record<string, unknown>) : {};
109
- if (t.input === undefined && t.output === undefined) return undefined;
110
- return {
111
- input: finiteOr(t.input, 0),
112
- output: finiteOr(t.output, 0),
113
- cacheRead: finiteOr(cache.read, 0),
114
- cacheWrite: finiteOr(cache.write, 0),
115
- };
116
- }
117
-
118
- /** tool part 的 state(JSON 字符串)→ 中立 ToolCall。 */
119
- function toolFromPart(part: ParsedPart): ToolCall {
120
- const toolName = typeof part.tool === "string" ? part.tool : "unknown";
121
- let state: Record<string, unknown> | undefined;
122
- if (typeof part.state === "string") {
123
- try {
124
- const v: unknown = JSON.parse(part.state);
125
- state = typeof v === "object" && v !== null ? (v as Record<string, unknown>) : undefined;
126
- } catch {
127
- state = undefined;
128
- }
129
- }
130
- const status = typeof state?.status === "string" ? state.status : "unknown";
131
- const output = state?.output;
132
- return {
133
- toolName,
134
- ...(state?.input !== undefined ? { args: state.input } : {}),
135
- // 输出形态(实测):string(内容)或 object(结构化)——分别映射到 pi ToolCallResult
136
- // 的 content[] / details,不发明第二形状
137
- ...(typeof output === "string" ? { result: { content: [output] } } : {}),
138
- ...(typeof output === "object" && output !== null ? { result: { details: output } } : {}),
139
- ...(status !== "completed" ? { isError: true } : {}),
140
- };
141
- }
142
-
143
- // ============================================================
144
- // SessionView 派生(turn = assistant 消息内 step-start…step-finish 段)
145
- // ============================================================
146
-
147
- interface TurnAcc {
148
- text: string;
149
- thinking: string;
150
- toolCalls: ToolCall[];
151
- usageDelta?: AgentUsage;
152
- }
153
-
154
- class TotalsAcc {
155
- input = 0;
156
- output = 0;
157
- cacheRead = 0;
158
- cacheWrite = 0;
159
- cost = 0;
160
- has = false;
161
-
162
- add(u: AgentUsage): void {
163
- this.has = true;
164
- this.input += u.input;
165
- this.output += u.output;
166
- this.cacheRead += u.cacheRead;
167
- this.cacheWrite += u.cacheWrite;
168
- this.cost += u.cost ?? 0;
169
- }
170
-
171
- toTotal(): AgentUsageTotal | undefined {
172
- if (!this.has) return undefined;
173
- return {
174
- input: this.input,
175
- output: this.output,
176
- cacheRead: this.cacheRead,
177
- cacheWrite: this.cacheWrite,
178
- cost: this.cost,
179
- total: this.input + this.output + this.cacheRead + this.cacheWrite,
180
- };
181
- }
182
- }
183
-
184
- function closeTurn(acc: TurnAcc | null, turns: ReplayedTurn[], totals: TotalsAcc): void {
185
- if (acc === null) return;
186
- turns.push({ text: acc.text, thinking: acc.thinking, toolCalls: acc.toolCalls, closed: true });
187
- if (acc.usageDelta !== undefined) totals.add(acc.usageDelta);
188
- }
189
-
190
- function rowToMessageRow(v: unknown): MessageRow {
191
- if (typeof v === "object" && v !== null && "id" in v && "data" in v) {
192
- const r = v as { id: unknown; data: unknown };
193
- if (typeof r.id === "string" && typeof r.data === "string") return { id: r.id, data: r.data };
194
- }
195
- throw new ZcodeReaderError("message 行形状异常(id/data 列缺失或类型漂移)");
196
- }
197
-
198
- function rowToPartRow(v: unknown): PartRow {
199
- if (typeof v === "object" && v !== null && "data" in v) {
200
- const r = v as { data: unknown };
201
- if (typeof r.data === "string") return { data: r.data };
202
- }
203
- throw new ZcodeReaderError("part 行形状异常(data 列缺失或类型漂移)");
204
- }
205
-
206
- function resolveSessionId(db: SqliteDb, sessionId: string | undefined): string {
207
- if (sessionId !== undefined) {
208
- const hit = db.prepare("SELECT id FROM session WHERE id = ?").get(sessionId);
209
- if (hit === undefined) {
210
- throw new ZcodeReaderError(
211
- `session 不存在:${sessionId}`,
212
- "sessionId 可能来自已清理的池——降级到 outcome-only。",
213
- );
214
- }
215
- return sessionId;
216
- }
217
- const latest = db
218
- .prepare("SELECT id FROM session ORDER BY time_created DESC LIMIT 1")
219
- .get() as { id?: unknown } | undefined;
220
- if (latest === undefined || typeof latest.id !== "string") {
221
- throw new ZcodeReaderError("db 内无任何 session 行");
222
- }
223
- return latest.id;
224
- }
225
-
226
- /** part JOIN 查询按 message_id 分组(mid 列缺失的行跳过——形状防御)。 */
227
- function loadGroupedParts(db: SqliteDb, sessionId: string): Map<string, PartRow[]> {
228
- // part.sequence 是 message 内局部序(实测:user part 0 / assistant parts 0..n)——
229
- // JOIN message 按 (message.sequence, part.sequence) 还原时序,再按 message_id 分组
230
- const grouped = new Map<string, PartRow[]>();
231
- for (const raw of db
232
- .prepare(
233
- "SELECT part.message_id AS mid, part.data AS data FROM part " +
234
- "JOIN message ON part.message_id = message.id " +
235
- "WHERE part.session_id = ? ORDER BY message.sequence, part.sequence",
236
- )
237
- .all(sessionId)) {
238
- if (typeof raw !== "object" || raw === null || !("mid" in raw)) continue;
239
- const mid = String((raw as { mid: unknown }).mid);
240
- const arr = grouped.get(mid) ?? [];
241
- arr.push(rowToPartRow(raw));
242
- grouped.set(mid, arr);
243
- }
244
- return grouped;
245
- }
246
-
247
- /** 首段直入、后续段 "\n" 拼接(text / reasoning 共用;text 字段缺失按空串)。 */
248
- function appendPartText(current: string, part: ParsedPart): string {
249
- return current === "" ? String(part.text ?? "") : current + "\n" + String(part.text ?? "");
250
- }
251
-
252
- /**
253
- * 单个 part 归入当前 turn(无 turn 则开),返回归入后的累积器(step-finish 闭合后为
254
- * null)。step-start 等边界标记:开 turn 交给首个内容 part(空 step-start 段不产空 turn)。
255
- */
256
- function applyPartToTurn(
257
- part: ParsedPart,
258
- acc: TurnAcc | null,
259
- turns: ReplayedTurn[],
260
- totals: TotalsAcc,
261
- ): TurnAcc | null {
262
- switch (part.type) {
263
- case "text":
264
- acc = acc ?? { text: "", thinking: "", toolCalls: [] };
265
- acc.text = appendPartText(acc.text, part);
266
- return acc;
267
- case "reasoning":
268
- acc = acc ?? { text: "", thinking: "", toolCalls: [] };
269
- acc.thinking = appendPartText(acc.thinking, part);
270
- return acc;
271
- case "tool":
272
- acc = acc ?? { text: "", thinking: "", toolCalls: [] };
273
- acc.toolCalls.push(toolFromPart(part));
274
- return acc;
275
- case "step-finish": {
276
- const u = usageFromStepFinish(part);
277
- const cost = finiteOr(part.cost, 0);
278
- if (acc === null) acc = { text: "", thinking: "", toolCalls: [] };
279
- if (u !== undefined) acc.usageDelta = cost > 0 ? { ...u, cost } : u;
280
- closeTurn(acc, turns, totals);
281
- return null;
282
- }
283
- default:
284
- return acc;
285
- }
286
- }
287
-
288
- /** assistant 消息流 → turns(usage 累计进 totals)。 */
289
- function collectTurns(messages: MessageRow[], grouped: Map<string, PartRow[]>, totals: TotalsAcc): ReplayedTurn[] {
290
- const turns: ReplayedTurn[] = [];
291
- for (const msg of messages) {
292
- const parsedMsg = parseJsonField(msg.data, "message") as ParsedMessage | undefined;
293
- // SessionView.turns 是 assistant 视角(pi Turn 同构)——user 消息(任务 prompt)不进 turns
294
- if (parsedMsg?.role !== "assistant") continue;
295
- let acc: TurnAcc | null = null;
296
- for (const partRow of grouped.get(msg.id) ?? []) {
297
- const part = parseJsonField(partRow.data, "part") as ParsedPart | undefined;
298
- if (part === undefined) continue;
299
- acc = applyPartToTurn(part, acc, turns, totals);
300
- }
301
- // 消息结束仍无 step-finish(被杀/截断):已有内容则闭合
302
- closeTurn(acc, turns, totals);
303
- }
304
- return turns;
305
- }
306
-
307
- function buildView(db: SqliteDb, sessionId: string): SessionView {
308
- const messages = db
309
- .prepare("SELECT id, data FROM message WHERE session_id = ? ORDER BY sequence")
310
- .all(sessionId)
311
- .map(rowToMessageRow);
312
-
313
- const totals = new TotalsAcc();
314
- const turns = collectTurns(messages, loadGroupedParts(db, sessionId), totals);
315
-
316
- const usageTotal = totals.toTotal();
317
- return {
318
- engineId: ZCODE_ENGINE_ID,
319
- sessionId,
320
- ...(usageTotal !== undefined ? { usage: usageTotal } : {}),
321
- turns,
322
- source: "native",
323
- };
324
- }
325
-
326
- // ============================================================
327
- // 主入口
328
- // ============================================================
329
-
330
- /**
331
- * 读取 zcode session 的引擎中立视图(read 第①级)。
332
- *
333
- * @param dbPath db.sqlite 绝对路径(引擎 read() 由 handle 解析后传入)
334
- * @param sessionId 目标 session;缺省取池内最新(time_created DESC 首行)
335
- * @throws ZcodeReaderError db 缺失/表漂移/node:sqlite 不可用/session 不存在——
336
- * 结构化错误供调用方走降级链②③级
337
- */
338
- export async function readZcodeSessionView(dbPath: string, sessionId?: string): Promise<SessionView> {
339
- if (!fs.existsSync(dbPath)) {
340
- throw new ZcodeReaderError(`db 文件不存在:${dbPath}`);
341
- }
342
- // [HISTORICAL] 动态 import 必须经变量间接:esbuild CJS 输出会把字面量
343
- // import("node:sqlite") 规约成裸名 import("sqlite")(external 化 node builtin 时的
344
- // 前缀剥离),而 Node 动态 import 裸名不走内置模块 fallback → ERR_MODULE_NOT_FOUND
345
- // → xyz-agent runtime bundle(tsup CJS)下①级恒降级(2026-08-25 P5 实测)。非字面量
346
- // specifier esbuild 无法静态分析,保留原样输出,node: 前缀运行时正确解析。
347
- const sqliteModuleId = "node:sqlite";
348
- const sqliteMod = (await import(sqliteModuleId).catch(() => undefined)) as
349
- | { DatabaseSync?: unknown }
350
- | undefined;
351
- const DatabaseSyncCtor = sqliteMod?.DatabaseSync;
352
- if (typeof DatabaseSyncCtor !== "function") {
353
- throw new ZcodeReaderError(
354
- "当前 node 运行时不支持 node:sqlite(需 >=22.13)",
355
- "升级 node 或改用第②级(宿主 event journal)读取。",
356
- );
357
- }
358
- type DatabaseSyncLike = new (path: string, opts: { readOnly: boolean }) => SqliteDb & { close(): void };
359
- const open = DatabaseSyncCtor as DatabaseSyncLike;
360
-
361
- let db: InstanceType<DatabaseSyncLike> | undefined;
362
- try {
363
- db = new open(dbPath, { readOnly: true });
364
- return buildView(db, resolveSessionId(db, sessionId));
365
- } catch (err) {
366
- if (err instanceof ZcodeReaderError) throw err;
367
- throw new ZcodeReaderError(
368
- `sqlite 查询失败(${err instanceof Error ? err.message : String(err)})`,
369
- "疑似表结构漂移(zcode schema_migration 升级)——调用方应降级到第②级;" +
370
- "并把新 schema 样本补录进 golden 库后更新 reader。",
371
- );
372
- } finally {
373
- try {
374
- db?.close();
375
- } catch (err) {
376
- // 只读连接 close 失败(WAL 并发读常见)不影响读取结果——吞掉继续;
377
- // reader 保持零依赖(双端复用约束),不留 void err 以外的语句
378
- void err;
379
- }
380
- }
381
- }
@@ -1,37 +0,0 @@
1
- // src/execution/engine/engines/zcode/registration.ts
2
- //
3
- // zcode 引擎注册入口(P3 接线)。与 pi/registration.ts 同构:zcode-engine.ts 保持零
4
- // 注册副作用,注册是组合根(src/index.ts)的职责——依赖方向 registry ← registration
5
- // ← zcode-engine 单向,无循环。
6
- //
7
- // engineDataDir 通道:默认走公共 data-dir SSOT(common/data-dir.ts——env
8
- // XYZ_AGENT_DATA_DIR(xyz-agent 宿主注入)→ piAgentDir 回退 + warn,透传链证据见该
9
- // 文件头)。组合根可显式传 getter 覆盖(测试 / 宿主 DI)。
10
-
11
- import { getEngineDataDir } from "../../common/data-dir.ts";
12
- import { registerEngine } from "../../registry.ts";
13
- import { ZCODE_ENGINE_ID } from "./constants.ts";
14
- import { ZcodeEngine } from "./zcode-engine.ts";
15
- import type { ZcodeEngineDeps } from "./zcode-engine.ts";
16
-
17
- export { ZCODE_ADAPTER_VERSION, ZCODE_ENGINE_ID } from "./constants.ts";
18
- export { ZcodeEngine } from "./zcode-engine.ts";
19
- export type { ZcodeEngineDeps } from "./zcode-engine.ts";
20
-
21
- /** 构造 ZcodeEngine(DI 工厂——测试/宿主注入 deps)。 */
22
- export function createZcodeEngine(deps: ZcodeEngineDeps): ZcodeEngine {
23
- return new ZcodeEngine(deps);
24
- }
25
-
26
- /**
27
- * 把 'zcode' 引擎登记进 registry(幂等——组合根可能多次执行,registerEngine 覆盖
28
- * 语义)。工厂惰性:登记不触发任何文件/进程探测,首次 getEngine 才建实例。
29
- */
30
- export function registerZcodeEngine(engineDataDir: () => string = getEngineDataDir): void {
31
- registerEngine(ZCODE_ENGINE_ID, () =>
32
- createZcodeEngine({
33
- engineDataDir,
34
- ...(process.env["XYZ_ZCODE_CLI"] !== undefined ? { cliPath: process.env["XYZ_ZCODE_CLI"] } : {}),
35
- }),
36
- );
37
- }