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,363 @@
1
+ /**
2
+ * The `install-ci` orchestrator (prd `runner-in-ci`, task
3
+ * `install-ci-core-and-github-adapter`): ties the provider-agnostic core
4
+ * (`install-ci-core.ts`) to a CI-provider adapter (the first being GitHub,
5
+ * `install-ci-github.ts`) through the {@link CIProviderContext} seam. It drives
6
+ * three paths from ONE config shape so they cannot diverge:
7
+ *
8
+ * - the interactive WIZARD (prompts via the injectable {@link WizardPrompts}
9
+ * seam — production wires readline; tests inject a deterministic stub);
10
+ * - the non-interactive `--config <file>` path (loads the same shape, no prompts);
11
+ * - `--export-config` (+ `--include-secrets`) which round-trips the gathered
12
+ * config back to JSON.
13
+ *
14
+ * The artifacts (composite setup action + auth) are assembled by the core and
15
+ * written under `.fake/` in `--fake` snapshot mode (NEVER `.github/`, NO real
16
+ * secret), so the SAME inputs produce byte-identical output whether gathered
17
+ * interactively or from a config file (the equivalence the task pins).
18
+ */
19
+ import { writeFileSync, readFileSync, existsSync } from 'node:fs';
20
+ import { join } from 'node:path';
21
+ import { DEFAULT_HARNESS, loadCIConfigFile, resolveCIConfig, exportCIConfig, orchestrateSecrets, buildSetupArtifacts, writeArtifacts, } from './install-ci-core.js';
22
+ import { installCIBranchProtectionStep, } from './install-ci-branch-protection.js';
23
+ /**
24
+ * Run `install-ci`. Resolves the config (config-file path or the wizard), then
25
+ * either exports it (`--export-config`) or generates the artifacts. In `--fake`
26
+ * mode it writes to `.fake/` and sets NO real secret; otherwise it orchestrates
27
+ * the required secrets through the provider seam. Returns a structured result.
28
+ */
29
+ export async function installCI(options) {
30
+ const log = options.log ?? ((line) => console.log(line));
31
+ const fake = options.fake ?? false;
32
+ // 1. Resolve the config: the config-file path (no prompts) or the wizard.
33
+ let file;
34
+ let knownSecrets;
35
+ if (options.configFile) {
36
+ file = loadCIConfigFile(options.configFile);
37
+ knownSecrets = file.secrets;
38
+ }
39
+ else {
40
+ if (!options.prompts) {
41
+ throw new Error('install-ci: an interactive run needs a prompt seam (or pass --config)');
42
+ }
43
+ file = await runWizard(options.prompts);
44
+ }
45
+ const config = resolveCIConfig(file);
46
+ // An EXPLICIT --install-source flag wins over the config file's value and is
47
+ // folded in BEFORE the export so it round-trips through --export-config. The
48
+ // package.json AUTO-DETECTION (below) is applied AFTER the export early-return
49
+ // instead, so it is NOT baked into an exported config (a consumer re-running
50
+ // from that export must not silently inherit the monorepo's workspace mode).
51
+ const explicitInstallSource = options.installSource ?? file.installSource ?? undefined;
52
+ if (options.installSource) {
53
+ config.installSource = options.installSource;
54
+ }
55
+ // An EXPLICIT --max-parallel flag wins over the config file's value and is
56
+ // folded in BEFORE the export so it round-trips through --export-config.
57
+ if (options.maxParallel !== undefined) {
58
+ config.maxParallel = options.maxParallel;
59
+ }
60
+ // 2. --export-config: round-trip the gathered config back to JSON and exit.
61
+ if (options.exportConfig) {
62
+ let secrets;
63
+ if (options.includeSecrets) {
64
+ secrets = await gatherSecretsForExport(file, options.prompts);
65
+ }
66
+ writeFileSync(options.exportConfig, exportCIConfig(config, secrets), 'utf8');
67
+ log(`Config written to ${options.exportConfig}`);
68
+ return { outcome: 'exported', config, written: [], secrets: [] };
69
+ }
70
+ // 2b. Auto-detect the WORKSPACE install source: when no explicit flag/config
71
+ // value was given AND <workDir>/package.json is the dorfl monorepo,
72
+ // build the CLI from source instead of pulling the (unpublished) registry
73
+ // package. A single exact-name check (NOT a fuzzy "dorfl" match, or
74
+ // it would wrongly trip in a consumer repo named similarly). A missing or
75
+ // unparseable package.json stays `registry` (the error is swallowed). This
76
+ // runs AFTER the export early-return so it is never baked into an export.
77
+ if (!explicitInstallSource) {
78
+ try {
79
+ const pkgPath = join(options.ctx.workDir, 'package.json');
80
+ if (existsSync(pkgPath)) {
81
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
82
+ if (pkg.name === 'dorfl-monorepo') {
83
+ config.installSource = 'workspace';
84
+ log('📦 Detected dorfl monorepo — using workspace install mode (build from source)');
85
+ }
86
+ }
87
+ }
88
+ catch {
89
+ // Ignore — not the dorfl monorepo (missing/unparseable pkg).
90
+ }
91
+ }
92
+ // 3. Orchestrate secrets — SKIPPED in --fake mode (no real secret touched).
93
+ let secrets = [];
94
+ if (fake) {
95
+ log('--fake: skipping secret setup (no real secret is set)');
96
+ }
97
+ else {
98
+ secrets = await orchestrateSecrets({
99
+ ctx: options.ctx,
100
+ config,
101
+ knownSecrets,
102
+ prompt: options.prompts
103
+ ? (name) => options.prompts.password(`Enter the value for secret ${name}:`)
104
+ : undefined,
105
+ // The PR-identity token is OPTIONAL: phrase it as such, and Enter-to-skip
106
+ // leaves the legs on the built-in GITHUB_TOKEN fallback (zero-config).
107
+ optionalPrompt: options.prompts
108
+ ? (name) => options.prompts.password(`Optional: GitHub token for the CI legs to open PRs under your ` +
109
+ `identity (stored as secret ${name}; a PAT or App token). ` +
110
+ `Leave blank to use the built-in GITHUB_TOKEN:`)
111
+ : undefined,
112
+ });
113
+ for (const r of secrets) {
114
+ if (r.status === 'set')
115
+ log(` secret ${r.name}: set`);
116
+ else if (r.status === 'skipped')
117
+ log(` secret ${r.name}: skipped (empty)`);
118
+ else
119
+ log(` secret ${r.name}: FAILED (${r.error})`);
120
+ }
121
+ }
122
+ // 4. Optionally offer the GitHub delete_branch_on_merge repo-setting (the
123
+ // capability-F residue): ONLY when offered + confirmed, NEVER silent.
124
+ if (!fake &&
125
+ options.prompts &&
126
+ options.ctx.setRepoSetting &&
127
+ options.ctx.repo) {
128
+ const wanted = await options.prompts.confirm("Enable GitHub's 'Automatically delete head branches' (delete_branch_on_merge)?", { default: false });
129
+ if (wanted) {
130
+ try {
131
+ await options.ctx.setRepoSetting('delete_branch_on_merge', true);
132
+ log(' repo setting delete_branch_on_merge: enabled');
133
+ }
134
+ catch (err) {
135
+ log(` repo setting delete_branch_on_merge: FAILED (${err instanceof Error ? err.message : String(err)})`);
136
+ }
137
+ }
138
+ }
139
+ // 5. Assemble + write the artifacts (composite setup action + auth). The
140
+ // project-setup escape hatch (prd `install-ci-project-provisioning`) lives
141
+ // on `config.projectSetup` as a PROVIDER-NAMESPACED, OPAQUE map; we look up
142
+ // THIS provider's payload via the seam (`ctx.providerId`) and ask the
143
+ // adapter to render it to the FIRST-steps fragment (`ctx.renderProjectSetup`).
144
+ // Absent payload / missing seam method ⇒ no fragment ⇒ byte-identical to the
145
+ // no-hook baseline (the load-bearing contract this hook preserves).
146
+ let projectSetupSteps;
147
+ const providerId = options.ctx.providerId;
148
+ const payload = providerId && config.projectSetup
149
+ ? config.projectSetup[providerId]
150
+ : undefined;
151
+ if (payload !== undefined && options.ctx.renderProjectSetup) {
152
+ projectSetupSteps = options.ctx.renderProjectSetup(payload);
153
+ }
154
+ const files = buildSetupArtifacts(config, options.capabilities ?? [], {
155
+ projectSetupSteps,
156
+ });
157
+ const written = writeArtifacts({ workDir: options.ctx.workDir, fake, files });
158
+ for (const path of written) {
159
+ log(` wrote ${path}`);
160
+ }
161
+ // 5b. Tier-1 GitHub branch protection (prd land-time-reverify-and-parallel-
162
+ // merge-ceiling, Story 11). Auto-configures when the credential is admin-
163
+ // scoped (one `gh api` PUT on the protection endpoint, required check
164
+ // `verify` + strict: true); prints the exact ready-to-run `gh api` command
165
+ // + manual UI fallback when not. Skipped in --fake (no real API touched);
166
+ // skipped on a non-GitHub provider (the seam method is absent there).
167
+ const branchProtection = await installCIBranchProtectionStep({
168
+ ctx: options.ctx,
169
+ fake,
170
+ log,
171
+ });
172
+ // CI-autonomy posture (task `install-ci-emits-no-gate-env-let-config-decide`):
173
+ // the emitted advance workflow carries NO DORFL_AUTO_BUILD /
174
+ // DORFL_AUTO_TASK / DORFL_OBSERVATION_TRIAGE /
175
+ // DORFL_SURFACE_BLOCKERS env line. Gate policy is resolved through the
176
+ // same `flag > env > per-repo > global > default` chain the engine uses
177
+ // everywhere, so CI is treated like any other config consumer. A config-less
178
+ // repo therefore lands on the strict built-in defaults (autoBuild: false,
179
+ // autoTask: false, observationTriage: 'off', surfaceBlockers: false) and CI
180
+ // claims nothing until you opt in. Tell the user that loudly so a now-quiet CI
181
+ // is not a surprise, and how to enable it.
182
+ log('');
183
+ log("CI autonomy is OFF by default (the engine's strict default).");
184
+ log('The emitted advance workflow sets NO DORFL_* gate env, so your\n' +
185
+ ' committed .dorfl.json wins (precedence: flag > env > per-repo > global > default).');
186
+ log('To enable CI autonomy, EITHER:');
187
+ log(' - set the gate(s) in `.dorfl.json` (applies everywhere), e.g.\n' +
188
+ ' { "autoBuild": true, "autoTask": true }');
189
+ log(" - OR add the env var(s) to the workflow's `env:` block yourself (CI-only override), e.g.\n" +
190
+ " DORFL_AUTO_BUILD: 'true'\n" +
191
+ " DORFL_AUTO_TASK: 'true'");
192
+ // Project-toolchain boundary (task install-ci-document-toolchain-boundary,
193
+ // PRD install-ci-project-provisioning axis (A)). dorfl declares
194
+ // engines.node '>=18' and the generated composite action pins Node 22 only
195
+ // for dorfl's own runtime — it does NOT provision the project's toolchain.
196
+ // State that boundary explicitly so a maintainer whose project pins a
197
+ // different Node/pnpm version (or uses rust / system packages) is never
198
+ // silently broken: the project-setup hook (sibling task
199
+ // install-ci-project-setup-hook) is the SUPPORTED escape hatch; without
200
+ // it the conflicting case is unsupported. install-ci does NOT sniff
201
+ // .nvmrc / packageManager / rust-toolchain.toml — the boundary is
202
+ // documentation, not detection.
203
+ log('');
204
+ log("Project toolchain: the generated composite action provisions ONLY dorfl's own runtime (Node 22 for engines.node '>=18').");
205
+ log('It does NOT provision your project toolchain (a project-pinned pnpm/Node, rust, system packages, `pnpm install` of your deps).');
206
+ log('A custom or conflicting project toolchain is supported ONLY via the project-setup hook (task install-ci-project-setup-hook);');
207
+ log('without that hook the conflicting case is unsupported. install-ci does NOT detect likely conflicts — this is a documented boundary.');
208
+ return { outcome: 'generated', config, written, secrets, branchProtection };
209
+ }
210
+ /**
211
+ * Gather the secret values for `--include-secrets` (the export path): take known
212
+ * values from the loaded file, else prompt. Returns the deduped name→value map.
213
+ */
214
+ async function gatherSecretsForExport(file, prompts) {
215
+ const config = resolveCIConfig(file);
216
+ const secrets = { ...(file.secrets ?? {}) };
217
+ if (!prompts) {
218
+ return secrets;
219
+ }
220
+ const { requiredSecretNames, optionalSecretNames } = await import('./install-ci-core.js');
221
+ for (const name of requiredSecretNames(config)) {
222
+ if (secrets[name] !== undefined)
223
+ continue;
224
+ const value = await prompts.password(`Enter the value for secret ${name}:`);
225
+ if (value)
226
+ secrets[name] = value;
227
+ }
228
+ // The OPTIONAL PR-identity token: offered (blank ⇒ omitted, never an empty
229
+ // value), so an exported config can carry it without it ever being required.
230
+ for (const name of optionalSecretNames(config)) {
231
+ if (secrets[name] !== undefined)
232
+ continue;
233
+ const value = await prompts.password(`Optional: GitHub token for CI to open PRs under your identity ` +
234
+ `(secret ${name}; a PAT or App token). Leave blank to use GITHUB_TOKEN:`);
235
+ if (value)
236
+ secrets[name] = value;
237
+ }
238
+ return secrets;
239
+ }
240
+ // ─── The interactive wizard ──────────────────────────────────────────────────
241
+ /**
242
+ * The interactive wizard: gather the auth mode, providers/models (models-json) or
243
+ * the default provider/model (auth-json), and the harness, into a
244
+ * {@link CIConfigFile}. Drives the {@link WizardPrompts} seam, so it runs
245
+ * deterministically in tests and the gathered shape exactly equals a config-file
246
+ * input — the equivalence the snapshot test pins. Mirrors whitesmith's prompt
247
+ * flow (provider type → key env var → models → defaults).
248
+ */
249
+ export async function runWizard(prompts) {
250
+ const authMode = await prompts.select('Auth mode:', [
251
+ {
252
+ name: 'models.json (default — one GitHub secret per provider key)',
253
+ value: 'models-json',
254
+ },
255
+ {
256
+ name: 'auth.json (single PI_AUTH_JSON + GH_PAT + OAuth refresh — the sharp edge)',
257
+ value: 'auth-json',
258
+ },
259
+ ]);
260
+ const harness = await prompts.select('Agent harness:', [
261
+ { name: 'pi (the pi coding agent)', value: 'pi' },
262
+ { name: 'null (shell out to a configured agentCmd)', value: 'null' },
263
+ ]);
264
+ if (authMode === 'auth-json') {
265
+ // auth.json mode: no per-provider keys, but the harness still needs a
266
+ // default provider/model for its invocations.
267
+ const defaultProvider = await prompts.input('Default AI provider:', {
268
+ default: 'anthropic',
269
+ });
270
+ const defaultModel = await prompts.input('Default AI model:', {
271
+ default: 'claude-sonnet-4-20250514',
272
+ });
273
+ return {
274
+ authMode,
275
+ providers: [],
276
+ defaultProvider,
277
+ defaultModel,
278
+ harness,
279
+ };
280
+ }
281
+ const providers = await promptProviders(prompts);
282
+ const { defaultProvider, defaultModel } = await promptDefaults(prompts, providers);
283
+ return { authMode, providers, defaultProvider, defaultModel, harness };
284
+ }
285
+ /** Prompt for one or more providers (the models-json path). */
286
+ async function promptProviders(prompts) {
287
+ const providers = [];
288
+ let addMore = true;
289
+ while (addMore) {
290
+ const type = await prompts.select(providers.length === 0 ? 'Add a provider:' : 'Add another provider:', [
291
+ { name: 'Anthropic (built-in, needs API key)', value: 'anthropic' },
292
+ { name: 'OpenAI (built-in, needs API key)', value: 'openai' },
293
+ { name: 'Custom provider', value: 'custom' },
294
+ ]);
295
+ providers.push(type === 'custom'
296
+ ? await promptCustomProvider(prompts)
297
+ : await promptBuiltinProvider(prompts, type));
298
+ addMore = await prompts.confirm('Add another provider?', { default: false });
299
+ }
300
+ return providers;
301
+ }
302
+ /** Prompt for a built-in provider (`anthropic` / `openai`). */
303
+ async function promptBuiltinProvider(prompts, type) {
304
+ const defaultEnvVar = type === 'anthropic' ? 'ANTHROPIC_API_KEY' : 'OPENAI_API_KEY';
305
+ const defaultModel = type === 'anthropic' ? 'claude-sonnet-4-20250514' : 'gpt-4o';
306
+ const apiKeyEnvVar = await prompts.input('GitHub secret name for the API key:', {
307
+ default: defaultEnvVar,
308
+ });
309
+ const baseUrl = await prompts.input('Custom base URL (blank for default):');
310
+ const models = await promptModels(prompts, defaultModel);
311
+ return {
312
+ name: type,
313
+ baseUrl: baseUrl || undefined,
314
+ apiKeyEnvVar,
315
+ models,
316
+ builtin: true,
317
+ };
318
+ }
319
+ /** Prompt for a custom provider. */
320
+ async function promptCustomProvider(prompts) {
321
+ const name = await prompts.input('Provider name:');
322
+ const baseUrl = await prompts.input('Base URL:');
323
+ const api = await prompts.select('API type:', [
324
+ { name: 'Anthropic Messages API', value: 'anthropic-messages' },
325
+ { name: 'OpenAI Completions API', value: 'openai-completions' },
326
+ ]);
327
+ const apiKeyEnvVar = await prompts.input('GitHub secret name for the API key:');
328
+ let compat;
329
+ if (api === 'openai-completions') {
330
+ const supportsDeveloperRole = await prompts.confirm('Does this provider support the developer role?', { default: true });
331
+ const supportsReasoningEffort = await prompts.confirm('Does this provider support reasoning effort?', { default: true });
332
+ if (!supportsDeveloperRole || !supportsReasoningEffort) {
333
+ compat = { supportsDeveloperRole, supportsReasoningEffort };
334
+ }
335
+ }
336
+ const models = await promptModels(prompts);
337
+ return { name, baseUrl, api, apiKeyEnvVar, models, builtin: false, compat };
338
+ }
339
+ /** Prompt for one or more model ids. */
340
+ async function promptModels(prompts, firstDefault) {
341
+ const models = [];
342
+ let addModel = true;
343
+ while (addModel) {
344
+ const id = await prompts.input(models.length === 0 ? 'Model ID:' : 'Another model ID:', models.length === 0 && firstDefault ? { default: firstDefault } : undefined);
345
+ models.push({ id });
346
+ addModel = await prompts.confirm('Add another model?', { default: false });
347
+ }
348
+ return models;
349
+ }
350
+ /** Prompt for the default provider + model (skips the prompt when only one). */
351
+ async function promptDefaults(prompts, providers) {
352
+ const defaultProvider = providers.length === 1
353
+ ? providers[0].name
354
+ : await prompts.select('Default provider:', providers.map((p) => ({ name: p.name, value: p.name })));
355
+ const selected = providers.find((p) => p.name === defaultProvider);
356
+ const defaultModel = selected.models.length === 1
357
+ ? selected.models[0].id
358
+ : await prompts.select('Default model:', selected.models.map((m) => ({ name: m.id, value: m.id })));
359
+ return { defaultProvider, defaultModel };
360
+ }
361
+ /** Re-export the default harness for callers building a config programmatically. */
362
+ export { DEFAULT_HARNESS };
363
+ //# sourceMappingURL=install-ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-ci.js","sourceRoot":"","sources":["../src/install-ci.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * **`intake`'s PURE event-classification** (task `intake-event-classification`, prd
3
+ * `issue-intake` US #2 — the resume-on-thread-change behaviour).
4
+ *
5
+ * `intake` is a CONVERSATION on an issue thread: a run may ASK a clarifying question
6
+ * and STOP, expecting a LATER run to resume from the updated thread (prd "Loop
7
+ * closure" / the decision table's ASK row). This module is the PURE CONTROL-PATH
8
+ * classifier the re-run depends on: given an issue EVENT, it decides whether `intake`
9
+ * should RE-EVALUATE the whole thread or IGNORE the event.
10
+ *
11
+ * THE CANONICAL RULE (from prd `issue-intake`, "The engine shape"): *"The loop
12
+ * re-runs on a new comment OR an issue-body edit (re-evaluate the whole thread); a
13
+ * buried prior-comment edit is IGNORED."*
14
+ *
15
+ * - a **new comment** → RE-EVALUATE (a genuine new turn on the thread);
16
+ * - an **issue-body edit** → RE-EVALUATE (the spec the prompt reads changed; re-read
17
+ * body + full thread);
18
+ * - editing a **buried PRIOR comment** → IGNORE (it is NOT a new turn —
19
+ * re-triggering on old-comment edits invites loops).
20
+ *
21
+ * Edit-vs-reply changes only the comment's FRAMING, not the control path: a NEW
22
+ * comment re-evaluates whether it is phrased as an edit-of-the-ask or a reply. The
23
+ * distinction the rule turns on is "a NEW turn vs an edit of a BURIED prior turn",
24
+ * NOT "edit vs reply".
25
+ *
26
+ * SCOPE FENCE (prd "Scope: the engine only"): this is ONLY the pure classifier. It is
27
+ * NOT CI's TRIGGER POLICY (command/every-issue, maintainer/anyone) — that is
28
+ * `runner-in-ci`'s. CI's trigger LATER CONSULTS this classifier, but the policy of
29
+ * WHO/WHAT may trigger lives in CI, not here. This module touches no seam, no git, no
30
+ * `gh` — it is pure logic over a stubbed event shape (the same discipline
31
+ * `failure-cause.ts` keeps).
32
+ */
33
+ /**
34
+ * The KIND of issue event the classifier decides over. The shapes are STUBBED in
35
+ * tests (no webhook, no `gh`); a real CI trigger maps its provider event onto one of
36
+ * these kinds before consulting {@link classifyIntakeEvent}.
37
+ *
38
+ * - `issue-comment-created` — a NEW comment was added to the thread (a new turn).
39
+ * - `issue-body-edited` — the ISSUE BODY itself was edited (the spec changed).
40
+ * - `issue-comment-edited` — an EXISTING comment was edited (see {@link IntakeEvent}
41
+ * for the buried-vs-latest distinction the rule turns on).
42
+ */
43
+ export type IntakeEventKind = 'issue-comment-created' | 'issue-body-edited' | 'issue-comment-edited';
44
+ /**
45
+ * The CONTROL-PATH decision the classifier returns:
46
+ *
47
+ * - `re-evaluate` — `intake` should RE-READ the issue body + full thread and re-run
48
+ * its decision (a new comment or a body edit changed the material the prompt
49
+ * judges).
50
+ * - `ignore` — the event is NOT a new turn; `intake` does nothing (re-triggering on a
51
+ * buried old-comment edit would invite loops).
52
+ */
53
+ export type IntakeEventDecision = 're-evaluate' | 'ignore';
54
+ /**
55
+ * A STUBBED issue event the classifier decides over. Deliberately MINIMAL — it
56
+ * carries only what the CONTROL-PATH rule turns on, nothing else (no author, no CI
57
+ * trigger policy — that is `runner-in-ci`'s).
58
+ */
59
+ export interface IntakeEvent {
60
+ /** Which kind of thread change occurred. */
61
+ kind: IntakeEventKind;
62
+ }
63
+ /**
64
+ * Classify an issue EVENT into the CONTROL-PATH decision: RE-EVALUATE the whole
65
+ * thread, or IGNORE the event. The PURE realisation of the prd's canonical rule
66
+ * (no seam, no git, no `gh`).
67
+ *
68
+ * The table (prd `issue-intake` US #2):
69
+ *
70
+ * | event kind | decision | why |
71
+ * | ----------------------- | ------------- | -------------------------------------------- |
72
+ * | `issue-comment-created` | `re-evaluate` | a new comment is a new turn on the thread |
73
+ * | `issue-body-edited` | `re-evaluate` | the issue body (the spec) changed |
74
+ * | `issue-comment-edited` | `ignore` | editing a buried prior comment is NOT a turn |
75
+ *
76
+ * `issue-comment-edited` is IGNORED unconditionally: editing a prior comment is not a
77
+ * new turn (and re-triggering on old-comment edits invites loops). The "buried" in
78
+ * the rule is descriptive — the rule does not single out which prior comment was
79
+ * edited; ANY comment edit is an edit of an already-seen turn, not a new one. (Adding
80
+ * NEW content is `issue-comment-created`, which DOES re-evaluate.)
81
+ *
82
+ * Edit-vs-reply does NOT change this: a new comment is `issue-comment-created`
83
+ * REGARDLESS of whether it is phrased as an edit-of-the-ask or a reply — both
84
+ * re-evaluate, because editing-vs-replying changes only the comment's FRAMING, not
85
+ * whether it is a new turn.
86
+ */
87
+ export declare function classifyIntakeEvent(event: IntakeEvent): IntakeEventDecision;
88
+ //# sourceMappingURL=intake-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intake-event.d.ts","sourceRoot":"","sources":["../src/intake-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GACxB,uBAAuB,GACvB,mBAAmB,GACnB,sBAAsB,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,4CAA4C;IAC5C,IAAI,EAAE,eAAe,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAQ3E"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * **`intake`'s PURE event-classification** (task `intake-event-classification`, prd
3
+ * `issue-intake` US #2 — the resume-on-thread-change behaviour).
4
+ *
5
+ * `intake` is a CONVERSATION on an issue thread: a run may ASK a clarifying question
6
+ * and STOP, expecting a LATER run to resume from the updated thread (prd "Loop
7
+ * closure" / the decision table's ASK row). This module is the PURE CONTROL-PATH
8
+ * classifier the re-run depends on: given an issue EVENT, it decides whether `intake`
9
+ * should RE-EVALUATE the whole thread or IGNORE the event.
10
+ *
11
+ * THE CANONICAL RULE (from prd `issue-intake`, "The engine shape"): *"The loop
12
+ * re-runs on a new comment OR an issue-body edit (re-evaluate the whole thread); a
13
+ * buried prior-comment edit is IGNORED."*
14
+ *
15
+ * - a **new comment** → RE-EVALUATE (a genuine new turn on the thread);
16
+ * - an **issue-body edit** → RE-EVALUATE (the spec the prompt reads changed; re-read
17
+ * body + full thread);
18
+ * - editing a **buried PRIOR comment** → IGNORE (it is NOT a new turn —
19
+ * re-triggering on old-comment edits invites loops).
20
+ *
21
+ * Edit-vs-reply changes only the comment's FRAMING, not the control path: a NEW
22
+ * comment re-evaluates whether it is phrased as an edit-of-the-ask or a reply. The
23
+ * distinction the rule turns on is "a NEW turn vs an edit of a BURIED prior turn",
24
+ * NOT "edit vs reply".
25
+ *
26
+ * SCOPE FENCE (prd "Scope: the engine only"): this is ONLY the pure classifier. It is
27
+ * NOT CI's TRIGGER POLICY (command/every-issue, maintainer/anyone) — that is
28
+ * `runner-in-ci`'s. CI's trigger LATER CONSULTS this classifier, but the policy of
29
+ * WHO/WHAT may trigger lives in CI, not here. This module touches no seam, no git, no
30
+ * `gh` — it is pure logic over a stubbed event shape (the same discipline
31
+ * `failure-cause.ts` keeps).
32
+ */
33
+ /**
34
+ * Classify an issue EVENT into the CONTROL-PATH decision: RE-EVALUATE the whole
35
+ * thread, or IGNORE the event. The PURE realisation of the prd's canonical rule
36
+ * (no seam, no git, no `gh`).
37
+ *
38
+ * The table (prd `issue-intake` US #2):
39
+ *
40
+ * | event kind | decision | why |
41
+ * | ----------------------- | ------------- | -------------------------------------------- |
42
+ * | `issue-comment-created` | `re-evaluate` | a new comment is a new turn on the thread |
43
+ * | `issue-body-edited` | `re-evaluate` | the issue body (the spec) changed |
44
+ * | `issue-comment-edited` | `ignore` | editing a buried prior comment is NOT a turn |
45
+ *
46
+ * `issue-comment-edited` is IGNORED unconditionally: editing a prior comment is not a
47
+ * new turn (and re-triggering on old-comment edits invites loops). The "buried" in
48
+ * the rule is descriptive — the rule does not single out which prior comment was
49
+ * edited; ANY comment edit is an edit of an already-seen turn, not a new one. (Adding
50
+ * NEW content is `issue-comment-created`, which DOES re-evaluate.)
51
+ *
52
+ * Edit-vs-reply does NOT change this: a new comment is `issue-comment-created`
53
+ * REGARDLESS of whether it is phrased as an edit-of-the-ask or a reply — both
54
+ * re-evaluate, because editing-vs-replying changes only the comment's FRAMING, not
55
+ * whether it is a new turn.
56
+ */
57
+ export function classifyIntakeEvent(event) {
58
+ switch (event.kind) {
59
+ case 'issue-comment-created':
60
+ case 'issue-body-edited':
61
+ return 're-evaluate';
62
+ case 'issue-comment-edited':
63
+ return 'ignore';
64
+ }
65
+ }
66
+ //# sourceMappingURL=intake-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intake-event.js","sourceRoot":"","sources":["../src/intake-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAsCH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACrD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,uBAAuB,CAAC;QAC7B,KAAK,mBAAmB;YACvB,OAAO,aAAa,CAAC;QACtB,KAAK,sBAAsB;YAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;AACF,CAAC"}
@@ -0,0 +1,95 @@
1
+ import type { IssueComment } from './issue-provider.js';
2
+ /**
3
+ * **The intake MARKER** (task `intake-self-awareness-resumption-tracking`, prd
4
+ * `issue-intake` US #2/#10): the ONE primitive the deterministic pre-decision
5
+ * TRIAGE GATE is built on. A machine-readable HIDDEN HTML comment intake stamps on
6
+ * EVERY comment it posts, recording a neutral FACT about what intake did:
7
+ *
8
+ * - `<!-- dorfl:intake kind=ask seen=412,418 -->`
9
+ * - `<!-- dorfl:intake kind=bounced seen=503 -->`
10
+ * - `<!-- dorfl:intake kind=created slug=<slug> seen=601,602 -->`
11
+ *
12
+ * (Namespace `${brand.base}:intake` is built from {@link brand} exactly like
13
+ * `PROCESSING_LOCK_LABEL`, so a rebrand updates it automatically.)
14
+ *
15
+ * It is the SOLE recovery signal — no sidecar, no cursor, no bot-identity. Intake
16
+ * recognises ITS OWN comments by the marker alone (provider-portable, survives
17
+ * posting under a human's token). Hidden HTML comments render as NOTHING on GitHub
18
+ * but are present in the raw markdown each comment's `body` carries — so the triage
19
+ * parses the marker straight out of {@link IssueComment.body}.
20
+ *
21
+ * What the marker records (DECIDED 2026-06-10):
22
+ *
23
+ * - **`kind`** \u2014 a NEUTRAL fact (`ask` / `bounced` / `created`). Whether a kind is
24
+ * TERMINAL is the TRIAGE's interpretation, NEVER data in the marker (no `terminal`
25
+ * field): if a kind's terminal-ness ever changes that is a triage change and old
26
+ * markers stay valid.
27
+ * - **`slug`** \u2014 present only on `kind=created` (which task/prd intake produced).
28
+ * - **`seen=<id>,\u2026`** \u2014 the per-run DELTA of HUMAN comment ids intake READ this run
29
+ * (EXCLUDING intake's own marker-comments AND any human id already in a prior
30
+ * marker's `seen=`). Ids, not a count, because a count cannot distinguish "a new
31
+ * comment appeared" from "an old one was deleted"; ids do both via set arithmetic.
32
+ * The full `seenSet` is the UNION of every marker's `seen=` (the CHAIN model).
33
+ *
34
+ * The grammar is SHARED so the dependent completion-comment task just stamps a
35
+ * `created` marker via {@link stampIntakeMarker}, which the triage's
36
+ * `already-terminal` branch then consumes.
37
+ */
38
+ /** The neutral KIND a marker records \u2014 a fact about what intake did (NOT terminal-ness). */
39
+ export type IntakeMarkerKind = 'ask' | 'bounced' | 'created';
40
+ /** A parsed intake marker \u2014 `kind` + the human ids it `seen=` + an optional `slug`. */
41
+ export interface IntakeMarker {
42
+ /** What intake did (a neutral fact; the TRIAGE owns terminal-ness, not this). */
43
+ kind: IntakeMarkerKind;
44
+ /** The HUMAN comment ids intake READ this run (the per-run delta; may be empty). */
45
+ seen: string[];
46
+ /** The created task/prd slug \u2014 present only on `kind=created`. */
47
+ slug?: string;
48
+ }
49
+ /**
50
+ * STAMP the intake marker onto a comment body intake is about to post (the SHARED
51
+ * producer for ALL of ask / bounced / created). Appends the hidden HTML comment
52
+ * AFTER the human-readable text, separated by a blank line, so the rendered comment
53
+ * is just the text (the marker is invisible) yet the raw markdown carries the
54
+ * marker for the triage to recover.
55
+ *
56
+ * `seen` is the per-run DELTA of human comment ids (computed by
57
+ * {@link computeSeenDelta}); it is emitted even when empty (`seen=`) so the grammar
58
+ * is uniform and the parser never has to special-case its absence. `slug` is
59
+ * emitted only for `kind=created`.
60
+ */
61
+ export declare function stampIntakeMarker(body: string, marker: {
62
+ kind: IntakeMarkerKind;
63
+ seen: string[];
64
+ slug?: string;
65
+ }): string;
66
+ /**
67
+ * Parse the FIRST intake marker out of a comment body (the SHARED consumer). Returns
68
+ * `undefined` when the body carries no intake marker \u2014 i.e. it is a HUMAN comment
69
+ * (the triage ranges its unseen-check over exactly these). A malformed marker (no
70
+ * `kind`, or an unknown `kind`) is treated as ABSENT rather than throwing: an
71
+ * unparseable hidden comment must never make the triage crash or misclassify a
72
+ * human comment as intake's.
73
+ */
74
+ export declare function parseIntakeMarker(body: string): IntakeMarker | undefined;
75
+ /** True iff the comment carries an intake marker \u2014 i.e. it is INTAKE's OWN comment. */
76
+ export declare function isIntakeComment(comment: IssueComment): boolean;
77
+ /**
78
+ * Compute the per-run `seen=` DELTA for a marker intake is about to stamp: the ids
79
+ * of the HUMAN comments in the thread as intake READ it, EXCLUDING (a) intake's own
80
+ * marker-comments (identified by carrying a marker) and (b) any human id ALREADY
81
+ * recorded in a prior intake marker's `seen=` (the chain model keeps each marker's
82
+ * `seen=` a bounded per-run delta; the union reconstructs the whole). Order follows
83
+ * `listComments`' oldest-first; ids with no value (a provider that omitted one) are
84
+ * dropped \u2014 the triage only reasons over ids it actually has.
85
+ */
86
+ export declare function computeSeenDelta(comments: IssueComment[]): string[];
87
+ /**
88
+ * Build the full `seenSet` for the TRIAGE: the UNION of every intake marker's
89
+ * `seen=` id-list in the thread (the chain model \u2014 each marker stores a per-run
90
+ * delta, the union reconstructs the complete set of human comments intake has EVER
91
+ * read). Ranges over intake's OWN comments (the ones carrying a marker); a human
92
+ * comment never carries a `seen=`.
93
+ */
94
+ export declare function seenSetFrom(comments: IssueComment[]): Set<string>;
95
+ //# sourceMappingURL=intake-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intake-marker.d.ts","sourceRoot":"","sources":["../src/intake-marker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,iGAAiG;AACjG,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,iFAAiF;IACjF,IAAI,EAAE,gBAAgB,CAAC;IACvB,oFAAoF;IACpF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAC7D,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAsBxE;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAE9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAiBnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAYjE"}