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,172 @@
1
+ import { type ArbiterInitResult } from './arbiter.js';
2
+ /**
3
+ * The **registry** primitive (ADR `command-surface-and-journeys` §1): the
4
+ * registered set of targets IS the set of hub mirrors on disk under
5
+ * `<workspacesDir>/repos/<key>.git`. There is NO `roots` and NO `remotes` config
6
+ * field — discovery is "enumerate the mirror folders". This module is that
7
+ * enumeration plus the `remote add/rm` mutators; it reuses the `repo-mirror`
8
+ * hub primitive (`ensureMirror`/`encodeRepoKey`/`mirrorPath`) and the `arbiter`
9
+ * provisioner (`arbiterInit` for `--local`) — it does NOT duplicate them.
10
+ *
11
+ * The `remote ls` view reads each mirror's `origin` URL with `git -C <mirror>
12
+ * remote get-url origin` (the key encoding is LOSSY — it drops scheme/transport
13
+ * — so the URL is NOT reconstructible from the key) and derives the transport
14
+ * from that URL's scheme.
15
+ */
16
+ /** A registered hub mirror's self-description (the `remote ls` row). */
17
+ export interface RegisteredMirror {
18
+ /** The hierarchical hub key (`host/org/name`), as `encodeRepoKey` produces. */
19
+ key: string;
20
+ /** Absolute path to the bare hub mirror (`<workspacesDir>/repos/<key>.git`). */
21
+ path: string;
22
+ /**
23
+ * The mirror's `origin` URL (`git -C <path> remote get-url origin`), or
24
+ * `undefined` if it cannot be read (a malformed mirror).
25
+ */
26
+ originUrl?: string;
27
+ /** The transport derived from `originUrl`'s scheme. */
28
+ transport: Transport;
29
+ /**
30
+ * The trailing `org/name` of the key — the project identity the transport
31
+ * guard keys on (siblings under different transports share this tail).
32
+ */
33
+ projectId: string;
34
+ }
35
+ /**
36
+ * The transport a mirror's origin uses, derived from its URL scheme:
37
+ * `local-bare` (`file://` or a plain filesystem path to a bare repo) vs
38
+ * `remote-host` (`git@`/`https`/`http`/`ssh`). `unknown` when no origin URL
39
+ * could be read.
40
+ */
41
+ export type Transport = 'local-bare' | 'remote-host' | 'unknown';
42
+ /** Inputs to the registry enumeration / mutators. */
43
+ export interface RegistryOptions {
44
+ /** The execution working area (config `workspacesDir`, default `~/.dorfl`). */
45
+ workspacesDir: string;
46
+ env?: NodeJS.ProcessEnv;
47
+ }
48
+ /** Raised when a registry operation cannot proceed safely. */
49
+ export declare class RegistryError extends Error {
50
+ }
51
+ /**
52
+ * Derive the transport from a remote URL's scheme. `file://` (and a plain
53
+ * absolute path to a bare repo) ⇒ `local-bare`; `git@`/`https`/`http`/`ssh`
54
+ * (anything with a host) ⇒ `remote-host`. This is the same scheme split
55
+ * `encodeRepoKey` deliberately collapses away from the KEY — here we keep it for
56
+ * the transport guard + `remote ls`.
57
+ */
58
+ export declare function transportForUrl(url: string): Transport;
59
+ /** The trailing `org/name` of a hub key (the project identity for the guard). */
60
+ export declare function projectIdFromKey(key: string): string;
61
+ /**
62
+ * Enumerate the registered hub mirrors (the registry). Walks the bare mirror
63
+ * folders under `<workspacesDir>/repos/<key>.git` — which exist hierarchically
64
+ * (`host/org/name.git`), so a leaf `*.git` directory holding a git repo IS a
65
+ * mirror. Reads each one's `origin` URL + transport (the key is lossy). Sorted
66
+ * by key. This is the SINGLE "list registered mirrors" primitive that both
67
+ * `remote ls` AND `scan`/`status` discovery consume.
68
+ */
69
+ export declare function listMirrors(options: RegistryOptions): RegisteredMirror[];
70
+ /** The result of `remote add`. */
71
+ export interface RemoteAddResult {
72
+ /** The hub key the target was registered under. */
73
+ key: string;
74
+ /** Absolute path to the (existing or just-created) hub mirror. */
75
+ mirrorPath: string;
76
+ /** The origin URL the mirror tracks. */
77
+ url: string;
78
+ /** The transport derived from `url`. */
79
+ transport: Transport;
80
+ /** True iff the mirror did not exist and was just created. */
81
+ created: boolean;
82
+ /**
83
+ * The provisioned local bare arbiter, when `--local` provisioned one (it
84
+ * absorbs `arbiter init`). Absent for a plain remote add.
85
+ */
86
+ arbiter?: ArbiterInitResult;
87
+ }
88
+ /** Inputs to {@link remoteAdd}. */
89
+ export interface RemoteAddOptions extends RegistryOptions {
90
+ /**
91
+ * The target to register. For a plain (remote) add this is the arbiter URL.
92
+ * For `--local` it is the WORKING REPO whose `--bare` arbiter is provisioned
93
+ * (the old `arbiter init` input).
94
+ */
95
+ target: string;
96
+ /**
97
+ * Provision a LOCAL `--bare` arbiter from `target` (a working repo) and
98
+ * register ITS mirror — absorbing `arbiter init`. The arbiter is provisioned
99
+ * under `arbitersDir` (precious DATA, ADR §7), never `~/.dorfl`.
100
+ */
101
+ local?: boolean;
102
+ /** Where local `--bare` arbiters are provisioned (config `arbitersDir`). Required for `--local`. */
103
+ arbitersDir?: string;
104
+ /** The arbiter remote name to wire in the working repo on `--local`. */
105
+ arbiterRemote?: string;
106
+ /**
107
+ * Override the project-identity POLICY block: REPLACE this project's existing
108
+ * mirror (re-link remote ↔ `--bare` arbiter deliberately) even though a sibling
109
+ * mirror for the same project (same `projectIdFromKey` tail) already exists
110
+ * under a different key. `force` overrides the POLICY block ONLY — it NEVER
111
+ * overrides the DATA-LOSS block: if any worktree of the mirror being replaced
112
+ * holds un-pushed work (dirty tree OR a `work/*` tip not reachable on the
113
+ * arbiter — the full `gc.ts` clean-AND-reachable predicate), `force` still
114
+ * REFUSES, because replacing would strand that work.
115
+ */
116
+ force?: boolean;
117
+ /** Sink for human-readable progress notes. */
118
+ note?: (message: string) => void;
119
+ }
120
+ /**
121
+ * Raised when `--force` cannot REPLACE a project's mirror because a worktree of
122
+ * the mirror being replaced still holds un-pushed work (a DATA-LOSS block,
123
+ * distinct from the POLICY block `--force` overrides). The reason names each
124
+ * unsafe worktree so the human can rescue the work before re-running.
125
+ */
126
+ export declare class ReplaceWouldStrandWorkError extends RegistryError {
127
+ }
128
+ /**
129
+ * Register a target by creating its hub mirror (the `ensureMirror` primitive).
130
+ * Idempotent: an existing mirror is fetched + reused, not clobbered. With
131
+ * `--local`, first provisions a `--bare` arbiter from the working repo
132
+ * (`arbiterInit`, absorbing `arbiter init`) and registers THAT arbiter's mirror.
133
+ *
134
+ * Project-identity guard (anti-stranding, ADR §1 +
135
+ * `work/notes/observations/hub-mirror-key-ignores-transport.md`): if a sibling mirror
136
+ * for the SAME project (same `projectIdFromKey` tail) already exists under a
137
+ * DIFFERENT key (a transport mismatch OR a same-transport path/host collision),
138
+ * refuse by default — registering the project under a second key would fork the
139
+ * mirror and risk stranding un-pushed `work/<slug>` work on the other mirror.
140
+ *
141
+ * `--force` REPLACES the existing mirror(s) for the project (so you can re-link
142
+ * a project's mirror from a remote to a `--bare` arbiter, or vice-versa,
143
+ * deliberately) — but `--force` overrides the POLICY block ONLY, NEVER the
144
+ * DATA-LOSS block: if any worktree of the mirror being replaced still holds
145
+ * un-pushed work (the full `gc.ts` clean-AND-reachable per-worktree predicate),
146
+ * the replace REFUSES with {@link ReplaceWouldStrandWorkError}. (An identical
147
+ * key is the idempotent reuse case, NOT a conflict — it is the same mirror.)
148
+ */
149
+ export declare function remoteAdd(options: RemoteAddOptions): RemoteAddResult;
150
+ /** The result of `remote rm`. */
151
+ export interface RemoteRmResult {
152
+ /** The hub key that was removed. */
153
+ key: string;
154
+ /** Absolute path to the deleted mirror. */
155
+ path: string;
156
+ /** True iff a mirror existed and was deleted (false ⇒ nothing matched). */
157
+ removed: boolean;
158
+ }
159
+ /** Inputs to {@link remoteRm}. */
160
+ export interface RemoteRmOptions extends RegistryOptions {
161
+ /** The mirror to delete, by hub KEY (`host/org/name`) or by its origin URL. */
162
+ target: string;
163
+ }
164
+ /**
165
+ * Delete a hub mirror by key or origin URL — the ONLY mirror deleter (`gc`
166
+ * NEVER reaps mirrors). Resolves `target` first as a literal key, then by
167
+ * encoding it as a URL (so both `remote rm <key>` and `remote rm <url>` work),
168
+ * and finally by matching any registered mirror's origin URL. Removes the bare
169
+ * mirror directory (a self-contained `<key>.git` folder under `repos/`).
170
+ */
171
+ export declare function remoteRm(options: RemoteRmOptions): RemoteRmResult;
172
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAQjE;;;;;;;;;;;;;GAaG;AAEH,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAChC,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,SAAS,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,SAAS,CAAC;AAEjE,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC/B,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,8DAA8D;AAC9D,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAO3C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAUtD;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD;AAsBD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAuCxE;AAQD,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC/B,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACxD;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,aAAa;CAAG;AAEjE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAiHpE;AA0DD,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC9B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACvD,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAsBjE"}
@@ -0,0 +1,296 @@
1
+ import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { run } from './git.js';
4
+ import { encodeRepoKey, ensureMirror, mirrorPath, readOriginUrl, } from './repo-mirror.js';
5
+ import { arbiterInit } from './arbiter.js';
6
+ import { discoverJobs, evaluateDeletionSafety, RETAIN_REASON_TEXT, } from './gc.js';
7
+ /** Raised when a registry operation cannot proceed safely. */
8
+ export class RegistryError extends Error {
9
+ }
10
+ /** The `repos/` directory under `workspacesDir` that holds the hub mirrors. */
11
+ function reposDir(workspacesDir) {
12
+ return join(workspacesDir, 'repos');
13
+ }
14
+ /**
15
+ * Derive the transport from a remote URL's scheme. `file://` (and a plain
16
+ * absolute path to a bare repo) ⇒ `local-bare`; `git@`/`https`/`http`/`ssh`
17
+ * (anything with a host) ⇒ `remote-host`. This is the same scheme split
18
+ * `encodeRepoKey` deliberately collapses away from the KEY — here we keep it for
19
+ * the transport guard + `remote ls`.
20
+ */
21
+ export function transportForUrl(url) {
22
+ const trimmed = url.trim();
23
+ if (trimmed === '') {
24
+ return 'unknown';
25
+ }
26
+ if (trimmed.startsWith('file://') || trimmed.startsWith('/')) {
27
+ return 'local-bare';
28
+ }
29
+ // scp-like ssh (`git@host:org/repo`) or any `scheme://host/...` is a remote host.
30
+ return 'remote-host';
31
+ }
32
+ /** The trailing `org/name` of a hub key (the project identity for the guard). */
33
+ export function projectIdFromKey(key) {
34
+ const segments = key.split('/').filter((s) => s.length > 0);
35
+ // Keep the last two segments (`org/name`); fall back to the whole key when a
36
+ // degenerate key has fewer than two segments.
37
+ return segments.slice(-2).join('/');
38
+ }
39
+ /**
40
+ * The on-disk hub-key for an arbiter URL is encoded WITH a `.git` directory
41
+ * suffix; the mirror folder is `<key>.git`. Recover the hub key from a folder
42
+ * name by stripping that trailing `.git`.
43
+ */
44
+ function keyFromMirrorDir(name) {
45
+ return name.endsWith('.git') ? name.slice(0, -'.git'.length) : name;
46
+ }
47
+ /** True iff `path` is (or contains) an initialised git repository. */
48
+ function pathHoldsGitRepo(path, env) {
49
+ if (!existsSync(path)) {
50
+ return false;
51
+ }
52
+ return run('git', ['rev-parse', '--git-dir'], path, { env }).status === 0;
53
+ }
54
+ /**
55
+ * Enumerate the registered hub mirrors (the registry). Walks the bare mirror
56
+ * folders under `<workspacesDir>/repos/<key>.git` — which exist hierarchically
57
+ * (`host/org/name.git`), so a leaf `*.git` directory holding a git repo IS a
58
+ * mirror. Reads each one's `origin` URL + transport (the key is lossy). Sorted
59
+ * by key. This is the SINGLE "list registered mirrors" primitive that both
60
+ * `remote ls` AND `scan`/`status` discovery consume.
61
+ */
62
+ export function listMirrors(options) {
63
+ const root = reposDir(options.workspacesDir);
64
+ if (!existsSync(root)) {
65
+ return [];
66
+ }
67
+ const mirrors = [];
68
+ // Walk for `*.git` leaf directories that hold a git repo (the hub mirrors).
69
+ const stack = [root];
70
+ while (stack.length > 0) {
71
+ const dir = stack.pop();
72
+ let entries;
73
+ try {
74
+ entries = readdirSync(dir, { withFileTypes: true });
75
+ }
76
+ catch {
77
+ continue;
78
+ }
79
+ for (const entry of entries) {
80
+ if (!entry.isDirectory()) {
81
+ continue;
82
+ }
83
+ const full = join(dir, entry.name);
84
+ if (entry.name.endsWith('.git') && pathHoldsGitRepo(full, options.env)) {
85
+ const key = relKey(root, full);
86
+ const originUrl = readOriginUrl(full, options.env);
87
+ mirrors.push({
88
+ key,
89
+ path: full,
90
+ originUrl,
91
+ transport: originUrl === undefined ? 'unknown' : transportForUrl(originUrl),
92
+ projectId: projectIdFromKey(key),
93
+ });
94
+ continue;
95
+ }
96
+ // Descend into intermediate (non-`.git`) directories.
97
+ stack.push(full);
98
+ }
99
+ }
100
+ return mirrors.sort((a, b) => a.key.localeCompare(b.key));
101
+ }
102
+ /** The hub key for a mirror dir relative to `<workspacesDir>/repos/`. */
103
+ function relKey(reposRoot, mirrorPathAbs) {
104
+ const rel = mirrorPathAbs.slice(reposRoot.length).replace(/^[/\\]+/, '');
105
+ return keyFromMirrorDir(rel.split('\\').join('/'));
106
+ }
107
+ /**
108
+ * Raised when `--force` cannot REPLACE a project's mirror because a worktree of
109
+ * the mirror being replaced still holds un-pushed work (a DATA-LOSS block,
110
+ * distinct from the POLICY block `--force` overrides). The reason names each
111
+ * unsafe worktree so the human can rescue the work before re-running.
112
+ */
113
+ export class ReplaceWouldStrandWorkError extends RegistryError {
114
+ }
115
+ /**
116
+ * Register a target by creating its hub mirror (the `ensureMirror` primitive).
117
+ * Idempotent: an existing mirror is fetched + reused, not clobbered. With
118
+ * `--local`, first provisions a `--bare` arbiter from the working repo
119
+ * (`arbiterInit`, absorbing `arbiter init`) and registers THAT arbiter's mirror.
120
+ *
121
+ * Project-identity guard (anti-stranding, ADR §1 +
122
+ * `work/notes/observations/hub-mirror-key-ignores-transport.md`): if a sibling mirror
123
+ * for the SAME project (same `projectIdFromKey` tail) already exists under a
124
+ * DIFFERENT key (a transport mismatch OR a same-transport path/host collision),
125
+ * refuse by default — registering the project under a second key would fork the
126
+ * mirror and risk stranding un-pushed `work/<slug>` work on the other mirror.
127
+ *
128
+ * `--force` REPLACES the existing mirror(s) for the project (so you can re-link
129
+ * a project's mirror from a remote to a `--bare` arbiter, or vice-versa,
130
+ * deliberately) — but `--force` overrides the POLICY block ONLY, NEVER the
131
+ * DATA-LOSS block: if any worktree of the mirror being replaced still holds
132
+ * un-pushed work (the full `gc.ts` clean-AND-reachable per-worktree predicate),
133
+ * the replace REFUSES with {@link ReplaceWouldStrandWorkError}. (An identical
134
+ * key is the idempotent reuse case, NOT a conflict — it is the same mirror.)
135
+ */
136
+ export function remoteAdd(options) {
137
+ const env = options.env;
138
+ const note = options.note ?? (() => { });
139
+ let url;
140
+ let arbiter;
141
+ if (options.local) {
142
+ if (!options.arbitersDir || options.arbitersDir.trim() === '') {
143
+ throw new RegistryError('remote add --local requires `arbitersDir` (the CLI passes the resolved config).');
144
+ }
145
+ // Provision (or locate) the local bare arbiter from the working repo, then
146
+ // register ITS file:// URL. This absorbs `arbiter init`.
147
+ arbiter = arbiterInit({
148
+ repo: options.target,
149
+ arbitersDir: options.arbitersDir,
150
+ remote: options.arbiterRemote,
151
+ env,
152
+ note,
153
+ });
154
+ url = arbiter.url;
155
+ }
156
+ else {
157
+ url = options.target.trim();
158
+ if (url === '') {
159
+ throw new RegistryError('remote add requires a target URL.');
160
+ }
161
+ }
162
+ const transport = transportForUrl(url);
163
+ const key = encodeRepoKey(url);
164
+ const projectId = projectIdFromKey(key);
165
+ const destPath = mirrorPath(options.workspacesDir, url);
166
+ // Project-identity guard: a sibling mirror for the SAME project under a
167
+ // DIFFERENT key (same `projectIdFromKey` tail) risks stranding un-pushed work.
168
+ // An identical key is the idempotent reuse case, NOT a conflict (same mirror).
169
+ const siblings = listMirrors({
170
+ workspacesDir: options.workspacesDir,
171
+ env,
172
+ }).filter((m) => m.projectId === projectId && m.key !== key);
173
+ if (siblings.length > 0) {
174
+ if (!options.force) {
175
+ // POLICY block (default): refuse the project-identity collision. Name the
176
+ // existing mirror(s) + transport(s) so the human sees WHAT collides.
177
+ const existing = siblings[0];
178
+ throw new RegistryError(`refusing: project '${projectId}' is already registered (mirror ` +
179
+ `${existing.key}, transport '${existing.transport}', origin ` +
180
+ `${existing.originUrl ?? '(unknown)'}). Registering it under a second ` +
181
+ `key (${key}, transport '${transport}') would fork the mirror and risk ` +
182
+ 'stranding un-pushed work on the other mirror. Re-run with --force to ' +
183
+ 'REPLACE the existing mirror (force replaces the mirror, but still ' +
184
+ 'refuses if un-pushed work would be lost).');
185
+ }
186
+ // --force REPLACE path: force overrides the POLICY block, NEVER the
187
+ // DATA-LOSS block. Before replacing, run the FULL per-worktree predicate
188
+ // (gc.ts's clean-AND-reachable) across EVERY worktree of the sibling
189
+ // mirror(s) — committed-but-unpushed work lives in the mirror's refs, but
190
+ // UNCOMMITTED (dirty) work is only on disk, invisible to a refs-only check.
191
+ // A single dirty-or-unreachable worktree BLOCKS the replace.
192
+ const unsafe = unsafeWorktreesForMirrors(options.workspacesDir, new Set(siblings.map((m) => m.key)), env);
193
+ if (unsafe.length > 0) {
194
+ const details = unsafe
195
+ .map((u) => ` - ${u.slug} (${u.dir}): ${u.reasonText}`)
196
+ .join('\n');
197
+ throw new ReplaceWouldStrandWorkError(`refusing --force replace of project '${projectId}': the mirror being ` +
198
+ `replaced has worktree(s) with un-pushed work that would be stranded.\n` +
199
+ `${details}\n` +
200
+ '--force overrides the registration POLICY, never the DATA-LOSS guard. ' +
201
+ 'Push/merge or gc --force each worktree above, then re-run.');
202
+ }
203
+ // Safe to replace: every sibling worktree is provably clean + reachable.
204
+ // Delete the sibling mirror(s) so the project re-links onto the new key.
205
+ for (const sibling of siblings) {
206
+ remoteRm({
207
+ target: sibling.key,
208
+ workspacesDir: options.workspacesDir,
209
+ env,
210
+ });
211
+ note(`replaced: removed prior mirror '${sibling.key}' for '${projectId}'.`);
212
+ }
213
+ }
214
+ const result = ensureMirror({ url, workspacesDir: options.workspacesDir, env });
215
+ if (result.created) {
216
+ note(`registered '${key}' (created hub mirror at ${result.path}).`);
217
+ }
218
+ else {
219
+ note(`'${key}' already registered (fetched existing mirror at ${result.path}).`);
220
+ }
221
+ return {
222
+ key,
223
+ mirrorPath: result.path,
224
+ url: result.url,
225
+ transport,
226
+ created: result.created,
227
+ ...(arbiter ? { arbiter } : {}),
228
+ };
229
+ }
230
+ /**
231
+ * Enumerate the worktrees of the mirror(s) identified by `mirrorKeys` and run
232
+ * `gc.ts`'s FULL clean-AND-reachable per-worktree predicate
233
+ * ({@link evaluateDeletionSafety}) in each, returning the ones that are NOT
234
+ * provably safe (a dirty tree OR a `work/*` tip not reachable on the arbiter).
235
+ *
236
+ * Worktrees are discovered via {@link discoverJobs} (which walks
237
+ * `<workspacesDir>/work/*` for `.dorfl-job.json` records, each carrying
238
+ * the mirror `repoKey`), so a job is attributed to its mirror by KEY. This is
239
+ * the DATA-LOSS guard the `--force` replace path consults: replacing a mirror
240
+ * that still has un-pushed work would strand it, so `--force` proceeds ONLY when
241
+ * this returns empty (every worktree clean + reachable).
242
+ */
243
+ function unsafeWorktreesForMirrors(workspacesDir, mirrorKeys, env) {
244
+ const unsafe = [];
245
+ for (const job of discoverJobs(workspacesDir)) {
246
+ if (!jobBelongsToMirror(job, mirrorKeys)) {
247
+ continue;
248
+ }
249
+ const verdict = evaluateDeletionSafety({
250
+ dir: job.dir,
251
+ branch: job.branch,
252
+ env,
253
+ });
254
+ if (!verdict.safe) {
255
+ const reason = verdict.reason ?? 'unmerged-commits';
256
+ unsafe.push({
257
+ dir: job.dir,
258
+ slug: job.slug,
259
+ reasonText: RETAIN_REASON_TEXT[reason],
260
+ });
261
+ }
262
+ }
263
+ return unsafe;
264
+ }
265
+ /** True iff `job`'s record attributes it to one of `mirrorKeys`. */
266
+ function jobBelongsToMirror(job, mirrorKeys) {
267
+ const key = job.record?.repoKey;
268
+ return key !== undefined && mirrorKeys.has(key);
269
+ }
270
+ /**
271
+ * Delete a hub mirror by key or origin URL — the ONLY mirror deleter (`gc`
272
+ * NEVER reaps mirrors). Resolves `target` first as a literal key, then by
273
+ * encoding it as a URL (so both `remote rm <key>` and `remote rm <url>` work),
274
+ * and finally by matching any registered mirror's origin URL. Removes the bare
275
+ * mirror directory (a self-contained `<key>.git` folder under `repos/`).
276
+ */
277
+ export function remoteRm(options) {
278
+ const env = options.env;
279
+ const target = options.target.trim();
280
+ const mirrors = listMirrors({ workspacesDir: options.workspacesDir, env });
281
+ // Resolve the mirror to delete: by literal key, by URL→key, or by origin URL.
282
+ const byKey = mirrors.find((m) => m.key === target);
283
+ const urlKey = target === '' ? undefined : encodeRepoKey(target);
284
+ const byUrlKey = urlKey !== undefined ? mirrors.find((m) => m.key === urlKey) : undefined;
285
+ const byOrigin = mirrors.find((m) => m.originUrl === target);
286
+ const match = byKey ?? byUrlKey ?? byOrigin;
287
+ if (match === undefined) {
288
+ return { key: target, path: '', removed: false };
289
+ }
290
+ // Guard: only remove a self-contained bare mirror directory under repos/.
291
+ if (existsSync(match.path) && statSync(match.path).isDirectory()) {
292
+ rmSync(match.path, { recursive: true, force: true });
293
+ }
294
+ return { key: match.key, path: match.path, removed: true };
295
+ }
296
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}