smol-symphony 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) 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/bin/symphony.js +22 -786
  11. package/dist/bin/symphony.js.map +1 -1
  12. package/dist/core/actions/context.js +109 -0
  13. package/dist/core/actions/context.js.map +1 -0
  14. package/dist/{actions/parsing.js → core/actions/parse.js} +33 -114
  15. package/dist/core/actions/parse.js.map +1 -0
  16. package/dist/core/actions/plan.js +197 -0
  17. package/dist/core/actions/plan.js.map +1 -0
  18. package/dist/core/actions/predicates.js +111 -0
  19. package/dist/core/actions/predicates.js.map +1 -0
  20. package/dist/core/actions/run-fold.js +248 -0
  21. package/dist/core/actions/run-fold.js.map +1 -0
  22. package/dist/core/actions/template.js +118 -0
  23. package/dist/core/actions/template.js.map +1 -0
  24. package/dist/core/cli/args.js +116 -0
  25. package/dist/core/cli/args.js.map +1 -0
  26. package/dist/core/coerce.js +75 -0
  27. package/dist/core/coerce.js.map +1 -0
  28. package/dist/core/credential/account-id.js +20 -0
  29. package/dist/core/credential/account-id.js.map +1 -0
  30. package/dist/core/credential/adapter-config.js +136 -0
  31. package/dist/core/credential/adapter-config.js.map +1 -0
  32. package/dist/core/credential/availability.js +98 -0
  33. package/dist/core/credential/availability.js.map +1 -0
  34. package/dist/core/credential/extract.js +228 -0
  35. package/dist/core/credential/extract.js.map +1 -0
  36. package/dist/core/credential/fake-creds.js +171 -0
  37. package/dist/core/credential/fake-creds.js.map +1 -0
  38. package/dist/core/credential/identity.js +125 -0
  39. package/dist/core/credential/identity.js.map +1 -0
  40. package/dist/core/credential/shape.js +230 -0
  41. package/dist/core/credential/shape.js.map +1 -0
  42. package/dist/core/credential/strings.js +15 -0
  43. package/dist/core/credential/strings.js.map +1 -0
  44. package/dist/core/doctor/checks.js +303 -0
  45. package/dist/core/doctor/checks.js.map +1 -0
  46. package/dist/core/git/result.js +107 -0
  47. package/dist/core/git/result.js.map +1 -0
  48. package/dist/core/http/decisions.js +225 -0
  49. package/dist/core/http/decisions.js.map +1 -0
  50. package/dist/{http.js → core/http/render.js} +472 -738
  51. package/dist/core/http/render.js.map +1 -0
  52. package/dist/{http-handlers.js → core/http/routes.js} +52 -87
  53. package/dist/core/http/routes.js.map +1 -0
  54. package/dist/core/http/views.js +181 -0
  55. package/dist/core/http/views.js.map +1 -0
  56. package/dist/core/image/managed-image.js +95 -0
  57. package/dist/core/image/managed-image.js.map +1 -0
  58. package/dist/core/issue/file.js +149 -0
  59. package/dist/core/issue/file.js.map +1 -0
  60. package/dist/core/issue/parse.js +210 -0
  61. package/dist/core/issue/parse.js.map +1 -0
  62. package/dist/core/mcp/dispatch.js +239 -0
  63. package/dist/core/mcp/dispatch.js.map +1 -0
  64. package/dist/core/mcp/post-move.js +92 -0
  65. package/dist/core/mcp/post-move.js.map +1 -0
  66. package/dist/core/mcp/protocol.js +293 -0
  67. package/dist/core/mcp/protocol.js.map +1 -0
  68. package/dist/core/mcp/url.js +162 -0
  69. package/dist/core/mcp/url.js.map +1 -0
  70. package/dist/core/path.js +63 -0
  71. package/dist/core/path.js.map +1 -0
  72. package/dist/core/reconcile/image-decide.js +48 -0
  73. package/dist/core/reconcile/image-decide.js.map +1 -0
  74. package/dist/core/reconcile/ledger.js +142 -0
  75. package/dist/core/reconcile/ledger.js.map +1 -0
  76. package/dist/core/reconcile/pr-classify.js +62 -0
  77. package/dist/core/reconcile/pr-classify.js.map +1 -0
  78. package/dist/{reconciler → core/reconcile}/pr-decide.js +25 -12
  79. package/dist/core/reconcile/pr-decide.js.map +1 -0
  80. package/dist/core/reconcile/pr-loop.js +161 -0
  81. package/dist/core/reconcile/pr-loop.js.map +1 -0
  82. package/dist/core/reconcile/pr-notes.js +35 -0
  83. package/dist/core/reconcile/pr-notes.js.map +1 -0
  84. package/dist/core/reconcile/vm-decide.js +70 -0
  85. package/dist/core/reconcile/vm-decide.js.map +1 -0
  86. package/dist/core/reconcile/vm-reap.js +207 -0
  87. package/dist/core/reconcile/vm-reap.js.map +1 -0
  88. package/dist/core/reconcile/workspace-decide.js +162 -0
  89. package/dist/core/reconcile/workspace-decide.js.map +1 -0
  90. package/dist/core/runlog/summary.js +231 -0
  91. package/dist/core/runlog/summary.js.map +1 -0
  92. package/dist/core/runner/dispatch-config.js +95 -0
  93. package/dist/core/runner/dispatch-config.js.map +1 -0
  94. package/dist/core/runner/injection.js +61 -0
  95. package/dist/core/runner/injection.js.map +1 -0
  96. package/dist/core/runner/mise.js +210 -0
  97. package/dist/core/runner/mise.js.map +1 -0
  98. package/dist/core/runner/prompt.js +720 -0
  99. package/dist/core/runner/prompt.js.map +1 -0
  100. package/dist/core/runner/turn.js +242 -0
  101. package/dist/core/runner/turn.js.map +1 -0
  102. package/dist/core/runner/vm-plan.js +390 -0
  103. package/dist/core/runner/vm-plan.js.map +1 -0
  104. package/dist/core/schedule/admission.js +123 -0
  105. package/dist/core/schedule/admission.js.map +1 -0
  106. package/dist/core/schedule/circuit-breaker.js +111 -0
  107. package/dist/core/schedule/circuit-breaker.js.map +1 -0
  108. package/dist/core/schedule/eligibility.js +83 -0
  109. package/dist/core/schedule/eligibility.js.map +1 -0
  110. package/dist/core/schedule/reconcile-issue.js +82 -0
  111. package/dist/core/schedule/reconcile-issue.js.map +1 -0
  112. package/dist/core/schedule/retry.js +96 -0
  113. package/dist/core/schedule/retry.js.map +1 -0
  114. package/dist/core/schedule/sleep-cycle.js +133 -0
  115. package/dist/core/schedule/sleep-cycle.js.map +1 -0
  116. package/dist/core/schedule/slots.js +124 -0
  117. package/dist/core/schedule/slots.js.map +1 -0
  118. package/dist/core/schedule/tick.js +553 -0
  119. package/dist/core/schedule/tick.js.map +1 -0
  120. package/dist/core/schedule/token-fold.js +181 -0
  121. package/dist/core/schedule/token-fold.js.map +1 -0
  122. package/dist/core/state-resolve.js +86 -0
  123. package/dist/core/state-resolve.js.map +1 -0
  124. package/dist/core/vm-guards.js +278 -0
  125. package/dist/core/vm-guards.js.map +1 -0
  126. package/dist/core/workflow/derive.js +107 -0
  127. package/dist/core/workflow/derive.js.map +1 -0
  128. package/dist/core/workflow/parse.js +687 -0
  129. package/dist/core/workflow/parse.js.map +1 -0
  130. package/dist/core/workflow/prompt-probe.js +78 -0
  131. package/dist/core/workflow/prompt-probe.js.map +1 -0
  132. package/dist/core/workflow/validate.js +189 -0
  133. package/dist/core/workflow/validate.js.map +1 -0
  134. package/dist/core/workspace-key.js +19 -0
  135. package/dist/core/workspace-key.js.map +1 -0
  136. package/dist/shell/actions-runner.js +356 -0
  137. package/dist/shell/actions-runner.js.map +1 -0
  138. package/dist/shell/adapter/adapter-registry.js +45 -0
  139. package/dist/shell/adapter/adapter-registry.js.map +1 -0
  140. package/dist/shell/adapter/clock-random.js +96 -0
  141. package/dist/shell/adapter/clock-random.js.map +1 -0
  142. package/dist/shell/adapter/gondolin-dispatch-helpers.js +158 -0
  143. package/dist/shell/adapter/gondolin-dispatch-helpers.js.map +1 -0
  144. package/dist/shell/adapter/gondolin-dispatch.js +385 -0
  145. package/dist/shell/adapter/gondolin-dispatch.js.map +1 -0
  146. package/dist/shell/adapter/gondolin-image-converter.js +233 -0
  147. package/dist/shell/adapter/gondolin-image-converter.js.map +1 -0
  148. package/dist/shell/adapter/gondolin-image-fetch.js +180 -0
  149. package/dist/shell/adapter/gondolin-image-fetch.js.map +1 -0
  150. package/dist/shell/adapter/launcher-asset.js +57 -0
  151. package/dist/shell/adapter/launcher-asset.js.map +1 -0
  152. package/dist/shell/adapter/mise-config-asset.js +65 -0
  153. package/dist/shell/adapter/mise-config-asset.js.map +1 -0
  154. package/dist/shell/adapter/workflow-loader.js +304 -0
  155. package/dist/shell/adapter/workflow-loader.js.map +1 -0
  156. package/dist/shell/cli/doctor.js +268 -0
  157. package/dist/shell/cli/doctor.js.map +1 -0
  158. package/dist/shell/effect-interpreter-families.js +314 -0
  159. package/dist/shell/effect-interpreter-families.js.map +1 -0
  160. package/dist/shell/effect-interpreter.js +29 -0
  161. package/dist/shell/effect-interpreter.js.map +1 -0
  162. package/dist/shell/interp/acp-frame.js +137 -0
  163. package/dist/shell/interp/acp-frame.js.map +1 -0
  164. package/dist/shell/interp/acp-ws-conn.js +320 -0
  165. package/dist/shell/interp/acp-ws-conn.js.map +1 -0
  166. package/dist/shell/interp/acp-ws-frames.js +159 -0
  167. package/dist/shell/interp/acp-ws-frames.js.map +1 -0
  168. package/dist/shell/interp/acp-ws.js +197 -0
  169. package/dist/shell/interp/acp-ws.js.map +1 -0
  170. package/dist/shell/interp/acp.js +319 -0
  171. package/dist/shell/interp/acp.js.map +1 -0
  172. package/dist/shell/interp/credential-defaults.js +128 -0
  173. package/dist/shell/interp/credential-defaults.js.map +1 -0
  174. package/dist/shell/interp/credential-hooks.js +149 -0
  175. package/dist/shell/interp/credential-hooks.js.map +1 -0
  176. package/dist/shell/interp/credential-registry.js +226 -0
  177. package/dist/shell/interp/credential-registry.js.map +1 -0
  178. package/dist/shell/interp/credential.js +103 -0
  179. package/dist/shell/interp/credential.js.map +1 -0
  180. package/dist/shell/interp/gh.js +163 -0
  181. package/dist/shell/interp/gh.js.map +1 -0
  182. package/dist/shell/interp/git.js +28 -0
  183. package/dist/shell/interp/git.js.map +1 -0
  184. package/dist/shell/interp/log.js +213 -0
  185. package/dist/shell/interp/log.js.map +1 -0
  186. package/dist/shell/interp/process.js +178 -0
  187. package/dist/shell/interp/process.js.map +1 -0
  188. package/dist/shell/interp/runlog.js +193 -0
  189. package/dist/shell/interp/runlog.js.map +1 -0
  190. package/dist/shell/interp/timer.js +64 -0
  191. package/dist/shell/interp/timer.js.map +1 -0
  192. package/dist/shell/interp/tracker-disk.js +99 -0
  193. package/dist/shell/interp/tracker-disk.js.map +1 -0
  194. package/dist/shell/interp/tracker-parse.js +71 -0
  195. package/dist/shell/interp/tracker-parse.js.map +1 -0
  196. package/dist/shell/interp/tracker-scan.js +238 -0
  197. package/dist/shell/interp/tracker-scan.js.map +1 -0
  198. package/dist/shell/interp/tracker-write.js +91 -0
  199. package/dist/shell/interp/tracker-write.js.map +1 -0
  200. package/dist/shell/interp/tracker.js +41 -0
  201. package/dist/shell/interp/tracker.js.map +1 -0
  202. package/dist/shell/interp/tty.js +48 -0
  203. package/dist/shell/interp/tty.js.map +1 -0
  204. package/dist/shell/interp/vm.js +199 -0
  205. package/dist/shell/interp/vm.js.map +1 -0
  206. package/dist/shell/interp/workspace.js +310 -0
  207. package/dist/shell/interp/workspace.js.map +1 -0
  208. package/dist/shell/main-acp.js +78 -0
  209. package/dist/shell/main-acp.js.map +1 -0
  210. package/dist/shell/main-adapters.js +222 -0
  211. package/dist/shell/main-adapters.js.map +1 -0
  212. package/dist/shell/main-credential.js +122 -0
  213. package/dist/shell/main-credential.js.map +1 -0
  214. package/dist/shell/main-doctor.js +22 -0
  215. package/dist/shell/main-doctor.js.map +1 -0
  216. package/dist/shell/main-entry.js +46 -0
  217. package/dist/shell/main-entry.js.map +1 -0
  218. package/dist/shell/main-http-csrf.js +45 -0
  219. package/dist/shell/main-http-csrf.js.map +1 -0
  220. package/dist/shell/main-http-handler.js +389 -0
  221. package/dist/shell/main-http-handler.js.map +1 -0
  222. package/dist/shell/main-http-mcp.js +122 -0
  223. package/dist/shell/main-http-mcp.js.map +1 -0
  224. package/dist/shell/main-http-views.js +253 -0
  225. package/dist/shell/main-http-views.js.map +1 -0
  226. package/dist/shell/main-http.js +76 -0
  227. package/dist/shell/main-http.js.map +1 -0
  228. package/dist/shell/main-loops.js +130 -0
  229. package/dist/shell/main-loops.js.map +1 -0
  230. package/dist/shell/main-mcp.js +129 -0
  231. package/dist/shell/main-mcp.js.map +1 -0
  232. package/dist/shell/main-orchestrator.js +120 -0
  233. package/dist/shell/main-orchestrator.js.map +1 -0
  234. package/dist/shell/main-preflight.js +43 -0
  235. package/dist/shell/main-preflight.js.map +1 -0
  236. package/dist/shell/main-reconcilers-helpers.js +244 -0
  237. package/dist/shell/main-reconcilers-helpers.js.map +1 -0
  238. package/dist/shell/main-reconcilers-pr.js +148 -0
  239. package/dist/shell/main-reconcilers-pr.js.map +1 -0
  240. package/dist/shell/main-reconcilers.js +225 -0
  241. package/dist/shell/main-reconcilers.js.map +1 -0
  242. package/dist/shell/main-runner.js +355 -0
  243. package/dist/shell/main-runner.js.map +1 -0
  244. package/dist/shell/main-scaffold.js +116 -0
  245. package/dist/shell/main-scaffold.js.map +1 -0
  246. package/dist/shell/main-shutdown.js +115 -0
  247. package/dist/shell/main-shutdown.js.map +1 -0
  248. package/dist/shell/main-startup.js +48 -0
  249. package/dist/shell/main-startup.js.map +1 -0
  250. package/dist/shell/main-substrates.js +43 -0
  251. package/dist/shell/main-substrates.js.map +1 -0
  252. package/dist/shell/main.js +385 -0
  253. package/dist/shell/main.js.map +1 -0
  254. package/dist/shell/orchestrator-feedback.js +69 -0
  255. package/dist/shell/orchestrator-feedback.js.map +1 -0
  256. package/dist/shell/orchestrator-image.js +167 -0
  257. package/dist/shell/orchestrator-image.js.map +1 -0
  258. package/dist/shell/orchestrator-loop.js +468 -0
  259. package/dist/shell/orchestrator-loop.js.map +1 -0
  260. package/dist/shell/orchestrator-reconcile.js +36 -0
  261. package/dist/shell/orchestrator-reconcile.js.map +1 -0
  262. package/dist/shell/reconciler-loop.js +228 -0
  263. package/dist/shell/reconciler-loop.js.map +1 -0
  264. package/dist/shell/runner-loop-turn.js +301 -0
  265. package/dist/shell/runner-loop-turn.js.map +1 -0
  266. package/dist/shell/runner-loop.js +338 -0
  267. package/dist/shell/runner-loop.js.map +1 -0
  268. package/dist/shell/server/http.js +208 -0
  269. package/dist/shell/server/http.js.map +1 -0
  270. package/dist/shell/server/mcp-runtime-effects.js +237 -0
  271. package/dist/shell/server/mcp-runtime-effects.js.map +1 -0
  272. package/dist/shell/server/mcp-runtime.js +99 -0
  273. package/dist/shell/server/mcp-runtime.js.map +1 -0
  274. package/dist/shell/workspace-key.js +14 -0
  275. package/dist/shell/workspace-key.js.map +1 -0
  276. package/dist/types/acp.js +8 -0
  277. package/dist/types/acp.js.map +1 -0
  278. package/dist/types/actions/plan.js +6 -0
  279. package/dist/types/actions/plan.js.map +1 -0
  280. package/dist/types/actions/predicates.js +6 -0
  281. package/dist/types/actions/predicates.js.map +1 -0
  282. package/dist/types/actions/run-fold.js +8 -0
  283. package/dist/types/actions/run-fold.js.map +1 -0
  284. package/dist/types/actions.js +7 -0
  285. package/dist/types/actions.js.map +1 -0
  286. package/dist/types/adapter/clock-random.js +4 -0
  287. package/dist/types/adapter/clock-random.js.map +1 -0
  288. package/dist/types/adapter/gondolin-image-converter.js +5 -0
  289. package/dist/types/adapter/gondolin-image-converter.js.map +1 -0
  290. package/dist/types/adapter/gondolin-image-fetch.js +5 -0
  291. package/dist/types/adapter/gondolin-image-fetch.js.map +1 -0
  292. package/dist/types/adapter/workflow-loader.js +4 -0
  293. package/dist/types/adapter/workflow-loader.js.map +1 -0
  294. package/dist/types/cli/args.js +8 -0
  295. package/dist/types/cli/args.js.map +1 -0
  296. package/dist/types/config.js +8 -0
  297. package/dist/types/config.js.map +1 -0
  298. package/dist/types/credential-interp.js +6 -0
  299. package/dist/types/credential-interp.js.map +1 -0
  300. package/dist/types/credentials.js +10 -0
  301. package/dist/types/credentials.js.map +1 -0
  302. package/dist/types/doctor.js +7 -0
  303. package/dist/types/doctor.js.map +1 -0
  304. package/dist/types/domain.js +7 -0
  305. package/dist/types/domain.js.map +1 -0
  306. package/dist/types/effect.js +15 -0
  307. package/dist/types/effect.js.map +1 -0
  308. package/dist/types/errors.js +39 -0
  309. package/dist/types/errors.js.map +1 -0
  310. package/dist/types/http/decisions.js +6 -0
  311. package/dist/types/http/decisions.js.map +1 -0
  312. package/dist/types/http/render.js +10 -0
  313. package/dist/types/http/render.js.map +1 -0
  314. package/dist/types/http/views.js +6 -0
  315. package/dist/types/http/views.js.map +1 -0
  316. package/dist/types/http.js +9 -0
  317. package/dist/types/http.js.map +1 -0
  318. package/dist/types/image/managed-image.js +7 -0
  319. package/dist/types/image/managed-image.js.map +1 -0
  320. package/dist/types/interp/effect-interpreter.js +8 -0
  321. package/dist/types/interp/effect-interpreter.js.map +1 -0
  322. package/dist/types/interp/tracker.js +7 -0
  323. package/dist/types/interp/tracker.js.map +1 -0
  324. package/dist/types/issue/file.js +6 -0
  325. package/dist/types/issue/file.js.map +1 -0
  326. package/dist/types/issue/parse.js +8 -0
  327. package/dist/types/issue/parse.js.map +1 -0
  328. package/dist/types/main-acp.js +13 -0
  329. package/dist/types/main-acp.js.map +1 -0
  330. package/dist/types/main-adapters.js +5 -0
  331. package/dist/types/main-adapters.js.map +1 -0
  332. package/dist/types/main-credential.js +21 -0
  333. package/dist/types/main-credential.js.map +1 -0
  334. package/dist/types/main-doctor.js +6 -0
  335. package/dist/types/main-doctor.js.map +1 -0
  336. package/dist/types/main-http-handler.js +12 -0
  337. package/dist/types/main-http-handler.js.map +1 -0
  338. package/dist/types/main-http.js +5 -0
  339. package/dist/types/main-http.js.map +1 -0
  340. package/dist/types/main-loops.js +5 -0
  341. package/dist/types/main-loops.js.map +1 -0
  342. package/dist/types/main-mcp.js +12 -0
  343. package/dist/types/main-mcp.js.map +1 -0
  344. package/dist/types/main-orchestrator.js +5 -0
  345. package/dist/types/main-orchestrator.js.map +1 -0
  346. package/dist/types/main-reconcilers.js +11 -0
  347. package/dist/types/main-reconcilers.js.map +1 -0
  348. package/dist/types/main-runner.js +13 -0
  349. package/dist/types/main-runner.js.map +1 -0
  350. package/dist/types/main-startup.js +5 -0
  351. package/dist/types/main-startup.js.map +1 -0
  352. package/dist/types/main-substrates.js +5 -0
  353. package/dist/types/main-substrates.js.map +1 -0
  354. package/dist/types/mcp/dispatch.js +4 -0
  355. package/dist/types/mcp/dispatch.js.map +1 -0
  356. package/dist/types/mcp/post-move.js +7 -0
  357. package/dist/types/mcp/post-move.js.map +1 -0
  358. package/dist/types/mcp.js +9 -0
  359. package/dist/types/mcp.js.map +1 -0
  360. package/dist/types/ports.js +12 -0
  361. package/dist/types/ports.js.map +1 -0
  362. package/dist/types/reconcile/image-decide.js +5 -0
  363. package/dist/types/reconcile/image-decide.js.map +1 -0
  364. package/dist/types/reconcile/ledger.js +7 -0
  365. package/dist/types/reconcile/ledger.js.map +1 -0
  366. package/dist/types/reconcile/pr-loop.js +8 -0
  367. package/dist/types/reconcile/pr-loop.js.map +1 -0
  368. package/dist/types/reconcile/vm-reap.js +8 -0
  369. package/dist/types/reconcile/vm-reap.js.map +1 -0
  370. package/dist/types/reconcile/workspace-decide.js +7 -0
  371. package/dist/types/reconcile/workspace-decide.js.map +1 -0
  372. package/dist/types/reconcile.js +9 -0
  373. package/dist/types/reconcile.js.map +1 -0
  374. package/dist/types/runlog.js +7 -0
  375. package/dist/types/runlog.js.map +1 -0
  376. package/dist/types/runner/actions-runner.js +12 -0
  377. package/dist/types/runner/actions-runner.js.map +1 -0
  378. package/dist/types/runner/gondolin-dispatch.js +5 -0
  379. package/dist/types/runner/gondolin-dispatch.js.map +1 -0
  380. package/dist/types/runner/injection.js +6 -0
  381. package/dist/types/runner/injection.js.map +1 -0
  382. package/dist/types/runner/runner-loop.js +5 -0
  383. package/dist/types/runner/runner-loop.js.map +1 -0
  384. package/dist/types/runner/turn.js +4 -0
  385. package/dist/types/runner/turn.js.map +1 -0
  386. package/dist/types/runner/vm-plan.js +4 -0
  387. package/dist/types/runner/vm-plan.js.map +1 -0
  388. package/dist/types/runtime.js +9 -0
  389. package/dist/types/runtime.js.map +1 -0
  390. package/dist/types/schedule/admission.js +7 -0
  391. package/dist/types/schedule/admission.js.map +1 -0
  392. package/dist/types/schedule/circuit-breaker.js +2 -0
  393. package/dist/types/schedule/circuit-breaker.js.map +1 -0
  394. package/dist/types/schedule/eligibility.js +9 -0
  395. package/dist/types/schedule/eligibility.js.map +1 -0
  396. package/dist/types/schedule/orchestrator-loop.js +10 -0
  397. package/dist/types/schedule/orchestrator-loop.js.map +1 -0
  398. package/dist/types/schedule/sleep-cycle.js +4 -0
  399. package/dist/types/schedule/sleep-cycle.js.map +1 -0
  400. package/dist/types/schedule/slots.js +8 -0
  401. package/dist/types/schedule/slots.js.map +1 -0
  402. package/dist/types/schedule/tick.js +9 -0
  403. package/dist/types/schedule/tick.js.map +1 -0
  404. package/dist/types/server/mcp-runtime.js +8 -0
  405. package/dist/types/server/mcp-runtime.js.map +1 -0
  406. package/dist/types/workflow/parse.js +4 -0
  407. package/dist/types/workflow/parse.js.map +1 -0
  408. package/package.json +22 -10
  409. package/patches/@earendil-works+gondolin+0.12.0.patch +173 -0
  410. package/prompts/Reflect.md +91 -0
  411. package/prompts/Review.md +97 -0
  412. package/prompts/Todo.md +96 -0
  413. package/prompts/_footer.md +41 -0
  414. package/prompts/_preamble.md +42 -0
  415. package/prompts-minimal/Todo.md +26 -0
  416. package/scripts/postinstall.mjs +63 -0
  417. package/scripts/vm-agent.mjs +312 -90
  418. package/WORKFLOW.md +0 -744
  419. package/dist/acp-bridge.js +0 -324
  420. package/dist/acp-bridge.js.map +0 -1
  421. package/dist/actions/cache.js +0 -191
  422. package/dist/actions/cache.js.map +0 -1
  423. package/dist/actions/effects.js +0 -41
  424. package/dist/actions/effects.js.map +0 -1
  425. package/dist/actions/executor.js +0 -570
  426. package/dist/actions/executor.js.map +0 -1
  427. package/dist/actions/index.js +0 -13
  428. package/dist/actions/index.js.map +0 -1
  429. package/dist/actions/parsing.js.map +0 -1
  430. package/dist/actions/predicate-env.js +0 -27
  431. package/dist/actions/predicate-env.js.map +0 -1
  432. package/dist/actions/predicates.js +0 -49
  433. package/dist/actions/predicates.js.map +0 -1
  434. package/dist/actions/templating.js +0 -66
  435. package/dist/actions/templating.js.map +0 -1
  436. package/dist/actions/types.js +0 -15
  437. package/dist/actions/types.js.map +0 -1
  438. package/dist/agent/acp.js +0 -473
  439. package/dist/agent/acp.js.map +0 -1
  440. package/dist/agent/adapter-names.js +0 -159
  441. package/dist/agent/adapter-names.js.map +0 -1
  442. package/dist/agent/adapters.js +0 -511
  443. package/dist/agent/adapters.js.map +0 -1
  444. package/dist/agent/credential-extractors.js +0 -342
  445. package/dist/agent/credential-extractors.js.map +0 -1
  446. package/dist/agent/credential-secrets.js +0 -628
  447. package/dist/agent/credential-secrets.js.map +0 -1
  448. package/dist/agent/credential-ticker.js +0 -57
  449. package/dist/agent/credential-ticker.js.map +0 -1
  450. package/dist/agent/gondolin-creds-staging.js +0 -356
  451. package/dist/agent/gondolin-creds-staging.js.map +0 -1
  452. package/dist/agent/gondolin-dispatch.js +0 -375
  453. package/dist/agent/gondolin-dispatch.js.map +0 -1
  454. package/dist/agent/gondolin.js +0 -124
  455. package/dist/agent/gondolin.js.map +0 -1
  456. package/dist/agent/runner-decisions.js +0 -134
  457. package/dist/agent/runner-decisions.js.map +0 -1
  458. package/dist/agent/runner.js +0 -1456
  459. package/dist/agent/runner.js.map +0 -1
  460. package/dist/agent/tool-call-summary.js +0 -102
  461. package/dist/agent/tool-call-summary.js.map +0 -1
  462. package/dist/agent/vm-acp-mapping.js +0 -73
  463. package/dist/agent/vm-acp-mapping.js.map +0 -1
  464. package/dist/agent/vm-guards.js +0 -262
  465. package/dist/agent/vm-guards.js.map +0 -1
  466. package/dist/agent/vm-port.js +0 -22
  467. package/dist/agent/vm-port.js.map +0 -1
  468. package/dist/agent/vm-process-registry.js +0 -79
  469. package/dist/agent/vm-process-registry.js.map +0 -1
  470. package/dist/bin/cli-args.js +0 -105
  471. package/dist/bin/cli-args.js.map +0 -1
  472. package/dist/errors.js +0 -15
  473. package/dist/errors.js.map +0 -1
  474. package/dist/http-disk.js +0 -135
  475. package/dist/http-disk.js.map +0 -1
  476. package/dist/http-handlers.js.map +0 -1
  477. package/dist/http.js.map +0 -1
  478. package/dist/issues.js +0 -178
  479. package/dist/issues.js.map +0 -1
  480. package/dist/logging.js +0 -203
  481. package/dist/logging.js.map +0 -1
  482. package/dist/mcp.js +0 -706
  483. package/dist/mcp.js.map +0 -1
  484. package/dist/memory.js +0 -85
  485. package/dist/memory.js.map +0 -1
  486. package/dist/orchestrator-decisions.js +0 -331
  487. package/dist/orchestrator-decisions.js.map +0 -1
  488. package/dist/orchestrator.js +0 -1569
  489. package/dist/orchestrator.js.map +0 -1
  490. package/dist/prompt.js +0 -65
  491. package/dist/prompt.js.map +0 -1
  492. package/dist/reconciler/cache.js +0 -65
  493. package/dist/reconciler/cache.js.map +0 -1
  494. package/dist/reconciler/index.js +0 -448
  495. package/dist/reconciler/index.js.map +0 -1
  496. package/dist/reconciler/ledger.js +0 -131
  497. package/dist/reconciler/ledger.js.map +0 -1
  498. package/dist/reconciler/pr-adapters.js +0 -174
  499. package/dist/reconciler/pr-adapters.js.map +0 -1
  500. package/dist/reconciler/pr-decide.js.map +0 -1
  501. package/dist/reconciler/pr.js +0 -422
  502. package/dist/reconciler/pr.js.map +0 -1
  503. package/dist/reconciler/types.js +0 -12
  504. package/dist/reconciler/types.js.map +0 -1
  505. package/dist/reconciler/vm.js +0 -243
  506. package/dist/reconciler/vm.js.map +0 -1
  507. package/dist/reconciler/workspace-defaults.js +0 -83
  508. package/dist/reconciler/workspace-defaults.js.map +0 -1
  509. package/dist/reconciler/workspace.js +0 -272
  510. package/dist/reconciler/workspace.js.map +0 -1
  511. package/dist/runlog.js +0 -403
  512. package/dist/runlog.js.map +0 -1
  513. package/dist/scaffold.js +0 -165
  514. package/dist/scaffold.js.map +0 -1
  515. package/dist/trackers/local.js +0 -445
  516. package/dist/trackers/local.js.map +0 -1
  517. package/dist/trackers/types.js +0 -10
  518. package/dist/trackers/types.js.map +0 -1
  519. package/dist/types.js +0 -3
  520. package/dist/types.js.map +0 -1
  521. package/dist/util/clock.js +0 -12
  522. package/dist/util/clock.js.map +0 -1
  523. package/dist/util/crypto.js +0 -25
  524. package/dist/util/crypto.js.map +0 -1
  525. package/dist/util/frontmatter.js +0 -70
  526. package/dist/util/frontmatter.js.map +0 -1
  527. package/dist/util/fs-issues.js +0 -22
  528. package/dist/util/fs-issues.js.map +0 -1
  529. package/dist/util/process.js +0 -152
  530. package/dist/util/process.js.map +0 -1
  531. package/dist/util/workspace-key.js +0 -10
  532. package/dist/util/workspace-key.js.map +0 -1
  533. package/dist/workflow-loader.js +0 -147
  534. package/dist/workflow-loader.js.map +0 -1
  535. package/dist/workflow.js +0 -822
  536. package/dist/workflow.js.map +0 -1
  537. package/dist/workspace-types.js +0 -8
  538. package/dist/workspace-types.js.map +0 -1
  539. package/dist/workspace.js +0 -443
  540. package/dist/workspace.js.map +0 -1
