smol-symphony 0.2.0 → 0.3.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 (716) hide show
  1. package/AGENTS.md +41 -22
  2. package/DESIGN.md +494 -273
  3. package/README.md +109 -57
  4. package/SPEC.md +33 -24
  5. package/WORKFLOW.minimal.yaml +34 -0
  6. package/{WORKFLOW.template.md → WORKFLOW.template.yaml} +409 -256
  7. package/WORKFLOW.yaml +487 -0
  8. package/assets/skills/symphony-issues/SKILL.md +136 -0
  9. package/assets/symphony-mise.system.toml +68 -0
  10. package/dist/src/bin/symphony.js +30 -0
  11. package/dist/src/bin/symphony.js.map +1 -0
  12. package/dist/src/core/actions/context.js +109 -0
  13. package/dist/src/core/actions/context.js.map +1 -0
  14. package/dist/{actions/parsing.js → src/core/actions/parse.js} +33 -114
  15. package/dist/src/core/actions/parse.js.map +1 -0
  16. package/dist/src/core/actions/plan.js +197 -0
  17. package/dist/src/core/actions/plan.js.map +1 -0
  18. package/dist/src/core/actions/predicates.js +111 -0
  19. package/dist/src/core/actions/predicates.js.map +1 -0
  20. package/dist/src/core/actions/run-fold.js +248 -0
  21. package/dist/src/core/actions/run-fold.js.map +1 -0
  22. package/dist/src/core/actions/template.js +118 -0
  23. package/dist/src/core/actions/template.js.map +1 -0
  24. package/dist/src/core/cli/args.js +116 -0
  25. package/dist/src/core/cli/args.js.map +1 -0
  26. package/dist/src/core/coerce.js +75 -0
  27. package/dist/src/core/coerce.js.map +1 -0
  28. package/dist/src/core/credential/account-id.js +20 -0
  29. package/dist/src/core/credential/account-id.js.map +1 -0
  30. package/dist/src/core/credential/adapter-config.js +136 -0
  31. package/dist/src/core/credential/adapter-config.js.map +1 -0
  32. package/dist/src/core/credential/availability.js +98 -0
  33. package/dist/src/core/credential/availability.js.map +1 -0
  34. package/dist/src/core/credential/extract.js +228 -0
  35. package/dist/src/core/credential/extract.js.map +1 -0
  36. package/dist/src/core/credential/fake-creds.js +171 -0
  37. package/dist/src/core/credential/fake-creds.js.map +1 -0
  38. package/dist/src/core/credential/identity.js +125 -0
  39. package/dist/src/core/credential/identity.js.map +1 -0
  40. package/dist/src/core/credential/shape.js +230 -0
  41. package/dist/src/core/credential/shape.js.map +1 -0
  42. package/dist/src/core/credential/strings.js +15 -0
  43. package/dist/src/core/credential/strings.js.map +1 -0
  44. package/dist/src/core/doctor/checks.js +303 -0
  45. package/dist/src/core/doctor/checks.js.map +1 -0
  46. package/dist/src/core/git/result.js +107 -0
  47. package/dist/src/core/git/result.js.map +1 -0
  48. package/dist/src/core/http/decisions.js +225 -0
  49. package/dist/src/core/http/decisions.js.map +1 -0
  50. package/dist/{http.js → src/core/http/render.js} +472 -738
  51. package/dist/src/core/http/render.js.map +1 -0
  52. package/dist/{http-handlers.js → src/core/http/routes.js} +52 -87
  53. package/dist/src/core/http/routes.js.map +1 -0
  54. package/dist/src/core/http/views.js +181 -0
  55. package/dist/src/core/http/views.js.map +1 -0
  56. package/dist/src/core/image/managed-image.js +95 -0
  57. package/dist/src/core/image/managed-image.js.map +1 -0
  58. package/dist/src/core/issue/file.js +149 -0
  59. package/dist/src/core/issue/file.js.map +1 -0
  60. package/dist/src/core/issue/parse.js +210 -0
  61. package/dist/src/core/issue/parse.js.map +1 -0
  62. package/dist/src/core/mcp/dispatch.js +239 -0
  63. package/dist/src/core/mcp/dispatch.js.map +1 -0
  64. package/dist/src/core/mcp/post-move.js +92 -0
  65. package/dist/src/core/mcp/post-move.js.map +1 -0
  66. package/dist/src/core/mcp/protocol.js +293 -0
  67. package/dist/src/core/mcp/protocol.js.map +1 -0
  68. package/dist/src/core/mcp/url.js +162 -0
  69. package/dist/src/core/mcp/url.js.map +1 -0
  70. package/dist/src/core/path.js +63 -0
  71. package/dist/src/core/path.js.map +1 -0
  72. package/dist/src/core/reconcile/image-decide.js +48 -0
  73. package/dist/src/core/reconcile/image-decide.js.map +1 -0
  74. package/dist/src/core/reconcile/ledger.js +142 -0
  75. package/dist/src/core/reconcile/ledger.js.map +1 -0
  76. package/dist/src/core/reconcile/pr-classify.js +62 -0
  77. package/dist/src/core/reconcile/pr-classify.js.map +1 -0
  78. package/dist/{reconciler → src/core/reconcile}/pr-decide.js +25 -12
  79. package/dist/src/core/reconcile/pr-decide.js.map +1 -0
  80. package/dist/src/core/reconcile/pr-loop.js +161 -0
  81. package/dist/src/core/reconcile/pr-loop.js.map +1 -0
  82. package/dist/src/core/reconcile/pr-notes.js +35 -0
  83. package/dist/src/core/reconcile/pr-notes.js.map +1 -0
  84. package/dist/src/core/reconcile/vm-decide.js +70 -0
  85. package/dist/src/core/reconcile/vm-decide.js.map +1 -0
  86. package/dist/src/core/reconcile/vm-reap.js +207 -0
  87. package/dist/src/core/reconcile/vm-reap.js.map +1 -0
  88. package/dist/src/core/reconcile/workspace-decide.js +162 -0
  89. package/dist/src/core/reconcile/workspace-decide.js.map +1 -0
  90. package/dist/src/core/runlog/summary.js +231 -0
  91. package/dist/src/core/runlog/summary.js.map +1 -0
  92. package/dist/src/core/runner/dispatch-config.js +95 -0
  93. package/dist/src/core/runner/dispatch-config.js.map +1 -0
  94. package/dist/src/core/runner/injection.js +61 -0
  95. package/dist/src/core/runner/injection.js.map +1 -0
  96. package/dist/src/core/runner/mise.js +210 -0
  97. package/dist/src/core/runner/mise.js.map +1 -0
  98. package/dist/src/core/runner/prompt.js +720 -0
  99. package/dist/src/core/runner/prompt.js.map +1 -0
  100. package/dist/src/core/runner/turn.js +242 -0
  101. package/dist/src/core/runner/turn.js.map +1 -0
  102. package/dist/src/core/runner/vm-plan.js +390 -0
  103. package/dist/src/core/runner/vm-plan.js.map +1 -0
  104. package/dist/src/core/schedule/admission.js +123 -0
  105. package/dist/src/core/schedule/admission.js.map +1 -0
  106. package/dist/src/core/schedule/circuit-breaker.js +111 -0
  107. package/dist/src/core/schedule/circuit-breaker.js.map +1 -0
  108. package/dist/src/core/schedule/eligibility.js +83 -0
  109. package/dist/src/core/schedule/eligibility.js.map +1 -0
  110. package/dist/src/core/schedule/reconcile-issue.js +82 -0
  111. package/dist/src/core/schedule/reconcile-issue.js.map +1 -0
  112. package/dist/src/core/schedule/retry.js +96 -0
  113. package/dist/src/core/schedule/retry.js.map +1 -0
  114. package/dist/src/core/schedule/sleep-cycle.js +133 -0
  115. package/dist/src/core/schedule/sleep-cycle.js.map +1 -0
  116. package/dist/src/core/schedule/slots.js +124 -0
  117. package/dist/src/core/schedule/slots.js.map +1 -0
  118. package/dist/src/core/schedule/tick.js +553 -0
  119. package/dist/src/core/schedule/tick.js.map +1 -0
  120. package/dist/src/core/schedule/token-fold.js +181 -0
  121. package/dist/src/core/schedule/token-fold.js.map +1 -0
  122. package/dist/src/core/state-resolve.js +86 -0
  123. package/dist/src/core/state-resolve.js.map +1 -0
  124. package/dist/src/core/vm-guards.js +278 -0
  125. package/dist/src/core/vm-guards.js.map +1 -0
  126. package/dist/src/core/workflow/derive.js +107 -0
  127. package/dist/src/core/workflow/derive.js.map +1 -0
  128. package/dist/src/core/workflow/parse.js +687 -0
  129. package/dist/src/core/workflow/parse.js.map +1 -0
  130. package/dist/src/core/workflow/prompt-probe.js +78 -0
  131. package/dist/src/core/workflow/prompt-probe.js.map +1 -0
  132. package/dist/src/core/workflow/validate.js +189 -0
  133. package/dist/src/core/workflow/validate.js.map +1 -0
  134. package/dist/src/core/workspace-key.js +19 -0
  135. package/dist/src/core/workspace-key.js.map +1 -0
  136. package/dist/src/shell/actions-runner.js +356 -0
  137. package/dist/src/shell/actions-runner.js.map +1 -0
  138. package/dist/src/shell/adapter/adapter-registry.js +45 -0
  139. package/dist/src/shell/adapter/adapter-registry.js.map +1 -0
  140. package/dist/src/shell/adapter/clock-random.js +96 -0
  141. package/dist/src/shell/adapter/clock-random.js.map +1 -0
  142. package/dist/src/shell/adapter/gondolin-dispatch-helpers.js +158 -0
  143. package/dist/src/shell/adapter/gondolin-dispatch-helpers.js.map +1 -0
  144. package/dist/src/shell/adapter/gondolin-dispatch.js +385 -0
  145. package/dist/src/shell/adapter/gondolin-dispatch.js.map +1 -0
  146. package/dist/src/shell/adapter/gondolin-image-converter.js +233 -0
  147. package/dist/src/shell/adapter/gondolin-image-converter.js.map +1 -0
  148. package/dist/src/shell/adapter/gondolin-image-fetch.js +180 -0
  149. package/dist/src/shell/adapter/gondolin-image-fetch.js.map +1 -0
  150. package/dist/src/shell/adapter/launcher-asset.js +57 -0
  151. package/dist/src/shell/adapter/launcher-asset.js.map +1 -0
  152. package/dist/src/shell/adapter/mise-config-asset.js +65 -0
  153. package/dist/src/shell/adapter/mise-config-asset.js.map +1 -0
  154. package/dist/src/shell/adapter/workflow-loader.js +304 -0
  155. package/dist/src/shell/adapter/workflow-loader.js.map +1 -0
  156. package/dist/src/shell/cli/doctor.js +268 -0
  157. package/dist/src/shell/cli/doctor.js.map +1 -0
  158. package/dist/src/shell/effect-interpreter-families.js +314 -0
  159. package/dist/src/shell/effect-interpreter-families.js.map +1 -0
  160. package/dist/src/shell/effect-interpreter.js +29 -0
  161. package/dist/src/shell/effect-interpreter.js.map +1 -0
  162. package/dist/src/shell/interp/acp-frame.js +137 -0
  163. package/dist/src/shell/interp/acp-frame.js.map +1 -0
  164. package/dist/src/shell/interp/acp-ws-conn.js +320 -0
  165. package/dist/src/shell/interp/acp-ws-conn.js.map +1 -0
  166. package/dist/src/shell/interp/acp-ws-frames.js +159 -0
  167. package/dist/src/shell/interp/acp-ws-frames.js.map +1 -0
  168. package/dist/src/shell/interp/acp-ws.js +197 -0
  169. package/dist/src/shell/interp/acp-ws.js.map +1 -0
  170. package/dist/src/shell/interp/acp.js +319 -0
  171. package/dist/src/shell/interp/acp.js.map +1 -0
  172. package/dist/src/shell/interp/credential-defaults.js +128 -0
  173. package/dist/src/shell/interp/credential-defaults.js.map +1 -0
  174. package/dist/src/shell/interp/credential-hooks.js +149 -0
  175. package/dist/src/shell/interp/credential-hooks.js.map +1 -0
  176. package/dist/src/shell/interp/credential-registry.js +226 -0
  177. package/dist/src/shell/interp/credential-registry.js.map +1 -0
  178. package/dist/src/shell/interp/credential.js +103 -0
  179. package/dist/src/shell/interp/credential.js.map +1 -0
  180. package/dist/src/shell/interp/gh.js +163 -0
  181. package/dist/src/shell/interp/gh.js.map +1 -0
  182. package/dist/src/shell/interp/git.js +28 -0
  183. package/dist/src/shell/interp/git.js.map +1 -0
  184. package/dist/src/shell/interp/log.js +213 -0
  185. package/dist/src/shell/interp/log.js.map +1 -0
  186. package/dist/src/shell/interp/process.js +178 -0
  187. package/dist/src/shell/interp/process.js.map +1 -0
  188. package/dist/src/shell/interp/runlog.js +193 -0
  189. package/dist/src/shell/interp/runlog.js.map +1 -0
  190. package/dist/src/shell/interp/timer.js +64 -0
  191. package/dist/src/shell/interp/timer.js.map +1 -0
  192. package/dist/src/shell/interp/tracker-disk.js +99 -0
  193. package/dist/src/shell/interp/tracker-disk.js.map +1 -0
  194. package/dist/src/shell/interp/tracker-parse.js +71 -0
  195. package/dist/src/shell/interp/tracker-parse.js.map +1 -0
  196. package/dist/src/shell/interp/tracker-scan.js +238 -0
  197. package/dist/src/shell/interp/tracker-scan.js.map +1 -0
  198. package/dist/src/shell/interp/tracker-write.js +91 -0
  199. package/dist/src/shell/interp/tracker-write.js.map +1 -0
  200. package/dist/src/shell/interp/tracker.js +41 -0
  201. package/dist/src/shell/interp/tracker.js.map +1 -0
  202. package/dist/src/shell/interp/tty.js +48 -0
  203. package/dist/src/shell/interp/tty.js.map +1 -0
  204. package/dist/src/shell/interp/vm.js +199 -0
  205. package/dist/src/shell/interp/vm.js.map +1 -0
  206. package/dist/src/shell/interp/workspace.js +310 -0
  207. package/dist/src/shell/interp/workspace.js.map +1 -0
  208. package/dist/src/shell/main-acp.js +78 -0
  209. package/dist/src/shell/main-acp.js.map +1 -0
  210. package/dist/src/shell/main-adapters.js +222 -0
  211. package/dist/src/shell/main-adapters.js.map +1 -0
  212. package/dist/src/shell/main-credential.js +122 -0
  213. package/dist/src/shell/main-credential.js.map +1 -0
  214. package/dist/src/shell/main-doctor.js +22 -0
  215. package/dist/src/shell/main-doctor.js.map +1 -0
  216. package/dist/src/shell/main-entry.js +46 -0
  217. package/dist/src/shell/main-entry.js.map +1 -0
  218. package/dist/src/shell/main-http-csrf.js +45 -0
  219. package/dist/src/shell/main-http-csrf.js.map +1 -0
  220. package/dist/src/shell/main-http-handler.js +389 -0
  221. package/dist/src/shell/main-http-handler.js.map +1 -0
  222. package/dist/src/shell/main-http-mcp.js +122 -0
  223. package/dist/src/shell/main-http-mcp.js.map +1 -0
  224. package/dist/src/shell/main-http-views.js +253 -0
  225. package/dist/src/shell/main-http-views.js.map +1 -0
  226. package/dist/src/shell/main-http.js +76 -0
  227. package/dist/src/shell/main-http.js.map +1 -0
  228. package/dist/src/shell/main-loops.js +130 -0
  229. package/dist/src/shell/main-loops.js.map +1 -0
  230. package/dist/src/shell/main-mcp.js +129 -0
  231. package/dist/src/shell/main-mcp.js.map +1 -0
  232. package/dist/src/shell/main-orchestrator.js +120 -0
  233. package/dist/src/shell/main-orchestrator.js.map +1 -0
  234. package/dist/src/shell/main-preflight.js +43 -0
  235. package/dist/src/shell/main-preflight.js.map +1 -0
  236. package/dist/src/shell/main-reconcilers-helpers.js +244 -0
  237. package/dist/src/shell/main-reconcilers-helpers.js.map +1 -0
  238. package/dist/src/shell/main-reconcilers-pr.js +148 -0
  239. package/dist/src/shell/main-reconcilers-pr.js.map +1 -0
  240. package/dist/src/shell/main-reconcilers.js +225 -0
  241. package/dist/src/shell/main-reconcilers.js.map +1 -0
  242. package/dist/src/shell/main-runner.js +355 -0
  243. package/dist/src/shell/main-runner.js.map +1 -0
  244. package/dist/src/shell/main-scaffold.js +116 -0
  245. package/dist/src/shell/main-scaffold.js.map +1 -0
  246. package/dist/src/shell/main-shutdown.js +115 -0
  247. package/dist/src/shell/main-shutdown.js.map +1 -0
  248. package/dist/src/shell/main-startup.js +48 -0
  249. package/dist/src/shell/main-startup.js.map +1 -0
  250. package/dist/src/shell/main-substrates.js +43 -0
  251. package/dist/src/shell/main-substrates.js.map +1 -0
  252. package/dist/src/shell/main.js +385 -0
  253. package/dist/src/shell/main.js.map +1 -0
  254. package/dist/src/shell/orchestrator-feedback.js +69 -0
  255. package/dist/src/shell/orchestrator-feedback.js.map +1 -0
  256. package/dist/src/shell/orchestrator-image.js +167 -0
  257. package/dist/src/shell/orchestrator-image.js.map +1 -0
  258. package/dist/src/shell/orchestrator-loop.js +468 -0
  259. package/dist/src/shell/orchestrator-loop.js.map +1 -0
  260. package/dist/src/shell/orchestrator-reconcile.js +36 -0
  261. package/dist/src/shell/orchestrator-reconcile.js.map +1 -0
  262. package/dist/src/shell/reconciler-loop.js +228 -0
  263. package/dist/src/shell/reconciler-loop.js.map +1 -0
  264. package/dist/src/shell/runner-loop-turn.js +301 -0
  265. package/dist/src/shell/runner-loop-turn.js.map +1 -0
  266. package/dist/src/shell/runner-loop.js +338 -0
  267. package/dist/src/shell/runner-loop.js.map +1 -0
  268. package/dist/src/shell/server/http.js +208 -0
  269. package/dist/src/shell/server/http.js.map +1 -0
  270. package/dist/src/shell/server/mcp-runtime-effects.js +237 -0
  271. package/dist/src/shell/server/mcp-runtime-effects.js.map +1 -0
  272. package/dist/src/shell/server/mcp-runtime.js +99 -0
  273. package/dist/src/shell/server/mcp-runtime.js.map +1 -0
  274. package/dist/src/shell/workspace-key.js +14 -0
  275. package/dist/src/shell/workspace-key.js.map +1 -0
  276. package/dist/src/types/acp.js +8 -0
  277. package/dist/src/types/acp.js.map +1 -0
  278. package/dist/src/types/actions/plan.js +6 -0
  279. package/dist/src/types/actions/plan.js.map +1 -0
  280. package/dist/src/types/actions/predicates.js +6 -0
  281. package/dist/src/types/actions/predicates.js.map +1 -0
  282. package/dist/src/types/actions/run-fold.js +8 -0
  283. package/dist/src/types/actions/run-fold.js.map +1 -0
  284. package/dist/src/types/actions.js +7 -0
  285. package/dist/src/types/actions.js.map +1 -0
  286. package/dist/src/types/adapter/clock-random.js +4 -0
  287. package/dist/src/types/adapter/clock-random.js.map +1 -0
  288. package/dist/src/types/adapter/gondolin-image-converter.js +5 -0
  289. package/dist/src/types/adapter/gondolin-image-converter.js.map +1 -0
  290. package/dist/src/types/adapter/gondolin-image-fetch.js +5 -0
  291. package/dist/src/types/adapter/gondolin-image-fetch.js.map +1 -0
  292. package/dist/src/types/adapter/workflow-loader.js +4 -0
  293. package/dist/src/types/adapter/workflow-loader.js.map +1 -0
  294. package/dist/src/types/cli/args.js +8 -0
  295. package/dist/src/types/cli/args.js.map +1 -0
  296. package/dist/src/types/config.js +8 -0
  297. package/dist/src/types/config.js.map +1 -0
  298. package/dist/src/types/credential-interp.js +6 -0
  299. package/dist/src/types/credential-interp.js.map +1 -0
  300. package/dist/src/types/credentials.js +10 -0
  301. package/dist/src/types/credentials.js.map +1 -0
  302. package/dist/src/types/doctor.js +7 -0
  303. package/dist/src/types/doctor.js.map +1 -0
  304. package/dist/src/types/domain.js +7 -0
  305. package/dist/src/types/domain.js.map +1 -0
  306. package/dist/src/types/effect.js +15 -0
  307. package/dist/src/types/effect.js.map +1 -0
  308. package/dist/src/types/errors.js +39 -0
  309. package/dist/src/types/errors.js.map +1 -0
  310. package/dist/src/types/http/decisions.js +6 -0
  311. package/dist/src/types/http/decisions.js.map +1 -0
  312. package/dist/src/types/http/render.js +10 -0
  313. package/dist/src/types/http/render.js.map +1 -0
  314. package/dist/src/types/http/views.js +6 -0
  315. package/dist/src/types/http/views.js.map +1 -0
  316. package/dist/src/types/http.js +9 -0
  317. package/dist/src/types/http.js.map +1 -0
  318. package/dist/src/types/image/managed-image.js +7 -0
  319. package/dist/src/types/image/managed-image.js.map +1 -0
  320. package/dist/src/types/interp/effect-interpreter.js +8 -0
  321. package/dist/src/types/interp/effect-interpreter.js.map +1 -0
  322. package/dist/src/types/interp/tracker.js +7 -0
  323. package/dist/src/types/interp/tracker.js.map +1 -0
  324. package/dist/src/types/issue/file.js +6 -0
  325. package/dist/src/types/issue/file.js.map +1 -0
  326. package/dist/src/types/issue/parse.js +8 -0
  327. package/dist/src/types/issue/parse.js.map +1 -0
  328. package/dist/src/types/main-acp.js +13 -0
  329. package/dist/src/types/main-acp.js.map +1 -0
  330. package/dist/src/types/main-adapters.js +5 -0
  331. package/dist/src/types/main-adapters.js.map +1 -0
  332. package/dist/src/types/main-credential.js +21 -0
  333. package/dist/src/types/main-credential.js.map +1 -0
  334. package/dist/src/types/main-doctor.js +6 -0
  335. package/dist/src/types/main-doctor.js.map +1 -0
  336. package/dist/src/types/main-http-handler.js +12 -0
  337. package/dist/src/types/main-http-handler.js.map +1 -0
  338. package/dist/src/types/main-http.js +5 -0
  339. package/dist/src/types/main-http.js.map +1 -0
  340. package/dist/src/types/main-loops.js +5 -0
  341. package/dist/src/types/main-loops.js.map +1 -0
  342. package/dist/src/types/main-mcp.js +12 -0
  343. package/dist/src/types/main-mcp.js.map +1 -0
  344. package/dist/src/types/main-orchestrator.js +5 -0
  345. package/dist/src/types/main-orchestrator.js.map +1 -0
  346. package/dist/src/types/main-reconcilers.js +11 -0
  347. package/dist/src/types/main-reconcilers.js.map +1 -0
  348. package/dist/src/types/main-runner.js +13 -0
  349. package/dist/src/types/main-runner.js.map +1 -0
  350. package/dist/src/types/main-startup.js +5 -0
  351. package/dist/src/types/main-startup.js.map +1 -0
  352. package/dist/src/types/main-substrates.js +5 -0
  353. package/dist/src/types/main-substrates.js.map +1 -0
  354. package/dist/src/types/mcp/dispatch.js +4 -0
  355. package/dist/src/types/mcp/dispatch.js.map +1 -0
  356. package/dist/src/types/mcp/post-move.js +7 -0
  357. package/dist/src/types/mcp/post-move.js.map +1 -0
  358. package/dist/src/types/mcp.js +9 -0
  359. package/dist/src/types/mcp.js.map +1 -0
  360. package/dist/src/types/ports.js +12 -0
  361. package/dist/src/types/ports.js.map +1 -0
  362. package/dist/src/types/reconcile/image-decide.js +5 -0
  363. package/dist/src/types/reconcile/image-decide.js.map +1 -0
  364. package/dist/src/types/reconcile/ledger.js +7 -0
  365. package/dist/src/types/reconcile/ledger.js.map +1 -0
  366. package/dist/src/types/reconcile/pr-loop.js +8 -0
  367. package/dist/src/types/reconcile/pr-loop.js.map +1 -0
  368. package/dist/src/types/reconcile/vm-reap.js +8 -0
  369. package/dist/src/types/reconcile/vm-reap.js.map +1 -0
  370. package/dist/src/types/reconcile/workspace-decide.js +7 -0
  371. package/dist/src/types/reconcile/workspace-decide.js.map +1 -0
  372. package/dist/src/types/reconcile.js +9 -0
  373. package/dist/src/types/reconcile.js.map +1 -0
  374. package/dist/src/types/runlog.js +7 -0
  375. package/dist/src/types/runlog.js.map +1 -0
  376. package/dist/src/types/runner/actions-runner.js +12 -0
  377. package/dist/src/types/runner/actions-runner.js.map +1 -0
  378. package/dist/src/types/runner/gondolin-dispatch.js +5 -0
  379. package/dist/src/types/runner/gondolin-dispatch.js.map +1 -0
  380. package/dist/src/types/runner/injection.js +6 -0
  381. package/dist/src/types/runner/injection.js.map +1 -0
  382. package/dist/src/types/runner/runner-loop.js +5 -0
  383. package/dist/src/types/runner/runner-loop.js.map +1 -0
  384. package/dist/src/types/runner/turn.js +4 -0
  385. package/dist/src/types/runner/turn.js.map +1 -0
  386. package/dist/src/types/runner/vm-plan.js +4 -0
  387. package/dist/src/types/runner/vm-plan.js.map +1 -0
  388. package/dist/src/types/runtime.js +9 -0
  389. package/dist/src/types/runtime.js.map +1 -0
  390. package/dist/src/types/schedule/admission.js +7 -0
  391. package/dist/src/types/schedule/admission.js.map +1 -0
  392. package/dist/src/types/schedule/circuit-breaker.js +2 -0
  393. package/dist/src/types/schedule/circuit-breaker.js.map +1 -0
  394. package/dist/src/types/schedule/eligibility.js +9 -0
  395. package/dist/src/types/schedule/eligibility.js.map +1 -0
  396. package/dist/src/types/schedule/orchestrator-loop.js +10 -0
  397. package/dist/src/types/schedule/orchestrator-loop.js.map +1 -0
  398. package/dist/src/types/schedule/sleep-cycle.js +4 -0
  399. package/dist/src/types/schedule/sleep-cycle.js.map +1 -0
  400. package/dist/src/types/schedule/slots.js +8 -0
  401. package/dist/src/types/schedule/slots.js.map +1 -0
  402. package/dist/src/types/schedule/tick.js +9 -0
  403. package/dist/src/types/schedule/tick.js.map +1 -0
  404. package/dist/src/types/server/mcp-runtime.js +8 -0
  405. package/dist/src/types/server/mcp-runtime.js.map +1 -0
  406. package/dist/src/types/workflow/parse.js +4 -0
  407. package/dist/src/types/workflow/parse.js.map +1 -0
  408. package/dist/tests/core/account-id.test.js +35 -0
  409. package/dist/tests/core/account-id.test.js.map +1 -0
  410. package/dist/tests/core/actions-parse.test.js +176 -0
  411. package/dist/tests/core/actions-parse.test.js.map +1 -0
  412. package/dist/tests/core/adapter-config.test.js +133 -0
  413. package/dist/tests/core/adapter-config.test.js.map +1 -0
  414. package/dist/tests/core/admission.test.js +215 -0
  415. package/dist/tests/core/admission.test.js.map +1 -0
  416. package/dist/tests/core/args.test.js +132 -0
  417. package/dist/tests/core/args.test.js.map +1 -0
  418. package/dist/tests/core/availability.test.js +62 -0
  419. package/dist/tests/core/availability.test.js.map +1 -0
  420. package/dist/tests/core/checks.test.js +395 -0
  421. package/dist/tests/core/checks.test.js.map +1 -0
  422. package/dist/tests/core/circuit-breaker.test.js +172 -0
  423. package/dist/tests/core/circuit-breaker.test.js.map +1 -0
  424. package/dist/tests/core/coerce.test.js +87 -0
  425. package/dist/tests/core/coerce.test.js.map +1 -0
  426. package/dist/tests/core/context.test.js +228 -0
  427. package/dist/tests/core/context.test.js.map +1 -0
  428. package/dist/tests/core/decisions.test.js +310 -0
  429. package/dist/tests/core/decisions.test.js.map +1 -0
  430. package/dist/tests/core/derive.test.js +205 -0
  431. package/dist/tests/core/derive.test.js.map +1 -0
  432. package/dist/tests/core/dispatch-config.test.js +164 -0
  433. package/dist/tests/core/dispatch-config.test.js.map +1 -0
  434. package/dist/tests/core/dispatch.test.js +302 -0
  435. package/dist/tests/core/dispatch.test.js.map +1 -0
  436. package/dist/tests/core/eligibility.test.js +163 -0
  437. package/dist/tests/core/eligibility.test.js.map +1 -0
  438. package/dist/tests/core/extract.test.js +139 -0
  439. package/dist/tests/core/extract.test.js.map +1 -0
  440. package/dist/tests/core/fake-creds.test.js +134 -0
  441. package/dist/tests/core/fake-creds.test.js.map +1 -0
  442. package/dist/tests/core/file.test.js +197 -0
  443. package/dist/tests/core/file.test.js.map +1 -0
  444. package/dist/tests/core/git-result.test.js +113 -0
  445. package/dist/tests/core/git-result.test.js.map +1 -0
  446. package/dist/tests/core/identity.test.js +180 -0
  447. package/dist/tests/core/identity.test.js.map +1 -0
  448. package/dist/tests/core/image-decide.test.js +59 -0
  449. package/dist/tests/core/image-decide.test.js.map +1 -0
  450. package/dist/tests/core/injection.test.js +163 -0
  451. package/dist/tests/core/injection.test.js.map +1 -0
  452. package/dist/tests/core/ledger.test.js +218 -0
  453. package/dist/tests/core/ledger.test.js.map +1 -0
  454. package/dist/tests/core/managed-image.test.js +68 -0
  455. package/dist/tests/core/managed-image.test.js.map +1 -0
  456. package/dist/tests/core/mise.test.js +138 -0
  457. package/dist/tests/core/mise.test.js.map +1 -0
  458. package/dist/tests/core/parse.test.js +174 -0
  459. package/dist/tests/core/parse.test.js.map +1 -0
  460. package/dist/tests/core/path.test.js +50 -0
  461. package/dist/tests/core/path.test.js.map +1 -0
  462. package/dist/tests/core/plan.test.js +218 -0
  463. package/dist/tests/core/plan.test.js.map +1 -0
  464. package/dist/tests/core/post-move.test.js +162 -0
  465. package/dist/tests/core/post-move.test.js.map +1 -0
  466. package/dist/tests/core/pr-classify.test.js +117 -0
  467. package/dist/tests/core/pr-classify.test.js.map +1 -0
  468. package/dist/tests/core/pr-decide.test.js +298 -0
  469. package/dist/tests/core/pr-decide.test.js.map +1 -0
  470. package/dist/tests/core/pr-loop.test.js +301 -0
  471. package/dist/tests/core/pr-loop.test.js.map +1 -0
  472. package/dist/tests/core/pr-notes.test.js +165 -0
  473. package/dist/tests/core/pr-notes.test.js.map +1 -0
  474. package/dist/tests/core/predicates.test.js +154 -0
  475. package/dist/tests/core/predicates.test.js.map +1 -0
  476. package/dist/tests/core/prompt.test.js +189 -0
  477. package/dist/tests/core/prompt.test.js.map +1 -0
  478. package/dist/tests/core/protocol.test.js +195 -0
  479. package/dist/tests/core/protocol.test.js.map +1 -0
  480. package/dist/tests/core/reconcile-issue.test.js +116 -0
  481. package/dist/tests/core/reconcile-issue.test.js.map +1 -0
  482. package/dist/tests/core/render.test.js +549 -0
  483. package/dist/tests/core/render.test.js.map +1 -0
  484. package/dist/tests/core/retry.test.js +186 -0
  485. package/dist/tests/core/retry.test.js.map +1 -0
  486. package/dist/tests/core/routes.test.js +247 -0
  487. package/dist/tests/core/routes.test.js.map +1 -0
  488. package/dist/tests/core/run-fold.test.js +299 -0
  489. package/dist/tests/core/run-fold.test.js.map +1 -0
  490. package/dist/tests/core/shape.test.js +185 -0
  491. package/dist/tests/core/shape.test.js.map +1 -0
  492. package/dist/tests/core/sleep-cycle.test.js +150 -0
  493. package/dist/tests/core/sleep-cycle.test.js.map +1 -0
  494. package/dist/tests/core/slots.test.js +201 -0
  495. package/dist/tests/core/slots.test.js.map +1 -0
  496. package/dist/tests/core/state-resolve.test.js +80 -0
  497. package/dist/tests/core/state-resolve.test.js.map +1 -0
  498. package/dist/tests/core/summary.test.js +200 -0
  499. package/dist/tests/core/summary.test.js.map +1 -0
  500. package/dist/tests/core/template.test.js +116 -0
  501. package/dist/tests/core/template.test.js.map +1 -0
  502. package/dist/tests/core/tick.test.js +558 -0
  503. package/dist/tests/core/tick.test.js.map +1 -0
  504. package/dist/tests/core/token-fold.test.js +176 -0
  505. package/dist/tests/core/token-fold.test.js.map +1 -0
  506. package/dist/tests/core/turn.test.js +388 -0
  507. package/dist/tests/core/turn.test.js.map +1 -0
  508. package/dist/tests/core/url.test.js +118 -0
  509. package/dist/tests/core/url.test.js.map +1 -0
  510. package/dist/tests/core/validate.test.js +247 -0
  511. package/dist/tests/core/validate.test.js.map +1 -0
  512. package/dist/tests/core/views.test.js +252 -0
  513. package/dist/tests/core/views.test.js.map +1 -0
  514. package/dist/tests/core/vm-decide.test.js +110 -0
  515. package/dist/tests/core/vm-decide.test.js.map +1 -0
  516. package/dist/tests/core/vm-guards.test.js +153 -0
  517. package/dist/tests/core/vm-guards.test.js.map +1 -0
  518. package/dist/tests/core/vm-plan.test.js +332 -0
  519. package/dist/tests/core/vm-plan.test.js.map +1 -0
  520. package/dist/tests/core/vm-reap.test.js +196 -0
  521. package/dist/tests/core/vm-reap.test.js.map +1 -0
  522. package/dist/tests/core/workflow-parse.test.js +493 -0
  523. package/dist/tests/core/workflow-parse.test.js.map +1 -0
  524. package/dist/tests/core/workspace-decide.test.js +236 -0
  525. package/dist/tests/core/workspace-decide.test.js.map +1 -0
  526. package/dist/tests/helpers/fixtures.js +167 -0
  527. package/dist/tests/helpers/fixtures.js.map +1 -0
  528. package/dist/tests/shell/acp-substrate.test.js +101 -0
  529. package/dist/tests/shell/acp-substrate.test.js.map +1 -0
  530. package/dist/tests/shell/actions-runner-push.test.js +203 -0
  531. package/dist/tests/shell/actions-runner-push.test.js.map +1 -0
  532. package/dist/tests/shell/credential-hooks.test.js +36 -0
  533. package/dist/tests/shell/credential-hooks.test.js.map +1 -0
  534. package/dist/tests/shell/credential-registry.test.js +165 -0
  535. package/dist/tests/shell/credential-registry.test.js.map +1 -0
  536. package/dist/tests/shell/credential-substrate.test.js +179 -0
  537. package/dist/tests/shell/credential-substrate.test.js.map +1 -0
  538. package/dist/tests/shell/dockerfile-mise-pin.test.js +51 -0
  539. package/dist/tests/shell/dockerfile-mise-pin.test.js.map +1 -0
  540. package/dist/tests/shell/doctor.test.js +101 -0
  541. package/dist/tests/shell/doctor.test.js.map +1 -0
  542. package/dist/tests/shell/effect-vm-create.test.js +52 -0
  543. package/dist/tests/shell/effect-vm-create.test.js.map +1 -0
  544. package/dist/tests/shell/gh-port.test.js +63 -0
  545. package/dist/tests/shell/gh-port.test.js.map +1 -0
  546. package/dist/tests/shell/gondolin-dispatch-guard.test.js +144 -0
  547. package/dist/tests/shell/gondolin-dispatch-guard.test.js.map +1 -0
  548. package/dist/tests/shell/gondolin-dispatch-shquote.test.js +168 -0
  549. package/dist/tests/shell/gondolin-dispatch-shquote.test.js.map +1 -0
  550. package/dist/tests/shell/gondolin-image-converter.test.js +208 -0
  551. package/dist/tests/shell/gondolin-image-converter.test.js.map +1 -0
  552. package/dist/tests/shell/gondolin-image-fetch.test.js +93 -0
  553. package/dist/tests/shell/gondolin-image-fetch.test.js.map +1 -0
  554. package/dist/tests/shell/http-handler.test.js +608 -0
  555. package/dist/tests/shell/http-handler.test.js.map +1 -0
  556. package/dist/tests/shell/http-server.test.js +53 -0
  557. package/dist/tests/shell/http-server.test.js.map +1 -0
  558. package/dist/tests/shell/mcp-runtime.test.js +366 -0
  559. package/dist/tests/shell/mcp-runtime.test.js.map +1 -0
  560. package/dist/tests/shell/mise-config-asset.test.js +87 -0
  561. package/dist/tests/shell/mise-config-asset.test.js.map +1 -0
  562. package/dist/tests/shell/orchestrator-loop.test.js +583 -0
  563. package/dist/tests/shell/orchestrator-loop.test.js.map +1 -0
  564. package/dist/tests/shell/reconciler-passes.test.js +314 -0
  565. package/dist/tests/shell/reconciler-passes.test.js.map +1 -0
  566. package/dist/tests/shell/runner-loop-turn.test.js +97 -0
  567. package/dist/tests/shell/runner-loop-turn.test.js.map +1 -0
  568. package/dist/tests/shell/runner-slice.test.js +536 -0
  569. package/dist/tests/shell/runner-slice.test.js.map +1 -0
  570. package/dist/tests/shell/scaffold.test.js +65 -0
  571. package/dist/tests/shell/scaffold.test.js.map +1 -0
  572. package/dist/tests/shell/tick-config.test.js +83 -0
  573. package/dist/tests/shell/tick-config.test.js.map +1 -0
  574. package/dist/tests/shell/tracker-parse-dates.test.js +44 -0
  575. package/dist/tests/shell/tracker-parse-dates.test.js.map +1 -0
  576. package/dist/tests/shell/tracker-write-issue.test.js +154 -0
  577. package/dist/tests/shell/tracker-write-issue.test.js.map +1 -0
  578. package/dist/tests/shell/workflow-prompt-split.test.js +208 -0
  579. package/dist/tests/shell/workflow-prompt-split.test.js.map +1 -0
  580. package/dist/tests/shell/workspace-live-config.test.js +140 -0
  581. package/dist/tests/shell/workspace-live-config.test.js.map +1 -0
  582. package/package.json +21 -9
  583. package/patches/@earendil-works+gondolin+0.12.0.patch +173 -0
  584. package/prompts/Reflect.md +91 -0
  585. package/prompts/Review.md +97 -0
  586. package/prompts/Todo.md +96 -0
  587. package/prompts/_footer.md +41 -0
  588. package/prompts/_preamble.md +42 -0
  589. package/prompts-minimal/Todo.md +26 -0
  590. package/scripts/postinstall.mjs +63 -0
  591. package/scripts/vm-agent.mjs +312 -90
  592. package/WORKFLOW.md +0 -744
  593. package/dist/acp-bridge.js +0 -324
  594. package/dist/acp-bridge.js.map +0 -1
  595. package/dist/actions/cache.js +0 -191
  596. package/dist/actions/cache.js.map +0 -1
  597. package/dist/actions/effects.js +0 -41
  598. package/dist/actions/effects.js.map +0 -1
  599. package/dist/actions/executor.js +0 -570
  600. package/dist/actions/executor.js.map +0 -1
  601. package/dist/actions/index.js +0 -13
  602. package/dist/actions/index.js.map +0 -1
  603. package/dist/actions/parsing.js.map +0 -1
  604. package/dist/actions/predicate-env.js +0 -27
  605. package/dist/actions/predicate-env.js.map +0 -1
  606. package/dist/actions/predicates.js +0 -49
  607. package/dist/actions/predicates.js.map +0 -1
  608. package/dist/actions/templating.js +0 -66
  609. package/dist/actions/templating.js.map +0 -1
  610. package/dist/actions/types.js +0 -15
  611. package/dist/actions/types.js.map +0 -1
  612. package/dist/agent/acp.js +0 -473
  613. package/dist/agent/acp.js.map +0 -1
  614. package/dist/agent/adapter-names.js +0 -159
  615. package/dist/agent/adapter-names.js.map +0 -1
  616. package/dist/agent/adapters.js +0 -511
  617. package/dist/agent/adapters.js.map +0 -1
  618. package/dist/agent/credential-extractors.js +0 -342
  619. package/dist/agent/credential-extractors.js.map +0 -1
  620. package/dist/agent/credential-secrets.js +0 -628
  621. package/dist/agent/credential-secrets.js.map +0 -1
  622. package/dist/agent/credential-ticker.js +0 -57
  623. package/dist/agent/credential-ticker.js.map +0 -1
  624. package/dist/agent/gondolin-creds-staging.js +0 -356
  625. package/dist/agent/gondolin-creds-staging.js.map +0 -1
  626. package/dist/agent/gondolin-dispatch.js +0 -375
  627. package/dist/agent/gondolin-dispatch.js.map +0 -1
  628. package/dist/agent/gondolin.js +0 -124
  629. package/dist/agent/gondolin.js.map +0 -1
  630. package/dist/agent/runner-decisions.js +0 -134
  631. package/dist/agent/runner-decisions.js.map +0 -1
  632. package/dist/agent/runner.js +0 -1456
  633. package/dist/agent/runner.js.map +0 -1
  634. package/dist/agent/tool-call-summary.js +0 -102
  635. package/dist/agent/tool-call-summary.js.map +0 -1
  636. package/dist/agent/vm-acp-mapping.js +0 -73
  637. package/dist/agent/vm-acp-mapping.js.map +0 -1
  638. package/dist/agent/vm-guards.js +0 -262
  639. package/dist/agent/vm-guards.js.map +0 -1
  640. package/dist/agent/vm-port.js +0 -22
  641. package/dist/agent/vm-port.js.map +0 -1
  642. package/dist/agent/vm-process-registry.js +0 -79
  643. package/dist/agent/vm-process-registry.js.map +0 -1
  644. package/dist/bin/cli-args.js +0 -105
  645. package/dist/bin/cli-args.js.map +0 -1
  646. package/dist/bin/symphony.js +0 -794
  647. package/dist/bin/symphony.js.map +0 -1
  648. package/dist/errors.js +0 -15
  649. package/dist/errors.js.map +0 -1
  650. package/dist/http-disk.js +0 -135
  651. package/dist/http-disk.js.map +0 -1
  652. package/dist/http-handlers.js.map +0 -1
  653. package/dist/http.js.map +0 -1
  654. package/dist/issues.js +0 -178
  655. package/dist/issues.js.map +0 -1
  656. package/dist/logging.js +0 -203
  657. package/dist/logging.js.map +0 -1
  658. package/dist/mcp.js +0 -706
  659. package/dist/mcp.js.map +0 -1
  660. package/dist/memory.js +0 -85
  661. package/dist/memory.js.map +0 -1
  662. package/dist/orchestrator-decisions.js +0 -331
  663. package/dist/orchestrator-decisions.js.map +0 -1
  664. package/dist/orchestrator.js +0 -1569
  665. package/dist/orchestrator.js.map +0 -1
  666. package/dist/prompt.js +0 -65
  667. package/dist/prompt.js.map +0 -1
  668. package/dist/reconciler/cache.js +0 -65
  669. package/dist/reconciler/cache.js.map +0 -1
  670. package/dist/reconciler/index.js +0 -448
  671. package/dist/reconciler/index.js.map +0 -1
  672. package/dist/reconciler/ledger.js +0 -131
  673. package/dist/reconciler/ledger.js.map +0 -1
  674. package/dist/reconciler/pr-adapters.js +0 -174
  675. package/dist/reconciler/pr-adapters.js.map +0 -1
  676. package/dist/reconciler/pr-decide.js.map +0 -1
  677. package/dist/reconciler/pr.js +0 -422
  678. package/dist/reconciler/pr.js.map +0 -1
  679. package/dist/reconciler/types.js +0 -12
  680. package/dist/reconciler/types.js.map +0 -1
  681. package/dist/reconciler/vm.js +0 -243
  682. package/dist/reconciler/vm.js.map +0 -1
  683. package/dist/reconciler/workspace-defaults.js +0 -83
  684. package/dist/reconciler/workspace-defaults.js.map +0 -1
  685. package/dist/reconciler/workspace.js +0 -272
  686. package/dist/reconciler/workspace.js.map +0 -1
  687. package/dist/runlog.js +0 -403
  688. package/dist/runlog.js.map +0 -1
  689. package/dist/scaffold.js +0 -165
  690. package/dist/scaffold.js.map +0 -1
  691. package/dist/trackers/local.js +0 -445
  692. package/dist/trackers/local.js.map +0 -1
  693. package/dist/trackers/types.js +0 -10
  694. package/dist/trackers/types.js.map +0 -1
  695. package/dist/types.js +0 -3
  696. package/dist/types.js.map +0 -1
  697. package/dist/util/clock.js +0 -12
  698. package/dist/util/clock.js.map +0 -1
  699. package/dist/util/crypto.js +0 -25
  700. package/dist/util/crypto.js.map +0 -1
  701. package/dist/util/frontmatter.js +0 -70
  702. package/dist/util/frontmatter.js.map +0 -1
  703. package/dist/util/fs-issues.js +0 -22
  704. package/dist/util/fs-issues.js.map +0 -1
  705. package/dist/util/process.js +0 -152
  706. package/dist/util/process.js.map +0 -1
  707. package/dist/util/workspace-key.js +0 -10
  708. package/dist/util/workspace-key.js.map +0 -1
  709. package/dist/workflow-loader.js +0 -147
  710. package/dist/workflow-loader.js.map +0 -1
  711. package/dist/workflow.js +0 -822
  712. package/dist/workflow.js.map +0 -1
  713. package/dist/workspace-types.js +0 -8
  714. package/dist/workspace-types.js.map +0 -1
  715. package/dist/workspace.js +0 -443
  716. package/dist/workspace.js.map +0 -1
