@zhushanwen/subagent-core 0.6.0 → 0.7.1

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 (278) hide show
  1. package/README.md +1 -1
  2. package/dist/chunk-KXVBIVOU.js +16 -0
  3. package/dist/chunk-T2SYBW3I.js +24 -0
  4. package/dist/chunk-VURUAGMM.js +2305 -0
  5. package/dist/{types-C3fE3R9x.d.cts → engine-discovery-scan-ocpM8FmI.d.cts} +770 -668
  6. package/dist/{types-C3fE3R9x.d.ts → engine-discovery-scan-ocpM8FmI.d.ts} +770 -668
  7. package/dist/execution/engine/engine-discovery-scan.cjs +2210 -0
  8. package/dist/execution/engine/engine-discovery-scan.d.cts +4 -0
  9. package/dist/execution/engine/engine-discovery-scan.d.ts +4 -0
  10. package/dist/execution/engine/engine-discovery-scan.js +20 -0
  11. package/dist/execution/engine/paths.cjs +6 -23
  12. package/dist/execution/engine/paths.d.cts +1 -8
  13. package/dist/execution/engine/paths.d.ts +1 -8
  14. package/dist/execution/engine/paths.js +1 -1
  15. package/dist/execution/relay-env.cjs +12 -28
  16. package/dist/execution/relay-env.d.cts +1 -33
  17. package/dist/execution/relay-env.d.ts +1 -33
  18. package/dist/execution/relay-env.js +5 -3
  19. package/dist/index.cjs +14045 -16059
  20. package/dist/index.d.cts +1035 -1579
  21. package/dist/index.d.ts +1035 -1579
  22. package/dist/index.js +9838 -13800
  23. package/dist.bundle/index.cjs +28875 -30323
  24. package/package.json +20 -26
  25. package/src/__tests__/record-store-last-line.test.ts +16 -7
  26. package/src/core/error-message.ts +7 -6
  27. package/src/core/host-services.ts +8 -2
  28. package/src/core/notify-ports.ts +17 -2
  29. package/src/execution/__tests__/chat-engine-routing.test.ts +62 -28
  30. package/src/execution/__tests__/chat-round-first-round-watchdog.test.ts +255 -0
  31. package/src/execution/__tests__/collect-coordinator-service.test.ts +36 -47
  32. package/src/execution/__tests__/collect-mixed-dispatch.test.ts +20 -53
  33. package/src/execution/__tests__/delivery-methods.test.ts +179 -237
  34. package/src/execution/__tests__/execute-and-await-worktree.test.ts +0 -2
  35. package/src/execution/__tests__/execute-nesting.test.ts +20 -13
  36. package/src/execution/__tests__/explicit-agent-ref-guard.test.ts +20 -33
  37. package/src/execution/__tests__/gc-timer.test.ts +7 -22
  38. package/src/execution/__tests__/get-record-for-action-restart.test.ts +20 -10
  39. package/src/execution/__tests__/helpers/fake-engine-port.ts +187 -0
  40. package/src/execution/__tests__/helpers/spawn-mock.ts +36 -9
  41. package/src/execution/__tests__/helpers/subagent-service-mocks.ts +1 -1
  42. package/src/execution/__tests__/idle-gc.test.ts +200 -0
  43. package/src/execution/__tests__/lifecycle-predicates.test.ts +26 -21
  44. package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +5 -2
  45. package/src/execution/__tests__/reconcile-sweep.test.ts +200 -0
  46. package/src/execution/__tests__/record-store.test.ts +60 -6
  47. package/src/execution/__tests__/recursive-visibility-baseline.test.ts +20 -13
  48. package/src/execution/__tests__/round-supervisor.test.ts +293 -0
  49. package/src/execution/__tests__/session-pending.test.ts +119 -17
  50. package/src/execution/__tests__/stream-sink-retirement.test.ts +10 -10
  51. package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +1 -11
  52. package/src/execution/__tests__/subagent-service-notify-gate.test.ts +33 -30
  53. package/src/execution/__tests__/subagent-service-parent-guard.test.ts +2 -9
  54. package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +59 -129
  55. package/src/execution/__tests__/subagent-service.test.ts +2 -2
  56. package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +109 -7
  57. package/src/execution/__tests__/subprocess-agent-runner.test.ts +108 -36
  58. package/src/execution/__tests__/sync-collect-recovery.test.ts +21 -36
  59. package/src/execution/__tests__/workflow-state-root.test.ts +232 -0
  60. package/src/execution/agent-registry.ts +6 -2
  61. package/src/execution/dialog-queue.ts +6 -73
  62. package/src/execution/engine/__tests__/common/capability-gate.test.ts +115 -15
  63. package/src/execution/engine/__tests__/common/errors.test.ts +11 -18
  64. package/src/execution/engine/__tests__/common/kill-chain.test.ts +7 -0
  65. package/src/execution/engine/__tests__/common/nesting-guard.test.ts +9 -3
  66. package/src/execution/engine/__tests__/common/session-view-service.test.ts +90 -3
  67. package/src/execution/engine/__tests__/conformance/H9-test-disposition.md +116 -0
  68. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/fake-engine-protocol.mjs +377 -0
  69. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/recorded.fixture.json +331 -0
  70. package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/smoke-run.fixture.json +213 -0
  71. package/src/execution/engine/__tests__/conformance/chat-round-protocol.test.ts +230 -0
  72. package/src/execution/engine/__tests__/conformance/contract.abort.test.ts +69 -42
  73. package/src/execution/engine/__tests__/conformance/contract.agent-events.test.ts +4 -81
  74. package/src/execution/engine/__tests__/conformance/contract.probe.test.ts +67 -44
  75. package/src/execution/engine/__tests__/conformance/contract.read-degradation.test.ts +81 -54
  76. package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +133 -70
  77. package/src/execution/engine/__tests__/conformance/engine-crash.test.ts +143 -0
  78. package/src/execution/engine/__tests__/conformance/fake-engine-capabilities.ts +19 -0
  79. package/src/execution/engine/__tests__/conformance/golden-replay.pi.test.ts +7 -2
  80. package/src/execution/engine/__tests__/conformance/golden-replay.zcode.test.ts +6 -5
  81. package/src/execution/engine/__tests__/conformance/protocol-blackbox.test.ts +398 -0
  82. package/src/execution/engine/__tests__/conformance/registry-fork-filter.test.ts +221 -0
  83. package/src/execution/engine/__tests__/conformance/round-liveness-supervisor.test.ts +302 -0
  84. package/src/execution/engine/__tests__/conformance/static-spawn-guard.test.ts +58 -0
  85. package/src/execution/engine/__tests__/engine-discovery-scan.test.ts +558 -0
  86. package/src/execution/engine/__tests__/host-task-spec.test.ts +45 -0
  87. package/src/execution/engine/__tests__/model-ref-split.test.ts +74 -0
  88. package/src/execution/engine/__tests__/registry.test.ts +206 -1
  89. package/src/execution/engine/__tests__/routing.test.ts +97 -0
  90. package/src/execution/engine/__tests__/run-failure-worktree-cleanup.test.ts +97 -0
  91. package/src/execution/engine/client/__tests__/__fixtures__/fake-engine.mjs +294 -0
  92. package/src/execution/engine/client/__tests__/engine-client.test.ts +516 -0
  93. package/src/execution/engine/client/__tests__/mirror.test.ts +67 -0
  94. package/src/execution/engine/client/__tests__/pid-file.test.ts +257 -0
  95. package/src/execution/engine/client/__tests__/protocol-closure.test.ts +95 -0
  96. package/src/execution/engine/client/__tests__/remote-engine.test.ts +457 -0
  97. package/src/execution/engine/client/client-options.ts +103 -0
  98. package/src/execution/engine/client/engine-client.ts +687 -0
  99. package/src/execution/engine/client/mirror.ts +167 -0
  100. package/src/execution/engine/client/pid-file.ts +392 -0
  101. package/src/execution/engine/client/reaper.ts +95 -0
  102. package/src/execution/engine/client/remote-engine.ts +441 -0
  103. package/src/execution/engine/client/reverse-router.ts +255 -0
  104. package/src/execution/engine/common/capability-gate.ts +109 -22
  105. package/src/execution/engine/common/errors.ts +9 -25
  106. package/src/execution/engine/common/event-journal.ts +4 -50
  107. package/src/execution/engine/common/journal-replay.ts +3 -1
  108. package/src/execution/engine/common/kill-chain.ts +18 -251
  109. package/src/execution/engine/common/nesting-guard.ts +18 -114
  110. package/src/execution/engine/common/pool-manager.ts +4 -0
  111. package/src/execution/engine/common/session-view-service.ts +56 -84
  112. package/src/execution/engine/config.ts +151 -0
  113. package/src/execution/engine/d8-compat.ts +346 -0
  114. package/src/execution/engine/engine-discovery-roots.ts +107 -0
  115. package/src/execution/engine/engine-discovery-scan.ts +269 -0
  116. package/src/execution/engine/engine-discovery.ts +30 -7
  117. package/src/execution/engine/engine-inspect-package.ts +282 -0
  118. package/src/execution/engine/engine-manifest.ts +244 -0
  119. package/src/execution/engine/host/__tests__/host-askuser-endpoint.test.ts +123 -0
  120. package/src/execution/engine/host/__tests__/host-bridge.test.ts +135 -0
  121. package/src/execution/engine/host/__tests__/spawned-children.test.ts +73 -0
  122. package/src/execution/engine/host/host-bridge.ts +150 -0
  123. package/src/execution/engine/host/host-ui-endpoint.ts +47 -0
  124. package/src/execution/engine/host/pi-host-binding.ts +91 -0
  125. package/src/execution/engine/host/spawned-children.ts +139 -0
  126. package/src/execution/engine/host-task-spec.ts +29 -2
  127. package/src/execution/engine/model-validation.ts +55 -2
  128. package/src/execution/engine/paths.ts +16 -41
  129. package/src/execution/engine/port.ts +48 -2
  130. package/src/execution/engine/registry.ts +153 -34
  131. package/src/execution/engine/routing.ts +225 -52
  132. package/src/execution/engine/types.ts +25 -200
  133. package/src/execution/finalize-record.ts +25 -0
  134. package/src/execution/idle-gc.ts +89 -14
  135. package/src/execution/lifecycle-manager.ts +10 -7
  136. package/src/execution/lifecycle-predicates.ts +10 -8
  137. package/src/execution/record-store.ts +29 -2
  138. package/src/execution/relay-env.ts +19 -36
  139. package/src/execution/round-supervisor/domain.ts +89 -0
  140. package/src/execution/round-supervisor/index.ts +33 -0
  141. package/src/execution/round-supervisor/notify-accounting.ts +87 -0
  142. package/src/execution/round-supervisor/reconcile-sweep.ts +235 -0
  143. package/src/execution/round-supervisor/service-binding.test.ts +661 -0
  144. package/src/execution/round-supervisor/service-binding.ts +273 -0
  145. package/src/execution/round-supervisor/supervisor.ts +426 -0
  146. package/src/execution/session-pending.ts +68 -74
  147. package/src/execution/settled-watchdog.ts +39 -0
  148. package/src/execution/subagent-service.ts +746 -400
  149. package/src/execution/subprocess-agent-runner.ts +16 -8
  150. package/src/execution/types.ts +41 -117
  151. package/src/execution/ui-channels.ts +13 -214
  152. package/src/execution/ui-request-handler-factory.ts +7 -4
  153. package/src/execution/ui-request-observability.ts +2 -2
  154. package/src/execution/workflow-state-root.ts +67 -0
  155. package/src/execution/worktree-git-ops.ts +5 -0
  156. package/src/execution/worktree-manager.ts +11 -1
  157. package/src/index.ts +55 -26
  158. package/src/orchestration/__tests__/execute-agent-call.test.ts +1 -1
  159. package/src/orchestration/execute-agent-call.ts +1 -1
  160. package/src/orchestration/file-run-store.ts +144 -59
  161. package/src/orchestration/models/types.ts +43 -42
  162. package/src/shared/zcode-model-ref.ts +31 -0
  163. package/dist/chunk-43ONBFZX.js +0 -240
  164. package/dist/chunk-A4IVZWVX.js +0 -31
  165. package/dist/chunk-APZY4IME.js +0 -27
  166. package/dist/chunk-V3VHZ2VX.js +0 -59
  167. package/dist/execution/engine/engines/zcode/constants.cjs +0 -107
  168. package/dist/execution/engine/engines/zcode/constants.d.cts +0 -135
  169. package/dist/execution/engine/engines/zcode/constants.d.ts +0 -135
  170. package/dist/execution/engine/engines/zcode/constants.js +0 -54
  171. package/dist/execution/engine/engines/zcode/reader.cjs +0 -276
  172. package/dist/execution/engine/engines/zcode/reader.d.cts +0 -21
  173. package/dist/execution/engine/engines/zcode/reader.d.ts +0 -21
  174. package/dist/execution/engine/engines/zcode/reader.js +0 -9
  175. package/src/__tests__/append-system-prompt-assembly.test.ts +0 -243
  176. package/src/__tests__/fr4-get-state-handshake.test.ts +0 -125
  177. package/src/__tests__/session-runner.test.ts +0 -69
  178. package/src/execution/__tests__/ask-user-transit-e2e.test.ts +0 -490
  179. package/src/execution/__tests__/chatmode-first-round-closure-spawn.test.ts +0 -191
  180. package/src/execution/__tests__/descendant-sweep-guards.test.ts +0 -220
  181. package/src/execution/__tests__/descendant-sweep.test.ts +0 -269
  182. package/src/execution/__tests__/engine-model-validation.test.ts +0 -741
  183. package/src/execution/__tests__/epipe-fallback.test.ts +0 -248
  184. package/src/execution/__tests__/execution-runtime-face.test.ts +0 -272
  185. package/src/execution/__tests__/get-state-handshake.test.ts +0 -127
  186. package/src/execution/__tests__/helpers/session-runner-mocks.ts +0 -113
  187. package/src/execution/__tests__/keep-alive-no-progress.test.ts +0 -280
  188. package/src/execution/__tests__/kill-all-escalation.test.ts +0 -196
  189. package/src/execution/__tests__/max-turns-to-watchdog-ms.test.ts +0 -113
  190. package/src/execution/__tests__/output-collector.test.ts +0 -469
  191. package/src/execution/__tests__/pi-invocation.test.ts +0 -166
  192. package/src/execution/__tests__/recursive-visibility-env.test.ts +0 -149
  193. package/src/execution/__tests__/rpc-mode.test.ts +0 -89
  194. package/src/execution/__tests__/run-and-finalize-anchoring.test.ts +0 -387
  195. package/src/execution/__tests__/run-and-finalize-chatmode.test.ts +0 -277
  196. package/src/execution/__tests__/run-spawn-chatmode-settled.test.ts +0 -254
  197. package/src/execution/__tests__/run-spawn-edges.test.ts +0 -1079
  198. package/src/execution/__tests__/run-spawn-integration.test.ts +0 -933
  199. package/src/execution/__tests__/run-spawn-resume.test.ts +0 -322
  200. package/src/execution/__tests__/run-spawn-rpc-mode.test.ts +0 -196
  201. package/src/execution/__tests__/run-spawn-stdout-callback-throw.test.ts +0 -207
  202. package/src/execution/__tests__/service-kill-escalation.test.ts +0 -91
  203. package/src/execution/__tests__/session-runner-branch-cache-lru.test.ts +0 -110
  204. package/src/execution/__tests__/session-runner-close-prune.test.ts +0 -181
  205. package/src/execution/__tests__/session-runner-dispatch.test.ts +0 -489
  206. package/src/execution/__tests__/session-runner-epipe.test.ts +0 -179
  207. package/src/execution/__tests__/session-runner-heartbeat-idle-fallback.test.ts +0 -227
  208. package/src/execution/__tests__/session-runner-lifecycle-helpers.test.ts +0 -290
  209. package/src/execution/__tests__/session-runner-schema-env.test.ts +0 -352
  210. package/src/execution/__tests__/settled-watchdog.test.ts +0 -524
  211. package/src/execution/__tests__/spawn-args.test.ts +0 -446
  212. package/src/execution/__tests__/spawn-event-adapter-rpc.test.ts +0 -192
  213. package/src/execution/__tests__/spawn-event-adapter.test.ts +0 -167
  214. package/src/execution/__tests__/spawn-worktree-guidance.test.ts +0 -208
  215. package/src/execution/__tests__/spawned-children.test.ts +0 -236
  216. package/src/execution/__tests__/start-sync-model-guard.test.ts +0 -150
  217. package/src/execution/__tests__/stdin-writer.test.ts +0 -464
  218. package/src/execution/__tests__/subagent-service-message-close.test.ts +0 -693
  219. package/src/execution/__tests__/temp-prompt.test.ts +0 -53
  220. package/src/execution/__tests__/timeout-integration.test.ts +0 -616
  221. package/src/execution/__tests__/turn-limiter-semantics.test.ts +0 -194
  222. package/src/execution/__tests__/turn-limiter.test.ts +0 -65
  223. package/src/execution/__tests__/ui-request-handler.test.ts +0 -205
  224. package/src/execution/__tests__/ui-request-queue.test.ts +0 -298
  225. package/src/execution/__tests__/worktree-pid-registration.integration.test.ts +0 -230
  226. package/src/execution/engine/__tests__/common/schema-emulation.test.ts +0 -128
  227. package/src/execution/engine/__tests__/common/session-view-service-zcode-dbpath.test.ts +0 -149
  228. package/src/execution/engine/__tests__/conformance/__fixtures__/pi-golden-events.json +0 -28
  229. package/src/execution/engine/__tests__/conformance/zcode-appserver-harness.ts +0 -128
  230. package/src/execution/engine/__tests__/paths.test.ts +0 -39
  231. package/src/execution/engine/common/schema-emulation.ts +0 -189
  232. package/src/execution/engine/common/session-view-projection.ts +0 -51
  233. package/src/execution/engine/engines/pi/__tests__/pi-engine.test.ts +0 -615
  234. package/src/execution/engine/engines/pi/__tests__/reader.test.ts +0 -155
  235. package/src/execution/engine/engines/pi/__tests__/spawn-opts-direct.test.ts +0 -257
  236. package/src/execution/engine/engines/pi/argv-mirror.ts +0 -135
  237. package/src/execution/engine/engines/pi/get-state-handshake.ts +0 -179
  238. package/src/execution/engine/engines/pi/output-collector.ts +0 -317
  239. package/src/execution/engine/engines/pi/pi-engine.ts +0 -811
  240. package/src/execution/engine/engines/pi/pi-invocation.ts +0 -120
  241. package/src/execution/engine/engines/pi/reader.ts +0 -59
  242. package/src/execution/engine/engines/pi/registration.ts +0 -37
  243. package/src/execution/engine/engines/pi/session-runner.ts +0 -2840
  244. package/src/execution/engine/engines/pi/spawn-event-adapter.ts +0 -404
  245. package/src/execution/engine/engines/pi/stdin-writer.ts +0 -199
  246. package/src/execution/engine/engines/pi/temp-prompt.ts +0 -62
  247. package/src/execution/engine/engines/pi/turn-limiter.ts +0 -102
  248. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/fake-appserver.mjs +0 -301
  249. package/src/execution/engine/engines/zcode/__tests__/__fixtures__/zcode-golden-appserver.json +0 -36
  250. package/src/execution/engine/engines/zcode/__tests__/appserver-launcher.test.ts +0 -321
  251. package/src/execution/engine/engines/zcode/__tests__/connection.test.ts +0 -473
  252. package/src/execution/engine/engines/zcode/__tests__/parser.test.ts +0 -43
  253. package/src/execution/engine/engines/zcode/__tests__/preparer.test.ts +0 -124
  254. package/src/execution/engine/engines/zcode/__tests__/reader.test.ts +0 -210
  255. package/src/execution/engine/engines/zcode/__tests__/registration.test.ts +0 -71
  256. package/src/execution/engine/engines/zcode/__tests__/session-channel-dispose-harvest.test.ts +0 -247
  257. package/src/execution/engine/engines/zcode/__tests__/session-channel-turn-timers.test.ts +0 -451
  258. package/src/execution/engine/engines/zcode/__tests__/session-channel.test.ts +0 -792
  259. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-appserver.test.ts +0 -782
  260. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-degrade.test.ts +0 -168
  261. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-dispose.test.ts +0 -210
  262. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-retry.test.ts +0 -353
  263. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-status.test.ts +0 -282
  264. package/src/execution/engine/engines/zcode/__tests__/zcode-engine-timeout.test.ts +0 -372
  265. package/src/execution/engine/engines/zcode/__tests__/zcode-engine.live.test.ts +0 -145
  266. package/src/execution/engine/engines/zcode/appserver-launcher.ts +0 -167
  267. package/src/execution/engine/engines/zcode/connection.ts +0 -598
  268. package/src/execution/engine/engines/zcode/constants.ts +0 -176
  269. package/src/execution/engine/engines/zcode/golden-sample.ts +0 -47
  270. package/src/execution/engine/engines/zcode/parser.ts +0 -102
  271. package/src/execution/engine/engines/zcode/preparer.ts +0 -235
  272. package/src/execution/engine/engines/zcode/reader.ts +0 -381
  273. package/src/execution/engine/engines/zcode/registration.ts +0 -37
  274. package/src/execution/engine/engines/zcode/session-channel.ts +0 -968
  275. package/src/execution/engine/engines/zcode/zcode-engine.ts +0 -1431
  276. package/src/execution/round-settlement.ts +0 -93
  277. package/src/execution/ui-request-queue.ts +0 -215
  278. package/src/shared/schema-env.ts +0 -44