@@ -1,174 +0,0 @@
1
- // PR autopilot adapters (shell). Concrete `gh` shell-out implementation of
2
- // the {@link PrApi} port declared in `./pr.ts`. Lifted out of `pr.ts` so the
3
- // core resource module stays pure domain (issue 70) — `pr.ts` no longer
4
- // imports `util/process` and is free of `Date.now()`-style non-determinism.
5
- //
6
- // pr.ts re-exports the port interface from this module's `import type` line
7
- // only; this file does not import any non-type symbol from `./pr.ts`, so the
8
- // `domain ← adapters` invariant holds at runtime.
9
- import { runProcess } from '../util/process.js';
10
- // Thin shape adapter over the unified runProcess. `exit: -1` is the historical
11
- // PR-autopilot sentinel for "spawn errored or process signalled"; map runProcess's
12
- // `exit_code: null` into it so downstream gh-output parsing stays identical to
13
- // the pre-refactor shape.
14
- async function runShell(cmd, args, opts = {}) {
15
- const r = await runProcess(cmd, args, {
16
- cwd: opts.cwd,
17
- timeoutMs: opts.timeoutMs,
18
- // PR autopilot's gh output can be large (json blobs); keep the historical
19
- // 1 MiB clamp rather than the 64 KiB default.
20
- maxBytes: 1_048_576,
21
- });
22
- return {
23
- exit: r.exit_code ?? -1,
24
- stdout: r.stdout,
25
- stderr: r.stderr,
26
- };
27
- }
28
- /** Default production PrApi backed by the `gh` CLI on the host. */
29
- export class GhCliPrApi {
30
- opts;
31
- constructor(opts = {}) {
32
- this.opts = opts;
33
- }
34
- /** Normalize the configured slug (empty → null). */
35
- currentRepo() {
36
- return this.opts.repo && this.opts.repo.length > 0 ? this.opts.repo : null;
37
- }
38
- /**
39
- * `--repo <owner/repo>` args when a target slug is configured, else `[]`.
40
- * Without this, `gh` infers the repository from the process cwd — correct
41
- * when symphony runs inside the target repo, but wrong/absent in the
42
- * out-of-repo (control-dir) layout the `workspace.github_repo` knob enables.
43
- * Pinning the slug makes every autopilot `gh` call hit the same repository
44
- * the workspace setup and Done-state actions target.
45
- */
46
- repoArgs() {
47
- const repo = this.currentRepo();
48
- return repo ? ['--repo', repo] : [];
49
- }
50
- async listForBranch(branch) {
51
- // `--state all` so a PR that has merged or been closed is still
52
- // returned — once we have the number we drive cleanup via `view`,
53
- // which works against any state. An OPEN-only filter would make a
54
- // post-merge or operator-closed PR invisible to the autopilot.
55
- const res = await runShell('gh', ['pr', 'list', ...this.repoArgs(), '--head', branch, '--state', 'all', '--json', 'number,url', '--limit', '1'], this.opts);
56
- if (res.exit !== 0) {
57
- throw new Error(`gh pr list failed (exit ${res.exit}): ${res.stderr.trim()}`);
58
- }
59
- let parsed;
60
- try {
61
- parsed = JSON.parse(res.stdout);
62
- }
63
- catch (err) {
64
- throw new Error(`gh pr list returned non-JSON: ${err.message}`);
65
- }
66
- if (!Array.isArray(parsed) || parsed.length === 0)
67
- return null;
68
- const first = parsed[0];
69
- if (typeof first.number !== 'number' || typeof first.url !== 'string')
70
- return null;
71
- return { number: first.number, url: first.url };
72
- }
73
- async view(prNumber) {
74
- const res = await runShell('gh', [
75
- 'pr',
76
- 'view',
77
- String(prNumber),
78
- ...this.repoArgs(),
79
- '--json',
80
- 'number,url,state,mergeable,mergeStateStatus,baseRefName,baseRefOid,headRefName,headRefOid,reviewDecision,autoMergeRequest',
81
- ], this.opts);
82
- if (res.exit !== 0) {
83
- throw new Error(`gh pr view ${prNumber} failed (exit ${res.exit}): ${res.stderr.trim()}`);
84
- }
85
- return parseGhPrView(prNumber, res.stdout);
86
- }
87
- async armAutoMerge(prNumber, strategy) {
88
- const flag = strategy === 'merge' ? '--merge' : strategy === 'rebase' ? '--rebase' : '--squash';
89
- const res = await runShell('gh', ['pr', 'merge', String(prNumber), ...this.repoArgs(), '--auto', flag, '--delete-branch'], this.opts);
90
- if (res.exit !== 0) {
91
- throw new Error(`gh pr merge --auto failed (exit ${res.exit}): ${res.stderr.trim()}`);
92
- }
93
- }
94
- async updateBranch(prNumber) {
95
- const res = await runShell('gh', ['pr', 'update-branch', String(prNumber), ...this.repoArgs()], this.opts);
96
- if (res.exit !== 0) {
97
- throw new Error(`gh pr update-branch failed (exit ${res.exit}): ${res.stderr.trim()}`);
98
- }
99
- }
100
- async closePr(prNumber) {
101
- const res = await runShell('gh', ['pr', 'close', String(prNumber), ...this.repoArgs()], this.opts);
102
- if (res.exit !== 0) {
103
- throw new Error(`gh pr close failed (exit ${res.exit}): ${res.stderr.trim()}`);
104
- }
105
- }
106
- async deleteRemoteBranch(branch) {
107
- // `gh api -X DELETE` is the most direct path; falls back to `git push :branch`
108
- // via shell would require knowing the remote URL. gh is required by the
109
- // existing PR-create hook anyway so we can rely on it being present.
110
- // Substitute the configured slug for gh's `{owner}/{repo}` placeholder (which
111
- // it would otherwise resolve from the process cwd) so the delete hits the
112
- // same repository as the rest of the autopilot.
113
- const repoPath = this.currentRepo() ?? '{owner}/{repo}';
114
- const res = await runShell('gh', ['api', '-X', 'DELETE', `repos/${repoPath}/git/refs/heads/${branch}`], this.opts);
115
- if (res.exit !== 0) {
116
- // 422 / 404 from gh api is "branch already gone" — surface as a soft
117
- // error so the resource records it but doesn't keep retrying.
118
- throw new Error(`gh api delete branch failed (exit ${res.exit}): ${res.stderr.trim()}`);
119
- }
120
- }
121
- }
122
- function parseGhPrView(prNumber, stdout) {
123
- let parsed;
124
- try {
125
- parsed = JSON.parse(stdout);
126
- }
127
- catch (err) {
128
- throw new Error(`gh pr view returned non-JSON: ${err.message}`);
129
- }
130
- return {
131
- number: typeof parsed.number === 'number' ? parsed.number : prNumber,
132
- url: typeof parsed.url === 'string' ? parsed.url : '',
133
- state: normalizeState(parsed.state),
134
- mergeable: normalizeMergeable(parsed.mergeable),
135
- merge_state_status: normalizeMergeStateStatus(parsed.mergeStateStatus),
136
- base_ref_name: typeof parsed.baseRefName === 'string' ? parsed.baseRefName : '',
137
- base_ref_oid: typeof parsed.baseRefOid === 'string' ? parsed.baseRefOid : null,
138
- head_ref_name: typeof parsed.headRefName === 'string' ? parsed.headRefName : '',
139
- head_ref_oid: typeof parsed.headRefOid === 'string' ? parsed.headRefOid : '',
140
- review_decision: normalizeReviewDecision(parsed.reviewDecision),
141
- auto_merge_armed: parsed.autoMergeRequest !== null &&
142
- parsed.autoMergeRequest !== undefined &&
143
- typeof parsed.autoMergeRequest === 'object',
144
- };
145
- }
146
- function normalizeState(raw) {
147
- if (raw === 'OPEN' || raw === 'CLOSED' || raw === 'MERGED')
148
- return raw;
149
- return 'OPEN';
150
- }
151
- function normalizeMergeable(raw) {
152
- if (raw === 'MERGEABLE' || raw === 'CONFLICTING' || raw === 'UNKNOWN')
153
- return raw;
154
- return 'UNKNOWN';
155
- }
156
- function normalizeMergeStateStatus(raw) {
157
- if (raw === 'BEHIND' ||
158
- raw === 'BLOCKED' ||
159
- raw === 'CLEAN' ||
160
- raw === 'DIRTY' ||
161
- raw === 'DRAFT' ||
162
- raw === 'HAS_HOOKS' ||
163
- raw === 'UNKNOWN' ||
164
- raw === 'UNSTABLE') {
165
- return raw;
166
- }
167
- return 'UNKNOWN';
168
- }
169
- function normalizeReviewDecision(raw) {
170
- if (raw === 'APPROVED' || raw === 'CHANGES_REQUESTED' || raw === 'REVIEW_REQUIRED')
171
- return raw;
172
- return null;
173
- }
174
- //# sourceMappingURL=pr-adapters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-adapters.js","sourceRoot":"","sources":["../../src/reconciler/pr-adapters.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-decide.js","sourceRoot":"","sources":["../../src/reconciler/pr-decide.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,gEAAgE;AAChE,4EAA4E;AAC5E,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,EAAE;AACF,uDAAuD;AA6JvD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAkB;IACzC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAE7B,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAErD,qBAAqB;IACrB,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO;YACL,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACvE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,EAAE,EAAE;YAC7C,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,uEAAuE;IACvE,0EAA0E;IAC1E,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAEjE,yEAAyE;IACzE,0EAA0E;IAC1E,kEAAkE;IAClE,sCAAsC;IACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,mEAAmE;QACnE,kDAAkD;QAClD,IAAI,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACpD,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL;gBACE,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;aAC9B;SACF,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,sEAAsE;IACtE,uEAAuE;IACvE,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,IAAI,CAAC,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,GAAkB;IACrC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO;YACL,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;YAC3E,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE;SAC3C,CAAC;IACJ,CAAC;IACD,sEAAsE;IACtE,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,+DAA+D;IAC/D,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrD,OAAO;YACL,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;YAC3E,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE;SAC3C,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,GAAkB;IACxC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAK,CAAC;IACvB,OAAO;QACL;YACE,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;YAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe;YACnC,KAAK,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;SACxD;QACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAwC;IACzE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC9B,MAAM,KAAK,GAAa;QACtB,iDAAiD;QACjD,EAAE;QACF,sBAAsB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,qBAAqB,IAAI,CAAC,SAAS,uBAAuB,MAAM,CAAC,WAAW,KAAK;QAC/H,EAAE;QACF,+BAA+B,MAAM,CAAC,KAAK,kEAAkE,MAAM,CAAC,WAAW,qDAAqD,MAAM,CAAC,MAAM,iRAAiR;KACnd,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,422 +0,0 @@
1
- // PR autopilot resource (issue 38 / reconciler stage 4). Owns the lifecycle of
2
- // each terminal-state issue's GitHub PR: arms `gh pr merge --auto` when the
3
- // PR is mergeable, routes non-mergeable PRs back to the implementing state
4
- // (where the agent rebases onto a freshly-fetched base as part of its normal
5
- // flow), and reaps workspace + remote branch once GitHub merges or closes
6
- // the PR. Sits behind the PR engine toggle (`pr.enabled`) so a workflow that
7
- // hasn't opted in observes no behavior change at runtime.
8
- //
9
- // Desired state per issue:
10
- // - identifier in `merge_state` (e.g. Done) with a MERGEABLE open PR:
11
- // `gh pr merge --auto --<strategy>` is armed.
12
- // - identifier in `merge_state` with a CONFLICTING (or otherwise non-
13
- // mergeable) open PR: issue is routed back to `conflict_route_to`
14
- // (default: the first declared active state) with notes; the dispatched
15
- // agent owns the rebase.
16
- // - identifier in `merge_state` whose PR has merged or closed:
17
- // local + (best-effort) remote branch deleted; workspace removed.
18
- // - identifier in `close_state` (e.g. Cancelled) with an open PR:
19
- // PR closed without merge; branches deleted.
20
- //
21
- // Actual state per issue:
22
- // - PR view from `gh pr view <#> --json mergeable,base/head ref/oid,…`.
23
- // Cached for `poll_interval_ms` per PR so a fast reconcile cadence does not
24
- // storm the GH API.
25
- //
26
- // Conflict handling: the autopilot does not rebase. A non-mergeable PR is
27
- // reported (notes block + state transition) and the dispatched agent does
28
- // the work. This matches the workspace clone model: the host runs
29
- // `git fetch origin <base>` before each dispatch so `origin/<base>` is
30
- // current in the workspace, and the Todo prompt instructs the agent to
31
- // `git rebase origin/<base>` as the first step.
32
- //
33
- // All GH I/O is behind injectable callbacks. Production wires real shell-outs
34
- // (see `./pr-adapters.ts` — the shell module that implements PrApi against
35
- // `gh` on the host); tests pass synchronous stubs.
36
- import { log } from '../logging.js';
37
- import { realClock } from '../util/clock.js';
38
- import { ResourceActionLedger } from './ledger.js';
39
- import { decidePr, } from './pr-decide.js';
40
- const MAX_ACTION_HISTORY = 64;
41
- export class PrResource {
42
- opts;
43
- id = 'pr';
44
- dependsOn = [];
45
- state = new Map();
46
- lastError = null;
47
- now;
48
- actor;
49
- ledger;
50
- constructor(opts) {
51
- this.opts = opts;
52
- this.now = opts.now ?? realClock;
53
- this.actor = opts.actor ?? 'pr-autopilot';
54
- this.ledger = new ResourceActionLedger(this.id, {
55
- now: this.now,
56
- maxHistory: MAX_ACTION_HISTORY,
57
- });
58
- }
59
- ready() {
60
- return true;
61
- }
62
- /**
63
- * One reconcile pass. Returns when every intended issue has been considered
64
- * (a single in-flight action per issue is awaited in series — concurrent
65
- * git operations across distinct workspaces are safe in principle, but the
66
- * orchestrator's broader concurrency model expects serial action ledger
67
- * writes within a single resource). Errors are caught at the action
68
- * boundary so one failing issue does not block the rest.
69
- */
70
- async reconcile() {
71
- let intents;
72
- try {
73
- intents = await this.opts.intended.prIntended();
74
- }
75
- catch (err) {
76
- const msg = err.message;
77
- this.lastError = `pr_intended_fetch_failed: ${msg}`;
78
- log.warn('pr reconcile: intended fetch failed', { error: msg });
79
- return;
80
- }
81
- // For identifiers no longer in the intended set, drop the per-issue
82
- // state entirely — there is no counter to preserve anymore; the next
83
- // return to the merge state re-resolves everything from gh.
84
- const wanted = new Set(intents.map((i) => i.identifier));
85
- for (const id of [...this.state.keys()]) {
86
- if (!wanted.has(id))
87
- this.state.delete(id);
88
- }
89
- // Reset per-pass error so a transient failure that has resolved doesn't
90
- // keep haunting the snapshot. Per-action errors will repopulate it.
91
- this.lastError = null;
92
- for (const intent of intents) {
93
- try {
94
- await this.processIntent(intent);
95
- }
96
- catch (err) {
97
- const msg = err.message;
98
- this.lastError = msg;
99
- log.warn('pr reconcile: per-issue pass threw', {
100
- identifier: intent.identifier,
101
- kind: intent.kind,
102
- error: msg,
103
- });
104
- }
105
- }
106
- }
107
- snapshot() {
108
- return {
109
- id: this.id,
110
- ready: true,
111
- desired_hash: null,
112
- last_error: this.lastError,
113
- actions: this.ledger.snapshot(),
114
- };
115
- }
116
- /** Test helper: read the cached PR view (post-pass). */
117
- viewFor(identifier) {
118
- return this.state.get(identifier)?.prView ?? null;
119
- }
120
- getOrInit(identifier) {
121
- let st = this.state.get(identifier);
122
- if (!st) {
123
- st = {
124
- prSummary: undefined,
125
- lastLookupAt: 0,
126
- prView: null,
127
- lastViewAt: 0,
128
- lastObservedHeadSha: null,
129
- armed: false,
130
- completed: false,
131
- };
132
- this.state.set(identifier, st);
133
- }
134
- return st;
135
- }
136
- /**
137
- * Wipe everything except `completed`. Used when we route the issue back
138
- * to the implementing state so the next return to the merge state starts
139
- * with a fresh PR view.
140
- */
141
- resetTransient(st) {
142
- st.prSummary = undefined;
143
- st.lastLookupAt = 0;
144
- st.prView = null;
145
- st.lastViewAt = 0;
146
- st.lastObservedHeadSha = null;
147
- st.armed = false;
148
- st.completed = false;
149
- }
150
- /**
151
- * Drive one intent through the decide → apply loop. Observation is rebuilt
152
- * incrementally as each effect runs: `observe_summary` / `observe_view`
153
- * populate fields the next `decidePr` call consults; pure cache mutations
154
- * fold straight into the next iteration's `cache` snapshot. The cap is a
155
- * defensive guard — decide reduces work on every iteration (a `_resolved`
156
- * flag flips, or an outcome lands) so it terminates well inside the bound.
157
- */
158
- async processIntent(intent) {
159
- let obs = this.buildObservation(intent);
160
- for (let i = 0; i < 12; i += 1) {
161
- const effects = decidePr(obs);
162
- if (effects.length === 0)
163
- return;
164
- for (const eff of effects) {
165
- obs = await this.applyEffect(eff, obs);
166
- }
167
- }
168
- log.warn('pr reconcile: decide loop iteration cap reached', {
169
- identifier: intent.identifier,
170
- });
171
- }
172
- buildObservation(intent) {
173
- const st = this.getOrInit(intent.identifier);
174
- return {
175
- intent,
176
- cache: this.cacheView(st),
177
- summaryResolved: false,
178
- summary: null,
179
- viewResolved: false,
180
- view: null,
181
- closeAttempted: false,
182
- closeOutcome: null,
183
- halt: false,
184
- config: {
185
- strategy: this.opts.strategy,
186
- conflictRouteTo: this.opts.conflictRouteTo,
187
- },
188
- };
189
- }
190
- cacheView(st) {
191
- return {
192
- completed: st.completed,
193
- armed: st.armed,
194
- lastObservedHeadSha: st.lastObservedHeadSha,
195
- };
196
- }
197
- static EMPTY_CACHE = {
198
- completed: false,
199
- armed: false,
200
- lastObservedHeadSha: null,
201
- };
202
- /**
203
- * Apply one effect from `decidePr`. IO effects route through the existing
204
- * ledger-wrapped port helpers; cache mutations land on the live
205
- * `PerIssueState` and the returned observation reflects the new cache view
206
- * so the next `decidePr` call sees the change.
207
- */
208
- async applyEffect(eff, obs) {
209
- switch (eff.kind) {
210
- case 'observe_summary': {
211
- const st = this.getOrInit(eff.identifier);
212
- const summary = await this.lookupPrSummary(obs.intent, st);
213
- return { ...obs, summaryResolved: true, summary, cache: this.cacheView(st) };
214
- }
215
- case 'observe_view': {
216
- const st = this.getOrInit(eff.identifier);
217
- const view = await this.fetchPrView(eff.identifier, eff.prNumber, st);
218
- return { ...obs, viewResolved: true, view, cache: this.cacheView(st) };
219
- }
220
- case 'arm_auto_merge': {
221
- await this.runArmAutoMerge(eff.identifier, eff.prNumber, eff.strategy);
222
- const st = this.getOrInit(eff.identifier);
223
- st.armed = true;
224
- return { ...obs, cache: this.cacheView(st) };
225
- }
226
- case 'update_branch': {
227
- await this.runUpdateBranch(eff.identifier, eff.prNumber);
228
- // Halt the pass: the cached view still reads BEHIND so re-deciding
229
- // would re-emit the effect every iteration. The per-PR poll TTL
230
- // throttles the next `view()` call, by which point gh has refreshed
231
- // mergeStateStatus (or the head_ref_oid moved). See issue 105.
232
- return { ...obs, halt: true };
233
- }
234
- case 'close_pr': {
235
- const ok = await this.runClosePr(eff.identifier, eff.prNumber);
236
- return { ...obs, closeAttempted: true, closeOutcome: { ok } };
237
- }
238
- case 'delete_remote_branch': {
239
- await this.runDeleteRemoteBranch(eff.identifier, eff.branch);
240
- return obs;
241
- }
242
- case 'cleanup_workspace': {
243
- await this.runCleanupWorkspace(eff.identifier);
244
- return obs;
245
- }
246
- case 'route_conflict': {
247
- await this.runConflictTransition(eff);
248
- return { ...obs, halt: true };
249
- }
250
- case 'update_observed_head': {
251
- const st = this.getOrInit(eff.identifier);
252
- st.lastObservedHeadSha = eff.sha;
253
- return { ...obs, cache: this.cacheView(st) };
254
- }
255
- case 'mark_completed': {
256
- const st = this.getOrInit(eff.identifier);
257
- st.completed = true;
258
- return { ...obs, cache: this.cacheView(st) };
259
- }
260
- case 'reset_transient': {
261
- const st = this.state.get(eff.identifier);
262
- if (st)
263
- this.resetTransient(st);
264
- // Always paired with route_conflict; terminal for this pass.
265
- return {
266
- ...obs,
267
- cache: st ? this.cacheView(st) : PrResource.EMPTY_CACHE,
268
- halt: true,
269
- };
270
- }
271
- }
272
- }
273
- // ─── helpers: per-action wrappers with ledger + cache plumbing ──────────
274
- async lookupPrSummary(intent, st) {
275
- // Sticky cache once we have a number: PR numbers don't change, and the
276
- // PR moving to MERGED/CLOSED must not cause us to "forget" it — that
277
- // would skip the terminal observation the autopilot needs to drive
278
- // cleanup. Re-listing is restricted to the never-found-yet / still-null
279
- // paths below.
280
- if (st.prSummary)
281
- return st.prSummary;
282
- const now = this.now();
283
- if (st.prSummary === null &&
284
- now - st.lastLookupAt < this.opts.pollIntervalMs) {
285
- // Still in the null-result TTL window: defer instead of re-querying.
286
- return null;
287
- }
288
- const actionKey = `list_pr_for_branch:${intent.identifier}`;
289
- this.ledger.start(actionKey);
290
- try {
291
- const result = await this.opts.pr.listForBranch(intent.branch);
292
- st.prSummary = result;
293
- st.lastLookupAt = now;
294
- this.ledger.done(actionKey);
295
- return result;
296
- }
297
- catch (err) {
298
- const msg = err.message;
299
- this.lastError = `list_pr_failed: ${msg}`;
300
- this.ledger.error(actionKey, msg);
301
- return null;
302
- }
303
- }
304
- async fetchPrView(identifier, prNumber, st) {
305
- const now = this.now();
306
- if (st.prView !== null && now - st.lastViewAt < this.opts.pollIntervalMs) {
307
- return st.prView;
308
- }
309
- const actionKey = `view_pr:${prNumber}`;
310
- this.ledger.start(actionKey);
311
- try {
312
- const view = await this.opts.pr.view(prNumber);
313
- st.prView = view;
314
- st.lastViewAt = now;
315
- st.lastObservedHeadSha = view.head_ref_oid;
316
- st.armed = view.auto_merge_armed;
317
- this.ledger.done(actionKey);
318
- return view;
319
- }
320
- catch (err) {
321
- const msg = err.message;
322
- this.lastError = `view_pr_failed: ${msg}`;
323
- this.ledger.error(actionKey, msg);
324
- log.warn('pr reconcile: view failed', {
325
- identifier,
326
- pr_number: prNumber,
327
- error: msg,
328
- });
329
- return null;
330
- }
331
- }
332
- async runArmAutoMerge(identifier, prNumber, strategy) {
333
- const actionKey = `arm_auto_merge:${prNumber}`;
334
- const res = await this.ledger.run(actionKey, () => this.opts.pr.armAutoMerge(prNumber, strategy));
335
- if (res.ok) {
336
- log.info('pr reconcile: armed auto-merge', {
337
- identifier,
338
- pr_number: prNumber,
339
- strategy,
340
- });
341
- }
342
- else {
343
- this.lastError = res.error;
344
- }
345
- }
346
- async runUpdateBranch(identifier, prNumber) {
347
- const actionKey = `update_branch:${prNumber}`;
348
- const res = await this.ledger.run(actionKey, () => this.opts.pr.updateBranch(prNumber));
349
- if (res.ok) {
350
- log.info('pr reconcile: updated branch onto base', {
351
- identifier,
352
- pr_number: prNumber,
353
- });
354
- }
355
- else {
356
- this.lastError = res.error;
357
- }
358
- }
359
- async runClosePr(identifier, prNumber) {
360
- const actionKey = `close_pr:${prNumber}`;
361
- const res = await this.ledger.run(actionKey, () => this.opts.pr.closePr(prNumber));
362
- if (res.ok) {
363
- log.info('pr reconcile: closed pr', { identifier, pr_number: prNumber });
364
- return true;
365
- }
366
- this.lastError = res.error;
367
- return false;
368
- }
369
- async runDeleteRemoteBranch(identifier, branch) {
370
- const actionKey = `delete_remote_branch:${branch}`;
371
- const res = await this.ledger.run(actionKey, () => this.opts.pr.deleteRemoteBranch(branch));
372
- if (!res.ok) {
373
- // Remote-branch deletion is best-effort — the branch may already be
374
- // gone (gh exits non-zero), or the operator may have removed it. We
375
- // log at info, surface in last_error, and move on.
376
- this.lastError = `delete_remote_branch_failed: ${res.error}`;
377
- log.info('pr reconcile: remote branch delete failed (best-effort)', {
378
- identifier,
379
- branch,
380
- error: res.error,
381
- });
382
- }
383
- }
384
- async runCleanupWorkspace(identifier) {
385
- const actionKey = `cleanup_workspace:${identifier}`;
386
- const res = await this.ledger.run(actionKey, () => this.opts.cleanup.removeWorkspace(identifier));
387
- if (!res.ok)
388
- this.lastError = res.error;
389
- }
390
- /**
391
- * Apply the `route_conflict` effect: same tracker.routeIssue call shape and
392
- * action-ledger key as before. State cleanup (`reset_transient`) rides as
393
- * a separate effect emitted by `decidePr` so the routing logic is testable
394
- * as pure data.
395
- */
396
- async runConflictTransition(eff) {
397
- const actionKey = `route_to_conflict:${eff.identifier}:${eff.toState.toLowerCase()}`;
398
- const res = await this.ledger.run(actionKey, () => this.opts.transition.routeIssue({
399
- identifier: eff.identifier,
400
- fromState: eff.fromState,
401
- toState: eff.toState,
402
- notes: eff.notes,
403
- actor: this.actor,
404
- }));
405
- if (res.ok) {
406
- log.info('pr reconcile: routed to implementing state', {
407
- identifier: eff.identifier,
408
- from_state: eff.fromState,
409
- to_state: eff.toState,
410
- });
411
- }
412
- else {
413
- this.lastError = res.error;
414
- log.warn('pr reconcile: conflict route failed', {
415
- identifier: eff.identifier,
416
- to_state: eff.toState,
417
- error: res.error,
418
- });
419
- }
420
- }
421
- }
422
- //# sourceMappingURL=pr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/reconciler/pr.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,6EAA6E;AAC7E,0DAA0D;AAC1D,EAAE;AACF,2BAA2B;AAC3B,wEAAwE;AACxE,oDAAoD;AACpD,wEAAwE;AACxE,wEAAwE;AACxE,8EAA8E;AAC9E,+BAA+B;AAC/B,iEAAiE;AACjE,wEAAwE;AACxE,oEAAoE;AACpE,mDAAmD;AACnD,EAAE;AACF,0BAA0B;AAC1B,0EAA0E;AAC1E,gFAAgF;AAChF,wBAAwB;AACxB,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,gDAAgD;AAChD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,mDAAmD;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,QAAQ,GAOT,MAAM,gBAAgB,CAAC;AAyIxB,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,OAAO,UAAU;IAUQ;IATpB,EAAE,GAAG,IAAI,CAAC;IACV,SAAS,GAAa,EAAE,CAAC;IAE1B,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IACzC,SAAS,GAAkB,IAAI,CAAC;IACvB,GAAG,CAAe;IAClB,KAAK,CAAS;IACd,MAAM,CAAuB;IAE9C,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;QAClD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE;YAC9C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,kBAAkB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,6BAA6B,GAAG,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,oEAAoE;QACpE,qEAAqE;QACrE,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;gBACnC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBAC7C,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,OAAO,CAAC,UAAkB;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IACpD,CAAC;IAEO,SAAS,CAAC,UAAkB;QAClC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG;gBACH,SAAS,EAAE,SAAS;gBACpB,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,CAAC;gBACb,mBAAmB,EAAE,IAAI;gBACzB,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACK,cAAc,CAAC,EAAiB;QACtC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;QACzB,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC;QACpB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;QACjB,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC9B,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;QACjB,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,aAAa,CAAC,MAAgB;QAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,iDAAiD,EAAE;YAC1D,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAgB;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO;YACL,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzB,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,KAAK;YACnB,IAAI,EAAE,IAAI;YACV,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,KAAK;YACX,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC5B,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;aAC3C;SACF,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,EAAiB;QACjC,OAAO;YACL,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,mBAAmB,EAAE,EAAE,CAAC,mBAAmB;SAC5C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAU,WAAW,GAAgB;QACjD,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,KAAK;QACZ,mBAAmB,EAAE,IAAI;KAC1B,CAAC;IAEF;;;;;OAKG;IACK,KAAK,CAAC,WAAW,CAAC,GAAa,EAAE,GAAkB;QACzD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC3D,OAAO,EAAE,GAAG,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/E,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACtE,OAAO,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACzE,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;gBAChB,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/C,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzD,mEAAmE;gBACnE,gEAAgE;gBAChE,oEAAoE;gBACpE,+DAA+D;gBAC/D,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAChC,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/D,OAAO,EAAE,GAAG,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAChE,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7D,OAAO,GAAG,CAAC;YACb,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC/C,OAAO,GAAG,CAAC;YACb,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBACtC,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAChC,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,EAAE,CAAC,mBAAmB,GAAG,GAAG,CAAC,GAAG,CAAC;gBACjC,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/C,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;gBACpB,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/C,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,EAAE;oBAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAChC,6DAA6D;gBAC7D,OAAO;oBACL,GAAG,GAAG;oBACN,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW;oBACvD,IAAI,EAAE,IAAI;iBACX,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,2EAA2E;IAEnE,KAAK,CAAC,eAAe,CAC3B,MAAgB,EAChB,EAAiB;QAEjB,uEAAuE;QACvE,qEAAqE;QACrE,mEAAmE;QACnE,wEAAwE;QACxE,eAAe;QACf,IAAI,EAAE,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC,SAAS,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IACE,EAAE,CAAC,SAAS,KAAK,IAAI;YACrB,GAAG,GAAG,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAChD,CAAC;YACD,qEAAqE;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAG,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/D,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC;YACtB,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,mBAAmB,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,UAAkB,EAClB,QAAgB,EAChB,EAAiB;QAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzE,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;YACjB,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC;YACpB,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3C,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,mBAAmB,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACpC,UAAU;gBACV,SAAS,EAAE,QAAQ;gBACnB,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,UAAkB,EAClB,QAAgB,EAChB,QAAuC;QAEvC,MAAM,SAAS,GAAG,kBAAkB,QAAQ,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAC9C,CAAC;QACF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBACzC,UAAU;gBACV,SAAS,EAAE,QAAQ;gBACnB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,QAAgB;QAChE,MAAM,SAAS,GAAG,iBAAiB,QAAQ,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE;gBACjD,UAAU;gBACV,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,QAAgB;QAC3D,MAAM,SAAS,GAAG,YAAY,QAAQ,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,UAAkB,EAAE,MAAc;QACpE,MAAM,SAAS,GAAG,wBAAwB,MAAM,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,oEAAoE;YACpE,oEAAoE;YACpE,mDAAmD;YACnD,IAAI,CAAC,SAAS,GAAG,gCAAgC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,yDAAyD,EAAE;gBAClE,UAAU;gBACV,MAAM;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAClD,MAAM,SAAS,GAAG,qBAAqB,UAAU,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAChD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,qBAAqB,CACjC,GAAkD;QAElD,MAAM,SAAS,GAAG,qBAAqB,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAChD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CACH,CAAC;QACF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACrD,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,QAAQ,EAAE,GAAG,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBAC9C,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,OAAO;gBACrB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC"}
@@ -1,12 +0,0 @@
1
- // Reconciler types (issue 32 / future issue 31).
2
- //
3
- // The reconciler converges managed external resources (VM reaper, workspace
4
- // janitor, PR autopilot) toward a declared desired state. Each resource
5
- // describes its work as typed action records — not opaque closures — so
6
- // per-action progress can be surfaced on Snapshot and the same record shape
7
- // can be reused for hook-declared actions.
8
- //
9
- // Action records carry a discriminant `kind`; new kinds are added as more
10
- // resources land in later stages of the reconciler refactor.
11
- export {};
12
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reconciler/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,6DAA6D"}