@@ -0,0 +1,163 @@
1
+ // FCIS rewrite — shell adapter: GitHub `gh` CLI port (kind: adapter).
2
+ //
3
+ // Implements {@link GhPort} from src/types/ports. The effect-interpreter
4
+ // delegates every GhEffect variant here: pr_view / pr_list_for_branch use the
5
+ // typed read methods below; the mutating verbs (pr_create / pr_arm_auto_merge /
6
+ // pr_update_branch / pr_close) go through the generic `run(argv, cwd)` — the
7
+ // interpreter builds the argv and folds the RunResultData, so this port stays a
8
+ // thin shell-out and error-on-nonzero is the interpreter's call for those. The
9
+ // read methods still throw on nonzero/non-JSON to keep the original
10
+ // PR-autopilot fail-loud contract. (pr_delete_remote_branch is routed to the
11
+ // git port, so it is NOT a GhPort method.)
12
+ //
13
+ // Ported from `src/reconciler/pr-adapters.ts` (GhCliPrApi), which captured an
14
+ // `owner/repo` slug at construction and emitted `--repo <slug>`. That slug is
15
+ // restored here as a live `repoSlug` accessor: `withRepo` appends `--repo
16
+ // <slug>` to autopilot `gh pr` verbs (view/list/merge/close/update-branch) so
17
+ // they target the configured `workspace.github_repo` even when the host cwd's
18
+ // `origin` differs from it (the out-of-repo control-dir layout) or is absent.
19
+ // `pr create` is exempt — it runs in the per-issue workspace whose `origin` is
20
+ // already the target — and a null slug (local-only) infers from cwd as before.
21
+ // PR-autopilot gh output (json blobs) can be large; keep the historical 1 MiB
22
+ // clamp rather than the runner default.
23
+ const GH_MAX_BYTES = 1_048_576;
24
+ /** Default production GhPort backed by the `gh` CLI on the host. */
25
+ export class GhCliPort {
26
+ proc;
27
+ opts;
28
+ constructor(proc, opts = {}) {
29
+ this.proc = proc;
30
+ this.opts = opts;
31
+ }
32
+ /** `gh <argv>` with the historical 1 MiB clamp + configured timeout. */
33
+ sh(argv, cwd) {
34
+ return this.proc.run(['gh', ...this.withRepo(argv)], {
35
+ cwd,
36
+ timeoutMs: this.opts.timeoutMs,
37
+ maxBytes: GH_MAX_BYTES,
38
+ });
39
+ }
40
+ /**
41
+ * Append `--repo <slug>` to autopilot `gh pr` verbs so lookups/merges/closes
42
+ * hit the configured `workspace.github_repo` regardless of the cwd's `origin`.
43
+ * `pr create` is exempt (it runs in the workspace whose origin is the target),
44
+ * and a null slug (local-only) leaves argv untouched so gh infers from cwd.
45
+ */
46
+ withRepo(argv) {
47
+ const slug = this.opts.repoSlug?.();
48
+ if (!slug || argv[0] !== 'pr' || argv[1] === 'create')
49
+ return argv;
50
+ return [...argv, '--repo', slug];
51
+ }
52
+ /**
53
+ * Generic gh shell-out. The interpreter passes the full argv (without the
54
+ * leading `gh`) and folds the returned RunResultData itself, so this method
55
+ * does NOT throw on nonzero — it surfaces the raw result (matching the
56
+ * effect-interpreter's `{ kind: 'run_result' }` contract for the mutating
57
+ * verbs: pr_create / pr_arm_auto_merge / pr_update_branch / pr_close).
58
+ */
59
+ run(argv, cwd) {
60
+ return this.sh(argv, cwd);
61
+ }
62
+ /**
63
+ * `gh pr view <n> --json ...`. Returns null only when the process itself
64
+ * could not run; a successful-but-empty/garbled payload still yields a
65
+ * best-effort PrView (the original threw on nonzero/non-JSON — preserved).
66
+ */
67
+ async prView(cwd, prNumber) {
68
+ const res = await this.sh([
69
+ 'pr',
70
+ 'view',
71
+ String(prNumber),
72
+ '--json',
73
+ 'number,url,state,mergeable,mergeStateStatus,baseRefName,baseRefOid,headRefName,headRefOid,reviewDecision,autoMergeRequest',
74
+ ], cwd);
75
+ if (!res.ran)
76
+ return null;
77
+ if (res.exit_code !== 0) {
78
+ throw new Error(`gh pr view ${prNumber} failed (exit ${res.exit_code}): ${res.stderr.trim()}`);
79
+ }
80
+ return parseGhPrView(prNumber, res.stdout);
81
+ }
82
+ /**
83
+ * `gh pr list --head <branch> --state all`. `--state all` so a merged /
84
+ * closed PR is still returned — once we have the number, cleanup drives via
85
+ * `view` (works against any state). An OPEN-only filter would make a
86
+ * post-merge or operator-closed PR invisible to the autopilot.
87
+ */
88
+ async prListForBranch(cwd, branch) {
89
+ const res = await this.sh(['pr', 'list', '--head', branch, '--state', 'all', '--json', 'number,url', '--limit', '1'], cwd);
90
+ if (!res.ran)
91
+ return null;
92
+ if (res.exit_code !== 0) {
93
+ throw new Error(`gh pr list failed (exit ${res.exit_code}): ${res.stderr.trim()}`);
94
+ }
95
+ let parsed;
96
+ try {
97
+ parsed = JSON.parse(res.stdout);
98
+ }
99
+ catch (err) {
100
+ throw new Error(`gh pr list returned non-JSON: ${err.message}`);
101
+ }
102
+ if (!Array.isArray(parsed) || parsed.length === 0)
103
+ return null;
104
+ const first = parsed[0];
105
+ if (typeof first.number !== 'number' || typeof first.url !== 'string')
106
+ return null;
107
+ return { number: first.number, url: first.url };
108
+ }
109
+ }
110
+ // ─── parsers (pure; lifted verbatim from the original adapter) ───────────────
111
+ function parseGhPrView(prNumber, stdout) {
112
+ let parsed;
113
+ try {
114
+ parsed = JSON.parse(stdout);
115
+ }
116
+ catch (err) {
117
+ throw new Error(`gh pr view returned non-JSON: ${err.message}`);
118
+ }
119
+ return {
120
+ number: typeof parsed.number === 'number' ? parsed.number : prNumber,
121
+ url: typeof parsed.url === 'string' ? parsed.url : '',
122
+ state: normalizeState(parsed.state),
123
+ mergeable: normalizeMergeable(parsed.mergeable),
124
+ merge_state_status: normalizeMergeStateStatus(parsed.mergeStateStatus),
125
+ base_ref_name: typeof parsed.baseRefName === 'string' ? parsed.baseRefName : '',
126
+ base_ref_oid: typeof parsed.baseRefOid === 'string' ? parsed.baseRefOid : null,
127
+ head_ref_name: typeof parsed.headRefName === 'string' ? parsed.headRefName : '',
128
+ head_ref_oid: typeof parsed.headRefOid === 'string' ? parsed.headRefOid : '',
129
+ review_decision: normalizeReviewDecision(parsed.reviewDecision),
130
+ auto_merge_armed: parsed.autoMergeRequest !== null &&
131
+ parsed.autoMergeRequest !== undefined &&
132
+ typeof parsed.autoMergeRequest === 'object',
133
+ };
134
+ }
135
+ function normalizeState(raw) {
136
+ if (raw === 'OPEN' || raw === 'CLOSED' || raw === 'MERGED')
137
+ return raw;
138
+ return 'OPEN';
139
+ }
140
+ function normalizeMergeable(raw) {
141
+ if (raw === 'MERGEABLE' || raw === 'CONFLICTING' || raw === 'UNKNOWN')
142
+ return raw;
143
+ return 'UNKNOWN';
144
+ }
145
+ function normalizeMergeStateStatus(raw) {
146
+ if (raw === 'BEHIND' ||
147
+ raw === 'BLOCKED' ||
148
+ raw === 'CLEAN' ||
149
+ raw === 'DIRTY' ||
150
+ raw === 'DRAFT' ||
151
+ raw === 'HAS_HOOKS' ||
152
+ raw === 'UNKNOWN' ||
153
+ raw === 'UNSTABLE') {
154
+ return raw;
155
+ }
156
+ return 'UNKNOWN';
157
+ }
158
+ function normalizeReviewDecision(raw) {
159
+ if (raw === 'APPROVED' || raw === 'CHANGES_REQUESTED' || raw === 'REVIEW_REQUIRED')
160
+ return raw;
161
+ return null;
162
+ }
163
+ //# sourceMappingURL=gh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh.js","sourceRoot":"","sources":["../../../../src/shell/interp/gh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ // FCIS rewrite — git effect interpreter (kind: adapter).
2
+ //
3
+ // The {@link GitPort} (`run(argv, cwd)`) is the single git seam: the central
4
+ // effect-interpreter encodes each GitEffect's argv inline and drains it here.
5
+ // This adapter owns ONLY the spawn clamp + verb→child-process mapping; the
6
+ // per-effect argv (push -u, force-with-lease, fetch --no-tags, clone --local,
7
+ // merge --no-ff …) and the non-fast-forward fold live in the central router.
8
+ //
9
+ // Fidelity anchor (read-only reference, NOT modified): src/actions/executor.ts
10
+ // runCommand → `defaultCommandTimeoutMs` (5 min) so a wedged remote can't hang
11
+ // the loop forever.
12
+ //
13
+ // Shell rule: imports from src/types/** ONLY. The concrete child-process spawn
14
+ // is injected as a `ProcessRunner` port by the composition root, so spawn
15
+ // lifecycle (capture, kill-on-timeout) lives once in the runner adapter.
16
+ // Per-git-command wall-clock clamp. Mirrors the executor's
17
+ // `defaultCommandTimeoutMs` (5 min).
18
+ const DEFAULT_GIT_TIMEOUT_MS = 300_000;
19
+ /** Build the git adapter: a thin `git <argv>` runner clamped to `timeoutMs`. */
20
+ export function createGitAdapter(deps) {
21
+ const timeoutMs = deps.defaultTimeoutMs ?? DEFAULT_GIT_TIMEOUT_MS;
22
+ return {
23
+ run(argv, cwd) {
24
+ return deps.process.run(['git', ...argv], { cwd, timeoutMs });
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/shell/interp/git.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,oBAAoB;AACpB,EAAE;AACF,+EAA+E;AAC/E,0EAA0E;AAC1E,yEAAyE;AAKzE,2DAA2D;AAC3D,qCAAqC;AACrC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AASvC,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,sBAAsB,CAAC;IAClE,OAAO;QACL,GAAG,CAAC,IAAc,EAAE,GAAW;YAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,213 @@
1
+ // FCIS rewrite — shell adapter: structured logger / LogEffect interpreter (kind: adapter).
2
+ //
3
+ // Interprets the LogEffect family by implementing the {@link LogSink} port from
4
+ // src/types/ports. The central effect-interpreter holds a `LogSink` (`deps.log`)
5
+ // and, for `{ family: 'log', kind: 'emit' }`, calls:
6
+ // (effect.issueId ? sink.withIssue(effect.issueId) : sink)
7
+ // .emit(effect.level, effect.message, effect.fields)
8
+ // So this module is the runtime behind that seam: leveled structured logging,
9
+ // per-issue context binding (`withIssue`), an optional persistent file sink, and
10
+ // a console mirror controlled by `--verbose`.
11
+ //
12
+ // Ported faithfully from the original `src/logging.ts` (read-only reference). The
13
+ // only shape change vs. the original is that the per-issue helper is exposed as a
14
+ // `LogSink.withIssue()` method (returning another `LogSink`) instead of the free
15
+ // `withIssue(ctx)` function, matching the port. The structured `key=value` wire
16
+ // format, the level gate (SYMPHONY_LOG_LEVEL), the file-sink lifecycle, and the
17
+ // console-routing rules (issue 118) are preserved verbatim.
18
+ //
19
+ // Sink failures never crash the orchestrator (SPEC §9.2): file-sink open/write
20
+ // failures emit a single stderr warning then degrade silently; stderr writes are
21
+ // wrapped in try/catch.
22
+ import { closeSync, createWriteStream, mkdirSync, openSync } from 'node:fs';
23
+ import path from 'node:path';
24
+ const ENV_LEVEL = (process.env.SYMPHONY_LOG_LEVEL ?? 'info').toLowerCase();
25
+ const LEVEL_RANK = { debug: 10, info: 20, warn: 30, error: 40 };
26
+ // Process-global sink state. The original logging module was a singleton; the
27
+ // rewrite keeps a single module-level sink (one orchestrator process == one log
28
+ // stream) so the file-sink lifecycle (`setLogFile`/`closeLogFile`) and the
29
+ // `--verbose` toggle remain process-wide, exactly as the composition root drives
30
+ // them. `buildLogSink()` hands out lightweight LogSink views over this state.
31
+ let fileSink = null;
32
+ let fileSinkBroken = false;
33
+ let fileSinkPath = null;
34
+ let verbose = false;
35
+ /** Render a field value, quoting (JSON) anything containing whitespace/quote/equals. */
36
+ function quote(v) {
37
+ if (v === null || v === undefined)
38
+ return '';
39
+ const s = String(v);
40
+ return /[\s"=]/.test(s) ? JSON.stringify(s) : s;
41
+ }
42
+ function format(level, msg, fields) {
43
+ const ts = new Date().toISOString();
44
+ const parts = [`ts=${ts}`, `level=${level}`, `msg=${quote(msg)}`];
45
+ for (const [k, v] of Object.entries(fields)) {
46
+ if (v === undefined)
47
+ continue;
48
+ parts.push(`${k}=${quote(v)}`);
49
+ }
50
+ return parts.join(' ');
51
+ }
52
+ function writeFileSink(line) {
53
+ if (!fileSink || fileSinkBroken)
54
+ return;
55
+ try {
56
+ fileSink.write(line);
57
+ }
58
+ catch {
59
+ // Stream errors land in the 'error' handler attached in setLogFile; a
60
+ // synchronous throw is unusual but not impossible — swallow it.
61
+ }
62
+ }
63
+ function emit(level, msg, fields = {}) {
64
+ if (LEVEL_RANK[level] < LEVEL_RANK[ENV_LEVEL])
65
+ return;
66
+ const line = format(level, msg, fields) + '\n';
67
+ // Route to stderr only when no working file sink is capturing the line (so a
68
+ // no-log-file setup loses nothing) or when --verbose was requested
69
+ // (interactive debugging). A broken sink counts as inactive so its dropped
70
+ // writes fall back to stderr rather than vanishing. See issue 118.
71
+ const fileSinkActive = fileSink !== null && !fileSinkBroken;
72
+ if (verbose || !fileSinkActive) {
73
+ try {
74
+ process.stderr.write(line);
75
+ }
76
+ catch {
77
+ // SPEC §9.2: a failed sink must not crash the service.
78
+ }
79
+ }
80
+ writeFileSink(line);
81
+ }
82
+ /**
83
+ * Force structured logs back onto stderr even when a file sink is active. The
84
+ * `--verbose` / `--foreground` flag flips this on for interactive debugging; the
85
+ * default (false) keeps the console clean by routing logs to the file only
86
+ * whenever a sink is configured. Idempotent.
87
+ */
88
+ export function setLogVerbose(on) {
89
+ verbose = on;
90
+ }
91
+ /**
92
+ * Enable (or replace) the persistent file sink. Pass `null`/`''` to close any
93
+ * currently-open file sink and revert to stderr-only.
94
+ *
95
+ * The directory is created on demand and the file opened synchronously via
96
+ * `openSync` so failures (EISDIR, EACCES, ENOTDIR, ENOSPC) surface here, before
97
+ * the sink is installed. Open failures do not throw: a single stderr warning is
98
+ * emitted and the function returns `null`. After a successful open, runtime
99
+ * stream errors flip the sink into a broken state (dropping further writes
100
+ * silently) so a mid-run disk-full condition cannot recursively spam stderr.
101
+ *
102
+ * Idempotent for repeated calls with the same path. Returns the absolute path
103
+ * actually opened, or `null` when the sink was disabled or failed to open.
104
+ */
105
+ export function setLogFile(filePath) {
106
+ if (filePath === null || filePath === '') {
107
+ void closeLogFile();
108
+ return null;
109
+ }
110
+ const abs = path.resolve(filePath);
111
+ if (fileSink && fileSinkPath === abs && !fileSinkBroken)
112
+ return abs;
113
+ void closeLogFile();
114
+ const stream = openFileStream(abs);
115
+ if (!stream) {
116
+ fileSink = null;
117
+ fileSinkPath = null;
118
+ fileSinkBroken = false;
119
+ return null;
120
+ }
121
+ stream.on('error', (err) => {
122
+ if (!fileSinkBroken) {
123
+ fileSinkBroken = true;
124
+ warnToStderr('log file sink write failed', abs, err);
125
+ }
126
+ });
127
+ fileSink = stream;
128
+ fileSinkPath = abs;
129
+ fileSinkBroken = false;
130
+ return abs;
131
+ }
132
+ /**
133
+ * Create the directory and open the append stream for `abs`. The file is opened
134
+ * synchronously via `openSync` so EISDIR / EACCES / ENOTDIR surface here instead
135
+ * of arriving asynchronously on the stream's 'error' event after setLogFile()
136
+ * has already returned the path; the fd is handed to createWriteStream for reuse
137
+ * (its close still releases the fd). On any failure a single stderr warning is
138
+ * emitted and `null` returned, leaving the caller to reset sink state.
139
+ */
140
+ function openFileStream(abs) {
141
+ let fd;
142
+ try {
143
+ mkdirSync(path.dirname(abs), { recursive: true });
144
+ fd = openSync(abs, 'a');
145
+ }
146
+ catch (err) {
147
+ warnToStderr('log file sink open failed', abs, err);
148
+ return null;
149
+ }
150
+ try {
151
+ return createWriteStream(abs, { encoding: 'utf8', fd, autoClose: true });
152
+ }
153
+ catch (err) {
154
+ try {
155
+ closeSync(fd);
156
+ }
157
+ catch {
158
+ // fd already gone; nothing to do.
159
+ }
160
+ warnToStderr('log file sink open failed', abs, err);
161
+ return null;
162
+ }
163
+ }
164
+ function warnToStderr(msg, abs, err) {
165
+ try {
166
+ process.stderr.write(format('warn', msg, { path: abs, error: err.message }) + '\n');
167
+ }
168
+ catch {
169
+ // stderr itself failed; nothing left to do.
170
+ }
171
+ }
172
+ /**
173
+ * Close the file sink and await the underlying stream's flush. Safe to call
174
+ * repeatedly. Callers that intend to `process.exit()` immediately afterwards
175
+ * MUST await this — `process.exit` does not drain pending WriteStream writes, so
176
+ * the final log lines (including the shutdown banner) would otherwise be lost.
177
+ */
178
+ export async function closeLogFile() {
179
+ const sink = fileSink;
180
+ fileSink = null;
181
+ fileSinkPath = null;
182
+ fileSinkBroken = false;
183
+ if (!sink)
184
+ return;
185
+ await new Promise((resolve) => {
186
+ try {
187
+ sink.end(() => resolve());
188
+ }
189
+ catch {
190
+ resolve();
191
+ }
192
+ });
193
+ }
194
+ /**
195
+ * Build a {@link LogSink} view over the process-global structured logger. The
196
+ * effect-interpreter holds one of these as `deps.log` and drains LogEffects
197
+ * through it; `withIssue(issueId)` returns a child sink that prefixes every
198
+ * record with `issue_id`, mirroring the original `withIssue({ issue_id })`.
199
+ */
200
+ export function buildLogSink() {
201
+ return makeSink({});
202
+ }
203
+ function makeSink(ctx) {
204
+ return {
205
+ emit(level, message, fields) {
206
+ emit(level, message, { ...ctx, ...(fields ?? {}) });
207
+ },
208
+ withIssue(issueId) {
209
+ return makeSink({ ...ctx, issue_id: issueId });
210
+ },
211
+ };
212
+ }
213
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../src/shell/interp/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ // FCIS rewrite — process effect interpreter (kind: adapter).
2
+ //
3
+ // Owns the host-side child-process seam in two ports:
4
+ //
5
+ // • ProcessRunner.run(argv, opts) — the single owner of spawn lifecycle for
6
+ // every host shell-out (git, gh, credential refreshers). Faithful port of
7
+ // the original `runProcess` (src/util/process.ts): pipe both streams,
8
+ // accumulate with a per-stream max-bytes clamp, optional timeout that
9
+ // SIGKILLs on overrun, optional cwd/env override, swallow pipe-level read
10
+ // errors on kill, guard against double-settle. Resolves, never rejects.
11
+ //
12
+ // • ProcessSignalPort.kill/probe/selfPid — the reaper's host-signal seam.
13
+ // Ports the signal semantics of src/agent/vm-process-registry.ts: a
14
+ // best-effort `process.kill(pid, signal)` that classifies ESRCH (already
15
+ // gone) and EPERM (no permission) instead of throwing, plus a signal-0
16
+ // liveness `probe`. `selfPid()` injects the host pid so core deciders never
17
+ // read `process.pid` directly.
18
+ //
19
+ // Fidelity anchors (read-only reference, NOT modified):
20
+ // • src/util/process.ts:runProcess — spawn/capture/clamp/timeout lifecycle.
21
+ // • src/agent/vm-process-registry.ts — kill/probe signal classification.
22
+ //
23
+ // Shell rule: imports from src/types/** ONLY. The concrete `node:child_process`
24
+ // spawn lives here (this IS the adapter); decisions (which pids are safe to
25
+ // kill, escalation order) live in core and arrive as effects.
26
+ import { spawn } from 'node:child_process';
27
+ /**
28
+ * Default per-stream byte clamp. Mirrors the dominant value across the wrappers
29
+ * the original `runProcess` replaced (workspace / agent / actions all used
30
+ * 65_536). Callers needing a larger buffer (a big `git`/`gh` JSON payload) pass
31
+ * `maxBytes` explicitly.
32
+ */
33
+ const DEFAULT_MAX_BYTES = 65_536;
34
+ /**
35
+ * Run a process and capture its output. Single source of truth for spawn
36
+ * lifecycle: timeout, capture, env-merge and clamp all live here. Resolves,
37
+ * never rejects — failure surfaces in the result:
38
+ * • spawn error (ENOENT/EACCES): exit_code = null, stderr carries the OS msg.
39
+ * • timeout: timed_out = true, signal = 'SIGKILL'.
40
+ * • non-zero exit: exit_code carries the code.
41
+ *
42
+ * `argv[0]` is the binary; `argv[1..]` the args (the ProcessRunner port passes
43
+ * the full argv, unlike the original's `(bin, args)` split).
44
+ */
45
+ function runProcess(argv, opts = {}) {
46
+ const [bin, ...args] = argv;
47
+ const maxBytes = opts.maxBytes ?? DEFAULT_MAX_BYTES;
48
+ // Merge caller env on top of the host env (matches the original's
49
+ // `{ ...process.env, ...opts.env }`); ambient env when no override.
50
+ const env = opts.env ? { ...process.env, ...opts.env } : process.env;
51
+ return new Promise((resolve) => {
52
+ // A missing binary surfaces as the child's 'error' event below; guard the
53
+ // pathological empty-argv case so `spawn(undefined)` can't throw synchronously.
54
+ if (bin === undefined) {
55
+ resolve({ ran: true, exit_code: null, signal: null, timed_out: false, stdout: '', stderr: 'empty argv' });
56
+ return;
57
+ }
58
+ const child = spawn(bin, args, {
59
+ cwd: opts.cwd,
60
+ stdio: ['ignore', 'pipe', 'pipe'],
61
+ env: env,
62
+ });
63
+ let stdout = '';
64
+ let stderr = '';
65
+ let timedOut = false;
66
+ let settled = false;
67
+ child.stdout?.on('data', (b) => {
68
+ stdout += b.toString('utf8');
69
+ if (stdout.length > maxBytes)
70
+ stdout = stdout.slice(0, maxBytes);
71
+ });
72
+ child.stderr?.on('data', (b) => {
73
+ stderr += b.toString('utf8');
74
+ if (stderr.length > maxBytes)
75
+ stderr = stderr.slice(0, maxBytes);
76
+ });
77
+ // SIGKILLing the child aborts any in-flight pipe read; libuv emits an
78
+ // 'error' (AbortError/ECONNRESET/EPIPE) on stdout/stderr. The authoritative
79
+ // outcome already arrives via 'close'/'error' on the child, so this is not
80
+ // actionable — but an EventEmitter with no 'error' listener rethrows it as
81
+ // an uncaughtException that crashes the host. Swallow it (issue 143).
82
+ const ignorePipeError = () => {
83
+ /* read aborted on kill — outcome comes from 'close' */
84
+ };
85
+ child.stdout?.on('error', ignorePipeError);
86
+ child.stderr?.on('error', ignorePipeError);
87
+ const timer = opts.timeoutMs && opts.timeoutMs > 0
88
+ ? setTimeout(() => {
89
+ timedOut = true;
90
+ child.kill('SIGKILL');
91
+ }, opts.timeoutMs)
92
+ : null;
93
+ const finish = (r) => {
94
+ // Spawn failures emit both 'error' and 'close' for the same child (Node
95
+ // synthesizes a 'close' with code=-2 after an ENOENT 'error'). Both route
96
+ // here; guard against double-settling so the promise resolves once.
97
+ if (settled)
98
+ return;
99
+ settled = true;
100
+ if (timer)
101
+ clearTimeout(timer);
102
+ resolve(r);
103
+ };
104
+ child.on('error', (err) => {
105
+ const errStderr = `${stderr}${stderr.length > 0 ? '\n' : ''}${err.message}`;
106
+ finish({
107
+ ran: true,
108
+ exit_code: null,
109
+ signal: null,
110
+ timed_out: timedOut,
111
+ stdout,
112
+ stderr: errStderr.length > maxBytes ? errStderr.slice(0, maxBytes) : errStderr,
113
+ });
114
+ });
115
+ child.on('close', (code, signal) => {
116
+ finish({ ran: true, exit_code: code, signal: signal ?? null, timed_out: timedOut, stdout, stderr });
117
+ });
118
+ });
119
+ }
120
+ /**
121
+ * Build the generic process runner (backs the git/gh/credential interpreters
122
+ * and the `process.run` effect). Thin wrapper over {@link runProcess}; all
123
+ * lifecycle quirks live in that function so subprocess-management changes stay
124
+ * one-file edits.
125
+ */
126
+ export function createProcessRunner() {
127
+ return {
128
+ run(argv, opts) {
129
+ return runProcess(argv, opts ?? {});
130
+ },
131
+ };
132
+ }
133
+ /** Node surfaces these as `err.code` on a failed `process.kill`. */
134
+ function classifyKillError(err) {
135
+ const code = err?.code;
136
+ return { gone: code === 'ESRCH', noPerm: code === 'EPERM' };
137
+ }
138
+ /**
139
+ * Build the reaper's host-signal port. Mirrors vm-process-registry's
140
+ * best-effort signalling: a successful `kill` is `{ ok: true }`; ESRCH (the pid
141
+ * is already gone) and EPERM (no permission) are classified, not thrown, so a
142
+ * dead-or-foreign pid never wedges the SIGTERM→grace→SIGKILL escalation.
143
+ *
144
+ * `probe` is the signal-0 liveness check (kill with signal 0 sends nothing but
145
+ * still validates the pid exists and is signallable): no error ⇒ alive; ESRCH ⇒
146
+ * dead; EPERM ⇒ alive-but-unsignallable (reported via `noPerm`).
147
+ */
148
+ export function createProcessSignalPort(deps = {}) {
149
+ const kill = deps.kill ?? ((pid, signal) => process.kill(pid, signal));
150
+ const ownPid = deps.selfPid ?? process.pid;
151
+ return {
152
+ kill(pid, signal) {
153
+ try {
154
+ kill(pid, signal);
155
+ return { ok: true, gone: false, noPerm: false };
156
+ }
157
+ catch (err) {
158
+ const { gone, noPerm } = classifyKillError(err);
159
+ return { ok: false, gone, noPerm };
160
+ }
161
+ },
162
+ probe(pid) {
163
+ try {
164
+ kill(pid, 0);
165
+ return { alive: true, noPerm: false };
166
+ }
167
+ catch (err) {
168
+ const { gone, noPerm } = classifyKillError(err);
169
+ // EPERM means the process exists but we can't signal it ⇒ still alive.
170
+ return { alive: noPerm, noPerm };
171
+ }
172
+ },
173
+ selfPid() {
174
+ return ownPid;
175
+ },
176
+ };
177
+ }
178
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../../src/shell/interp/process.ts"],"names":[],"mappings":"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"}