dorfl 0.0.0 → 0.1.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 (619) hide show
  1. package/dist/advance-ci-template.d.ts +73 -0
  2. package/dist/advance-ci-template.d.ts.map +1 -0
  3. package/dist/advance-ci-template.js +104 -0
  4. package/dist/advance-ci-template.js.map +1 -0
  5. package/dist/advance-classify.d.ts +132 -0
  6. package/dist/advance-classify.d.ts.map +1 -0
  7. package/dist/advance-classify.js +120 -0
  8. package/dist/advance-classify.js.map +1 -0
  9. package/dist/advance-drivers.d.ts +182 -0
  10. package/dist/advance-drivers.d.ts.map +1 -0
  11. package/dist/advance-drivers.js +231 -0
  12. package/dist/advance-drivers.js.map +1 -0
  13. package/dist/advance-isolated.d.ts +156 -0
  14. package/dist/advance-isolated.d.ts.map +1 -0
  15. package/dist/advance-isolated.js +256 -0
  16. package/dist/advance-isolated.js.map +1 -0
  17. package/dist/advance-lifecycle-template.d.ts +107 -0
  18. package/dist/advance-lifecycle-template.d.ts.map +1 -0
  19. package/dist/advance-lifecycle-template.js +668 -0
  20. package/dist/advance-lifecycle-template.js.map +1 -0
  21. package/dist/advance-loop-driver.d.ts +325 -0
  22. package/dist/advance-loop-driver.d.ts.map +1 -0
  23. package/dist/advance-loop-driver.js +437 -0
  24. package/dist/advance-loop-driver.js.map +1 -0
  25. package/dist/advance-treeless-publish.d.ts +108 -0
  26. package/dist/advance-treeless-publish.d.ts.map +1 -0
  27. package/dist/advance-treeless-publish.js +71 -0
  28. package/dist/advance-treeless-publish.js.map +1 -0
  29. package/dist/advance.d.ts +340 -0
  30. package/dist/advance.d.ts.map +1 -0
  31. package/dist/advance.js +1122 -0
  32. package/dist/advance.js.map +1 -0
  33. package/dist/advancing-lock.d.ts +294 -0
  34. package/dist/advancing-lock.d.ts.map +1 -0
  35. package/dist/advancing-lock.js +594 -0
  36. package/dist/advancing-lock.js.map +1 -0
  37. package/dist/agent-launch.d.ts +79 -0
  38. package/dist/agent-launch.d.ts.map +1 -0
  39. package/dist/agent-launch.js +61 -0
  40. package/dist/agent-launch.js.map +1 -0
  41. package/dist/agent-stop.d.ts +149 -0
  42. package/dist/agent-stop.d.ts.map +1 -0
  43. package/dist/agent-stop.js +307 -0
  44. package/dist/agent-stop.js.map +1 -0
  45. package/dist/apply-decide.d.ts +127 -0
  46. package/dist/apply-decide.d.ts.map +1 -0
  47. package/dist/apply-decide.js +176 -0
  48. package/dist/apply-decide.js.map +1 -0
  49. package/dist/apply-merge-action.d.ts +206 -0
  50. package/dist/apply-merge-action.d.ts.map +1 -0
  51. package/dist/apply-merge-action.js +307 -0
  52. package/dist/apply-merge-action.js.map +1 -0
  53. package/dist/apply-persist.d.ts +174 -0
  54. package/dist/apply-persist.d.ts.map +1 -0
  55. package/dist/apply-persist.js +359 -0
  56. package/dist/apply-persist.js.map +1 -0
  57. package/dist/arbiter.d.ts +120 -0
  58. package/dist/arbiter.d.ts.map +1 -0
  59. package/dist/arbiter.js +255 -0
  60. package/dist/arbiter.js.map +1 -0
  61. package/dist/brand.d.ts +70 -0
  62. package/dist/brand.d.ts.map +1 -0
  63. package/dist/brand.js +84 -0
  64. package/dist/brand.js.map +1 -0
  65. package/dist/buildable-body.d.ts +132 -0
  66. package/dist/buildable-body.d.ts.map +1 -0
  67. package/dist/buildable-body.js +131 -0
  68. package/dist/buildable-body.js.map +1 -0
  69. package/dist/categorise.d.ts +66 -0
  70. package/dist/categorise.d.ts.map +1 -0
  71. package/dist/categorise.js +106 -0
  72. package/dist/categorise.js.map +1 -0
  73. package/dist/claim-cas.d.ts +117 -0
  74. package/dist/claim-cas.d.ts.map +1 -0
  75. package/dist/claim-cas.js +312 -0
  76. package/dist/claim-cas.js.map +1 -0
  77. package/dist/cli-spinner.d.ts +112 -0
  78. package/dist/cli-spinner.d.ts.map +1 -0
  79. package/dist/cli-spinner.js +157 -0
  80. package/dist/cli-spinner.js.map +1 -0
  81. package/dist/cli.d.ts +11 -0
  82. package/dist/cli.d.ts.map +1 -0
  83. package/dist/cli.js +3094 -0
  84. package/dist/cli.js.map +1 -0
  85. package/dist/close-job-template.d.ts +70 -0
  86. package/dist/close-job-template.d.ts.map +1 -0
  87. package/dist/close-job-template.js +180 -0
  88. package/dist/close-job-template.js.map +1 -0
  89. package/dist/close-job.d.ts +95 -0
  90. package/dist/close-job.d.ts.map +1 -0
  91. package/dist/close-job.js +226 -0
  92. package/dist/close-job.js.map +1 -0
  93. package/dist/complete.d.ts +361 -0
  94. package/dist/complete.d.ts.map +1 -0
  95. package/dist/complete.js +885 -0
  96. package/dist/complete.js.map +1 -0
  97. package/dist/concurrency.d.ts +68 -0
  98. package/dist/concurrency.d.ts.map +1 -0
  99. package/dist/concurrency.js +112 -0
  100. package/dist/concurrency.js.map +1 -0
  101. package/dist/config-override.d.ts +76 -0
  102. package/dist/config-override.d.ts.map +1 -0
  103. package/dist/config-override.js +50 -0
  104. package/dist/config-override.js.map +1 -0
  105. package/dist/config.d.ts +668 -0
  106. package/dist/config.d.ts.map +1 -0
  107. package/dist/config.js +241 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/continue-branch.d.ts +249 -0
  110. package/dist/continue-branch.d.ts.map +1 -0
  111. package/dist/continue-branch.js +389 -0
  112. package/dist/continue-branch.js.map +1 -0
  113. package/dist/cwd-section.d.ts +186 -0
  114. package/dist/cwd-section.d.ts.map +1 -0
  115. package/dist/cwd-section.js +209 -0
  116. package/dist/cwd-section.js.map +1 -0
  117. package/dist/decision-engine.d.ts +170 -0
  118. package/dist/decision-engine.d.ts.map +1 -0
  119. package/dist/decision-engine.js +136 -0
  120. package/dist/decision-engine.js.map +1 -0
  121. package/dist/detect.d.ts +17 -0
  122. package/dist/detect.d.ts.map +1 -0
  123. package/dist/detect.js +118 -0
  124. package/dist/detect.js.map +1 -0
  125. package/dist/do-autopick.d.ts +85 -0
  126. package/dist/do-autopick.d.ts.map +1 -0
  127. package/dist/do-autopick.js +112 -0
  128. package/dist/do-autopick.js.map +1 -0
  129. package/dist/do-config.d.ts +312 -0
  130. package/dist/do-config.d.ts.map +1 -0
  131. package/dist/do-config.js +358 -0
  132. package/dist/do-config.js.map +1 -0
  133. package/dist/do-remote-auto.d.ts +75 -0
  134. package/dist/do-remote-auto.d.ts.map +1 -0
  135. package/dist/do-remote-auto.js +111 -0
  136. package/dist/do-remote-auto.js.map +1 -0
  137. package/dist/do.d.ts +621 -0
  138. package/dist/do.d.ts.map +1 -0
  139. package/dist/do.js +1882 -0
  140. package/dist/do.js.map +1 -0
  141. package/dist/drop-source.d.ts +96 -0
  142. package/dist/drop-source.d.ts.map +1 -0
  143. package/dist/drop-source.js +91 -0
  144. package/dist/drop-source.js.map +1 -0
  145. package/dist/eligibility.d.ts +46 -0
  146. package/dist/eligibility.d.ts.map +1 -0
  147. package/dist/eligibility.js +34 -0
  148. package/dist/eligibility.js.map +1 -0
  149. package/dist/env-config.d.ts +51 -0
  150. package/dist/env-config.d.ts.map +1 -0
  151. package/dist/env-config.js +272 -0
  152. package/dist/env-config.js.map +1 -0
  153. package/dist/failure-cause.d.ts +70 -0
  154. package/dist/failure-cause.d.ts.map +1 -0
  155. package/dist/failure-cause.js +126 -0
  156. package/dist/failure-cause.js.map +1 -0
  157. package/dist/format.d.ts +43 -0
  158. package/dist/format.d.ts.map +1 -0
  159. package/dist/format.js +256 -0
  160. package/dist/format.js.map +1 -0
  161. package/dist/frontmatter.d.ts +215 -0
  162. package/dist/frontmatter.d.ts.map +1 -0
  163. package/dist/frontmatter.js +345 -0
  164. package/dist/frontmatter.js.map +1 -0
  165. package/dist/gate-readiness.d.ts +84 -0
  166. package/dist/gate-readiness.d.ts.map +1 -0
  167. package/dist/gate-readiness.js +103 -0
  168. package/dist/gate-readiness.js.map +1 -0
  169. package/dist/gc.d.ts +165 -0
  170. package/dist/gc.d.ts.map +1 -0
  171. package/dist/gc.js +313 -0
  172. package/dist/gc.js.map +1 -0
  173. package/dist/gh-failure.d.ts +42 -0
  174. package/dist/gh-failure.d.ts.map +1 -0
  175. package/dist/gh-failure.js +49 -0
  176. package/dist/gh-failure.js.map +1 -0
  177. package/dist/git.d.ts +75 -0
  178. package/dist/git.d.ts.map +1 -0
  179. package/dist/git.js +130 -0
  180. package/dist/git.js.map +1 -0
  181. package/dist/github.d.ts +187 -0
  182. package/dist/github.d.ts.map +1 -0
  183. package/dist/github.js +343 -0
  184. package/dist/github.js.map +1 -0
  185. package/dist/harness.d.ts +242 -0
  186. package/dist/harness.d.ts.map +1 -0
  187. package/dist/harness.js +157 -0
  188. package/dist/harness.js.map +1 -0
  189. package/dist/identity.d.ts +167 -0
  190. package/dist/identity.d.ts.map +1 -0
  191. package/dist/identity.js +231 -0
  192. package/dist/identity.js.map +1 -0
  193. package/dist/index.d.ts +147 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +76 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/install-ci-branch-protection.d.ts +147 -0
  198. package/dist/install-ci-branch-protection.d.ts.map +1 -0
  199. package/dist/install-ci-branch-protection.js +166 -0
  200. package/dist/install-ci-branch-protection.js.map +1 -0
  201. package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
  202. package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
  203. package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
  204. package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
  205. package/dist/install-ci-capabilities/close-job.d.ts +13 -0
  206. package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
  207. package/dist/install-ci-capabilities/close-job.js +26 -0
  208. package/dist/install-ci-capabilities/close-job.js.map +1 -0
  209. package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
  210. package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
  211. package/dist/install-ci-capabilities/example-noop.js +23 -0
  212. package/dist/install-ci-capabilities/example-noop.js.map +1 -0
  213. package/dist/install-ci-capabilities/intake.d.ts +15 -0
  214. package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
  215. package/dist/install-ci-capabilities/intake.js +28 -0
  216. package/dist/install-ci-capabilities/intake.js.map +1 -0
  217. package/dist/install-ci-capabilities/verify.d.ts +14 -0
  218. package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
  219. package/dist/install-ci-capabilities/verify.js +27 -0
  220. package/dist/install-ci-capabilities/verify.js.map +1 -0
  221. package/dist/install-ci-core.d.ts +446 -0
  222. package/dist/install-ci-core.d.ts.map +1 -0
  223. package/dist/install-ci-core.js +760 -0
  224. package/dist/install-ci-core.js.map +1 -0
  225. package/dist/install-ci-github.d.ts +167 -0
  226. package/dist/install-ci-github.d.ts.map +1 -0
  227. package/dist/install-ci-github.js +315 -0
  228. package/dist/install-ci-github.js.map +1 -0
  229. package/dist/install-ci.d.ts +105 -0
  230. package/dist/install-ci.d.ts.map +1 -0
  231. package/dist/install-ci.js +363 -0
  232. package/dist/install-ci.js.map +1 -0
  233. package/dist/intake-event.d.ts +88 -0
  234. package/dist/intake-event.d.ts.map +1 -0
  235. package/dist/intake-event.js +66 -0
  236. package/dist/intake-event.js.map +1 -0
  237. package/dist/intake-marker.d.ts +95 -0
  238. package/dist/intake-marker.d.ts.map +1 -0
  239. package/dist/intake-marker.js +127 -0
  240. package/dist/intake-marker.js.map +1 -0
  241. package/dist/intake-triage.d.ts +48 -0
  242. package/dist/intake-triage.d.ts.map +1 -0
  243. package/dist/intake-triage.js +95 -0
  244. package/dist/intake-triage.js.map +1 -0
  245. package/dist/intake-trigger-template.d.ts +185 -0
  246. package/dist/intake-trigger-template.d.ts.map +1 -0
  247. package/dist/intake-trigger-template.js +449 -0
  248. package/dist/intake-trigger-template.js.map +1 -0
  249. package/dist/intake.d.ts +569 -0
  250. package/dist/intake.d.ts.map +1 -0
  251. package/dist/intake.js +1628 -0
  252. package/dist/intake.js.map +1 -0
  253. package/dist/integration-core.d.ts +539 -0
  254. package/dist/integration-core.d.ts.map +1 -0
  255. package/dist/integration-core.js +2195 -0
  256. package/dist/integration-core.js.map +1 -0
  257. package/dist/integrator.d.ts +343 -0
  258. package/dist/integrator.d.ts.map +1 -0
  259. package/dist/integrator.js +400 -0
  260. package/dist/integrator.js.map +1 -0
  261. package/dist/isolation.d.ts +219 -0
  262. package/dist/isolation.d.ts.map +1 -0
  263. package/dist/isolation.js +261 -0
  264. package/dist/isolation.js.map +1 -0
  265. package/dist/issue-provider.d.ts +349 -0
  266. package/dist/issue-provider.d.ts.map +1 -0
  267. package/dist/issue-provider.js +360 -0
  268. package/dist/issue-provider.js.map +1 -0
  269. package/dist/item-lock.d.ts +626 -0
  270. package/dist/item-lock.d.ts.map +1 -0
  271. package/dist/item-lock.js +1381 -0
  272. package/dist/item-lock.js.map +1 -0
  273. package/dist/item-path.d.ts +49 -0
  274. package/dist/item-path.d.ts.map +1 -0
  275. package/dist/item-path.js +66 -0
  276. package/dist/item-path.js.map +1 -0
  277. package/dist/ledger-lint.d.ts +129 -0
  278. package/dist/ledger-lint.d.ts.map +1 -0
  279. package/dist/ledger-lint.js +249 -0
  280. package/dist/ledger-lint.js.map +1 -0
  281. package/dist/ledger-read.d.ts +357 -0
  282. package/dist/ledger-read.d.ts.map +1 -0
  283. package/dist/ledger-read.js +442 -0
  284. package/dist/ledger-read.js.map +1 -0
  285. package/dist/ledger-write.d.ts +330 -0
  286. package/dist/ledger-write.d.ts.map +1 -0
  287. package/dist/ledger-write.js +411 -0
  288. package/dist/ledger-write.js.map +1 -0
  289. package/dist/lifecycle-gather.d.ts +30 -0
  290. package/dist/lifecycle-gather.d.ts.map +1 -0
  291. package/dist/lifecycle-gather.js +205 -0
  292. package/dist/lifecycle-gather.js.map +1 -0
  293. package/dist/lifecycle-pools.d.ts +180 -0
  294. package/dist/lifecycle-pools.d.ts.map +1 -0
  295. package/dist/lifecycle-pools.js +78 -0
  296. package/dist/lifecycle-pools.js.map +1 -0
  297. package/dist/merge-question-surfacer.d.ts +166 -0
  298. package/dist/merge-question-surfacer.d.ts.map +1 -0
  299. package/dist/merge-question-surfacer.js +297 -0
  300. package/dist/merge-question-surfacer.js.map +1 -0
  301. package/dist/mint-adr.d.ts +126 -0
  302. package/dist/mint-adr.d.ts.map +1 -0
  303. package/dist/mint-adr.js +257 -0
  304. package/dist/mint-adr.js.map +1 -0
  305. package/dist/mirror-pool-scan.d.ts +125 -0
  306. package/dist/mirror-pool-scan.d.ts.map +1 -0
  307. package/dist/mirror-pool-scan.js +104 -0
  308. package/dist/mirror-pool-scan.js.map +1 -0
  309. package/dist/needs-attention.d.ts +341 -0
  310. package/dist/needs-attention.d.ts.map +1 -0
  311. package/dist/needs-attention.js +900 -0
  312. package/dist/needs-attention.js.map +1 -0
  313. package/dist/orphan-sidecar.d.ts +79 -0
  314. package/dist/orphan-sidecar.d.ts.map +1 -0
  315. package/dist/orphan-sidecar.js +71 -0
  316. package/dist/orphan-sidecar.js.map +1 -0
  317. package/dist/output.d.ts +48 -0
  318. package/dist/output.d.ts.map +1 -0
  319. package/dist/output.js +66 -0
  320. package/dist/output.js.map +1 -0
  321. package/dist/pi-harness.d.ts +179 -0
  322. package/dist/pi-harness.d.ts.map +1 -0
  323. package/dist/pi-harness.js +342 -0
  324. package/dist/pi-harness.js.map +1 -0
  325. package/dist/placement.d.ts +99 -0
  326. package/dist/placement.d.ts.map +1 -0
  327. package/dist/placement.js +67 -0
  328. package/dist/placement.js.map +1 -0
  329. package/dist/prd-to-spec.d.ts +315 -0
  330. package/dist/prd-to-spec.d.ts.map +1 -0
  331. package/dist/prd-to-spec.js +684 -0
  332. package/dist/prd-to-spec.js.map +1 -0
  333. package/dist/prepare.d.ts +121 -0
  334. package/dist/prepare.d.ts.map +1 -0
  335. package/dist/prepare.js +140 -0
  336. package/dist/prepare.js.map +1 -0
  337. package/dist/prompt.d.ts +360 -0
  338. package/dist/prompt.d.ts.map +1 -0
  339. package/dist/prompt.js +499 -0
  340. package/dist/prompt.js.map +1 -0
  341. package/dist/protocol/ADR-FORMAT.md +47 -0
  342. package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
  343. package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
  344. package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
  345. package/dist/protocol/TASKING-PROTOCOL.md +122 -0
  346. package/dist/protocol/WORK-CONTRACT.md +276 -0
  347. package/dist/protocol/spec-template.md +71 -0
  348. package/dist/protocol/task-template.md +65 -0
  349. package/dist/readiness.d.ts +66 -0
  350. package/dist/readiness.d.ts.map +1 -0
  351. package/dist/readiness.js +36 -0
  352. package/dist/readiness.js.map +1 -0
  353. package/dist/reap-branches.d.ts +102 -0
  354. package/dist/reap-branches.d.ts.map +1 -0
  355. package/dist/reap-branches.js +149 -0
  356. package/dist/reap-branches.js.map +1 -0
  357. package/dist/recover-isolated.d.ts +72 -0
  358. package/dist/recover-isolated.d.ts.map +1 -0
  359. package/dist/recover-isolated.js +188 -0
  360. package/dist/recover-isolated.js.map +1 -0
  361. package/dist/registry.d.ts +172 -0
  362. package/dist/registry.d.ts.map +1 -0
  363. package/dist/registry.js +296 -0
  364. package/dist/registry.js.map +1 -0
  365. package/dist/repo-config.d.ts +201 -0
  366. package/dist/repo-config.d.ts.map +1 -0
  367. package/dist/repo-config.js +414 -0
  368. package/dist/repo-config.js.map +1 -0
  369. package/dist/repo-key.d.ts +20 -0
  370. package/dist/repo-key.d.ts.map +1 -0
  371. package/dist/repo-key.js +68 -0
  372. package/dist/repo-key.js.map +1 -0
  373. package/dist/repo-mirror.d.ts +177 -0
  374. package/dist/repo-mirror.d.ts.map +1 -0
  375. package/dist/repo-mirror.js +271 -0
  376. package/dist/repo-mirror.js.map +1 -0
  377. package/dist/retry-backoff.d.ts +90 -0
  378. package/dist/retry-backoff.d.ts.map +1 -0
  379. package/dist/retry-backoff.js +98 -0
  380. package/dist/retry-backoff.js.map +1 -0
  381. package/dist/review-gate.d.ts +173 -0
  382. package/dist/review-gate.d.ts.map +1 -0
  383. package/dist/review-gate.js +261 -0
  384. package/dist/review-gate.js.map +1 -0
  385. package/dist/review-verdict.d.ts +149 -0
  386. package/dist/review-verdict.d.ts.map +1 -0
  387. package/dist/review-verdict.js +332 -0
  388. package/dist/review-verdict.js.map +1 -0
  389. package/dist/run.d.ts +221 -0
  390. package/dist/run.d.ts.map +1 -0
  391. package/dist/run.js +963 -0
  392. package/dist/run.js.map +1 -0
  393. package/dist/scan.d.ts +308 -0
  394. package/dist/scan.d.ts.map +1 -0
  395. package/dist/scan.js +374 -0
  396. package/dist/scan.js.map +1 -0
  397. package/dist/select-order.d.ts +75 -0
  398. package/dist/select-order.d.ts.map +1 -0
  399. package/dist/select-order.js +108 -0
  400. package/dist/select-order.js.map +1 -0
  401. package/dist/select-priority.d.ts +188 -0
  402. package/dist/select-priority.d.ts.map +1 -0
  403. package/dist/select-priority.js +80 -0
  404. package/dist/select-priority.js.map +1 -0
  405. package/dist/select.d.ts +25 -0
  406. package/dist/select.d.ts.map +1 -0
  407. package/dist/select.js +43 -0
  408. package/dist/select.js.map +1 -0
  409. package/dist/session-path.d.ts +36 -0
  410. package/dist/session-path.d.ts.map +1 -0
  411. package/dist/session-path.js +129 -0
  412. package/dist/session-path.js.map +1 -0
  413. package/dist/sidecar-apply.d.ts +83 -0
  414. package/dist/sidecar-apply.d.ts.map +1 -0
  415. package/dist/sidecar-apply.js +111 -0
  416. package/dist/sidecar-apply.js.map +1 -0
  417. package/dist/sidecar.d.ts +245 -0
  418. package/dist/sidecar.d.ts.map +1 -0
  419. package/dist/sidecar.js +481 -0
  420. package/dist/sidecar.js.map +1 -0
  421. package/dist/slug-namespace.d.ts +204 -0
  422. package/dist/slug-namespace.d.ts.map +1 -0
  423. package/dist/slug-namespace.js +229 -0
  424. package/dist/slug-namespace.js.map +1 -0
  425. package/dist/spec-complete.d.ts +44 -0
  426. package/dist/spec-complete.d.ts.map +1 -0
  427. package/dist/spec-complete.js +69 -0
  428. package/dist/spec-complete.js.map +1 -0
  429. package/dist/start.d.ts +97 -0
  430. package/dist/start.d.ts.map +1 -0
  431. package/dist/start.js +633 -0
  432. package/dist/start.js.map +1 -0
  433. package/dist/status.d.ts +199 -0
  434. package/dist/status.d.ts.map +1 -0
  435. package/dist/status.js +228 -0
  436. package/dist/status.js.map +1 -0
  437. package/dist/surface-gate.d.ts +162 -0
  438. package/dist/surface-gate.d.ts.map +1 -0
  439. package/dist/surface-gate.js +206 -0
  440. package/dist/surface-gate.js.map +1 -0
  441. package/dist/surface-persist.d.ts +86 -0
  442. package/dist/surface-persist.d.ts.map +1 -0
  443. package/dist/surface-persist.js +129 -0
  444. package/dist/surface-persist.js.map +1 -0
  445. package/dist/tasker-review-loop.d.ts +249 -0
  446. package/dist/tasker-review-loop.d.ts.map +1 -0
  447. package/dist/tasker-review-loop.js +369 -0
  448. package/dist/tasker-review-loop.js.map +1 -0
  449. package/dist/tasking-eligibility.d.ts +74 -0
  450. package/dist/tasking-eligibility.d.ts.map +1 -0
  451. package/dist/tasking-eligibility.js +52 -0
  452. package/dist/tasking-eligibility.js.map +1 -0
  453. package/dist/tasking-lock.d.ts +111 -0
  454. package/dist/tasking-lock.d.ts.map +1 -0
  455. package/dist/tasking-lock.js +256 -0
  456. package/dist/tasking-lock.js.map +1 -0
  457. package/dist/tasking.d.ts +275 -0
  458. package/dist/tasking.d.ts.map +1 -0
  459. package/dist/tasking.js +952 -0
  460. package/dist/tasking.js.map +1 -0
  461. package/dist/triage-gate.d.ts +127 -0
  462. package/dist/triage-gate.d.ts.map +1 -0
  463. package/dist/triage-gate.js +139 -0
  464. package/dist/triage-gate.js.map +1 -0
  465. package/dist/triage-persist.d.ts +163 -0
  466. package/dist/triage-persist.d.ts.map +1 -0
  467. package/dist/triage-persist.js +387 -0
  468. package/dist/triage-persist.js.map +1 -0
  469. package/dist/verdict-json.d.ts +32 -0
  470. package/dist/verdict-json.d.ts.map +1 -0
  471. package/dist/verdict-json.js +74 -0
  472. package/dist/verdict-json.js.map +1 -0
  473. package/dist/verify-workflow-template.d.ts +60 -0
  474. package/dist/verify-workflow-template.d.ts.map +1 -0
  475. package/dist/verify-workflow-template.js +126 -0
  476. package/dist/verify-workflow-template.js.map +1 -0
  477. package/dist/verify.d.ts +60 -0
  478. package/dist/verify.d.ts.map +1 -0
  479. package/dist/verify.js +62 -0
  480. package/dist/verify.js.map +1 -0
  481. package/dist/watch-session.d.ts +112 -0
  482. package/dist/watch-session.d.ts.map +1 -0
  483. package/dist/watch-session.js +347 -0
  484. package/dist/watch-session.js.map +1 -0
  485. package/dist/work-layout.d.ts +198 -0
  486. package/dist/work-layout.d.ts.map +1 -0
  487. package/dist/work-layout.js +217 -0
  488. package/dist/work-layout.js.map +1 -0
  489. package/dist/work-on.d.ts +154 -0
  490. package/dist/work-on.d.ts.map +1 -0
  491. package/dist/work-on.js +387 -0
  492. package/dist/work-on.js.map +1 -0
  493. package/dist/workspace.d.ts +224 -0
  494. package/dist/workspace.d.ts.map +1 -0
  495. package/dist/workspace.js +325 -0
  496. package/dist/workspace.js.map +1 -0
  497. package/package.json +46 -2
  498. package/src/advance-ci-template.ts +203 -0
  499. package/src/advance-classify.ts +197 -0
  500. package/src/advance-drivers.ts +414 -0
  501. package/src/advance-isolated.ts +432 -0
  502. package/src/advance-lifecycle-template.ts +791 -0
  503. package/src/advance-loop-driver.ts +745 -0
  504. package/src/advance-treeless-publish.ts +177 -0
  505. package/src/advance.ts +1564 -0
  506. package/src/advancing-lock.ts +988 -0
  507. package/src/agent-launch.ts +137 -0
  508. package/src/agent-stop.ts +361 -0
  509. package/src/apply-decide.ts +242 -0
  510. package/src/apply-merge-action.ts +502 -0
  511. package/src/apply-persist.ts +518 -0
  512. package/src/arbiter.ts +372 -0
  513. package/src/brand.ts +111 -0
  514. package/src/buildable-body.ts +196 -0
  515. package/src/categorise.ts +158 -0
  516. package/src/claim-cas.ts +513 -0
  517. package/src/cli-spinner.ts +225 -0
  518. package/src/cli.ts +4369 -0
  519. package/src/close-job-template.ts +236 -0
  520. package/src/close-job.ts +319 -0
  521. package/src/complete.ts +1379 -0
  522. package/src/concurrency.ts +151 -0
  523. package/src/config-override.ts +116 -0
  524. package/src/config.ts +883 -0
  525. package/src/continue-branch.ts +542 -0
  526. package/src/cwd-section.ts +392 -0
  527. package/src/decision-engine.ts +272 -0
  528. package/src/detect.ts +124 -0
  529. package/src/do-autopick.ts +223 -0
  530. package/src/do-config.ts +589 -0
  531. package/src/do-remote-auto.ts +197 -0
  532. package/src/do.ts +2623 -0
  533. package/src/drop-source.ts +194 -0
  534. package/src/eligibility.ts +79 -0
  535. package/src/env-config.ts +305 -0
  536. package/src/failure-cause.ts +142 -0
  537. package/src/format.ts +313 -0
  538. package/src/frontmatter.ts +485 -0
  539. package/src/gate-readiness.ts +147 -0
  540. package/src/gc.ts +510 -0
  541. package/src/gh-failure.ts +53 -0
  542. package/src/git.ts +186 -0
  543. package/src/github.ts +468 -0
  544. package/src/harness.ts +355 -0
  545. package/src/identity.ts +322 -0
  546. package/src/index.ts +785 -0
  547. package/src/install-ci-branch-protection.ts +255 -0
  548. package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
  549. package/src/install-ci-capabilities/close-job.ts +32 -0
  550. package/src/install-ci-capabilities/example-noop.ts +24 -0
  551. package/src/install-ci-capabilities/intake.ts +34 -0
  552. package/src/install-ci-capabilities/verify.ts +33 -0
  553. package/src/install-ci-core.ts +1088 -0
  554. package/src/install-ci-github.ts +376 -0
  555. package/src/install-ci.ts +552 -0
  556. package/src/intake-event.ts +102 -0
  557. package/src/intake-marker.ts +195 -0
  558. package/src/intake-triage.ts +138 -0
  559. package/src/intake-trigger-template.ts +591 -0
  560. package/src/intake.ts +2445 -0
  561. package/src/integration-core.ts +3065 -0
  562. package/src/integrator.ts +771 -0
  563. package/src/isolation.ts +484 -0
  564. package/src/issue-provider.ts +733 -0
  565. package/src/item-lock.ts +1858 -0
  566. package/src/item-path.ts +75 -0
  567. package/src/ledger-lint.ts +332 -0
  568. package/src/ledger-read.ts +924 -0
  569. package/src/ledger-write.ts +865 -0
  570. package/src/lifecycle-gather.ts +298 -0
  571. package/src/lifecycle-pools.ts +250 -0
  572. package/src/merge-question-surfacer.ts +496 -0
  573. package/src/mint-adr.ts +362 -0
  574. package/src/mirror-pool-scan.ts +240 -0
  575. package/src/needs-attention.ts +1506 -0
  576. package/src/orphan-sidecar.ts +150 -0
  577. package/src/output.ts +89 -0
  578. package/src/pi-harness.ts +403 -0
  579. package/src/placement.ts +131 -0
  580. package/src/prd-to-spec.ts +1023 -0
  581. package/src/prepare.ts +230 -0
  582. package/src/prompt.ts +760 -0
  583. package/src/readiness.ts +98 -0
  584. package/src/reap-branches.ts +278 -0
  585. package/src/recover-isolated.ts +276 -0
  586. package/src/registry.ts +475 -0
  587. package/src/repo-config.ts +550 -0
  588. package/src/repo-key.ts +74 -0
  589. package/src/repo-mirror.ts +367 -0
  590. package/src/retry-backoff.ts +130 -0
  591. package/src/review-gate.ts +389 -0
  592. package/src/review-verdict.ts +422 -0
  593. package/src/run.ts +1430 -0
  594. package/src/scan.ts +611 -0
  595. package/src/select-order.ts +143 -0
  596. package/src/select-priority.ts +266 -0
  597. package/src/select.ts +62 -0
  598. package/src/session-path.ts +153 -0
  599. package/src/sidecar-apply.ts +216 -0
  600. package/src/sidecar.ts +700 -0
  601. package/src/slug-namespace.ts +367 -0
  602. package/src/spec-complete.ts +118 -0
  603. package/src/start.ts +974 -0
  604. package/src/status.ts +441 -0
  605. package/src/surface-gate.ts +337 -0
  606. package/src/surface-persist.ts +241 -0
  607. package/src/tasker-review-loop.ts +671 -0
  608. package/src/tasking-eligibility.ts +114 -0
  609. package/src/tasking-lock.ts +416 -0
  610. package/src/tasking.ts +1438 -0
  611. package/src/triage-gate.ts +248 -0
  612. package/src/triage-persist.ts +570 -0
  613. package/src/verdict-json.ts +73 -0
  614. package/src/verify-workflow-template.ts +159 -0
  615. package/src/verify.ts +123 -0
  616. package/src/watch-session.ts +397 -0
  617. package/src/work-layout.ts +262 -0
  618. package/src/work-on.ts +660 -0
  619. package/src/workspace.ts +502 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The **remote merged-work-branch reaper** — the cross-machine COUNTERPART of the