@@ -1,167 +0,0 @@
1
- // src/execution/engine/engines/zcode/appserver-launcher.ts
2
- //
3
- // app-server 启动 wrapper(2026-09 共享宿主 HOME 形态的凭据供数机制)。
4
- //
5
- // 为什么需要:CLI 形态的 zcode app-server 只从 `$HOME/.zcode/cli/config.json` 的
6
- // provider 字段读凭据(bundle 实测:路径硬编码,userConfigPath/modelConfig 参数仅对
7
- // GUI 同代码库内嵌调用方开放,env/argv/协议面无配置注入通道);而 GUI 把凭据放
8
- // `~/.zcode/v2/config.json` 且从不写 cli/config.json——外部 spawn 的 app-server 在
9
- // 真实 HOME 下是「无源之水」(实测报 "Model provider ... is missing baseURL")。
10
- //
11
- // 解法(fs 拦截 wrapper,用户拍板「包一层」):spawn 的不是 zcode.cjs 而是本模块
12
- // 落盘的 launcher 脚本——它 patch fs.readFileSync/fsPromises.readFile/existsSync
13
- // (真实 bundle 的用户 config 读取是 existsSync 短路在前:文件不存在直接返回空
14
- // config,readFileSync 不被调用——GUI-only 登录宿主上不拦 existsSync = 注入整体
15
- // 不可见),把对 cli/config.json 精确路径的读取重定向为「真实文件 + v2 provider
16
- // 注入」的内存合并结果(同 id 时 v2 整条优先——v2 是权威凭据源,等价复刻 GUI
17
- // 直传 modelConfig),再以原 argv 启动 zcode.cjs。HOME 保持真实值(共享语义
18
- // 不变:db/plugins/MCP 全继承宿主 HOME)。
19
- //
20
- // 漂移面如实登记:zcode 升级若改变配置读取路径/方式,失败信号 = missing baseURL /
21
- // Model config is missing 明确报错(不静默坏)——与协议漂移直接报错的既有姿态同级。
22
- //
23
- // 源码以内嵌字符串形态进 dist bundle(vendored 面只拷 dist/,独立 .cjs 资产会被
24
- // vendor 脚本漏掉——字符串常量无此问题),运行时幂等落盘 engineDataDir。
25
-
26
- import * as fs from "node:fs";
27
- import * as path from "node:path";
28
- import { toErrorMessage } from "../../../../core/error-message.ts";
29
-
30
- /** wrapper 落盘文件名(engineDataDir/engines/zcode/ 下)。 */
31
- export const ZCODE_APPSERVER_LAUNCHER_NAME = "appserver-launcher.cjs";
32
-
33
- /**
34
- * wrapper 源码(CJS;内容即版本——修改须同步本常量,落盘端按内容幂等覆盖)。
35
- * env 契约:ZCODE_ENG_CLI_PATH(zcode.cjs 绝对路径,必填)、
36
- * ZCODE_ENG_V2_CONFIG(v2 config 路径,缺省 ~/.zcode/v2/config.json)。
37
- */
38
- export const APPSERVER_LAUNCHER_SOURCE = `'use strict';
39
- // zcode app-server fs 拦截 wrapper(由 subagent-core appserver-launcher 落盘生成)
40
- const fs = require('node:fs');
41
- const path = require('node:path');
42
- const os = require('node:os');
43
-
44
- const CLI_PATH = process.env.ZCODE_ENG_CLI_PATH;
45
- const V2_PATH = process.env.ZCODE_ENG_V2_CONFIG || path.join(os.homedir(), '.zcode', 'v2', 'config.json');
46
- const CONFIG_PATH = path.join(os.homedir(), '.zcode', 'cli', 'config.json');
47
- // 与 constants.ts ZCODE_FALLBACK_DEFAULT_MODEL 双源(内嵌字符串无法 import)——改那边须同步此处
48
- const FALLBACK_MODEL_MAIN = 'builtin:bigmodel-coding-plan/GLM-5.3';
49
-
50
- // 合并形态:真实 cli config 原样(model/plugins/mcp/subagents 等 worker 继承面不变)
51
- // + v2 的 provider 字典注入,同 id 时 v2 条目整条优先——GUI 直传 modelConfig 时
52
- // v2 即权威源(进程外等价复刻);cli config 不在 GUI 管理面、可能残留历史验证
53
- // 配置(2026-08-25 事故:残留旧 key 压过新凭据致 turn 0 401),故不取 real 优先。
54
- // 返回 null = 无可注入凭据(v2 无 provider 条目)——不 patch,让原生报错透出。
55
- // 读源经 readOrig 间接取:patch 前首调 = fs.readFileSync 本体;patch 后 = 原函数
56
- // (防 patch 后的递归自调用)。
57
- function injectedConfigText() {
58
- const readOrig = fs.__origReadFileSync || fs.readFileSync;
59
- let real = {};
60
- try { real = JSON.parse(readOrig(CONFIG_PATH, 'utf8')); } catch { /* 无/损坏 → 空 */ }
61
- let v2 = {};
62
- try { v2 = JSON.parse(readOrig(V2_PATH, 'utf8')); }
63
- catch (err) {
64
- // ENOENT = 桌面端未登录(正常 no-patch,静默);其他失败(JSON 损坏/权限)
65
- // 出声——否则排障会被原生「请登录」报错误导,与真因(文件损坏)不符
66
- if (!err || err.code !== 'ENOENT') {
67
- process.stderr.write('[zcode-launcher] v2 config 读取失败(' + ((err && err.code) || (err && err.message) || 'unknown') + '): ' + V2_PATH + '——凭据注入未生效\\n');
68
- }
69
- return null;
70
- }
71
- const v2Providers = v2.provider && typeof v2.provider === 'object' ? v2.provider : {};
72
- const hasKey = (entry) => entry && typeof entry === 'object'
73
- && entry.options && typeof entry.options.apiKey === 'string' && entry.options.apiKey !== '';
74
- const injectable = {};
75
- for (const [id, entry] of Object.entries(v2Providers)) {
76
- if (hasKey(entry)) injectable[id] = entry;
77
- }
78
- if (Object.keys(injectable).length === 0) return null;
79
- const merged = { ...real };
80
- merged.provider = { ...(real.provider && typeof real.provider === 'object' ? real.provider : {}), ...injectable };
81
- if (!merged.model || typeof merged.model !== 'object' || !merged.model.main) {
82
- const main = (v2.model && v2.model.main) || FALLBACK_MODEL_MAIN;
83
- merged.model = { ...(merged.model || {}), main };
84
- }
85
- return JSON.stringify(merged);
86
- }
87
-
88
- if (!CLI_PATH) {
89
- process.stderr.write('[zcode-launcher] ZCODE_ENG_CLI_PATH 未设置,无法启动 app-server(该 env 由引擎自动设置;手工运行 wrapper 需显式传入)\\n');
90
- process.exit(2);
91
- }
92
-
93
- const text = injectedConfigText();
94
- if (text !== null) {
95
- // encoding 归一(Node 别名面):'utf8'/'utf-8'/大小写变体统一按 string 返回——
96
- // 真实 bundle 的 config 读取恰用 'utf-8' 形态,仅匹配 'utf8' 会错回 Buffer
97
- // (当下游不只 JSON.parse 而做字符串运算时即 TypeError)
98
- const shape = (args, value) => {
99
- const enc = args[0];
100
- const e = typeof enc === 'string' ? enc
101
- : (enc && typeof enc === 'object' && typeof enc.encoding === 'string' ? enc.encoding : undefined);
102
- if (e !== undefined && String(e).toLowerCase().replace(/-/g, '') === 'utf8') return value;
103
- return Buffer.from(value);
104
- };
105
- fs.__origReadFileSync = fs.readFileSync;
106
- fs.readFileSync = function (p, ...rest) {
107
- if (typeof p === 'string' && p === CONFIG_PATH) {
108
- const cur = injectedConfigText();
109
- if (cur !== null) return shape(rest, cur);
110
- }
111
- return fs.__origReadFileSync.call(fs, p, ...rest);
112
- };
113
- fs.promises.__origReadFile = fs.promises.readFile;
114
- fs.promises.readFile = function (p, ...rest) {
115
- if (typeof p === 'string' && p === CONFIG_PATH) {
116
- const cur = injectedConfigText();
117
- if (cur !== null) return Promise.resolve(shape(rest, cur));
118
- }
119
- return fs.promises.__origReadFile.call(fs.promises, p, ...rest);
120
- };
121
- // existsSync 拦截:真实 bundle 的用户 config 读取(loadFileConfig)以 existsSync
122
- // 为短路门——文件不存在时返回空 config 且 readFileSync 不被调用,GUI-only
123
- // 登录宿主(cli/config.json 从未被 CLI 侧写过)上注入只挂在读取面 = 不可见
124
- fs.__origExistsSync = fs.existsSync;
125
- fs.existsSync = function (p) {
126
- if (typeof p === 'string' && p === CONFIG_PATH) {
127
- const cur = injectedConfigText();
128
- if (cur !== null) return true;
129
- }
130
- return fs.__origExistsSync.call(fs, p);
131
- };
132
- }
133
-
134
- // 以原 argv 形态启动 zcode.cjs(argv[0]=node, argv[1]=本 wrapper,argv[2]=app-server——
135
- // zcode.cjs 的 includes('app-server') 判定不受影响)。import() 兼容 CJS/ESM 入口。
136
- import(CLI_PATH).catch((err) => {
137
- process.stderr.write('[zcode-launcher] zcode.cjs 加载失败: ' + (err && err.message || err) + '\\n');
138
- process.exit(3);
139
- });
140
- `;
141
-
142
- /**
143
- * 幂等落盘 launcher 脚本并返回其绝对路径(内容未变跳过写——mtime 免重写)。
144
- * @param engineDataDir 引擎数据根(launcher 落 engineDataDir/engines/zcode/)
145
- */
146
- export function ensureAppServerLauncher(engineDataDir: string): string {
147
- const dir = path.join(engineDataDir, "engines", "zcode");
148
- const file = path.join(dir, ZCODE_APPSERVER_LAUNCHER_NAME);
149
- const existing = fs.existsSync(file) && fs.statSync(file).isFile()
150
- ? fs.readFileSync(file, "utf8")
151
- : undefined;
152
- if (existing === APPSERVER_LAUNCHER_SOURCE) return file;
153
- try {
154
- fs.mkdirSync(dir, { recursive: true });
155
- const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
156
- fs.writeFileSync(tmp, APPSERVER_LAUNCHER_SOURCE);
157
- fs.renameSync(tmp, file);
158
- } catch (err) {
159
- // 裸 errno(EACCES/ENOSPC)不含恢复动作——与 probe 失败的错误姿态对齐
160
- const reason = toErrorMessage(err);
161
- throw new Error(
162
- `zcode app-server launcher 落盘失败: ${file}(${reason})。恢复:检查引擎数据目录` +
163
- ` 写权限与磁盘空间(engineDataDir 由宿主传入,路径见上)后重试。`,
164
- );
165
- }
166
- return file;
167
- }