@zhushanwen/subagent-core 0.2.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 (330) hide show
  1. package/README.md +114 -0
  2. package/dist/chunk-3VOERJPJ.js +22 -0
  3. package/dist/chunk-A4IVZWVX.js +31 -0
  4. package/dist/execution/engine/engines/zcode/constants.cjs +54 -0
  5. package/dist/execution/engine/engines/zcode/constants.d.cts +31 -0
  6. package/dist/execution/engine/engines/zcode/constants.d.ts +31 -0
  7. package/dist/execution/engine/engines/zcode/constants.js +22 -0
  8. package/dist/execution/engine/engines/zcode/reader.cjs +276 -0
  9. package/dist/execution/engine/engines/zcode/reader.d.cts +20 -0
  10. package/dist/execution/engine/engines/zcode/reader.d.ts +20 -0
  11. package/dist/execution/engine/engines/zcode/reader.js +239 -0
  12. package/dist/execution/engine/paths.cjs +55 -0
  13. package/dist/execution/engine/paths.d.cts +8 -0
  14. package/dist/execution/engine/paths.d.ts +8 -0
  15. package/dist/execution/engine/paths.js +26 -0
  16. package/dist/execution/relay-env.cjs +62 -0
  17. package/dist/execution/relay-env.d.cts +33 -0
  18. package/dist/execution/relay-env.d.ts +33 -0
  19. package/dist/execution/relay-env.js +20 -0
  20. package/dist/index.cjs +1852 -0
  21. package/dist/index.d.cts +1184 -0
  22. package/dist/index.d.ts +1184 -0
  23. package/dist/index.js +1810 -0
  24. package/dist/types-BxyAidGf.d.cts +875 -0
  25. package/dist/types-BxyAidGf.d.ts +875 -0
  26. package/package.json +99 -0
  27. package/src/__tests__/agent-opts-resolver-schema-prompt.test.ts +142 -0
  28. package/src/__tests__/append-system-prompt-assembly.test.ts +242 -0
  29. package/src/__tests__/builtin-workflows-structure.test.ts +180 -0
  30. package/src/__tests__/derive-closed-display-parity.test.ts +93 -0
  31. package/src/__tests__/fr4-get-state-handshake.test.ts +125 -0
  32. package/src/__tests__/fr8-orphan-recovery.test.ts +259 -0
  33. package/src/__tests__/m2-append-content-probe.test.ts +73 -0
  34. package/src/__tests__/manifest-store.test.ts +368 -0
  35. package/src/__tests__/record-store-cache.test.ts +335 -0
  36. package/src/__tests__/record-store-index.test.ts +560 -0
  37. package/src/__tests__/record-store-last-line.test.ts +129 -0
  38. package/src/__tests__/review-fix-loop-script.test.ts +288 -0
  39. package/src/__tests__/review-fix-loop-utils.test.ts +2377 -0
  40. package/src/__tests__/robustness-low-batch1.test.ts +286 -0
  41. package/src/__tests__/robustness-medium-batch1.test.ts +69 -0
  42. package/src/__tests__/robustness-medium-batch2.test.ts +65 -0
  43. package/src/__tests__/robustness-medium-batch3.test.ts +30 -0
  44. package/src/__tests__/robustness-medium-batch4.test.ts +358 -0
  45. package/src/__tests__/session-runner.test.ts +69 -0
  46. package/src/__tests__/smoke.test.ts +9 -0
  47. package/src/__tests__/stream-sink.test.ts +203 -0
  48. package/src/core/__tests__/host-services.test.ts +144 -0
  49. package/src/core/__tests__/logger.test.ts +78 -0
  50. package/src/core/__tests__/notify-ports.test.ts +104 -0
  51. package/src/core/host-services.ts +97 -0
  52. package/src/core/logger.ts +47 -0
  53. package/src/core/notify-ports.ts +126 -0
  54. package/src/execution/__tests__/__fixtures__/notifier-golden-snapshots.json +53 -0
  55. package/src/execution/__tests__/__fixtures__/truncline.snapshot.json +1 -0
  56. package/src/execution/__tests__/agent-result-mapper.test.ts +150 -0
  57. package/src/execution/__tests__/alive-store.test.ts +147 -0
  58. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +490 -0
  59. package/src/execution/__tests__/channel-registry-handshake.test.ts +242 -0
  60. package/src/execution/__tests__/chat-engine-routing.test.ts +610 -0
  61. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +190 -0
  62. package/src/execution/__tests__/concurrency-pool.test.ts +250 -0
  63. package/src/execution/__tests__/config.test.ts +302 -0
  64. package/src/execution/__tests__/delivery-methods.test.ts +424 -0
  65. package/src/execution/__tests__/dialog-queue.test.ts +299 -0
  66. package/src/execution/__tests__/epipe-fallback.test.ts +241 -0
  67. package/src/execution/__tests__/execute-and-await-worktree.test.ts +243 -0
  68. package/src/execution/__tests__/execute-nesting.test.ts +323 -0
  69. package/src/execution/__tests__/execute-options-mapper.test.ts +200 -0
  70. package/src/execution/__tests__/execution-record.test.ts +1394 -0
  71. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +171 -0
  72. package/src/execution/__tests__/finalize-record.test.ts +367 -0
  73. package/src/execution/__tests__/finalized-marker.test.ts +104 -0
  74. package/src/execution/__tests__/format-schema-instruction.test.ts +169 -0
  75. package/src/execution/__tests__/gc-timer.test.ts +184 -0
  76. package/src/execution/__tests__/get-record-for-action-restart.test.ts +254 -0
  77. package/src/execution/__tests__/helpers/mock-extension-api.ts +30 -0
  78. package/src/execution/__tests__/helpers/spawn-mock.ts +242 -0
  79. package/src/execution/__tests__/host-mode.test.ts +87 -0
  80. package/src/execution/__tests__/lifecycle-manager-lock.test.ts +211 -0
  81. package/src/execution/__tests__/lifecycle-manager.test.ts +383 -0
  82. package/src/execution/__tests__/lifecycle-predicates.test.ts +116 -0
  83. package/src/execution/__tests__/manifest-parentid.test.ts +117 -0
  84. package/src/execution/__tests__/model-resolver.test.ts +465 -0
  85. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +287 -0
  86. package/src/execution/__tests__/nested-visibility.test.ts +325 -0
  87. package/src/execution/__tests__/output-collector.test.ts +358 -0
  88. package/src/execution/__tests__/path-encoding.test.ts +104 -0
  89. package/src/execution/__tests__/pi-invocation.test.ts +134 -0
  90. package/src/execution/__tests__/record-store.test.ts +1057 -0
  91. package/src/execution/__tests__/records-cwd-isolation.test.ts +91 -0
  92. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +339 -0
  93. package/src/execution/__tests__/recursive-visibility-env.test.ts +273 -0
  94. package/src/execution/__tests__/relay-env.test.ts +42 -0
  95. package/src/execution/__tests__/resource-policy.test.ts +109 -0
  96. package/src/execution/__tests__/rpc-mode.test.ts +89 -0
  97. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +267 -0
  98. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +253 -0
  99. package/src/execution/__tests__/run-spawn-edges.test.ts +687 -0
  100. package/src/execution/__tests__/run-spawn-integration.test.ts +933 -0
  101. package/src/execution/__tests__/run-spawn-resume.test.ts +322 -0
  102. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +196 -0
  103. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +199 -0
  104. package/src/execution/__tests__/session-context-resolver.test.ts +167 -0
  105. package/src/execution/__tests__/session-file-gc.test.ts +293 -0
  106. package/src/execution/__tests__/session-reconstructor.test.ts +379 -0
  107. package/src/execution/__tests__/session-runner-epipe.test.ts +178 -0
  108. package/src/execution/__tests__/session-runner-schema-env.test.ts +350 -0
  109. package/src/execution/__tests__/spawn-args.test.ts +445 -0
  110. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +189 -0
  111. package/src/execution/__tests__/spawn-event-adapter.test.ts +167 -0
  112. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +207 -0
  113. package/src/execution/__tests__/spawned-children.test.ts +92 -0
  114. package/src/execution/__tests__/start-sync-model-guard.test.ts +150 -0
  115. package/src/execution/__tests__/stdin-writer.test.ts +462 -0
  116. package/src/execution/__tests__/stream-sink-retirement.test.ts +261 -0
  117. package/src/execution/__tests__/subagent-service-abort.test.ts +60 -0
  118. package/src/execution/__tests__/subagent-service-message-close.test.ts +629 -0
  119. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +180 -0
  120. package/src/execution/__tests__/subagent-service.test.ts +788 -0
  121. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +310 -0
  122. package/src/execution/__tests__/subprocess-agent-runner.test.ts +612 -0
  123. package/src/execution/__tests__/temp-prompt.test.ts +53 -0
  124. package/src/execution/__tests__/timeout-integration.test.ts +615 -0
  125. package/src/execution/__tests__/tombstone-store.test.ts +73 -0
  126. package/src/execution/__tests__/turn-limiter-semantics.test.ts +194 -0
  127. package/src/execution/__tests__/turn-limiter.test.ts +65 -0
  128. package/src/execution/__tests__/ui-channels.test.ts +187 -0
  129. package/src/execution/__tests__/ui-interaction-model.test.ts +67 -0
  130. package/src/execution/__tests__/ui-request-handler-factory.test.ts +369 -0
  131. package/src/execution/__tests__/ui-request-handler.test.ts +204 -0
  132. package/src/execution/__tests__/ui-request-observability.test.ts +113 -0
  133. package/src/execution/__tests__/ui-request-queue.test.ts +133 -0
  134. package/src/execution/__tests__/worktree-manager.test.ts +633 -0
  135. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +229 -0
  136. package/src/execution/__tests__/worktree-reconcile.integration.test.ts +181 -0
  137. package/src/execution/__tests__/worktree-registry.test.ts +199 -0
  138. package/src/execution/agent-registry.ts +199 -0
  139. package/src/execution/agent-result-mapper.ts +90 -0
  140. package/src/execution/alive-store.ts +119 -0
  141. package/src/execution/argv-mirror.ts +113 -0
  142. package/src/execution/best-effort.ts +38 -0
  143. package/src/execution/channel-registry-access.ts +144 -0
  144. package/src/execution/concurrency-pool.ts +116 -0
  145. package/src/execution/config.ts +165 -0
  146. package/src/execution/dialog-queue.ts +330 -0
  147. package/src/execution/engine/__tests__/common/data-dir.test.ts +78 -0
  148. package/src/execution/engine/__tests__/common/errors.test.ts +132 -0
  149. package/src/execution/engine/__tests__/common/event-journal.test.ts +177 -0
  150. package/src/execution/engine/__tests__/common/kill-chain.test.ts +192 -0
  151. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +81 -0
  152. package/src/execution/engine/__tests__/common/persona-router.test.ts +123 -0
  153. package/src/execution/engine/__tests__/common/pool-manager.test.ts +154 -0
  154. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +128 -0
  155. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +28 -0
  156. package/src/execution/engine/__tests__/conformance/agent-event-invariants.ts +141 -0
  157. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +109 -0
  158. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +101 -0
  159. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +77 -0
  160. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +104 -0
  161. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +201 -0
  162. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +76 -0
  163. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +79 -0
  164. package/src/execution/engine/__tests__/engine-discovery.test.ts +87 -0
  165. package/src/execution/engine/__tests__/model-prompt.test.ts +197 -0
  166. package/src/execution/engine/__tests__/paths.test.ts +39 -0
  167. package/src/execution/engine/__tests__/registry.test.ts +120 -0
  168. package/src/execution/engine/__tests__/routing.test.ts +231 -0
  169. package/src/execution/engine/common/data-dir.ts +66 -0
  170. package/src/execution/engine/common/errors.ts +183 -0
  171. package/src/execution/engine/common/event-journal.ts +254 -0
  172. package/src/execution/engine/common/journal-replay.ts +62 -0
  173. package/src/execution/engine/common/kill-chain.ts +221 -0
  174. package/src/execution/engine/common/nesting-guard.ts +50 -0
  175. package/src/execution/engine/common/persona-router.ts +108 -0
  176. package/src/execution/engine/common/pool-manager.ts +226 -0
  177. package/src/execution/engine/common/schema-emulation.ts +189 -0
  178. package/src/execution/engine/common/session-view-projection.ts +51 -0
  179. package/src/execution/engine/engine-discovery.ts +65 -0
  180. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +469 -0
  181. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +155 -0
  182. package/src/execution/engine/engines/pi/__tests__/task-spec-mapper.test.ts +164 -0
  183. package/src/execution/engine/engines/pi/pi-engine.ts +415 -0
  184. package/src/execution/engine/engines/pi/reader.ts +48 -0
  185. package/src/execution/engine/engines/pi/registration.ts +35 -0
  186. package/src/execution/engine/engines/pi/task-spec-mapper.ts +100 -0
  187. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-spawn.json +39 -0
  188. package/src/execution/engine/engines/zcode/__tests__/launcher.test.ts +150 -0
  189. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +246 -0
  190. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +228 -0
  191. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +210 -0
  192. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +71 -0
  193. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +127 -0
  194. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.test.ts +580 -0
  195. package/src/execution/engine/engines/zcode/constants.ts +43 -0
  196. package/src/execution/engine/engines/zcode/golden-sample.ts +39 -0
  197. package/src/execution/engine/engines/zcode/launcher.ts +161 -0
  198. package/src/execution/engine/engines/zcode/parser.ts +436 -0
  199. package/src/execution/engine/engines/zcode/preparer.ts +363 -0
  200. package/src/execution/engine/engines/zcode/reader.ts +381 -0
  201. package/src/execution/engine/engines/zcode/registration.ts +37 -0
  202. package/src/execution/engine/engines/zcode/zcode-engine.ts +658 -0
  203. package/src/execution/engine/host-task-spec.ts +47 -0
  204. package/src/execution/engine/model-prompt.ts +158 -0
  205. package/src/execution/engine/paths.ts +42 -0
  206. package/src/execution/engine/port.ts +153 -0
  207. package/src/execution/engine/registry.ts +133 -0
  208. package/src/execution/engine/routing.ts +218 -0
  209. package/src/execution/engine/types.ts +309 -0
  210. package/src/execution/execute-options-mapper.ts +115 -0
  211. package/src/execution/execution-record.ts +984 -0
  212. package/src/execution/finalize-record.ts +254 -0
  213. package/src/execution/finalized-marker.ts +70 -0
  214. package/src/execution/get-state-handshake.ts +104 -0
  215. package/src/execution/host-mode.ts +56 -0
  216. package/src/execution/idle-gc.ts +47 -0
  217. package/src/execution/lifecycle-manager.ts +513 -0
  218. package/src/execution/lifecycle-predicates.ts +65 -0
  219. package/src/execution/manifest-store.ts +256 -0
  220. package/src/execution/model-config-service.ts +250 -0
  221. package/src/execution/model-resolver.ts +248 -0
  222. package/src/execution/notifier.ts +372 -0
  223. package/src/execution/notify-ledger.ts +580 -0
  224. package/src/execution/output-collector.ts +228 -0
  225. package/src/execution/path-encoding.ts +60 -0
  226. package/src/execution/pi-invocation.ts +120 -0
  227. package/src/execution/record-entry.ts +132 -0
  228. package/src/execution/record-store.ts +1265 -0
  229. package/src/execution/relay-env.ts +37 -0
  230. package/src/execution/session-context-resolver.ts +64 -0
  231. package/src/execution/session-file-gc.ts +120 -0
  232. package/src/execution/session-pending.ts +170 -0
  233. package/src/execution/session-reconstructor.ts +678 -0
  234. package/src/execution/session-runner.ts +1789 -0
  235. package/src/execution/sessions-index.ts +304 -0
  236. package/src/execution/spawn-event-adapter.ts +363 -0
  237. package/src/execution/stdin-writer.ts +198 -0
  238. package/src/execution/stream-sink.ts +126 -0
  239. package/src/execution/subagent-service.ts +2268 -0
  240. package/src/execution/subprocess-agent-runner.ts +317 -0
  241. package/src/execution/temp-prompt.ts +62 -0
  242. package/src/execution/tombstone-store.ts +72 -0
  243. package/src/execution/turn-limiter.ts +102 -0
  244. package/src/execution/types.ts +1023 -0
  245. package/src/execution/ui-channels.ts +216 -0
  246. package/src/execution/ui-interaction-model.ts +48 -0
  247. package/src/execution/ui-request-handler-factory.ts +243 -0
  248. package/src/execution/ui-request-observability.ts +81 -0
  249. package/src/execution/ui-request-queue.ts +184 -0
  250. package/src/execution/worktree-manager.ts +688 -0
  251. package/src/execution/worktree-registry.ts +279 -0
  252. package/src/index.ts +87 -0
  253. package/src/orchestration/__tests__/__fixtures__/worker-template.snapshot.txt +349 -0
  254. package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +202 -0
  255. package/src/orchestration/__tests__/agent-call-stream.test.ts +152 -0
  256. package/src/orchestration/__tests__/args-validator.test.ts +143 -0
  257. package/src/orchestration/__tests__/config-loader.test.ts +503 -0
  258. package/src/orchestration/__tests__/error-recovery-handlers.test.ts +809 -0
  259. package/src/orchestration/__tests__/error-recovery-postmessage-defense.test.ts +404 -0
  260. package/src/orchestration/__tests__/error-recovery-serialize-failed-result.test.ts +56 -0
  261. package/src/orchestration/__tests__/error-recovery-workflow-call.test.ts +166 -0
  262. package/src/orchestration/__tests__/execute-agent-call.test.ts +451 -0
  263. package/src/orchestration/__tests__/launcher-nested-workflow.test.ts +600 -0
  264. package/src/orchestration/__tests__/lifecycle-runid-injection.test.ts +96 -0
  265. package/src/orchestration/__tests__/lifecycle.test.ts +659 -0
  266. package/src/orchestration/__tests__/non-cloneable-return-e2e.test.ts +95 -0
  267. package/src/orchestration/__tests__/review-fix-loop-scriptpath-failfast.test.ts +183 -0
  268. package/src/orchestration/__tests__/script-lint.test.ts +831 -0
  269. package/src/orchestration/__tests__/skill-discovery.test.ts +210 -0
  270. package/src/orchestration/__tests__/test-mocks.ts +197 -0
  271. package/src/orchestration/__tests__/worker-exit-without-result.test.ts +368 -0
  272. package/src/orchestration/__tests__/worker-host.test.ts +120 -0
  273. package/src/orchestration/__tests__/worker-returnmeta-passthrough.test.ts +164 -0
  274. package/src/orchestration/__tests__/worker-script-builder-runtime.test.ts +563 -0
  275. package/src/orchestration/__tests__/worker-script-builder.test.ts +309 -0
  276. package/src/orchestration/__tests__/worker-script-template-snapshot.test.ts +129 -0
  277. package/src/orchestration/__tests__/workflow-nesting-e2e.test.ts +317 -0
  278. package/src/orchestration/__tests__/workflow-script-lint-memo.test.ts +110 -0
  279. package/src/orchestration/agent-opts-resolver.ts +174 -0
  280. package/src/orchestration/args-validator.ts +127 -0
  281. package/src/orchestration/config-loader.ts +316 -0
  282. package/src/orchestration/error-recovery.ts +1018 -0
  283. package/src/orchestration/execute-agent-call.ts +256 -0
  284. package/src/orchestration/launcher.ts +455 -0
  285. package/src/orchestration/lifecycle.ts +399 -0
  286. package/src/orchestration/models/__tests__/budget.test.ts +307 -0
  287. package/src/orchestration/models/agent-call.ts +83 -0
  288. package/src/orchestration/models/budget.ts +118 -0
  289. package/src/orchestration/models/ports.ts +164 -0
  290. package/src/orchestration/models/run-runtime.ts +104 -0
  291. package/src/orchestration/models/run-spec.ts +83 -0
  292. package/src/orchestration/models/run-state.ts +44 -0
  293. package/src/orchestration/models/trace.ts +183 -0
  294. package/src/orchestration/models/types.ts +301 -0
  295. package/src/orchestration/models/workflow-run.ts +254 -0
  296. package/src/orchestration/models/workflow-script-registry.ts +35 -0
  297. package/src/orchestration/models/workflow-script.ts +117 -0
  298. package/src/orchestration/script-lint.ts +766 -0
  299. package/src/orchestration/skill-discovery.ts +135 -0
  300. package/src/orchestration/worker-handle.ts +115 -0
  301. package/src/orchestration/worker-host.ts +98 -0
  302. package/src/orchestration/worker-script-builder.ts +421 -0
  303. package/src/orchestration/workflow-files.ts +85 -0
  304. package/src/orchestration/workflow-script-registry-impl.ts +133 -0
  305. package/src/shared/__tests__/agent-ref.test.ts +34 -0
  306. package/src/shared/__tests__/meta-parser.test.ts +304 -0
  307. package/src/shared/__tests__/model-ref.test.ts +306 -0
  308. package/src/shared/__tests__/resource-discovery-manifest-cache.test.ts +288 -0
  309. package/src/shared/__tests__/resource-discovery.test.ts +749 -0
  310. package/src/shared/__tests__/resource-meta.test.ts +51 -0
  311. package/src/shared/__tests__/schema-jsonify.test.ts +81 -0
  312. package/src/shared/__tests__/timer-delay.test.ts +61 -0
  313. package/src/shared/agent-event.ts +13 -0
  314. package/src/shared/agent-ref.ts +57 -0
  315. package/src/shared/meta-parser.ts +261 -0
  316. package/src/shared/model-ref.ts +286 -0
  317. package/src/shared/resource-discovery.ts +835 -0
  318. package/src/shared/resource-meta.ts +65 -0
  319. package/src/shared/schema-env.ts +44 -0
  320. package/src/shared/schema-jsonify.ts +58 -0
  321. package/src/shared/timer-delay.ts +54 -0
  322. package/src/shared/xml-injection.ts +35 -0
  323. package/workflows/README.md +81 -0
  324. package/workflows/_shared/agent-refs.cjs +40 -0
  325. package/workflows/chain.js +137 -0
  326. package/workflows/map-reduce.js +180 -0
  327. package/workflows/parallel.js +154 -0
  328. package/workflows/review-fix-loop-utils.cjs +1542 -0
  329. package/workflows/review-fix-loop.js +1605 -0
  330. package/workflows/scatter-gather.js +184 -0
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # @zhushanwen/subagent-core
2
+
3
+ 跨宿主共享的 subagent 执行层与 workflow 编排核心:pi extension(`@zhushanwen/pi-subagent-workflow`)与 zcode 插件(zsw)双宿主引用同一实现,消灭两套平行实现导致的逻辑漂移。
4
+
5
+ - **双形态包(D4)**:workspace 消费 TS 源(exports 的 `import` 条件指向 `src/`),npm 消费 tsup 产物(dist ESM + CJS,`publishConfig` 在 publish 时整体替换 `exports`)。CJS 产物对 `@xyz-agent/extension-protocol` 设 tsup noExternal 防御性 bundle 边界——其 npm dist 仅 ESM,而 CJS 宿主(zsw,node>=20)的 require 链不能承载外部 ESM 依赖(设计 D4,见本仓 `docs/design/subagent-core-package-extraction.md` §3.3;当前 entry 闭包无 protocol 运行时引用、dist 实测零常量命中,未来一旦引入即 bundle)。其余依赖(ajv / yaml / proper-lockfile)保持外部依赖形态,均为常规 CJS 可 require 的双格式包。
6
+ - **依赖闭包(D3)**:`@xyz-agent/extension-protocol` + `proper-lockfile` + `ajv` + `yaml`;宿主服务(日志 / 数据根 / 发现根 / 通知)经 `HostServices` 端口注入,core 闭包不含 pi SDK。
7
+ - **workflows 资产(D1)**:内置 workflow 脚本(`.js` / `.cjs`)不参与编译,包内 `workflows/` 目录 src=dist 同字节直发,经 `./workflows/*` 子入口按原文件访问。
8
+ - **公共 API 面即 semver 契约(D5)**:breaking 走 major;导出面收窄不放宽,新增导出走 minor。
9
+
10
+ ## 公共 API
11
+
12
+ ### 主入口(`@zhushanwen/subagent-core`)
13
+
14
+ | 导出 | 类别 | 说明 |
15
+ |------|------|------|
16
+ | `configureCore(host)` | fn | 注入宿主服务(`HostServices`);未注入即消费 `dataRoot()` 抛 `core_host_not_configured` |
17
+ | `DEFAULT_DATA_ROOT` | const | core 内建缺省数据根(`~/.subagent-core`),供宿主显式选用(消除缺省静默漂目录) |
18
+ | `HostServices` | type | 宿主服务端口:`dataRoot` / `log` / `discoveryRoots` |
19
+ | `DiscoveryRoot` | type | 发现根条目 `{ dir, source }`(source 标签供遮蔽报告与测试断言) |
20
+ | `getLogger(component)` | fn | facade 代理 logger——每次调用动态解析当前宿主实现,`configureCore` 前后透明切换 |
21
+ | `CoreLogger`, `LogLevel` | type | logger 端口类型(`HostServices.log` 契约成员) |
22
+ | `configureNotifyDomain(ports)` | fn | 注入通知域窄端口(投递内核工厂 + pending 活跃计数),成员可选、缺席降级 |
23
+ | `NotifyDomainPorts` | type | 通知域端口结构(结构化签名,core 不 import 通知实现包) |
24
+ | `EnginePort` | type | subagent 执行引擎唯一契约点(run / interact / read / probe 四能力面) |
25
+ | `RunContext`, `EngineRunResult` | type | `EnginePort.run` 的运行期上下文与结果 |
26
+ | `AgentTaskSpec`, `AgentOutcome`, `AgentEvent` | type | 任务声明 / 执行结果 / 事件流(引擎中立) |
27
+ | `SessionView`, `ReplayedTurn`, `EngineHandle`, `EngineHandleData` | type | 会话视图 / 回放轮次 / 运行句柄 |
28
+ | `EngineCapabilities`, `ProbeReport`, `PersonaSpec` | type | 能力声明 / 探针报告 / persona 声明 |
29
+ | `InteractAction`, `InteractResult` | type | 交互控制面(chatMode message/close/cancel + idle) |
30
+ | `ModelInfo`, `SubagentStream` | type | `RunContext` 成员类型(type-only,`SubagentStream` 由 core 内部构造) |
31
+ | `routeEngine(opts)` | fn | 三层路由(调用参数 > frontmatter > 全局默认)+ probe fallback 编排的单一权威点 |
32
+ | `EngineRouteOptions`, `EngineRouteResult`, `EngineRouting`, `EngineRoutingInput`, `EngineRoutingSource` | type | 路由层类型 |
33
+ | `runWorkflow(spec, deps, signal?)` | fn | workflow run 生命周期入口(返回 runId) |
34
+ | `abortRun(runId, deps, ...)` | fn | 终止 run(done 态 no-op) |
35
+ | `RunSpec`, `LifecycleDeps` | type | `runWorkflow` 参数类型 |
36
+ | `CORE_PACKAGE_VERSION` | const | 包版本常量(与 package.json 同步维护) |
37
+
38
+ ### 语义子入口(双端复用链专用)
39
+
40
+ | 子入口 | 内容 |
41
+ |--------|------|
42
+ | `@zhushanwen/subagent-core/engines/zcode/reader` | zcode 引擎 session 历史读取(`readZcodeSessionView` / `ZcodeReaderError`) |
43
+ | `@zhushanwen/subagent-core/engines/zcode/constants` | zcode 引擎常量(`ZCODE_ENGINE_ID` / 路径后缀 / 缺省模型等) |
44
+ | `@zhushanwen/subagent-core/engine/paths` | 引擎数据目录路径推导(engines 根 / 池目录 / journal 路径) |
45
+ | `@zhushanwen/subagent-core/relay-env` | relay 通道 env 名与协议常量 SSOT(extension / runtime / 代理三方共用) |
46
+
47
+ ### 资产子入口
48
+
49
+ | 子入口 | 内容 |
50
+ |--------|------|
51
+ | `@zhushanwen/subagent-core/workflows/*` | 内置 workflow 脚本原文件(`chain.js` / `parallel.js` / `scatter-gather.js` / `map-reduce.js` / `review-fix-loop.js` + `review-fix-loop-utils.cjs` / `_shared/`),`require` 与 `import` 条件同径(D1 同字节直发) |
52
+
53
+ 仓内壳侧(pi extension)另有 `./* -> src/*` 通配深路径消费(`<pkg>/<域>/<路径>.ts` 形态)——该通配仅仓内保留,npm 发布面刻意收窄到上列受控入口(D5:exports 面即 semver 契约)。语义子入口精确条目优先于通配(Node exact-match-beats-pattern)。
54
+
55
+ ## 宿主接入示例
56
+
57
+ 两段示例同时是 `core_host_not_configured` 错误恢复指引的落点:**看到该错误 = 宿主壳未调 `configureCore`,按下述示例补注入后重试。**
58
+
59
+ ### pi 壳(workspace 引用)
60
+
61
+ 活例:本仓 `extensions/universal/subagent-workflow/src/host/pi-host.ts`(`createPiHostServices`)。要点:`dataRoot` / `discoveryRoots` 每次调用现取 `getAgentDir()`(禁模块级缓存——pi 实例按 session dir 隔离),log 桥接 `@zhushanwen/pi-extension-logger`,notify 桥接 `@xyz-agent/session-delivery` + `@zhushanwen/pi-pending-notifications`。扩展初始化最早处:
62
+
63
+ ```ts
64
+ import { configureCore, configureNotifyDomain } from "@zhushanwen/subagent-core";
65
+ import { createPiHostServices, createPiNotifyDomainPorts } from "./host/pi-host.ts";
66
+
67
+ configureCore(createPiHostServices());
68
+ configureNotifyDomain(createPiNotifyDomainPorts());
69
+ ```
70
+
71
+ ### zsw / 独立宿主(npm 引用,纯 CJS)
72
+
73
+ 最小接入 = `configureCore({ dataRoot, log })` + `getLogger`。错误闭环:未注入时消费 core API 抛 `core_host_not_configured`(错误信息指向本节)→ 按下例补 `configureCore` → 重试:
74
+
75
+ ```js
76
+ // Node >= 20,CommonJS
77
+ const {
78
+ configureCore,
79
+ getLogger,
80
+ DEFAULT_DATA_ROOT,
81
+ } = require("@zhushanwen/subagent-core");
82
+
83
+ configureCore({
84
+ dataRoot() {
85
+ return DEFAULT_DATA_ROOT; // 或宿主自有数据根,如 path.join(os.homedir(), ".zcode", "zsw")
86
+ },
87
+ log(level, component, message, data) {
88
+ // 接宿主日志设施;最小实现可直接走 console(core 缺省 sink:warn/error 走 console、debug no-op)
89
+ (level === "error" ? console.error : console.debug)(`[${component}] ${message}`, data ?? "");
90
+ },
91
+ // discoveryRoots 可选:不传则用 core 内建缺省(user 级 agents/workflows 根)
92
+ });
93
+
94
+ const logger = getLogger("zsw"); // facade:configureCore 前后透明切换宿主实现
95
+ logger.debug("host configured");
96
+ ```
97
+
98
+ ### 失败形态与恢复指引
99
+
100
+ | 错误 | 触发 | 恢复 |
101
+ |------|------|------|
102
+ | `core_host_not_configured` | 未 `configureCore` 即消费 | 按上节示例补注入后重试(错误信息内含指引) |
103
+ | `core_module_load_failed`(require 链) | 安装形态 / node 版本问题 | node 版本要求 >= 20;`rm -rf node_modules && npm i` 重装;确认经包 `exports` 的 `require` 条件加载 dist CJS,而非手工深引 `dist/` 内部路径 |
104
+ | `core_module_load_failed`(worker scriptPath) | workflow worker 启动时 `workerData.scriptPath` 缺失 | D1:workflow 脚本以 **scriptPath 目录锚定**加载——宿主 spawn worker 时必须注入脚本绝对路径(`workerData.scriptPath`),staged / npm 安装布局下无 node_modules 解析面可回退;请检查宿主 worker 宿主点的注入代码,勿改脚本内 require 包名 |
105
+
106
+ ## 构建
107
+
108
+ ```bash
109
+ pnpm run build # tsup 多入口:主入口 + 4 语义子入口保形输出(dist/<entry> 与 src 同构,d.ts/d.cts 全覆盖)
110
+ pnpm run test
111
+ pnpm run typecheck
112
+ ```
113
+
114
+ 发布走本仓 changeset 管线;`publishConfig` 中的发布面与开发态 `exports` 必须同步维护(新增子入口时两处同改)。
@@ -0,0 +1,22 @@
1
+ // src/execution/engine/engines/zcode/constants.ts
2
+ var ZCODE_ENGINE_ID = "zcode";
3
+ var ZCODE_ADAPTER_VERSION = "1.0.0";
4
+ var ZCODE_CLI_DEFAULT_PATH = "/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs";
5
+ var ZCODE_V2_CONFIG_PATH_SUFFIX = [".zcode", "v2", "config.json"];
6
+ var ZCODE_POOL_CONFIG_SUFFIX = [".zcode", "cli", "config.json"];
7
+ var ZCODE_POOL_DB_RELATIVE_PATH = ".zcode/cli/db/db.sqlite";
8
+ var ZCODE_FALLBACK_DEFAULT_MODEL = "builtin:bigmodel-coding-plan/GLM-5.3";
9
+ var ZCODE_KILL_GRACE_MS = 5e3;
10
+ var ZCODE_ERROR_TAIL_CHARS = 2e3;
11
+
12
+ export {
13
+ ZCODE_ENGINE_ID,
14
+ ZCODE_ADAPTER_VERSION,
15
+ ZCODE_CLI_DEFAULT_PATH,
16
+ ZCODE_V2_CONFIG_PATH_SUFFIX,
17
+ ZCODE_POOL_CONFIG_SUFFIX,
18
+ ZCODE_POOL_DB_RELATIVE_PATH,
19
+ ZCODE_FALLBACK_DEFAULT_MODEL,
20
+ ZCODE_KILL_GRACE_MS,
21
+ ZCODE_ERROR_TAIL_CHARS
22
+ };
@@ -0,0 +1,31 @@
1
+ // src/execution/relay-env.ts
2
+ var RELAY_ENV_SOCKET = "XYZ_SUBAGENT_RELAY_SOCKET";
3
+ var RELAY_ENV_NODE = "XYZ_SUBAGENT_RELAY_NODE";
4
+ var RELAY_ENV_SCRIPT = "XYZ_SUBAGENT_RELAY_SCRIPT";
5
+ var RELAY_ENV_SESSION_ID = "XYZ_SUBAGENT_RELAY_SESSION_ID";
6
+ var RELAY_ENV_RECORD_ID = "XYZ_SUBAGENT_RELAY_RECORD_ID";
7
+ var RELAY_PROTOCOL_VERSION = 1;
8
+ var RELAY_EXIT_CODES = {
9
+ /** 握手被拒:协议版本不匹配(安装损坏,重装应用)。 */
10
+ VERSION_MISMATCH: 10,
11
+ /** relay socket 不可达(runtime 未运行或已重启)。 */
12
+ SOCKET_UNREACHABLE: 11,
13
+ /** socket 中途断开(runtime 崩溃等)——代理生命线断即退。 */
14
+ SOCKET_CLOSED: 12,
15
+ /** 归属 env(SESSION_ID/RECORD_ID)缺失——防无归属帧污染广播。 */
16
+ MISSING_IDENTITY: 13
17
+ };
18
+ function isRelayActive(env) {
19
+ return Boolean(env[RELAY_ENV_SOCKET] && env[RELAY_ENV_NODE] && env[RELAY_ENV_SCRIPT]);
20
+ }
21
+
22
+ export {
23
+ RELAY_ENV_SOCKET,
24
+ RELAY_ENV_NODE,
25
+ RELAY_ENV_SCRIPT,
26
+ RELAY_ENV_SESSION_ID,
27
+ RELAY_ENV_RECORD_ID,
28
+ RELAY_PROTOCOL_VERSION,
29
+ RELAY_EXIT_CODES,
30
+ isRelayActive
31
+ };
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/execution/engine/engines/zcode/constants.ts
21
+ var constants_exports = {};
22
+ __export(constants_exports, {
23
+ ZCODE_ADAPTER_VERSION: () => ZCODE_ADAPTER_VERSION,
24
+ ZCODE_CLI_DEFAULT_PATH: () => ZCODE_CLI_DEFAULT_PATH,
25
+ ZCODE_ENGINE_ID: () => ZCODE_ENGINE_ID,
26
+ ZCODE_ERROR_TAIL_CHARS: () => ZCODE_ERROR_TAIL_CHARS,
27
+ ZCODE_FALLBACK_DEFAULT_MODEL: () => ZCODE_FALLBACK_DEFAULT_MODEL,
28
+ ZCODE_KILL_GRACE_MS: () => ZCODE_KILL_GRACE_MS,
29
+ ZCODE_POOL_CONFIG_SUFFIX: () => ZCODE_POOL_CONFIG_SUFFIX,
30
+ ZCODE_POOL_DB_RELATIVE_PATH: () => ZCODE_POOL_DB_RELATIVE_PATH,
31
+ ZCODE_V2_CONFIG_PATH_SUFFIX: () => ZCODE_V2_CONFIG_PATH_SUFFIX
32
+ });
33
+ module.exports = __toCommonJS(constants_exports);
34
+ var ZCODE_ENGINE_ID = "zcode";
35
+ var ZCODE_ADAPTER_VERSION = "1.0.0";
36
+ var ZCODE_CLI_DEFAULT_PATH = "/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs";
37
+ var ZCODE_V2_CONFIG_PATH_SUFFIX = [".zcode", "v2", "config.json"];
38
+ var ZCODE_POOL_CONFIG_SUFFIX = [".zcode", "cli", "config.json"];
39
+ var ZCODE_POOL_DB_RELATIVE_PATH = ".zcode/cli/db/db.sqlite";
40
+ var ZCODE_FALLBACK_DEFAULT_MODEL = "builtin:bigmodel-coding-plan/GLM-5.3";
41
+ var ZCODE_KILL_GRACE_MS = 5e3;
42
+ var ZCODE_ERROR_TAIL_CHARS = 2e3;
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ ZCODE_ADAPTER_VERSION,
46
+ ZCODE_CLI_DEFAULT_PATH,
47
+ ZCODE_ENGINE_ID,
48
+ ZCODE_ERROR_TAIL_CHARS,
49
+ ZCODE_FALLBACK_DEFAULT_MODEL,
50
+ ZCODE_KILL_GRACE_MS,
51
+ ZCODE_POOL_CONFIG_SUFFIX,
52
+ ZCODE_POOL_DB_RELATIVE_PATH,
53
+ ZCODE_V2_CONFIG_PATH_SUFFIX
54
+ });
@@ -0,0 +1,31 @@
1
+ /** zcode 引擎的 registry key。 */
2
+ declare const ZCODE_ENGINE_ID = "zcode";
3
+ /** zcode 适配器版本(handle.adapterVersion 数据源——golden 样本对齐排查锚点)。 */
4
+ declare const ZCODE_ADAPTER_VERSION = "1.0.0";
5
+ /**
6
+ * zcode CLI 缺省路径(12.4MB node bundle,不在 PATH——2026-08-25 实测)。
7
+ * 组合根可用 deps.cliPath 覆盖(测试注入 / 未来安装形态变化)。
8
+ */
9
+ declare const ZCODE_CLI_DEFAULT_PATH = "/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs";
10
+ /**
11
+ * 唯一凭据源 config(桌面端登录态,zsub V2_CONFIG_PATH 同构)。
12
+ * 为什么绝不读 ~/.zcode/cli/config.json:它不在 ZCode GUI 管理面,可能残留历史
13
+ * 验证配置(2026-08-25 事故:8/24 zsub 开发残留把默认模型劫持到失效 router 端点,
14
+ * turn 0 即 401);桌面端登录凭据落在 v2/config.json,是 zsub 生产验证过的凭据源。
15
+ */
16
+ declare const ZCODE_V2_CONFIG_PATH_SUFFIX: readonly [".zcode", "v2", "config.json"];
17
+ /** 池内 config.json 相对隔离 HOME 的位置(CLI 只读 $HOME/.zcode/cli/config.json)。 */
18
+ declare const ZCODE_POOL_CONFIG_SUFFIX: readonly [".zcode", "cli", "config.json"];
19
+ /**
20
+ * 池内 db.sqlite 相对隔离 HOME 的位置(handle.sessionRef.dbPath 的值——相对池目录
21
+ * 自描述,read 时经 resolvePoolDir + 该相对路径重定位,设计 §3.3.6)。
22
+ */
23
+ declare const ZCODE_POOL_DB_RELATIVE_PATH = ".zcode/cli/db/db.sqlite";
24
+ /** zsub 同构的兜底缺省模型(v2 config 无 model.main 且 task 未指定时)。 */
25
+ declare const ZCODE_FALLBACK_DEFAULT_MODEL = "builtin:bigmodel-coding-plan/GLM-5.3";
26
+ /** 杀链 grace 窗口:SIGTERM 后等这么久再 SIGKILL(zsub 同构 5s;实测 SIGTERM→exit 仅 103ms)。 */
27
+ declare const ZCODE_KILL_GRACE_MS = 5000;
28
+ /** 错误信息里保留的 stdout 尾部长度(engine_run_failed 规格:够诊断、不刷屏)。 */
29
+ declare const ZCODE_ERROR_TAIL_CHARS = 2000;
30
+
31
+ export { ZCODE_ADAPTER_VERSION, ZCODE_CLI_DEFAULT_PATH, ZCODE_ENGINE_ID, ZCODE_ERROR_TAIL_CHARS, ZCODE_FALLBACK_DEFAULT_MODEL, ZCODE_KILL_GRACE_MS, ZCODE_POOL_CONFIG_SUFFIX, ZCODE_POOL_DB_RELATIVE_PATH, ZCODE_V2_CONFIG_PATH_SUFFIX };
@@ -0,0 +1,31 @@
1
+ /** zcode 引擎的 registry key。 */
2
+ declare const ZCODE_ENGINE_ID = "zcode";
3
+ /** zcode 适配器版本(handle.adapterVersion 数据源——golden 样本对齐排查锚点)。 */
4
+ declare const ZCODE_ADAPTER_VERSION = "1.0.0";
5
+ /**
6
+ * zcode CLI 缺省路径(12.4MB node bundle,不在 PATH——2026-08-25 实测)。
7
+ * 组合根可用 deps.cliPath 覆盖(测试注入 / 未来安装形态变化)。
8
+ */
9
+ declare const ZCODE_CLI_DEFAULT_PATH = "/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs";
10
+ /**
11
+ * 唯一凭据源 config(桌面端登录态,zsub V2_CONFIG_PATH 同构)。
12
+ * 为什么绝不读 ~/.zcode/cli/config.json:它不在 ZCode GUI 管理面,可能残留历史
13
+ * 验证配置(2026-08-25 事故:8/24 zsub 开发残留把默认模型劫持到失效 router 端点,
14
+ * turn 0 即 401);桌面端登录凭据落在 v2/config.json,是 zsub 生产验证过的凭据源。
15
+ */
16
+ declare const ZCODE_V2_CONFIG_PATH_SUFFIX: readonly [".zcode", "v2", "config.json"];
17
+ /** 池内 config.json 相对隔离 HOME 的位置(CLI 只读 $HOME/.zcode/cli/config.json)。 */
18
+ declare const ZCODE_POOL_CONFIG_SUFFIX: readonly [".zcode", "cli", "config.json"];
19
+ /**
20
+ * 池内 db.sqlite 相对隔离 HOME 的位置(handle.sessionRef.dbPath 的值——相对池目录
21
+ * 自描述,read 时经 resolvePoolDir + 该相对路径重定位,设计 §3.3.6)。
22
+ */
23
+ declare const ZCODE_POOL_DB_RELATIVE_PATH = ".zcode/cli/db/db.sqlite";
24
+ /** zsub 同构的兜底缺省模型(v2 config 无 model.main 且 task 未指定时)。 */
25
+ declare const ZCODE_FALLBACK_DEFAULT_MODEL = "builtin:bigmodel-coding-plan/GLM-5.3";
26
+ /** 杀链 grace 窗口:SIGTERM 后等这么久再 SIGKILL(zsub 同构 5s;实测 SIGTERM→exit 仅 103ms)。 */
27
+ declare const ZCODE_KILL_GRACE_MS = 5000;
28
+ /** 错误信息里保留的 stdout 尾部长度(engine_run_failed 规格:够诊断、不刷屏)。 */
29
+ declare const ZCODE_ERROR_TAIL_CHARS = 2000;
30
+
31
+ export { ZCODE_ADAPTER_VERSION, ZCODE_CLI_DEFAULT_PATH, ZCODE_ENGINE_ID, ZCODE_ERROR_TAIL_CHARS, ZCODE_FALLBACK_DEFAULT_MODEL, ZCODE_KILL_GRACE_MS, ZCODE_POOL_CONFIG_SUFFIX, ZCODE_POOL_DB_RELATIVE_PATH, ZCODE_V2_CONFIG_PATH_SUFFIX };
@@ -0,0 +1,22 @@
1
+ import {
2
+ ZCODE_ADAPTER_VERSION,
3
+ ZCODE_CLI_DEFAULT_PATH,
4
+ ZCODE_ENGINE_ID,
5
+ ZCODE_ERROR_TAIL_CHARS,
6
+ ZCODE_FALLBACK_DEFAULT_MODEL,
7
+ ZCODE_KILL_GRACE_MS,
8
+ ZCODE_POOL_CONFIG_SUFFIX,
9
+ ZCODE_POOL_DB_RELATIVE_PATH,
10
+ ZCODE_V2_CONFIG_PATH_SUFFIX
11
+ } from "../../../../chunk-3VOERJPJ.js";
12
+ export {
13
+ ZCODE_ADAPTER_VERSION,
14
+ ZCODE_CLI_DEFAULT_PATH,
15
+ ZCODE_ENGINE_ID,
16
+ ZCODE_ERROR_TAIL_CHARS,
17
+ ZCODE_FALLBACK_DEFAULT_MODEL,
18
+ ZCODE_KILL_GRACE_MS,
19
+ ZCODE_POOL_CONFIG_SUFFIX,
20
+ ZCODE_POOL_DB_RELATIVE_PATH,
21
+ ZCODE_V2_CONFIG_PATH_SUFFIX
22
+ };
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/execution/engine/engines/zcode/reader.ts
31
+ var reader_exports = {};
32
+ __export(reader_exports, {
33
+ ZcodeReaderError: () => ZcodeReaderError,
34
+ readZcodeSessionView: () => readZcodeSessionView
35
+ });
36
+ module.exports = __toCommonJS(reader_exports);
37
+ var fs = __toESM(require("fs"), 1);
38
+
39
+ // src/execution/engine/engines/zcode/constants.ts
40
+ var ZCODE_ENGINE_ID = "zcode";
41
+
42
+ // src/execution/engine/engines/zcode/reader.ts
43
+ var ZcodeReaderError = class extends Error {
44
+ code;
45
+ /** 原始失败细节(缺文件/表漂移/运行时不支持)。 */
46
+ detail;
47
+ constructor(detail, hint) {
48
+ super(
49
+ `[engine_session_read_failed] zcode \u539F\u751F session \u8BFB\u53D6\u5931\u8D25\uFF1A${detail}\u3002` + (hint ?? "\u8C03\u7528\u65B9\u5E94\u964D\u7EA7\u5230\u7B2C\u2461\u7EA7\uFF08\u5BBF\u4E3B event journal\uFF09\u6216\u7B2C\u2462\u7EA7\uFF08outcome-only\uFF09\u3002")
50
+ );
51
+ this.name = "ZcodeReaderError";
52
+ this.code = "engine_session_read_failed";
53
+ this.detail = detail;
54
+ }
55
+ };
56
+ function parseJsonField(raw, ctx) {
57
+ try {
58
+ const v = JSON.parse(raw);
59
+ return typeof v === "object" && v !== null && !Array.isArray(v) ? v : void 0;
60
+ } catch (err) {
61
+ throw new ZcodeReaderError(
62
+ `${ctx} \u884C data \u4E0D\u662F\u5408\u6CD5 JSON\uFF08${err instanceof Error ? err.message : String(err)}\uFF09`,
63
+ "db \u5185\u5BB9\u635F\u574F\u6216\u7248\u672C\u4E0D\u517C\u5BB9\u2014\u2014\u8C03\u7528\u65B9\u5E94\u964D\u7EA7\u5230\u7B2C\u2461\u7EA7\uFF08\u5BBF\u4E3B event journal\uFF09\u3002"
64
+ );
65
+ }
66
+ }
67
+ function finiteOr(v, fallback) {
68
+ const n = typeof v === "number" ? v : Number(v);
69
+ return Number.isFinite(n) ? n : fallback;
70
+ }
71
+ function usageFromStepFinish(part) {
72
+ const tokens = part.tokens;
73
+ if (typeof tokens !== "object" || tokens === null) return void 0;
74
+ const t = tokens;
75
+ const cache = typeof t.cache === "object" && t.cache !== null ? t.cache : {};
76
+ if (t.input === void 0 && t.output === void 0) return void 0;
77
+ return {
78
+ input: finiteOr(t.input, 0),
79
+ output: finiteOr(t.output, 0),
80
+ cacheRead: finiteOr(cache.read, 0),
81
+ cacheWrite: finiteOr(cache.write, 0)
82
+ };
83
+ }
84
+ function toolFromPart(part) {
85
+ const toolName = typeof part.tool === "string" ? part.tool : "unknown";
86
+ let state;
87
+ if (typeof part.state === "string") {
88
+ try {
89
+ const v = JSON.parse(part.state);
90
+ state = typeof v === "object" && v !== null ? v : void 0;
91
+ } catch {
92
+ state = void 0;
93
+ }
94
+ }
95
+ const status = typeof state?.status === "string" ? state.status : "unknown";
96
+ const output = state?.output;
97
+ return {
98
+ toolName,
99
+ ...state?.input !== void 0 ? { args: state.input } : {},
100
+ // 输出形态(实测):string(内容)或 object(结构化)——分别映射到 pi ToolCallResult
101
+ // 的 content[] / details,不发明第二形状
102
+ ...typeof output === "string" ? { result: { content: [output] } } : {},
103
+ ...typeof output === "object" && output !== null ? { result: { details: output } } : {},
104
+ ...status !== "completed" ? { isError: true } : {}
105
+ };
106
+ }
107
+ var TotalsAcc = class {
108
+ input = 0;
109
+ output = 0;
110
+ cacheRead = 0;
111
+ cacheWrite = 0;
112
+ cost = 0;
113
+ has = false;
114
+ add(u) {
115
+ this.has = true;
116
+ this.input += u.input;
117
+ this.output += u.output;
118
+ this.cacheRead += u.cacheRead;
119
+ this.cacheWrite += u.cacheWrite;
120
+ this.cost += u.cost ?? 0;
121
+ }
122
+ toTotal() {
123
+ if (!this.has) return void 0;
124
+ return {
125
+ input: this.input,
126
+ output: this.output,
127
+ cacheRead: this.cacheRead,
128
+ cacheWrite: this.cacheWrite,
129
+ cost: this.cost,
130
+ total: this.input + this.output + this.cacheRead + this.cacheWrite
131
+ };
132
+ }
133
+ };
134
+ function closeTurn(acc, turns, totals) {
135
+ if (acc === null) return;
136
+ turns.push({ text: acc.text, thinking: acc.thinking, toolCalls: acc.toolCalls, closed: true });
137
+ if (acc.usageDelta !== void 0) totals.add(acc.usageDelta);
138
+ }
139
+ function rowToMessageRow(v) {
140
+ if (typeof v === "object" && v !== null && "id" in v && "data" in v) {
141
+ const r = v;
142
+ if (typeof r.id === "string" && typeof r.data === "string") return { id: r.id, data: r.data };
143
+ }
144
+ throw new ZcodeReaderError("message \u884C\u5F62\u72B6\u5F02\u5E38\uFF08id/data \u5217\u7F3A\u5931\u6216\u7C7B\u578B\u6F02\u79FB\uFF09");
145
+ }
146
+ function rowToPartRow(v) {
147
+ if (typeof v === "object" && v !== null && "data" in v) {
148
+ const r = v;
149
+ if (typeof r.data === "string") return { data: r.data };
150
+ }
151
+ throw new ZcodeReaderError("part \u884C\u5F62\u72B6\u5F02\u5E38\uFF08data \u5217\u7F3A\u5931\u6216\u7C7B\u578B\u6F02\u79FB\uFF09");
152
+ }
153
+ function resolveSessionId(db, sessionId) {
154
+ if (sessionId !== void 0) {
155
+ const hit = db.prepare("SELECT id FROM session WHERE id = ?").get(sessionId);
156
+ if (hit === void 0) {
157
+ throw new ZcodeReaderError(
158
+ `session \u4E0D\u5B58\u5728\uFF1A${sessionId}`,
159
+ "sessionId \u53EF\u80FD\u6765\u81EA\u5DF2\u6E05\u7406\u7684\u6C60\u2014\u2014\u964D\u7EA7\u5230 outcome-only\u3002"
160
+ );
161
+ }
162
+ return sessionId;
163
+ }
164
+ const latest = db.prepare("SELECT id FROM session ORDER BY time_created DESC LIMIT 1").get();
165
+ if (latest === void 0 || typeof latest.id !== "string") {
166
+ throw new ZcodeReaderError("db \u5185\u65E0\u4EFB\u4F55 session \u884C");
167
+ }
168
+ return latest.id;
169
+ }
170
+ function loadGroupedParts(db, sessionId) {
171
+ const grouped = /* @__PURE__ */ new Map();
172
+ for (const raw of db.prepare(
173
+ "SELECT part.message_id AS mid, part.data AS data FROM part JOIN message ON part.message_id = message.id WHERE part.session_id = ? ORDER BY message.sequence, part.sequence"
174
+ ).all(sessionId)) {
175
+ if (typeof raw !== "object" || raw === null || !("mid" in raw)) continue;
176
+ const mid = String(raw.mid);
177
+ const arr = grouped.get(mid) ?? [];
178
+ arr.push(rowToPartRow(raw));
179
+ grouped.set(mid, arr);
180
+ }
181
+ return grouped;
182
+ }
183
+ function appendPartText(current, part) {
184
+ return current === "" ? String(part.text ?? "") : current + "\n" + String(part.text ?? "");
185
+ }
186
+ function applyPartToTurn(part, acc, turns, totals) {
187
+ switch (part.type) {
188
+ case "text":
189
+ acc = acc ?? { text: "", thinking: "", toolCalls: [] };
190
+ acc.text = appendPartText(acc.text, part);
191
+ return acc;
192
+ case "reasoning":
193
+ acc = acc ?? { text: "", thinking: "", toolCalls: [] };
194
+ acc.thinking = appendPartText(acc.thinking, part);
195
+ return acc;
196
+ case "tool":
197
+ acc = acc ?? { text: "", thinking: "", toolCalls: [] };
198
+ acc.toolCalls.push(toolFromPart(part));
199
+ return acc;
200
+ case "step-finish": {
201
+ const u = usageFromStepFinish(part);
202
+ const cost = finiteOr(part.cost, 0);
203
+ if (acc === null) acc = { text: "", thinking: "", toolCalls: [] };
204
+ if (u !== void 0) acc.usageDelta = cost > 0 ? { ...u, cost } : u;
205
+ closeTurn(acc, turns, totals);
206
+ return null;
207
+ }
208
+ default:
209
+ return acc;
210
+ }
211
+ }
212
+ function collectTurns(messages, grouped, totals) {
213
+ const turns = [];
214
+ for (const msg of messages) {
215
+ const parsedMsg = parseJsonField(msg.data, "message");
216
+ if (parsedMsg?.role !== "assistant") continue;
217
+ let acc = null;
218
+ for (const partRow of grouped.get(msg.id) ?? []) {
219
+ const part = parseJsonField(partRow.data, "part");
220
+ if (part === void 0) continue;
221
+ acc = applyPartToTurn(part, acc, turns, totals);
222
+ }
223
+ closeTurn(acc, turns, totals);
224
+ }
225
+ return turns;
226
+ }
227
+ function buildView(db, sessionId) {
228
+ const messages = db.prepare("SELECT id, data FROM message WHERE session_id = ? ORDER BY sequence").all(sessionId).map(rowToMessageRow);
229
+ const totals = new TotalsAcc();
230
+ const turns = collectTurns(messages, loadGroupedParts(db, sessionId), totals);
231
+ const usageTotal = totals.toTotal();
232
+ return {
233
+ engineId: ZCODE_ENGINE_ID,
234
+ sessionId,
235
+ ...usageTotal !== void 0 ? { usage: usageTotal } : {},
236
+ turns,
237
+ source: "native"
238
+ };
239
+ }
240
+ async function readZcodeSessionView(dbPath, sessionId) {
241
+ if (!fs.existsSync(dbPath)) {
242
+ throw new ZcodeReaderError(`db \u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${dbPath}`);
243
+ }
244
+ const sqliteModuleId = "node:sqlite";
245
+ const sqliteMod = await import(sqliteModuleId).catch(() => void 0);
246
+ const DatabaseSyncCtor = sqliteMod?.DatabaseSync;
247
+ if (typeof DatabaseSyncCtor !== "function") {
248
+ throw new ZcodeReaderError(
249
+ "\u5F53\u524D node \u8FD0\u884C\u65F6\u4E0D\u652F\u6301 node:sqlite\uFF08\u9700 >=22.13\uFF09",
250
+ "\u5347\u7EA7 node \u6216\u6539\u7528\u7B2C\u2461\u7EA7\uFF08\u5BBF\u4E3B event journal\uFF09\u8BFB\u53D6\u3002"
251
+ );
252
+ }
253
+ const open = DatabaseSyncCtor;
254
+ let db;
255
+ try {
256
+ db = new open(dbPath, { readOnly: true });
257
+ return buildView(db, resolveSessionId(db, sessionId));
258
+ } catch (err) {
259
+ if (err instanceof ZcodeReaderError) throw err;
260
+ throw new ZcodeReaderError(
261
+ `sqlite \u67E5\u8BE2\u5931\u8D25\uFF08${err instanceof Error ? err.message : String(err)}\uFF09`,
262
+ "\u7591\u4F3C\u8868\u7ED3\u6784\u6F02\u79FB\uFF08zcode schema_migration \u5347\u7EA7\uFF09\u2014\u2014\u8C03\u7528\u65B9\u5E94\u964D\u7EA7\u5230\u7B2C\u2461\u7EA7\uFF1B\u5E76\u628A\u65B0 schema \u6837\u672C\u8865\u5F55\u8FDB golden \u5E93\u540E\u66F4\u65B0 reader\u3002"
263
+ );
264
+ } finally {
265
+ try {
266
+ db?.close();
267
+ } catch (err) {
268
+ void err;
269
+ }
270
+ }
271
+ }
272
+ // Annotate the CommonJS export names for ESM import in node:
273
+ 0 && (module.exports = {
274
+ ZcodeReaderError,
275
+ readZcodeSessionView
276
+ });
@@ -0,0 +1,20 @@
1
+ import { S as SessionView } from '../../../../types-BxyAidGf.cjs';
2
+
3
+ type ZcodeReaderErrorCode = "engine_session_read_failed";
4
+ declare class ZcodeReaderError extends Error {
5
+ readonly code: ZcodeReaderErrorCode;
6
+ /** 原始失败细节(缺文件/表漂移/运行时不支持)。 */
7
+ readonly detail: string;
8
+ constructor(detail: string, hint?: string);
9
+ }
10
+ /**
11
+ * 读取 zcode session 的引擎中立视图(read 第①级)。
12
+ *
13
+ * @param dbPath db.sqlite 绝对路径(引擎 read() 由 handle 解析后传入)
14
+ * @param sessionId 目标 session;缺省取池内最新(time_created DESC 首行)
15
+ * @throws ZcodeReaderError db 缺失/表漂移/node:sqlite 不可用/session 不存在——
16
+ * 结构化错误供调用方走降级链②③级
17
+ */
18
+ declare function readZcodeSessionView(dbPath: string, sessionId?: string): Promise<SessionView>;
19
+
20
+ export { ZcodeReaderError, type ZcodeReaderErrorCode, readZcodeSessionView };
@@ -0,0 +1,20 @@
1
+ import { S as SessionView } from '../../../../types-BxyAidGf.js';
2
+
3
+ type ZcodeReaderErrorCode = "engine_session_read_failed";
4
+ declare class ZcodeReaderError extends Error {
5
+ readonly code: ZcodeReaderErrorCode;
6
+ /** 原始失败细节(缺文件/表漂移/运行时不支持)。 */
7
+ readonly detail: string;
8
+ constructor(detail: string, hint?: string);
9
+ }
10
+ /**
11
+ * 读取 zcode session 的引擎中立视图(read 第①级)。
12
+ *
13
+ * @param dbPath db.sqlite 绝对路径(引擎 read() 由 handle 解析后传入)
14
+ * @param sessionId 目标 session;缺省取池内最新(time_created DESC 首行)
15
+ * @throws ZcodeReaderError db 缺失/表漂移/node:sqlite 不可用/session 不存在——
16
+ * 结构化错误供调用方走降级链②③级
17
+ */
18
+ declare function readZcodeSessionView(dbPath: string, sessionId?: string): Promise<SessionView>;
19
+
20
+ export { ZcodeReaderError, type ZcodeReaderErrorCode, readZcodeSessionView };