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 @@
1
+ {"version":3,"file":"orchestrator-loop.js","sourceRoot":"","sources":["../../../src/shell/orchestrator-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ // FCIS rewrite — the per-poll cancel-on-move reconcile (imperative shell helper).
2
+ //
3
+ // Sliced out of orchestrator-loop.ts (at its max-lines budget) like orchestrator-feedback
4
+ // / orchestrator-image. The loop owns the live `running` map + `terminateRunning`; this
5
+ // reads each LIVE entry's FRESH tracker view across ALL states and applies the SAME pure
6
+ // decider the operator-move reducer routes through (`decideReconcileForIssue`), so a disk
7
+ // `mv`/external move and a dashboard move can't drift (issue 211). Entries the agent
8
+ // itself transitioned are SKIPPED — their worker_exit owns the PR-aware cleanup that a
9
+ // blind reap here would stomp; re-checked after the async fetch (an entry can transition
10
+ // during it). Shell rule: imports from src/types ONLY; the decision is the injected core.
11
+ /**
12
+ * Reconcile every LIVE running entry against its FRESH tracker view (issue 211).
13
+ * `terminate(id, cleanup)` is the loop's own `terminateRunning` (cancel + optional
14
+ * workspace reap); a `refresh` mutates the entry's in-memory snapshot in place. A
15
+ * tracker read miss is a no-op this poll (no spurious kills).
16
+ */
17
+ export async function reconcileRunningEntries(running, deps, terminate) {
18
+ const live = [...running.values()].filter((e) => !e.transitioned);
19
+ if (live.length === 0)
20
+ return;
21
+ const views = await deps.fetchRunningViews(live.map((e) => e.issue_id));
22
+ if (!views)
23
+ return;
24
+ const states = deps.readConfig().states;
25
+ for (const entry of live) {
26
+ if (entry.transitioned)
27
+ continue; // transitioned during the fetch — leave it to worker_exit
28
+ const fresh = views.get(entry.issue_id);
29
+ const action = deps.reconcileIssue(fresh, states);
30
+ if (action.kind === 'terminate')
31
+ terminate(entry.issue_id, action.cleanup);
32
+ else if (action.kind === 'refresh' && fresh)
33
+ entry.issue = fresh;
34
+ }
35
+ }
36
+ //# sourceMappingURL=orchestrator-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-reconcile.js","sourceRoot":"","sources":["../../../src/shell/orchestrator-reconcile.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,0FAA0F;AAC1F,wFAAwF;AACxF,yFAAyF;AACzF,0FAA0F;AAC1F,qFAAqF;AACrF,uFAAuF;AACvF,yFAAyF;AACzF,0FAA0F;AAS1F;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA0C,EAC1C,IAAmB,EACnB,SAAiD;IAEjD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,YAAY;YAAE,SAAS,CAAC,0DAA0D;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;aACtE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,228 @@
1
+ // FCIS rewrite — reconciler loop driver (the imperative shell of the reconciler).
2
+ //
3
+ // Faithful port of the reference `src/reconciler/index.ts` (the `Reconciler`
4
+ // class). Responsibility, verbatim from the reference:
5
+ // • single-flight `inFlight`-promise coalescing so an event burst
6
+ // (config-reload + backstop tick + manual trigger landing within ms of each
7
+ // other) collapses into ONE ongoing reconcile pass, with a `rerunRequested`
8
+ // flag guaranteeing the latest state is always re-observed afterward.
9
+ // • backstop tick: an internal `setInterval` (default 5 min, `backstopIntervalMs`)
10
+ // fires `reconcile()` so a missed config-watcher signal can't park the
11
+ // reconciler forever. The timer is `unref()`'d so it never holds the process
12
+ // open.
13
+ // • startup reap ordering: `reapWorkspaces()` + `reapVms()` run BEFORE the
14
+ // first dispatch (the orchestrator awaits them in `start()` to take over from
15
+ // the deleted `startupTerminalCleanup` sweep). They are decoupled from the
16
+ // normal `reconcile()` walk so VM/workspace reaping can run on its own cadence
17
+ // (startup / shutdown / worker-exit).
18
+ // • drives the vm / workspace / pr deciders + folds via the interpreter.
19
+ //
20
+ // FCIS split: under the rewrite this loop driver does NOT contain the
21
+ // per-resource decide → apply → fold logic — that lives in the functional core
22
+ // (src/core/reconcile/{vm-decide,vm-reap,workspace-decide,pr-decide,pr-loop}.ts)
23
+ // and is composed against the central `EffectInterpreter` by THIN shell adapters
24
+ // (the `ResourcePass` callbacks injected here). This mirrors how the reference
25
+ // delegated to `VmResource.reconcile()` / `WorkspaceResource.reconcile()` /
26
+ // `PrResource.reconcile()`: the loop driver only owns coalescing + ordering +
27
+ // the backstop timer; each resource owns its own convergence. Keeping the pass
28
+ // callbacks injected (rather than imported from src/core) preserves the shell's
29
+ // import discipline — this file imports src/types ONLY (the composition root
30
+ // src/shell/main.ts wires the concrete core-backed passes in).
31
+ //
32
+ // Per-resource passes are idempotent / cheap when there's no work (they return
33
+ // immediately when desired == actual), and each is wrapped in its own try/catch
34
+ // so one throwing resource never aborts the others (verbatim from the reference's
35
+ // `runPass`). A thrown pass is logged via the injected LogSink, not rethrown.
36
+ /** Stable timer id for the backstop tick registered on the TimerPort. */
37
+ const BACKSTOP_TIMER_ID = 'reconciler-backstop';
38
+ const DEFAULT_BACKSTOP_INTERVAL_MS = 5 * 60_000;
39
+ export class ReconcilerLoop {
40
+ backstopIntervalMs;
41
+ passes;
42
+ timer;
43
+ log;
44
+ backstopArmed = false;
45
+ stopped = false;
46
+ // Single-flight: collapse concurrent reconcile() calls into one ongoing pass
47
+ // (verbatim from the reference). `rerunRequested` guarantees a fresh pass
48
+ // observes the latest config after the in-flight one settles.
49
+ inFlight = null;
50
+ rerunRequested = false;
51
+ // Latest per-resource snapshots, refreshed after each pass for the dashboard.
52
+ lastSnapshots = [];
53
+ constructor(opts) {
54
+ this.backstopIntervalMs = opts.backstopIntervalMs ?? DEFAULT_BACKSTOP_INTERVAL_MS;
55
+ this.passes = opts.passes;
56
+ this.timer = opts.timer;
57
+ this.log = opts.log;
58
+ }
59
+ /**
60
+ * Re-bind the injected passes against freshly-reloaded config + then kick a
61
+ * reconcile. Mirrors the reference's `updateConfig`: the orchestrator rebuilds
62
+ * the core-backed passes (workspace root / PR strategy can change on reload)
63
+ * and hands them in here, then this fires a background reconcile so the
64
+ * reloaded config takes effect on the next pass. The fire-and-forget catch
65
+ * mirrors the reference (a reload-triggered reconcile failure is logged, not
66
+ * propagated).
67
+ *
68
+ * `_cfg` is accepted for parity with the reference signature; this loop driver
69
+ * holds no config-derived state of its own (all config lives in the injected
70
+ * passes), so it is intentionally unused here.
71
+ */
72
+ updateConfig(_cfg, passes) {
73
+ this.passes = passes;
74
+ void this.reconcile().catch((err) => this.log.emit('warn', 'reconcile after config reload failed', {
75
+ error: err.message,
76
+ }));
77
+ }
78
+ /**
79
+ * Arm the backstop tick (idempotent). The interval fires `reconcile()` so a
80
+ * missed signal can't park the reconciler forever; the registered timer is a
81
+ * named one-shot re-armed after each fire (the TimerPort has no repeating
82
+ * primitive). The reference `unref()`'d its `setInterval`; the equivalent here
83
+ * is that the TimerPort's setTimer is expected to be `unref()`'d in the shell
84
+ * adapter so the backstop never holds the process open.
85
+ */
86
+ start() {
87
+ if (this.backstopArmed || this.stopped)
88
+ return;
89
+ this.backstopArmed = true;
90
+ this.armBackstop();
91
+ }
92
+ armBackstop() {
93
+ if (this.stopped || !this.backstopArmed)
94
+ return;
95
+ this.timer.setTimer(BACKSTOP_TIMER_ID, this.backstopIntervalMs, () => {
96
+ void this.reconcile()
97
+ .catch((err) => this.log.emit('debug', 'backstop reconcile failed', {
98
+ error: err.message,
99
+ }))
100
+ .finally(() => this.armBackstop());
101
+ });
102
+ }
103
+ /**
104
+ * Stop the loop: clear the backstop timer and mark stopped so no further pass
105
+ * starts. Like the reference, this does NOT block on an in-flight pass — the
106
+ * janitors are idempotent and re-run on the next start. Tests needing
107
+ * deterministic completion call {@link awaitInFlight}.
108
+ */
109
+ async stop() {
110
+ this.stopped = true;
111
+ this.backstopArmed = false;
112
+ this.timer.clearTimer(BACKSTOP_TIMER_ID);
113
+ }
114
+ /** Await the current reconcile pass (if any). Resolves immediately when idle. */
115
+ async awaitInFlight() {
116
+ if (this.inFlight)
117
+ await this.inFlight;
118
+ }
119
+ /**
120
+ * Run the workspace reaper outside the normal reconcile() walk (startup
121
+ * pre-dispatch sweep). mustFix: this runs BEFORE the first dispatch. No-op
122
+ * when the workspace pass isn't wired. A thrown pass is logged, not rethrown
123
+ * (verbatim from the reference's `reapWorkspaces`).
124
+ */
125
+ async reapWorkspaces() {
126
+ await this.runResourcePass(this.passes.workspace, 'workspace reap pass threw');
127
+ }
128
+ /**
129
+ * Run the VM reaper outside the normal reconcile() walk (startup / shutdown /
130
+ * non-clean worker-exit). mustFix: the startup invocation runs BEFORE the
131
+ * first dispatch. No-op when the VM pass isn't wired. A thrown pass is logged,
132
+ * not rethrown (verbatim from the reference's `reapVms`).
133
+ */
134
+ async reapVms() {
135
+ await this.runResourcePass(this.passes.vm, 'vm reap pass threw');
136
+ }
137
+ /**
138
+ * Trigger a reconcile pass. Idempotent across overlapping callers
139
+ * (single-flight); if a pass is in progress when called, a re-run is scheduled
140
+ * to fire once it completes so the latest config is always observed. Verbatim
141
+ * coalescing logic from the reference's `reconcile()`.
142
+ *
143
+ * `force` is threaded for caller compatibility (the CLI `reconcile --force`
144
+ * entry point); it has no resource-specific semantics now that the per-issue
145
+ * bake is gone, but the rerun coalescing still guarantees a fresh pass observes
146
+ * the latest state.
147
+ */
148
+ async reconcile(_opts = {}) {
149
+ if (this.stopped)
150
+ return;
151
+ if (this.inFlight) {
152
+ this.rerunRequested = true;
153
+ await this.inFlight;
154
+ if (this.rerunRequested) {
155
+ this.rerunRequested = false;
156
+ await this.runPass();
157
+ }
158
+ return;
159
+ }
160
+ await this.runPass();
161
+ while (this.rerunRequested && !this.stopped) {
162
+ this.rerunRequested = false;
163
+ await this.runPass();
164
+ }
165
+ }
166
+ /**
167
+ * One reconcile pass: drive the independent janitors (vm reaper, workspace
168
+ * janitor, PR autopilot) in order. Each is wrapped in its own try/catch so a
169
+ * throwing resource never aborts the others, and the whole pass is wrapped once
170
+ * more (verbatim from the reference's `runPass`). `inFlight` is published before
171
+ * the body runs so concurrent callers coalesce onto it, and cleared in
172
+ * `finally` so the next trigger starts fresh.
173
+ */
174
+ async runPass() {
175
+ this.inFlight = (async () => {
176
+ try {
177
+ await this.runResourcePass(this.passes.vm, 'vm reconcile pass threw');
178
+ await this.runResourcePass(this.passes.workspace, 'workspace reconcile pass threw');
179
+ await this.runResourcePass(this.passes.pr, 'pr reconcile pass threw');
180
+ }
181
+ catch (err) {
182
+ this.log.emit('warn', 'reconcile pass threw', { error: err.message });
183
+ }
184
+ finally {
185
+ this.inFlight = null;
186
+ }
187
+ })();
188
+ await this.inFlight;
189
+ }
190
+ /**
191
+ * Run one resource pass with its own try/catch so a throwing resource never
192
+ * aborts the others (verbatim from the reference's `runPass`). No-op when the
193
+ * pass isn't wired; a thrown pass is logged via the LogSink, not rethrown.
194
+ */
195
+ async runResourcePass(pass, label) {
196
+ if (!pass)
197
+ return;
198
+ try {
199
+ const snap = await pass();
200
+ if (snap)
201
+ this.mergeSnapshot(snap);
202
+ }
203
+ catch (err) {
204
+ this.log.emit('warn', label, { error: err.message });
205
+ }
206
+ }
207
+ /**
208
+ * Public predicate the orchestrator's dispatch loop calls before claiming an
209
+ * issue. True iff every resource the dispatch flow depends on is ready. The
210
+ * per-issue bake was the only dispatch-gating prerequisite; with the agent
211
+ * image built ahead of time (not per issue) there is nothing left to gate on,
212
+ * so dispatch is always ready (verbatim from the reference).
213
+ */
214
+ dispatchReady() {
215
+ return true;
216
+ }
217
+ /** Aggregate the latest per-resource snapshots for the dashboard. */
218
+ snapshot() {
219
+ return { resources: this.lastSnapshots.slice() };
220
+ }
221
+ /** Replace (by resource id) the cached snapshot a pass just produced. */
222
+ mergeSnapshot(snap) {
223
+ const next = this.lastSnapshots.filter((s) => s.id !== snap.id);
224
+ next.push(snap);
225
+ this.lastSnapshots = next;
226
+ }
227
+ }
228
+ //# sourceMappingURL=reconciler-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler-loop.js","sourceRoot":"","sources":["../../../src/shell/reconciler-loop.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,6EAA6E;AAC7E,uDAAuD;AACvD,oEAAoE;AACpE,gFAAgF;AAChF,gFAAgF;AAChF,0EAA0E;AAC1E,qFAAqF;AACrF,2EAA2E;AAC3E,iFAAiF;AACjF,YAAY;AACZ,6EAA6E;AAC7E,kFAAkF;AAClF,+EAA+E;AAC/E,mFAAmF;AACnF,0CAA0C;AAC1C,2EAA2E;AAC3E,EAAE;AACF,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,+DAA+D;AAC/D,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,kFAAkF;AAClF,8EAA8E;AAuC9E,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAChD,MAAM,4BAA4B,GAAG,CAAC,GAAG,MAAM,CAAC;AAEhD,MAAM,OAAO,cAAc;IACR,kBAAkB,CAAS;IACpC,MAAM,CAAmB;IAChB,KAAK,CAAY;IACjB,GAAG,CAAU;IAEtB,aAAa,GAAG,KAAK,CAAC;IACtB,OAAO,GAAG,KAAK,CAAC;IAExB,6EAA6E;IAC7E,0EAA0E;IAC1E,8DAA8D;IACtD,QAAQ,GAAyB,IAAI,CAAC;IACtC,cAAc,GAAG,KAAK,CAAC;IAE/B,8EAA8E;IACtE,aAAa,GAAuB,EAAE,CAAC;IAE/C,YAAY,IAA2B;QACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,4BAA4B,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,IAAmB,EAAE,MAAwB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,sCAAsC,EAAE;YAC5D,KAAK,EAAG,GAAa,CAAC,OAAO;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACnE,KAAK,IAAI,CAAC,SAAS,EAAE;iBAClB,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,EAAE;gBAClD,KAAK,EAAG,GAAa,CAAC,OAAO;aAC9B,CAAC,CACH;iBACA,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;IACjF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,SAAS,CAAC,QAA6B,EAAE;QAC7C,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC;YACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;gBACpF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,eAAe,CAAC,IAA8B,EAAE,KAAa;QACzE,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;YAC1B,IAAI,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,QAAQ;QACN,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,yEAAyE;IACjE,aAAa,CAAC,IAAsB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,301 @@
1
+ // FCIS rewrite — imperative shell: the per-attempt autonomous TURN LOOP.
2
+ //
3
+ // Split out of runner-loop.ts (file-size budget). The shell drives one runPrompt
4
+ // per iteration and folds three signals via the injected core deciders. Only
5
+ // autonomous turns count against max_turns; steering-reply turns are free
6
+ // (human-in-the-loop). Imports src/types ONLY — core is reached via the injected
7
+ // RunnerLoopDeps.core (the composition root binds the real pure-core fns).
8
+ const STEERING_PREVIEW_LIMIT = 240;
9
+ /**
10
+ * Cap on host-side credential refresh + re-prompt cycles within one attempt (issue 214).
11
+ * A single refresh should hand the session a fresh token; the cap bounds a pathological
12
+ * loop where every re-prompt still 401s (e.g. a refresh that reports success but the
13
+ * upstream keeps rejecting) before falling back to ending the attempt.
14
+ */
15
+ const MAX_AUTH_RECOVERY_ATTEMPTS = 3;
16
+ export async function runTurnLoop(deps, args) {
17
+ const s = {
18
+ turnsCompleted: 0,
19
+ autonomousTurns: 0,
20
+ lastReason: 'unknown',
21
+ agentFailure: null,
22
+ currentIssue: args.issue,
23
+ pendingSteering: null,
24
+ firstTurn: true,
25
+ authRecoveryAttempts: 0,
26
+ };
27
+ for (;;) {
28
+ if (args.cancelSignal.cancelled) {
29
+ s.lastReason = 'cancelled_by_reconciliation';
30
+ break;
31
+ }
32
+ const step = await runTurn(deps, args, s);
33
+ if (step.kind === 'mid_failure') {
34
+ return { kind: 'mid_failure', publicReason: step.publicReason, cleanupReason: step.cleanupReason, turnsCompleted: s.turnsCompleted };
35
+ }
36
+ if (step.kind === 'break')
37
+ break;
38
+ }
39
+ return { kind: 'done', lastReason: s.lastReason, agentFailure: s.agentFailure, turnsCompleted: s.turnsCompleted };
40
+ }
41
+ /** Run one prompt → classify → post-turn routing. Mutates `s`; returns the loop verdict. */
42
+ async function runTurn(deps, args, s) {
43
+ let promptText;
44
+ try {
45
+ promptText = composeTurnPrompt(deps, args, s);
46
+ }
47
+ catch (err) {
48
+ args.log.emit('error', 'prompt rendering failed', { error: err.message });
49
+ return { kind: 'mid_failure', publicReason: 'prompt error', cleanupReason: 'prompt_error' };
50
+ }
51
+ const isSteeringReply = s.pendingSteering !== null;
52
+ s.pendingSteering = null;
53
+ s.firstTurn = false;
54
+ // Run the prompt with IN-SESSION RECOVERY. Two recoverable classes never discard the
55
+ // whole VM attempt: a TRANSIENT failure (529 / overload / rate-limit / transport blip,
56
+ // issue 213) re-prompts the SAME session after a backoff, and an auth/401 failure
57
+ // (issue 214) refreshes the host token + fans it out, then re-prompts the SAME prompt
58
+ // on the SAME live session. end_turn = success; transitioned overrides any failure.
59
+ const cls = await runPromptWithRecovery(deps, args, s, promptText);
60
+ const verdict = routeResolvedTurn(cls, s);
61
+ if (verdict)
62
+ return verdict;
63
+ // Only a genuine `success` reaches here — count the turn (the recovery re-prompts that
64
+ // got us here did NOT, so max_turns is untouched) and decide whether to keep looping.
65
+ s.turnsCompleted++;
66
+ if (!isSteeringReply)
67
+ s.autonomousTurns++;
68
+ return await postTurn(deps, args, s);
69
+ }
70
+ /**
71
+ * Map a resolved turn class to a loop verdict, or null to keep going (a clean
72
+ * `success`). A `cancelled` (reconcile landed mid-backoff) is a clean break — NOT a
73
+ * failure — matching the top-of-loop cancel path so the attempt isn't re-dispatched.
74
+ */
75
+ function routeResolvedTurn(cls, s) {
76
+ if (cls.kind === 'cancelled') {
77
+ s.lastReason = 'cancelled_by_reconciliation';
78
+ return { kind: 'break' };
79
+ }
80
+ if (cls.kind === 'agent_failure') {
81
+ s.agentFailure = cls.agentFailure;
82
+ s.lastReason = cls.reason;
83
+ return { kind: 'break' };
84
+ }
85
+ if (cls.kind === 'agent_transitioned') {
86
+ s.lastReason = 'agent_transitioned';
87
+ return { kind: 'break' };
88
+ }
89
+ return null;
90
+ }
91
+ /**
92
+ * Drive one prompt over the live ACP session, recovering IN-SESSION from BOTH recoverable
93
+ * failure classes WITHOUT discarding the VM attempt and WITHOUT counting against
94
+ * `max_turns` (the recovery re-prompts are free):
95
+ *
96
+ * - `auth_recoverable` (issue 214): a credential/401 failure. Refresh the host token +
97
+ * fan it out into the live VM's SecretManager (`deps.refreshCredential`), then
98
+ * re-prompt the SAME prompt on the SAME session immediately (the fresh token is ready —
99
+ * no backoff). Bounded across the attempt by `s.authRecoveryAttempts`; a refresh that
100
+ * itself FAILS (revoked/expired refresh token) or a spent budget degrades to
101
+ * `agent_failure` so the caller ends the attempt (today's behaviour, now the fallback).
102
+ * - `recoverable_failure` (issue 213): a TRANSIENT failure (529 / overload / rate-limit /
103
+ * transport blip). Re-prompt the SAME session after a bounded, increasing backoff — but
104
+ * only while the host↔guest ACP link is still alive AND the per-turn budget holds. Once
105
+ * spent or the session has died it downgrades to `agent_failure` (the breaker still
106
+ * treats the transient reason as transient, per issue 135).
107
+ *
108
+ * A reconcile cancel landing mid-recovery surfaces as `cancelled` (a clean break).
109
+ */
110
+ async function runPromptWithRecovery(deps, args, s, promptText) {
111
+ let recoveryAttempts = 0; // transient (issue 213) budget — per-turn, local to this call
112
+ for (;;) {
113
+ const outcome = await deps.acp.runPrompt(args.sessionId, promptText);
114
+ const cls = deps.core.classifyTurnOutcome({ outcome, transitioned: args.runningEntry?.transitioned === true });
115
+ if (cls.kind === 'auth_recoverable') {
116
+ const turn = await recoverAuth(deps, args, s, cls);
117
+ if (turn)
118
+ return turn;
119
+ continue; // refreshed → re-prompt immediately on the fresh token
120
+ }
121
+ if (cls.kind === 'recoverable_failure') {
122
+ const step = await recoverTransient(deps, args, recoveryAttempts, cls);
123
+ if (step.turn)
124
+ return step.turn;
125
+ recoveryAttempts = step.recoveryAttempts;
126
+ continue;
127
+ }
128
+ return cls; // success | agent_transitioned | agent_failure
129
+ }
130
+ }
131
+ /**
132
+ * One auth/401 in-session recovery step (issue 214): refresh the host token + fan it out
133
+ * into the live VM's SecretManager, then signal a re-prompt by returning `null`. Returns a
134
+ * terminal ResolvedTurn when recovery is impossible — a reconcile cancel landed mid-recovery
135
+ * (`cancelled`), the per-attempt budget is spent, or the refresh ITSELF failed (a revoked /
136
+ * expired refresh token needing operator re-login → `agent_failure`, today's fallback).
137
+ */
138
+ async function recoverAuth(deps, args, s, cls) {
139
+ if (args.cancelSignal.cancelled)
140
+ return { kind: 'cancelled' };
141
+ if (s.authRecoveryAttempts >= MAX_AUTH_RECOVERY_ATTEMPTS) {
142
+ args.log.emit('warn', 'in-session 401 recovery budget exhausted; ending attempt', {
143
+ adapter: args.adapterId,
144
+ attempts: s.authRecoveryAttempts,
145
+ });
146
+ return { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason };
147
+ }
148
+ s.authRecoveryAttempts++;
149
+ deps.runlog.system(args.issue.id, 'credential_refresh_attempt', {
150
+ adapter: args.adapterId,
151
+ attempt: s.authRecoveryAttempts,
152
+ reason: cls.reason,
153
+ });
154
+ const refreshed = await deps.refreshCredential(args.adapterId).catch(() => false);
155
+ if (!refreshed) {
156
+ args.log.emit('warn', 'credential refresh failed during in-session 401 recovery; ending attempt', {
157
+ adapter: args.adapterId,
158
+ });
159
+ return { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason };
160
+ }
161
+ deps.runlog.system(args.issue.id, 'credential_refreshed_reprompt', { adapter: args.adapterId });
162
+ return null; // refreshed → re-prompt on the fresh token
163
+ }
164
+ /**
165
+ * One transient in-session recovery step (issue 213): while the per-turn budget holds AND
166
+ * the ACP session is alive, back off then signal a re-prompt with the bumped attempt count
167
+ * (`turn: null`). Otherwise return a terminal ResolvedTurn — `agent_failure` when the budget
168
+ * is spent / the session died, or `cancelled` when a reconcile lands during the backoff.
169
+ */
170
+ async function recoverTransient(deps, args, recoveryAttempts, cls) {
171
+ const decision = deps.core.decideRecovery({ recoveryAttempts });
172
+ const sessionAlive = deps.acp.sessionAlive(args.sessionId);
173
+ if (decision.kind === 'give_up' || !sessionAlive) {
174
+ logRecoveryGaveUp(deps, args, cls.reason, recoveryAttempts, decision.kind === 'give_up' ? 'budget_exhausted' : 'acp_session_dead');
175
+ return { turn: { kind: 'agent_failure', agentFailure: cls.agentFailure, reason: cls.reason }, recoveryAttempts };
176
+ }
177
+ const next = recoveryAttempts + 1;
178
+ logRecoveryReprompt(deps, args, cls.reason, next, decision.backoffMs);
179
+ await sleep(decision.backoffMs);
180
+ if (args.cancelSignal.cancelled)
181
+ return { turn: { kind: 'cancelled' }, recoveryAttempts: next };
182
+ return { turn: null, recoveryAttempts: next };
183
+ }
184
+ /** Honest run log: a recovery re-prompt is logged DISTINCTLY from a real failure (issue 213). */
185
+ function logRecoveryReprompt(deps, args, reason, attempt, backoffMs) {
186
+ args.log.emit('info', 'in-session recovery re-prompt', { reason, attempt, backoff_ms: backoffMs });
187
+ deps.runlog.system(args.issue.id, 'in_session_recovery', { reason, attempt, backoff_ms: backoffMs });
188
+ }
189
+ /** Recovery abandoned (budget spent or the ACP session died) → fall back to ending the attempt. */
190
+ function logRecoveryGaveUp(deps, args, reason, attempts, cause) {
191
+ args.log.emit('warn', 'in-session recovery abandoned; ending attempt', { reason, attempts, cause });
192
+ deps.runlog.system(args.issue.id, 'in_session_recovery_abandoned', { reason, attempts, cause });
193
+ }
194
+ /** Post-turn routing: tool-driven exit > steering pause > tracker refresh + continue. */
195
+ async function postTurn(deps, args, s) {
196
+ if (args.runningEntry?.transitioned) {
197
+ s.lastReason = 'agent_transitioned';
198
+ return { kind: 'break' };
199
+ }
200
+ if (args.runningEntry && args.runningEntry.steering_question !== null) {
201
+ const steer = await handleSteering(deps, args, s);
202
+ if (steer === 'cancelled') {
203
+ s.lastReason = 'cancelled_while_awaiting_steering';
204
+ return { kind: 'break' };
205
+ }
206
+ return { kind: 'continue' }; // steering reply ready; render it next iteration
207
+ }
208
+ return await refreshAndContinue(deps, args, s);
209
+ }
210
+ /** Refresh the issue state from the tracker, then let core decide continuation. */
211
+ async function refreshAndContinue(deps, args, s) {
212
+ let refreshed;
213
+ try {
214
+ // ONE tracker read → the pure core selects this issue's current state
215
+ // (core/issue/parse.ts:selectIssuesByIds, injected via deps.core).
216
+ const { raw } = await deps.tracker.loadAllIssues();
217
+ refreshed = deps.core.selectIssuesByIds(raw, [args.issue.id]);
218
+ }
219
+ catch (err) {
220
+ args.log.emit('error', 'issue state refresh failed', { error: err.message });
221
+ return { kind: 'mid_failure', publicReason: 'issue state refresh error', cleanupReason: 'issue_state_refresh_failed' };
222
+ }
223
+ const found = refreshed[0] ?? null;
224
+ const cont = deps.core.decideTurnContinuation({
225
+ refreshedIssue: found,
226
+ activeStates: args.activeStates,
227
+ autonomousTurns: s.autonomousTurns,
228
+ maxTurns: args.resolved.maxTurns,
229
+ });
230
+ if (cont.kind === 'break') {
231
+ if (found)
232
+ s.currentIssue = found;
233
+ s.lastReason = cont.reason;
234
+ return { kind: 'break' };
235
+ }
236
+ s.currentIssue = found;
237
+ await sleep(25); // small yield between autonomous turns (reference `delay(25)`)
238
+ return { kind: 'continue' };
239
+ }
240
+ /** Render the next turn's prompt via the core prompt-kind selector. */
241
+ function composeTurnPrompt(deps, args, s) {
242
+ const kind = deps.core.selectPromptKind({ pendingSteering: s.pendingSteering !== null, firstTurn: s.firstTurn });
243
+ if (kind === 'steering') {
244
+ const ps = s.pendingSteering;
245
+ return deps.core.renderSteeringPrompt({ question: ps.question, context: ps.context, reply: ps.reply });
246
+ }
247
+ if (kind === 'initial') {
248
+ // Per-state prompt split: render this state's own assembled template (its
249
+ // `prompt_file` wrapped in the shared preamble/footer). A state with no
250
+ // template resolves to '' → the pure renderer's FALLBACK_PROMPT. The pure
251
+ // renderer's contract is unchanged — it still gets one template string.
252
+ const template = deps.workflow.prompt_templates?.[s.currentIssue.state] ?? '';
253
+ return deps.core.renderInitialPrompt({ template, issue: s.currentIssue, attempt: args.attempt });
254
+ }
255
+ return deps.core.continuationPrompt(deps.cfg.mcp.enabled);
256
+ }
257
+ /**
258
+ * Park the autonomous loop on a pending steering request. The wait does NOT
259
+ * count against max_turns. Returns 'cancelled' when the dispatch was torn down
260
+ * while awaiting, otherwise stashes the reply on `s.pendingSteering`. The two
261
+ * steering RuntimeEvents the reference surfaced via events.onRuntimeEvent are
262
+ * recorded into the run log here (the live recent-events ring is fed via
263
+ * AcpPort.onEvent at session open); previews stay bounded.
264
+ */
265
+ async function handleSteering(deps, args, s) {
266
+ const entry = args.runningEntry;
267
+ const question = entry.steering_question ?? '';
268
+ const context = entry.steering_context;
269
+ // Flip the dashboard reply-box flag, coupled to awaiter-liveness (issue 151):
270
+ // set true only once parked here, cleared on resolve/cancel below.
271
+ entry.steering_requested = true;
272
+ deps.runlog.system(args.issue.id, 'awaiting_human_steering', { message: preview(question) });
273
+ let reply;
274
+ try {
275
+ reply = await deps.steering.await(entry.identifier);
276
+ }
277
+ catch {
278
+ // Awaiter rejected/cancelled on deactivate.
279
+ reply = null;
280
+ }
281
+ finally {
282
+ entry.steering_requested = false;
283
+ }
284
+ if (reply === null)
285
+ return 'cancelled';
286
+ // Clear the request payload so the next post-turn check sees no question.
287
+ entry.steering_question = null;
288
+ entry.steering_context = null;
289
+ deps.runlog.system(args.issue.id, 'human_steering_received', { message: preview(reply) });
290
+ s.pendingSteering = { question, context, reply };
291
+ return 'received';
292
+ }
293
+ /** Bound a steering preview string (the reference's truncated event message). */
294
+ function preview(text) {
295
+ return text.length > STEERING_PREVIEW_LIMIT ? text.slice(0, STEERING_PREVIEW_LIMIT) + '…' : text;
296
+ }
297
+ /** Local async sleep (the loop's inter-turn yield; the shell may use real timers). */
298
+ function sleep(ms) {
299
+ return new Promise((resolve) => setTimeout(resolve, ms));
300
+ }
301
+ //# sourceMappingURL=runner-loop-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-loop-turn.js","sourceRoot":"","sources":["../../../src/shell/runner-loop-turn.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,0EAA0E;AAC1E,iFAAiF;AACjF,2EAA2E;AAS3E,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAanC;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAoCrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAoB,EAAE,IAAkB;IACxE,MAAM,CAAC,GAAkB;QACvB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI,CAAC,KAAK;QACxB,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,CAAC;KACxB,CAAC;IAEF,SAAS,CAAC;QACR,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAChC,CAAC,CAAC,UAAU,GAAG,6BAA6B,CAAC;YAC7C,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QACvI,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM;IACnC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;AACpH,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,OAAO,CAAC,IAAoB,EAAE,IAAkB,EAAE,CAAgB;IAC/E,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;IAC9F,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC;IACnD,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;IAEpB,qFAAqF;IACrF,uFAAuF;IACvF,kFAAkF;IAClF,sFAAsF;IACtF,oFAAoF;IACpF,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,uFAAuF;IACvF,sFAAsF;IACtF,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,IAAI,CAAC,eAAe;QAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IAC1C,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,GAAiB,EAAE,CAAgB;IAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC,UAAU,GAAG,6BAA6B,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACjC,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;QAClC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACtC,CAAC,CAAC,UAAU,GAAG,oBAAoB,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAoB,EACpB,IAAkB,EAClB,CAAgB,EAChB,UAAkB;IAElB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC,8DAA8D;IACxF,SAAS,CAAC;QACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC,CAAC;QAE/G,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;YACtB,SAAS,CAAC,uDAAuD;QACnE,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;YAChC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACzC,SAAS;QACX,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,+CAA+C;IAC7D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,WAAW,CACxB,IAAoB,EACpB,IAAkB,EAClB,CAAgB,EAChB,GAA6C;IAE7C,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC9D,IAAI,CAAC,CAAC,oBAAoB,IAAI,0BAA0B,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,0DAA0D,EAAE;YAChF,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,QAAQ,EAAE,CAAC,CAAC,oBAAoB;SACjC,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACvF,CAAC;IACD,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,4BAA4B,EAAE;QAC9D,OAAO,EAAE,IAAI,CAAC,SAAS;QACvB,OAAO,EAAE,CAAC,CAAC,oBAAoB;QAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAClF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,0EAA0E,EAAE;YAChG,OAAO,EAAE,IAAI,CAAC,SAAS;SACxB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC,CAAC,2CAA2C;AAC1D,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAC7B,IAAoB,EACpB,IAAkB,EAClB,gBAAwB,EACxB,GAA6C;IAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QACjD,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACnI,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,CAAC;IACnH,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,GAAG,CAAC,CAAC;IAClC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAChG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,iGAAiG;AACjG,SAAS,mBAAmB,CAAC,IAAoB,EAAE,IAAkB,EAAE,MAAc,EAAE,OAAe,EAAE,SAAiB;IACvH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACvG,CAAC;AAED,mGAAmG;AACnG,SAAS,iBAAiB,CAAC,IAAoB,EAAE,IAAkB,EAAE,MAAc,EAAE,QAAgB,EAAE,KAAa;IAClH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,+CAA+C,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,+BAA+B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,yFAAyF;AACzF,KAAK,UAAU,QAAQ,CAAC,IAAoB,EAAE,IAAkB,EAAE,CAAgB;IAChF,IAAI,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;QACpC,CAAC,CAAC,UAAU,GAAG,oBAAoB,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,CAAC,CAAC,UAAU,GAAG,mCAAmC,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,iDAAiD;IAChF,CAAC;IACD,OAAO,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,kBAAkB,CAAC,IAAoB,EAAE,IAAkB,EAAE,CAAgB;IAC1F,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,sEAAsE;QACtE,mEAAmE;QACnE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACnD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,4BAA4B,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,2BAA2B,EAAE,aAAa,EAAE,4BAA4B,EAAE,CAAC;IACzH,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC5C,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;KACjC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK;YAAE,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;QAClC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,CAAC,CAAC,YAAY,GAAG,KAAM,CAAC;IACxB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,+DAA+D;IAChF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC9B,CAAC;AAED,uEAAuE;AACvE,SAAS,iBAAiB,CAAC,IAAoB,EAAE,IAAgC,EAAE,CAAgB;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACjH,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,eAAgB,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc,CAC3B,IAAoB,EACpB,IAA8D,EAC9D,CAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAa,CAAC;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACvC,8EAA8E;IAC9E,mEAAmE;IACnE,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7F,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;QAC5C,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IACvC,0EAA0E;IAC1E,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,eAAe,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iFAAiF;AACjF,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnG,CAAC;AAED,sFAAsF;AACtF,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}