3
+ * job-worktree reaper in `gc.ts`. Where `gc.ts` reaps LOCAL job WORKTREES under
4
+ * `workspacesDir/work/*`, this reaps REMOTE `work/<slug>` BRANCHES that linger on
5
+ * the arbiter after their propose-mode PR has MERGED.
6
+ *
7
+ * The safety lynchpin is the SAME provably-merged predicate the worktree reaper
8
+ * uses (`gc.ts` `isAncestor`, REUSED here, never a second one): a remote
9
+ * `work/<slug>` branch is reapable **iff** its tip is
10
+ * `git merge-base --is-ancestor <tip> <arbiter>/main` — provably on `main`. A
11
+ * merely-pushed-but-unmerged branch (an in-flight, kept-for-continue recovery
12
+ * point) is NOT an ancestor of `main`, so the predicate AUTOMATICALLY excludes it
13
+ * — the never-delete-the-in-flight-branch invariant (ADR §4 deletion-safety)
14
+ * stays absolute. Deletion of a fully-merged ref needs NO force, so this NEVER
15
+ * `--force`s.
16
+ *
17
+ * It is provider-AGNOSTIC plain git (`git ls-remote` to enumerate, `git push
18
+ * --delete` to reap), so it works against a local `--bare` arbiter and any
19
+ * provider — NOT relying on GitHub's repo-level auto-delete setting (which is an
20
+ * additive convenience for GitHub arbiters only). The arbiter is addressed
21
+ * THROUGH a local repo (`cwd`) whose `<arbiter>` remote points at it: the same
22
+ * way `requeue --reset` addresses the arbiter for its sanctioned UN-merged
23
+ * deletion (the complement of this merged-only sweep).
24
+ */
25
+ /** Why a remote `work/<slug>` branch was RETAINED (not provably merged). */
26
+ export type RemoteRetainReason = 'not-merged' | 'main-unresolved';
27
+ /** Human-readable text for each remote-branch retain reason (`sweep` reports). */
28
+ export declare const REMOTE_RETAIN_REASON_TEXT: Record<RemoteRetainReason, string>;
29
+ /** A remote `work/<slug>` branch the sweep reaped (provably merged). */
30
+ export interface ReapedBranch {
31
+ /** The full branch ref (`work/<slug>`). */
32
+ branch: string;
33
+ /** The 40-hex tip the branch pointed at when it was deleted. */
34
+ tip: string;
35
+ }
36
+ /** A remote `work/<slug>` branch the sweep RETAINED, with the reason it kept it. */
37
+ export interface RetainedBranch {
38
+ branch: string;
39
+ tip: string;
40
+ reason: RemoteRetainReason;
41
+ /** Human-readable reason text (`REMOTE_RETAIN_REASON_TEXT[reason]`). */
42
+ reasonText: string;
43
+ }
44
+ export interface SweepRemoteBranchesInput {
45
+ /**
46
+ * A local repo (a checkout or a hub mirror) whose `<arbiter>` remote points at
47
+ * the arbiter to sweep. All git runs in here; nothing in the working tree is
48
+ * touched (only remote refs are read + deleted).
49
+ */
50
+ cwd: string;
51
+ /** The arbiter remote name (default `origin`, as `requeue --arbiter` defaults). */
52
+ arbiter: string;
53
+ /** Sink for human-readable progress notes (per reaped / retained branch). */
54
+ note?: (message: string) => void;
55
+ /**
56
+ * Do NOT actually delete — only REPORT what WOULD be reaped vs retained. A
57
+ * read-only preview (`--dry-run`); the predicate still runs so the report is
58
+ * exact.
59
+ */
60
+ dryRun?: boolean;
61
+ env?: NodeJS.ProcessEnv;
62
+ }
63
+ export interface SweepRemoteBranchesResult {
64
+ /** The remote branches reaped this sweep (provably merged). Empty on dry-run. */
65
+ reaped: ReapedBranch[];
66
+ /** The remote branches retained, each with a clear reason. */
67
+ retained: RetainedBranch[];
68
+ /** On `dryRun`, the branches that WOULD be reaped (not actually deleted). */
69
+ wouldReap: ReapedBranch[];
70
+ }
71
+ /**
72
+ * Sweep the arbiter's remote `work/*` branches and DELETE exactly those that are
73
+ * provably merged into `<arbiter>/main` (`git merge-base --is-ancestor`, REUSING
74
+ * `gc.ts`'s `isAncestor`), reporting each as deleted-merged / retained-with-
75
+ * reason. NEVER `--force` (a merged ref needs none); NEVER touches a branch that
76
+ * is not an ancestor of `main` (the in-flight recovery point the never-delete
77
+ * invariant protects). Provider-agnostic plain git, so it works on a `--bare`
78
+ * arbiter.
79
+ *
80
+ * The flow:
81
+ * 1. `git ls-remote --heads <arbiter> 'work/*'` — enumerate remote work
82
+ * branches + their tips (one network round-trip; no full fetch).
83
+ * 2. Fetch `<arbiter>/main` into a local tracking ref so the ancestor check
84
+ * resolves the descendant LOCALLY; fetch each candidate tip object too (so
85
+ * `merge-base` can read it) — best-effort, into a scratch ref.
86
+ * 3. For each branch whose tip `--is-ancestor` of the fetched main ⇒ delete via
87
+ * `git push <arbiter> --delete <branch>`; else retain with a reason.
88
+ */
89
+ export declare function sweepRemoteMergedBranches(input: SweepRemoteBranchesInput): SweepRemoteBranchesResult;
90
+ /**
91
+ * Enumerate the arbiter's remote `work/*` heads + their tips via
92
+ * `git ls-remote --heads <arbiter> 'work/*'` (one round-trip, no full fetch).
93
+ * Only `work/<type>-<slug>` branches that {@link parseWorkBranchRef} recognises
94
+ * are returned (a stray `work/foo` that is not a namespaced work branch is
95
+ * ignored — the sweep only reaps the branches the protocol creates). Returns []
96
+ * when the arbiter is unreachable (the safe direction — nothing to reap).
97
+ */
98
+ export declare function listRemoteWorkBranches(cwd: string, arbiter: string, env: NodeJS.ProcessEnv | undefined): Array<{
99
+ branch: string;
100
+ tip: string;
101
+ }>;
102
+ //# sourceMappingURL=reap-branches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reap-branches.d.ts","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAC3B,YAAY,GACZ,iBAAiB,CAAC;AAErB,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAKxE,CAAC;AAEF,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,kBAAkB,CAAC;IAC3B,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACzC,iFAAiF;IACjF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,6EAA6E;IAC7E,SAAS,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,wBAAwB,GAC7B,yBAAyB,CA6E3B;AAeD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GAChC,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAAC,CA4BtC"}
@@ -0,0 +1,149 @@
1
+ import { run } from './git.js';
2
+ import { isAncestor } from './gc.js';
3
+ import { parseWorkBranchRef } from './slug-namespace.js';
4
+ /** Human-readable text for each remote-branch retain reason (`sweep` reports). */
5
+ export const REMOTE_RETAIN_REASON_TEXT = {
6
+ 'not-merged': 'not merged (branch tip is not an ancestor of the arbiter main — still in-flight)',
7
+ 'main-unresolved': 'arbiter main could not be resolved, so merge could not be proven (kept — safe direction)',
8
+ };
9
+ /**
10
+ * Sweep the arbiter's remote `work/*` branches and DELETE exactly those that are
11
+ * provably merged into `<arbiter>/main` (`git merge-base --is-ancestor`, REUSING
12
+ * `gc.ts`'s `isAncestor`), reporting each as deleted-merged / retained-with-
13
+ * reason. NEVER `--force` (a merged ref needs none); NEVER touches a branch that
14
+ * is not an ancestor of `main` (the in-flight recovery point the never-delete
15
+ * invariant protects). Provider-agnostic plain git, so it works on a `--bare`
16
+ * arbiter.
17
+ *
18
+ * The flow:
19
+ * 1. `git ls-remote --heads <arbiter> 'work/*'` — enumerate remote work
20
+ * branches + their tips (one network round-trip; no full fetch).
21
+ * 2. Fetch `<arbiter>/main` into a local tracking ref so the ancestor check
22
+ * resolves the descendant LOCALLY; fetch each candidate tip object too (so
23
+ * `merge-base` can read it) — best-effort, into a scratch ref.
24
+ * 3. For each branch whose tip `--is-ancestor` of the fetched main ⇒ delete via
25
+ * `git push <arbiter> --delete <branch>`; else retain with a reason.
26
+ */
27
+ export function sweepRemoteMergedBranches(input) {
28
+ const note = input.note ?? (() => { });
29
+ const env = input.env;
30
+ const dryRun = input.dryRun === true;
31
+ const reaped = [];
32
+ const retained = [];
33
+ const wouldReap = [];
34
+ const branches = listRemoteWorkBranches(input.cwd, input.arbiter, env);
35
+ // Resolve the arbiter's main tip LOCALLY (fetch it into a scratch tracking
36
+ // ref). If it cannot be resolved (unreachable arbiter / no main), we cannot
37
+ // PROVE any branch merged — retain everything (the safe direction).
38
+ const mainRef = fetchScratch(input.cwd, input.arbiter, 'main', env);
39
+ for (const { branch, tip } of branches) {
40
+ if (mainRef === undefined) {
41
+ retain(retained, note, branch, tip, 'main-unresolved');
42
+ continue;
43
+ }
44
+ // Make the candidate tip OBJECT readable locally so `merge-base` can use it
45
+ // (ls-remote gave us the sha, but the object may not be in the local repo).
46
+ fetchScratch(input.cwd, input.arbiter, branch, env);
47
+ if (!isAncestor(input.cwd, tip, mainRef, env)) {
48
+ // NOT an ancestor of main ⇒ still in-flight ⇒ NEVER delete (the invariant).
49
+ retain(retained, note, branch, tip, 'not-merged');
50
+ continue;
51
+ }
52
+ // Provably merged. Report (dry-run) or delete (the real sweep). Deletion of
53
+ // a fully-merged ref needs NO force — and we NEVER force here. The deletion
54
+ // is WRITE-THROUGH: drop the LOCAL tracking ref FIRST, THEN `git push
55
+ // --delete`. An arbiter-delete failure thus leaves the local store BEHIND
56
+ // (self-healing on next fetch), never AHEAD (a stale tracking ref that
57
+ // drives a wrong "continue" — the permanent stale-continue bug today's
58
+ // arbiter-first ordering creates).
59
+ if (dryRun) {
60
+ wouldReap.push({ branch, tip });
61
+ note(`Would reap ${branch} (merged) on ${input.arbiter}.`);
62
+ continue;
63
+ }
64
+ run('git', ['update-ref', '-d', `refs/remotes/${input.arbiter}/${branch}`], input.cwd, { env });
65
+ const del = run('git', ['push', input.arbiter, '--delete', branch], input.cwd, { env });
66
+ if (del.status !== 0) {
67
+ // A failed delete is NOT a reap; surface it but keep sweeping the rest.
68
+ // Tolerate "already gone" (a concurrent reap) as a clean delete.
69
+ const stderr = del.stderr.trim();
70
+ const alreadyGone = /remote ref does not exist|unable to delete/i.test(stderr);
71
+ if (alreadyGone) {
72
+ reaped.push({ branch, tip });
73
+ note(`Reaped ${branch} (merged; remote ref was already gone).`);
74
+ continue;
75
+ }
76
+ retain(retained, note, branch, tip, 'not-merged');
77
+ note(`Failed to delete ${branch} on ${input.arbiter} (${stderr || 'unknown error'}); kept.`);
78
+ continue;
79
+ }
80
+ reaped.push({ branch, tip });
81
+ note(`Reaped ${branch} (merged) on ${input.arbiter}.`);
82
+ }
83
+ return { reaped, retained, wouldReap };
84
+ }
85
+ /** Push a retained branch into the result + emit its note. */
86
+ function retain(retained, note, branch, tip, reason) {
87
+ const reasonText = REMOTE_RETAIN_REASON_TEXT[reason];
88
+ retained.push({ branch, tip, reason, reasonText });
89
+ note(`Retained ${branch}: ${reasonText}.`);
90
+ }
91
+ /**
92
+ * Enumerate the arbiter's remote `work/*` heads + their tips via
93
+ * `git ls-remote --heads <arbiter> 'work/*'` (one round-trip, no full fetch).
94
+ * Only `work/<type>-<slug>` branches that {@link parseWorkBranchRef} recognises
95
+ * are returned (a stray `work/foo` that is not a namespaced work branch is
96
+ * ignored — the sweep only reaps the branches the protocol creates). Returns []
97
+ * when the arbiter is unreachable (the safe direction — nothing to reap).
98
+ */
99
+ export function listRemoteWorkBranches(cwd, arbiter, env) {
100
+ const res = run('git', ['ls-remote', '--heads', arbiter, 'work/*'], cwd, {
101
+ env,
102
+ });
103
+ if (res.status !== 0) {
104
+ return [];
105
+ }
106
+ const out = [];
107
+ for (const line of res.stdout.split('\n')) {
108
+ const trimmed = line.trim();
109
+ if (trimmed === '') {
110
+ continue;
111
+ }
112
+ // Each line is `<sha>\trefs/heads/<branch>`.
113
+ const m = /^([0-9a-f]{40})\s+refs\/heads\/(.+)$/.exec(trimmed);
114
+ if (!m) {
115
+ continue;
116
+ }
117
+ const tip = m[1];
118
+ const branch = m[2];
119
+ // Only namespaced work branches (`work/<type>-<slug>`) — the protocol's own
120
+ // branches. A non-conforming `work/...` head is left untouched.
121
+ if (parseWorkBranchRef(branch) === undefined) {
122
+ continue;
123
+ }
124
+ out.push({ branch, tip });
125
+ }
126
+ return out;
127
+ }
128
+ /**
129
+ * Fetch a single arbiter head into a SCRATCH remote-tracking ref
130
+ * (`refs/remotes/<arbiter>/<head>`) EXPLICITLY (a bare arbiter has no fetch
131
+ * refspec), so the object + ref resolve LOCALLY for the ancestor check. Returns
132
+ * the local ref name on success, or `undefined` when the head could not be
133
+ * fetched (unreachable arbiter / missing head) — the caller reads that as
134
+ * not-provable ⇒ retain (the safe direction). Best-effort; never throws.
135
+ */
136
+ function fetchScratch(cwd, arbiter, head, env) {
137
+ const localRef = `refs/remotes/${arbiter}/${head}`;
138
+ const res = run('git', ['fetch', '--quiet', arbiter, `+refs/heads/${head}:${localRef}`], cwd, { env });
139
+ if (res.status !== 0) {
140
+ return undefined;
141
+ }
142
+ // Confirm the ref now resolves locally (an empty/odd fetch should read as
143
+ // unresolved → retain).
144
+ const verify = run('git', ['rev-parse', '--verify', '--quiet', localRef], cwd, {
145
+ env,
146
+ });
147
+ return verify.status === 0 ? localRef : undefined;
148
+ }
149
+ //# sourceMappingURL=reap-branches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reap-branches.js","sourceRoot":"","sources":["../src/reap-branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { IntegrationMode } from './config.js';
2
+ import type { ReviewProvider } from './integrator.js';
3
+ export type RecoverIsolatedOutcome = 'completed' | 'already-integrated' | 'nothing-to-recover' | 'rebase-conflict' | 'usage-error';
4
+ export interface RecoverIsolatedOptions {
5
+ /** The slug to recover (its retained worktree is located by arbiter-URL + slug). */
6
+ slug: string;
7
+ /** The operator's checkout — its arbiter remote names the repo the worktree is off. */
8
+ cwd: string;
9
+ /** Name of the arbiter remote in {@link cwd}. Defaults to `origin`. */
10
+ arbiter?: string;
11
+ /** The execution working area (config `workspacesDir`); where job worktrees live. */
12
+ workspacesDir: string;
13
+ /** Integration mode: `propose` (default) or `merge`. */
14
+ integration?: IntegrationMode;
15
+ /** Suppress the PR on the propose path (push the branch, open no review request). */
16
+ noPR?: boolean;
17
+ /** Optional fully-formed provider used verbatim (test/embedding seam). */
18
+ providerInstance?: ReviewProvider;
19
+ /** Optional injectable PR opener (legacy bridge); used in `propose` mode. */
20
+ openPr?: (opts: {
21
+ cwd: string;
22
+ branch: string;
23
+ env?: NodeJS.ProcessEnv;
24
+ }) => void;
25
+ /** Environment for child git/provider processes (the identity-scoped env). */
26
+ env?: NodeJS.ProcessEnv;
27
+ /** Sink for human-readable progress notes. */
28
+ note?: (message: string) => void;
29
+ }
30
+ export interface RecoverIsolatedResult {
31
+ exitCode: 0 | 1;
32
+ outcome: RecoverIsolatedOutcome;
33
+ /** The work branch that was recovered, when a worktree was located. */
34
+ branch?: string;
35
+ /** The retained worktree dir that was recovered from, when located. */
36
+ worktree?: string;
37
+ /** The review-request URL opened in propose mode, when a provider opened one. */
38
+ prUrl?: string;
39
+ /** Human-readable summary of the terminal condition. */
40
+ message: string;
41
+ }
42
+ /**
43
+ * The LOCATE-EXISTING resolver shared by `complete --isolated` and
44
+ * `resume --isolated`: resolve the arbiter URL from the operator's checkout, then
45
+ * the slug's retained job-worktree dir via `jobWorktreePath` (arbiter-URL-keyed —
46
+ * NOT a slug glob). Returns the resolved dir + arbiter URL when the worktree is
47
+ * PRESENT; an `error` (usage) when the arbiter is unresolvable; or
48
+ * `{present: false}` when no worktree is retained (the clean nothing-to-recover
49
+ * case). Pure resolution — no side effects.
50
+ */
51
+ export declare function locateIsolatedRecovery(params: {
52
+ slug: string;
53
+ cwd: string;
54
+ arbiter: string;
55
+ workspacesDir: string;
56
+ env?: NodeJS.ProcessEnv;
57
+ }): {
58
+ dir: string;
59
+ arbiterUrl: string;
60
+ present: true;
61
+ } | {
62
+ present: false;
63
+ } | {
64
+ error: string;
65
+ };
66
+ /**
67
+ * Run the isolated recovery for a stranded, already-committed, already-done-moved
68
+ * worktree (the `complete --isolated <slug>` surface). Never throws for the
69
+ * expected cases — they are returned with a specific outcome + exit code.
70
+ */
71
+ export declare function performRecoverIsolated(options: RecoverIsolatedOptions): Promise<RecoverIsolatedResult>;
72
+ //# sourceMappingURL=recover-isolated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-isolated.d.ts","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AA8BpD,MAAM,MAAM,sBAAsB,GAC/B,WAAW,GACX,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACtC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;KACxB,KAAK,IAAI,CAAC;IACX,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,sBAAsB,CAAC;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB,GACE;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,GAChD;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,GAChB;IACA,KAAK,EAAE,MAAM,CAAC;CACb,CAmBH;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CA2GhC"}
@@ -0,0 +1,188 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { performIntegration } from './integration-core.js';
3
+ import { resolveArbiterUrlFromCheckout } from './do.js';
4
+ import { jobWorktreePath } from './workspace.js';
5
+ import { mirrorPath } from './repo-mirror.js';
6
+ import { reapJob } from './gc.js';
7
+ import { workBranchRef } from './slug-namespace.js';
8
+ import { run } from './git.js';
9
+ /**
10
+ * **`complete --isolated <slug>` — FINISH an already-committed, already-done-moved
11
+ * STRANDED isolated worktree** (prd `ledger-integrity` story 6, the
12
+ * `finish-already-committed-branch` task). The LOCATE-EXISTING inverse of
13
+ * `do --isolated` (which CREATES a worktree): it resolves the slug's RETAINED job
14
+ * worktree via the existing arbiter-URL-keyed naming
15
+ * (`jobWorktreePath`/`encodeWorkId` — NOT a slug glob, since two repos can share a
16
+ * slug), then runs the recover-already-committed integration path
17
+ * (`performIntegration({committedRecovery: true})`) from it: rebase the kept
18
+ * commit onto `<arbiter>/main` → integrate, SKIPPING the (already-done) gate /
19
+ * done-move / commit.
20
+ *
21
+ * IDEMPOTENT / HONEST: when NO worktree is retained for the slug, this is a clean
22
+ * "nothing to recover / already integrated" no-op (exit 0, no crash, no fresh
23
+ * worktree) — after a successful recovery the worktree is reaped, so a re-run
24
+ * correctly finds nothing. The integration core's own UNSPOOFABLE detection
25
+ * (`already-integrated`) covers the case where the worktree still exists but its
26
+ * tip is already on the arbiter (never a double-integrate).
27
+ *
28
+ * `resume --isolated <slug>` shares the SAME locate-existing resolver (see
29
+ * {@link locateIsolatedRecovery}) to re-engage the retained worktree WITHOUT
30
+ * claiming — it just reports the worktree path for the operator to cd into.
31
+ */
32
+ const DEFAULT_ARBITER = 'origin';
33
+ /** The arbiter remote name valid INSIDE a job worktree (cut from the bare hub mirror). */
34
+ const WORKTREE_ARBITER_REMOTE = 'origin';
35
+ /**
36
+ * The LOCATE-EXISTING resolver shared by `complete --isolated` and
37
+ * `resume --isolated`: resolve the arbiter URL from the operator's checkout, then
38
+ * the slug's retained job-worktree dir via `jobWorktreePath` (arbiter-URL-keyed —
39
+ * NOT a slug glob). Returns the resolved dir + arbiter URL when the worktree is
40
+ * PRESENT; an `error` (usage) when the arbiter is unresolvable; or
41
+ * `{present: false}` when no worktree is retained (the clean nothing-to-recover
42
+ * case). Pure resolution — no side effects.
43
+ */
44
+ export function locateIsolatedRecovery(params) {
45
+ const arbiterUrl = resolveArbiterUrlFromCheckout(params.cwd, params.arbiter, params.env);
46
+ if (arbiterUrl === undefined) {
47
+ return {
48
+ error: `--isolated finishes a worktree off this repo's arbiter (inferred from ` +
49
+ `cwd), but no '${params.arbiter}' remote was found here (is this a git ` +
50
+ `repo? does the '${params.arbiter}' remote exist?).`,
51
+ };
52
+ }
53
+ const dir = jobWorktreePath(params.workspacesDir, arbiterUrl, params.slug);
54
+ if (!existsSync(dir)) {
55
+ return { present: false };
56
+ }
57
+ return { dir, arbiterUrl, present: true };
58
+ }
59
+ /**
60
+ * Run the isolated recovery for a stranded, already-committed, already-done-moved
61
+ * worktree (the `complete --isolated <slug>` surface). Never throws for the
62
+ * expected cases — they are returned with a specific outcome + exit code.
63
+ */
64
+ export async function performRecoverIsolated(options) {
65
+ const note = options.note ?? (() => { });
66
+ const env = options.env;
67
+ const arbiter = options.arbiter ?? DEFAULT_ARBITER;
68
+ const located = locateIsolatedRecovery({
69
+ slug: options.slug,
70
+ cwd: options.cwd,
71
+ arbiter,
72
+ workspacesDir: options.workspacesDir,
73
+ env,
74
+ });
75
+ if ('error' in located) {
76
+ return { exitCode: 1, outcome: 'usage-error', message: located.error };
77
+ }
78
+ if (!located.present) {
79
+ // No retained worktree — honest no-op: nothing to recover (already
80
+ // integrated + reaped, or never stranded). No crash, NO fresh worktree.
81
+ const message = `Nothing to recover for '${options.slug}': no retained isolated worktree ` +
82
+ 'found (already integrated and reaped, or never stranded).';
83
+ note(message);
84
+ return { exitCode: 0, outcome: 'nothing-to-recover', message };
85
+ }
86
+ const dir = located.dir;
87
+ const branch = workBranchRef('task', options.slug);
88
+ // The strand left the worktree ON its `work/<slug>` branch; make sure we are on
89
+ // it (it carries the kept committed work + the done-move). Best-effort: if HEAD
90
+ // is already there this is a no-op; a missing branch surfaces as a usage error
91
+ // from the integration core's HEAD-resolution.
92
+ gitSoft(['switch', '--quiet', branch], dir, env);
93
+ note(`Recovering '${options.slug}' from the retained worktree ${dir}…`);
94
+ const core = await performIntegration({
95
+ cwd: dir,
96
+ // Inside a job worktree the arbiter remote is `origin` (the mirror's clone
97
+ // remote), NOT the operator's checkout arbiter name.
98
+ arbiter: WORKTREE_ARBITER_REMOTE,
99
+ slug: options.slug,
100
+ branch,
101
+ source: 'in-progress',
102
+ recovering: false,
103
+ committedRecovery: true,
104
+ mode: options.integration ?? 'propose',
105
+ noPR: options.noPR,
106
+ providerInstance: options.providerInstance,
107
+ openPr: options.openPr,
108
+ env,
109
+ note,
110
+ });
111
+ if (core.outcome === 'already-integrated') {
112
+ // The kept tip is already on the arbiter — a clean no-op. Reap the now-redundant
113
+ // worktree (its branch is provably on the arbiter), so a re-run finds nothing.
114
+ reapIfSafe(options.workspacesDir, located.arbiterUrl, branch, dir, env);
115
+ return {
116
+ exitCode: 0,
117
+ outcome: 'already-integrated',
118
+ branch,
119
+ worktree: dir,
120
+ message: core.reason ?? `'${options.slug}' is already integrated.`,
121
+ };
122
+ }
123
+ if (core.outcome === 'rebase-conflict') {
124
+ // A genuine code conflict — the kept commit stays intact on the branch
125
+ // (recoverable); the operator resolves it and re-runs. Worktree RETAINED.
126
+ return {
127
+ exitCode: 1,
128
+ outcome: 'rebase-conflict',
129
+ branch,
130
+ worktree: dir,
131
+ message: core.reason ?? `recovering '${options.slug}' hit a rebase conflict.`,
132
+ };
133
+ }
134
+ if (core.outcome === 'completed') {
135
+ // Integrated from the kept commit. The work is now on the arbiter, so the
136
+ // worktree is provably redundant — reap it (the same §4 predicate the build
137
+ // teardown uses; never lose work — reachability still gates).
138
+ reapIfSafe(options.workspacesDir, located.arbiterUrl, branch, dir, env);
139
+ const prUrl = core.integration?.url;
140
+ const message = prUrl
141
+ ? `Recovered '${options.slug}': integrated the kept commit (${prUrl}).`
142
+ : `Recovered '${options.slug}': integrated the kept commit from ${branch}.`;
143
+ note(message);
144
+ return {
145
+ exitCode: 0,
146
+ outcome: 'completed',
147
+ branch,
148
+ worktree: dir,
149
+ prUrl,
150
+ message,
151
+ };
152
+ }
153
+ // Any other core outcome (defensive — committed-recovery only returns the three
154
+ // above): surface it as a usage error rather than mis-reporting success.
155
+ return {
156
+ exitCode: 1,
157
+ outcome: 'usage-error',
158
+ branch,
159
+ worktree: dir,
160
+ message: core.reason ??
161
+ `recovering '${options.slug}' returned an unexpected outcome ` +
162
+ `'${core.outcome}'.`,
163
+ };
164
+ }
165
+ /**
166
+ * Reap the recovered worktree iff its branch is provably on the arbiter (the §4
167
+ * predicate, reachable-only so incidental churn does not retain a worktree whose
168
+ * branch is already safe). Best-effort: never throws on this success path.
169
+ */
170
+ function reapIfSafe(workspacesDir, arbiterUrl, branch, dir, env) {
171
+ try {
172
+ reapJob({
173
+ dir,
174
+ branch,
175
+ mirrorPath: mirrorPath(workspacesDir, arbiterUrl),
176
+ reachableOnly: true,
177
+ env,
178
+ });
179
+ }
180
+ catch {
181
+ // best-effort — the work is already on the arbiter; a reap failure is cosmetic.
182
+ }
183
+ }
184
+ /** Run git, returning the raw result (no throw) — for soft checks. */
185
+ function gitSoft(args, cwd, env) {
186
+ return run('git', args, cwd, { env });
187
+ }
188
+ //# sourceMappingURL=recover-isolated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-isolated.js","sourceRoot":"","sources":["../src/recover-isolated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,6BAA6B,EAAC,MAAM,SAAS,CAAC;AACtD,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,GAAG,EAAiB,MAAM,UAAU,CAAC;AAI7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,0FAA0F;AAC1F,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AAiDzC;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAMtC;IAMA,MAAM,UAAU,GAAG,6BAA6B,CAC/C,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,GAAG,CACV,CAAC;IACF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACN,KAAK,EACJ,wEAAwE;gBACxE,iBAAiB,MAAM,CAAC,OAAO,yCAAyC;gBACxE,mBAAmB,MAAM,CAAC,OAAO,mBAAmB;SACrD,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,OAA+B;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IAEnD,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,GAAG;KACH,CAAC,CAAC;IACH,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,EAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,mEAAmE;QACnE,wEAAwE;QACxE,MAAM,OAAO,GACZ,2BAA2B,OAAO,CAAC,IAAI,mCAAmC;YAC1E,2DAA2D,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,CAAC;QACd,OAAO,EAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAC,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,gFAAgF;IAChF,gFAAgF;IAChF,+EAA+E;IAC/E,+CAA+C;IAC/C,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC,eAAe,OAAO,CAAC,IAAI,gCAAgC,GAAG,GAAG,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC;QACrC,GAAG,EAAE,GAAG;QACR,2EAA2E;QAC3E,qDAAqD;QACrD,OAAO,EAAE,uBAAuB;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM;QACN,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,KAAK;QACjB,iBAAiB,EAAE,IAAI;QACvB,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;QACH,IAAI;KACJ,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;QAC3C,iFAAiF;QACjF,+EAA+E;QAC/E,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxE,OAAO;YACN,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,oBAAoB;YAC7B,MAAM;YACN,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,0BAA0B;SAClE,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACxC,uEAAuE;QACvE,0EAA0E;QAC1E,OAAO;YACN,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,iBAAiB;YAC1B,MAAM;YACN,QAAQ,EAAE,GAAG;YACb,OAAO,EACN,IAAI,CAAC,MAAM,IAAI,eAAe,OAAO,CAAC,IAAI,0BAA0B;SACrE,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QAClC,0EAA0E;QAC1E,4EAA4E;QAC5E,8DAA8D;QAC9D,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK;YACpB,CAAC,CAAC,cAAc,OAAO,CAAC,IAAI,kCAAkC,KAAK,IAAI;YACvE,CAAC,CAAC,cAAc,OAAO,CAAC,IAAI,sCAAsC,MAAM,GAAG,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,CAAC;QACd,OAAO;YACN,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,WAAW;YACpB,MAAM;YACN,QAAQ,EAAE,GAAG;YACb,KAAK;YACL,OAAO;SACP,CAAC;IACH,CAAC;IACD,gFAAgF;IAChF,yEAAyE;IACzE,OAAO;QACN,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,aAAa;QACtB,MAAM;QACN,QAAQ,EAAE,GAAG;QACb,OAAO,EACN,IAAI,CAAC,MAAM;YACX,eAAe,OAAO,CAAC,IAAI,mCAAmC;gBAC7D,IAAI,IAAI,CAAC,OAAO,IAAI;KACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAClB,aAAqB,EACrB,UAAkB,EAClB,MAAc,EACd,GAAW,EACX,GAAkC;IAElC,IAAI,CAAC;QACJ,OAAO,CAAC;YACP,GAAG;YACH,MAAM;YACN,UAAU,EAAE,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC;YACjD,aAAa,EAAE,IAAI;YACnB,GAAG;SACH,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,gFAAgF;IACjF,CAAC;AACF,CAAC;AAED,sEAAsE;AACtE,SAAS,OAAO,CACf,IAAc,EACd,GAAW,EACX,GAAkC;IAElC,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAC,GAAG,EAAC,CAAC,CAAC;AACrC,CAAC"}