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,188 @@
1
+ import { type SelectCaps } from './select.js';
2
+ import type { ScanReport } from './scan.js';
3
+ import { type HumanOnlyGate } from './tasking-eligibility.js';
4
+ import { type SelectionOrderConfig } from './select-order.js';
5
+ /**
6
+ * The SHARED, PURE selection-and-ordering helper for the multi-item `do`/`advance`
7
+ * forms (auto-pick / `-n <x>` / `<a> <b> …`) and the CONFIGURABLE selection ORDER
8
+ * (task `advance-selection-order-config`; ADR `ci-config-policy-and-gate-family`,
9
+ * selection-order section). `apply` is PINNED FIRST (consume-always-wins); the
10
+ * other four pools (`build` / `task` / `surface` / `triage`) are ranked by the
11
+ * per-repo `selectionOrder` field (a PRESET keyword or an explicit pool-name
12
+ * list), whose `drain` default reproduces today's tasks-first "drain ready work
13
+ * before creating more".
14
+ *
15
+ * It is the ONE place the cross-pool ordering lives, so it is not duplicated when
16
+ * `run`'s tick later adopts the SAME priority
17
+ * (ADR §3: "the `run`/`do` auto-task step"). This task (`do-autopick`) OWNS and
18
+ * builds this helper; it does NOT retro-wire `run` to call it (at `do-autopick`
19
+ * time `run`'s tick is task-only — concurrent + looped — and adopting this
20
+ * helper, so `run` also auto-tasks eligible prds, is a noted FOLLOW-UP once both
21
+ * land). Build it standalone; do not assume `run` already calls it.
22
+ *
23
+ * **Up to FIVE pools.** The `scan`/`selectCandidates`/eligibility model is
24
+ * TASK-ONLY (there is no prd candidate). So this helper composes:
25
+ *
26
+ * - the **`build` pool** (eligible TASKS) — the EXISTING {@link selectCandidates}
27
+ * path (round-robin across repos, capped). This is the EXACT task-selection
28
+ * primitive `run` uses, so `run` and this helper SHARE it (they share
29
+ * `selectCandidates`, the task-pool core).
30
+ * - the **`task` pool** (prd-to-task) — a pool the caller builds from the prd reader
31
+ * (`ledgerRead.resolveSpecPool`) filtered by `autoslice-gate`'s pure predicate
32
+ * ({@link resolveTaskingEligibility}); see {@link taskableSpecs}. The helper
33
+ * does NOT reinvent prd eligibility.
34
+ *
35
+ * `do` is STRICTLY SEQUENTIAL (parallelism is `run`'s job, ADR §3) — this helper
36
+ * only ORDERS + COUNTS the items; the caller runs the existing `do` pipeline per
37
+ * item one at a time. `count` bounds how many items are taken (auto-pick = 1,
38
+ * `-n <x>` = x). It is NOT a parallelism knob.
39
+ */
40
+ /**
41
+ * Which namespace a selected item names (mirrors the slug-namespace split). The
42
+ * `do` selection only ever produces `task`/`prd`; the `advance` selection ALSO
43
+ * produces `observation` (the lifecycle triage pool, task
44
+ * `advance-autopick-lifecycle-pools`), so a selected lifecycle item carries which
45
+ * rung the driver dispatches to. The widening is BACKWARD-COMPATIBLE: `do` never
46
+ * emits `observation` (its lifecycle pools default to none, see
47
+ * {@link selectPrioritised}).
48
+ */
49
+ export type SelectedNamespace = 'task' | 'spec' | 'observation';
50
+ /** One item the selection layer picked, in run order. */
51
+ export interface SelectedItem {
52
+ /** The repo this item lives in (a working checkout for in-place `do`). */
53
+ repoPath: string;
54
+ /** The bare slug to act on. */
55
+ slug: string;
56
+ /**
57
+ * `'task'` ⇒ run the task-build `do` pipeline; `'spec'` ⇒ dispatch to the
58
+ * `do spec:<slug>` tasking path (tasking itself is `autoslice-command`, not
59
+ * here); `'observation'` ⇒ (advance only) the triage rung via `obs:<slug>`. The
60
+ * caller turns this into the right `do`/`advance` arg/dispatch.
61
+ */
62
+ namespace: SelectedNamespace;
63
+ }
64
+ /**
65
+ * A lifecycle-pool selected item (task `advance-autopick-lifecycle-pools`). It is
66
+ * a {@link SelectedItem} — the same shape — carrying the lifecycle namespace
67
+ * (`observation` for triage; `task`/`prd` for a `needsAnswers`-blocked item the
68
+ * tick will surface/apply). A distinct alias names the lifecycle pools at the
69
+ * call sites WITHOUT a structural difference (the discriminator is `namespace`).
70
+ */
71
+ export type LifecycleSelectedItem = SelectedItem;
72
+ /** A prd candidate for the tasking pool, before the eligibility gate runs. */
73
+ export interface SpecCandidate {
74
+ repoPath: string;
75
+ slug: string;
76
+ humanOnly: HumanOnlyGate;
77
+ needsAnswers: HumanOnlyGate;
78
+ taskedAfter: string[];
79
+ }
80
+ /** Inputs to {@link taskableSpecs}: the raw prd pool + the gate context. */
81
+ export interface TaskableSpecsInput {
82
+ /** Every prd enumerated from `work/prds/ready/` (the auto-task candidate source). */
83
+ candidates: SpecCandidate[];
84
+ /** Slugs whose prd resides in `work/prds/tasked/` (resolves `taskedAfter`). */
85
+ taskedSlugs: Set<string>;
86
+ /** The repo's resolved `autoTask` policy (`autoslice-gate`'s per-repo key). */
87
+ autoTask: boolean;
88
+ }
89
+ /**
90
+ * Filter a raw prd pool down to the TASKABLE prds, in declaration order, using
91
+ * `autoslice-gate`'s pure predicate ({@link resolveTaskingEligibility}) — NOT a
92
+ * reinvented eligibility model. A prd is taskable iff `needsAnswers !== true &&
93
+ * humanOnly !== true && autoTask` AND every `taskedAfter` prd is already tasked.
94
+ * Pure: no I/O (the caller reads the pool through `ledgerRead.resolveSpecPool`).
95
+ */
96
+ export declare function taskableSpecs(input: TaskableSpecsInput): SpecCandidate[];
97
+ /** Inputs to {@link selectPrioritised}: the pools + ordering + count. */
98
+ export interface SelectPrioritisedInput {
99
+ /**
100
+ * The task pool source — a `scan` report (task-only, the existing model) +
101
+ * the concurrency/selection caps. The helper runs the EXISTING
102
+ * {@link selectCandidates} over it, so the task ordering is byte-identical to
103
+ * what `run` selects (the shared primitive).
104
+ */
105
+ report: ScanReport;
106
+ /** Caps for the task-pool selection (round-robin/per-repo/total). */
107
+ caps: SelectCaps;
108
+ /**
109
+ * The ALREADY-FILTERED taskable spec pool (run {@link taskableSpecs} first).
110
+ * In declaration order; this helper does not re-gate them.
111
+ */
112
+ specs: SpecCandidate[];
113
+ /**
114
+ * The configurable selection ORDER across the four ORDERABLE pools (`build` /
115
+ * `task` / `surface` / `triage`), as a PRESET keyword or an explicit pool-name
116
+ * list (task `advance-selection-order-config`; the `selectionOrder` config
117
+ * field). Resolved through {@link resolveSelectionOrder} (apply is pinned first
118
+ * and NOT nameable here). OMITTED ⇒ the `drain` default (`[build, task,
119
+ * surface, triage]`), which reproduces today's tasks-first "drain before
120
+ * create" two-pool default. `[task, build, ...]` reproduces the old
121
+ * `prdsFirst: true`. An unknown name/keyword FAILS LOUDLY.
122
+ */
123
+ selectionOrder?: SelectionOrderConfig;
124
+ /**
125
+ * How many items to take across ALL pools, in priority order. Auto-pick = 1;
126
+ * `do -n <x>` = x. Unset ⇒ take ALL eligible items (the priority order is still
127
+ * applied). Sequential — NOT a parallelism knob.
128
+ */
129
+ count?: number;
130
+ /**
131
+ * The OPTIONAL lifecycle pools (task `advance-autopick-lifecycle-pools`),
132
+ * constructed CALLER-SIDE (the `advance` callers only) and passed in — exactly
133
+ * as {@link prds} is. DEFAULTS to none, so `performDoAuto` (which passes only
134
+ * its two pools) is provably UNCHANGED: `do` auto-pick never selects an
135
+ * observation or a `needsAnswers` item. ONLY the `advance` callers
136
+ * (`performAdvanceAuto` / the mirror-side advance path) supply these.
137
+ *
138
+ * Ordered per the resolved {@link selectionOrder}: `apply` is ALWAYS prepended
139
+ * (pinned first — consume-always-wins), then the four orderable pools (`build` /
140
+ * `task` / `surface` / `triage`) in the configured order, truncated to
141
+ * {@link count}. A pool NAMED in the order but absent here (gated off — empty)
142
+ * is simply a no-op (it contributes no items), so the gates (what is PRESENT)
143
+ * and `selectionOrder` (what runs first) compose ORTHOGONALLY.
144
+ */
145
+ lifecycle?: SelectedLifecyclePools;
146
+ /**
147
+ * The HELD-SLUG set to SUBTRACT from the `build` pool (eligible TASKS) — prd
148
+ * `ledger-status-per-item-lock-refs` US #15, task
149
+ * `claim-acquires-unified-lock-no-body-move`. A task whose per-item lock is
150
+ * currently held is dropped from selection, so the eligible pool is "in
151
+ * `backlog/` on `main` AND no lock held". Normally the `report` is already
152
+ * subtracted at {@link scoreItems} time (the readers gather held locks), so this
153
+ * is a SECOND, explicit guard for callers that build the report WITHOUT the
154
+ * subtraction; OMITTED ⇒ no extra filtering. Redundant-but-harmless while the
155
+ * body still moves to `in-progress/`; in force for task #9.
156
+ */
157
+ heldSlugs?: Set<string>;
158
+ }
159
+ /** The (optional) lifecycle pools handed to {@link selectPrioritised}, pre-built. */
160
+ export interface SelectedLifecyclePools {
161
+ /** `apply` items (answered sidecars; CONSUME, always present when supplied). */
162
+ apply: LifecycleSelectedItem[];
163
+ /** `surface` items (blocked, no all-answered sidecar; already gate-filtered). */
164
+ surface: LifecycleSelectedItem[];
165
+ /** `triage` items (untriaged observations; already gate-filtered). */
166
+ triage: LifecycleSelectedItem[];
167
+ }
168
+ /**
169
+ * Build the ordered, counted list of items to do across the (up to) FIVE pools,
170
+ * applying the configurable {@link selectionOrder} with `apply` PINNED FIRST and
171
+ * the count bound. The task pool is selected via the EXISTING
172
+ * {@link selectCandidates} (the shared primitive `run` uses); the prd pool is the
173
+ * pre-filtered {@link taskableSpecs} output; the lifecycle pools (`apply` /
174
+ * `surface` / `triage`) are caller-built (none for `do`).
175
+ *
176
+ * Ordering: `apply` is always prepended (consume-always-wins; not orderable),
177
+ * then the four orderable pools (`build` = eligible tasks, `task` = taskable
178
+ * prds, `surface`, `triage`) interleaved in the resolved {@link selectionOrder}
179
+ * (default `drain` = `[build, task, surface, triage]`, which reproduces today's
180
+ * tasks-first two-pool default). A pool named in the order but EMPTY (gated off)
181
+ * contributes nothing — a no-op, not an error (gates decide what is PRESENT,
182
+ * `selectionOrder` ranks what is present). Then truncated to `count`.
183
+ *
184
+ * Deterministic + pure. The caller runs the existing `do` pipeline per returned
185
+ * item, SEQUENTIALLY.
186
+ */
187
+ export declare function selectPrioritised(input: SelectPrioritisedInput): SelectedItem[];
188
+ //# sourceMappingURL=select-priority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-priority.d.ts","sourceRoot":"","sources":["../src/select-priority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,UAAU,EAAC,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAC1C,OAAO,EAEN,KAAK,aAAa,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIN,KAAK,oBAAoB,EACzB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEhE,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC5B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,SAAS,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAEjD,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,aAAa,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IAClC,qFAAqF;IACrF,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,EAAE,CAWxE;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACtC;;;;;OAKG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,qEAAqE;IACrE,IAAI,EAAE,UAAU,CAAC;IACjB;;;OAGG;IACH,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,qFAAqF;AACrF,MAAM,WAAW,sBAAsB;IACtC,gFAAgF;IAChF,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,iFAAiF;IACjF,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,sEAAsE;IACtE,MAAM,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,sBAAsB,GAC3B,YAAY,EAAE,CAgDhB"}
@@ -0,0 +1,80 @@
1
+ import { selectCandidates } from './select.js';
2
+ import { resolveTaskingEligibility, } from './tasking-eligibility.js';
3
+ import { resolveSelectionOrder, DEFAULT_SELECTION_ORDER, } from './select-order.js';
4
+ /**
5
+ * Filter a raw prd pool down to the TASKABLE prds, in declaration order, using
6
+ * `autoslice-gate`'s pure predicate ({@link resolveTaskingEligibility}) — NOT a
7
+ * reinvented eligibility model. A prd is taskable iff `needsAnswers !== true &&
8
+ * humanOnly !== true && autoTask` AND every `taskedAfter` prd is already tasked.
9
+ * Pure: no I/O (the caller reads the pool through `ledgerRead.resolveSpecPool`).
10
+ */
11
+ export function taskableSpecs(input) {
12
+ return input.candidates.filter((spec) => resolveTaskingEligibility({
13
+ humanOnly: spec.humanOnly,
14
+ needsAnswers: spec.needsAnswers,
15
+ taskedAfter: spec.taskedAfter,
16
+ taskedSlugs: input.taskedSlugs,
17
+ autoTask: input.autoTask,
18
+ }).taskable);
19
+ }
20
+ /**
21
+ * Build the ordered, counted list of items to do across the (up to) FIVE pools,
22
+ * applying the configurable {@link selectionOrder} with `apply` PINNED FIRST and
23
+ * the count bound. The task pool is selected via the EXISTING
24
+ * {@link selectCandidates} (the shared primitive `run` uses); the prd pool is the
25
+ * pre-filtered {@link taskableSpecs} output; the lifecycle pools (`apply` /
26
+ * `surface` / `triage`) are caller-built (none for `do`).
27
+ *
28
+ * Ordering: `apply` is always prepended (consume-always-wins; not orderable),
29
+ * then the four orderable pools (`build` = eligible tasks, `task` = taskable
30
+ * prds, `surface`, `triage`) interleaved in the resolved {@link selectionOrder}
31
+ * (default `drain` = `[build, task, surface, triage]`, which reproduces today's
32
+ * tasks-first two-pool default). A pool named in the order but EMPTY (gated off)
33
+ * contributes nothing — a no-op, not an error (gates decide what is PRESENT,
34
+ * `selectionOrder` ranks what is present). Then truncated to `count`.
35
+ *
36
+ * Deterministic + pure. The caller runs the existing `do` pipeline per returned
37
+ * item, SEQUENTIALLY.
38
+ */
39
+ export function selectPrioritised(input) {
40
+ const held = input.heldSlugs;
41
+ const buildItems = selectCandidates(input.report, input.caps)
42
+ .filter((candidate) => !held || !held.has(candidate.slug))
43
+ .map((candidate) => ({
44
+ repoPath: candidate.repoPath,
45
+ slug: candidate.slug,
46
+ namespace: 'task',
47
+ }));
48
+ const taskItems = input.specs.map((spec) => ({
49
+ repoPath: spec.repoPath,
50
+ slug: spec.slug,
51
+ namespace: 'spec',
52
+ }));
53
+ const lifecycle = input.lifecycle;
54
+ // The per-pool item lists, keyed by the orderable pool name. NOTE the
55
+ // vocabulary bridge: `build` = the eligible-TASK pool (namespace `task`),
56
+ // `task` = the taskable-prd pool (namespace `prd`) — the action names, not the
57
+ // item namespaces (task `advance-selection-order-config`).
58
+ const byPool = {
59
+ build: buildItems,
60
+ task: taskItems,
61
+ surface: lifecycle?.surface ?? [],
62
+ triage: lifecycle?.triage ?? [],
63
+ };
64
+ // Resolve the configured order (preset or explicit list; unknown name/keyword
65
+ // FAILS LOUDLY here). OMITTED ⇒ the `drain` default.
66
+ const order = resolveSelectionOrder(input.selectionOrder ?? DEFAULT_SELECTION_ORDER);
67
+ // `apply` is ALWAYS first (pinned, not orderable), then the four orderable
68
+ // pools in the resolved order. An absent (gated-off) pool's list is empty, so it
69
+ // drops out cleanly — no special-casing.
70
+ const applyItems = lifecycle?.apply ?? [];
71
+ const ordered = [
72
+ ...applyItems,
73
+ ...order.flatMap((pool) => byPool[pool]),
74
+ ];
75
+ if (input.count === undefined) {
76
+ return ordered;
77
+ }
78
+ return ordered.slice(0, Math.max(0, input.count));
79
+ }
80
+ //# sourceMappingURL=select-priority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-priority.js","sourceRoot":"","sources":["../src/select-priority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAkC,MAAM,aAAa,CAAC;AAE9E,OAAO,EACN,yBAAyB,GAEzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,qBAAqB,EACrB,uBAAuB,GAGvB,MAAM,mBAAmB,CAAC;AA4F3B;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACtD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAC7B,CAAC,IAAI,EAAE,EAAE,CACR,yBAAyB,CAAC;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,CAAC,CAAC,QAAQ,CACZ,CAAC;AACH,CAAC;AA2ED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAChC,KAA6B;IAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAmB,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;SAC3E,MAAM,CAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACpE,GAAG,CAAC,CAAC,SAAoB,EAAE,EAAE,CAAC,CAAC;QAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,SAAS,EAAE,MAAe;KAC1B,CAAC,CAAC,CAAC;IAEL,MAAM,SAAS,GAAmB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,MAAe;KAC1B,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,sEAAsE;IACtE,0EAA0E;IAC1E,+EAA+E;IAC/E,2DAA2D;IAC3D,MAAM,MAAM,GAA0C;QACrD,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE;KAC/B,CAAC;IAEF,8EAA8E;IAC9E,qDAAqD;IACrD,MAAM,KAAK,GAAG,qBAAqB,CAClC,KAAK,CAAC,cAAc,IAAI,uBAAuB,CAC/C,CAAC;IAEF,2EAA2E;IAC3E,iFAAiF;IACjF,yCAAyC;IACzC,MAAM,UAAU,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAmB;QAC/B,GAAG,UAAU;QACb,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ScanReport } from './scan.js';
2
+ /** One item the runner intends to claim+run, identified by repo + slug. */
3
+ export interface Candidate {
4
+ repoPath: string;
5
+ slug: string;
6
+ }
7
+ export interface SelectCaps {
8
+ /** Global cap on items claimed+run in one tick. */
9
+ maxParallel: number;
10
+ /** Per-repo cap on concurrent claims. */
11
+ perRepoMax: number;
12
+ }
13
+ /**
14
+ * Build the ordered list of candidates to attempt from a `scan` report,
15
+ * respecting the concurrency caps. Only eligible items are considered. Selection
16
+ * is round-robin across repos for fairness (so a single busy repo cannot starve
17
+ * the others under `maxParallel`), capping each repo at `perRepoMax` and the
18
+ * total at `maxParallel`. Deterministic: repos and items are already sorted by
19
+ * the scan core.
20
+ *
21
+ * NOTE: this is optimistic selection only — actual ownership is decided by the
22
+ * arbiter when the claim CAS runs. A candidate that loses the race is dropped then.
23
+ */
24
+ export declare function selectCandidates(report: ScanReport, caps: SelectCaps): Candidate[];
25
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IAC1B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,GACd,SAAS,EAAE,CAgCb"}
package/dist/select.js ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Build the ordered list of candidates to attempt from a `scan` report,
3
+ * respecting the concurrency caps. Only eligible items are considered. Selection
4
+ * is round-robin across repos for fairness (so a single busy repo cannot starve
5
+ * the others under `maxParallel`), capping each repo at `perRepoMax` and the
6
+ * total at `maxParallel`. Deterministic: repos and items are already sorted by
7
+ * the scan core.
8
+ *
9
+ * NOTE: this is optimistic selection only — actual ownership is decided by the
10
+ * arbiter when the claim CAS runs. A candidate that loses the race is dropped then.
11
+ */
12
+ export function selectCandidates(report, caps) {
13
+ // Per-repo queues of eligible slugs, preserving scan order.
14
+ const queues = report.repos.map((repo) => ({
15
+ path: repo.path,
16
+ slugs: repo.items
17
+ .filter((item) => item.eligibility.eligible)
18
+ .map((item) => item.slug),
19
+ taken: 0,
20
+ }));
21
+ const picks = [];
22
+ let progress = true;
23
+ while (picks.length < caps.maxParallel && progress) {
24
+ progress = false;
25
+ for (const queue of queues) {
26
+ if (picks.length >= caps.maxParallel) {
27
+ break;
28
+ }
29
+ if (queue.taken >= caps.perRepoMax) {
30
+ continue;
31
+ }
32
+ const next = queue.slugs[queue.taken];
33
+ if (next === undefined) {
34
+ continue;
35
+ }
36
+ picks.push({ repoPath: queue.path, slug: next });
37
+ queue.taken++;
38
+ progress = true;
39
+ }
40
+ }
41
+ return picks;
42
+ }
43
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAkB,EAClB,IAAgB;IAEhB,4DAA4D;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;aACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,CAAC;KACR,CAAC,CAAC,CAAC;IAEJ,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;QACpD,QAAQ,GAAG,KAAK,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM;YACP,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,SAAS;YACV,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACxB,SAAS;YACV,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC;QACjB,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * pi's DEFAULT per-cwd sessions folder for `cwd` — a direct child of
3
+ * `~/.pi/agent/sessions/` (invariant #4), so the dashboard's non-recursive
4
+ * `listAll()` scans it and groups by the session header `cwd`. Replicates pi's
5
+ * `getDefaultSessionDirPath` encoding verbatim (verified vs pinned source). PURE
6
+ * (does not create the folder — the parent is ensured at generation time / by
7
+ * pi's own `SessionManager.open`).
8
+ */
9
+ export declare function piDefaultSessionDir(cwd: string): string;
10
+ /** Inputs to {@link generateSessionPath}. */
11
+ export interface GenerateSessionPathInput {
12
+ /**
13
+ * The HOST-ONLY sessions root (resolved `config.sessionsDir`). `undefined`
14
+ * (unset) ⇒ pi's default per-cwd folder for {@link cwd} (the DYNAMIC default,
15
+ * kept in this ONE place — never smeared across config defaulting).
16
+ */
17
+ sessionsDir?: string;
18
+ /** The job cwd pi is spawned in — used for the unset-default folder. */
19
+ cwd: string;
20
+ /**
21
+ * A human-readable id for the filename stem (the slug in-place, the work-id
22
+ * for a job worktree). Made unique per launch internally.
23
+ */
24
+ id: string;
25
+ }
26
+ /**
27
+ * Generate the absolute, `.jsonl`-ending session FILE path to pass as
28
+ * `--session <path>` (invariant #1). `<root>/<id>-<unique>.jsonl`, where `<root>`
29
+ * is the resolved `sessionsDir` or — when unset — pi's default per-cwd folder
30
+ * (the DYNAMIC default). The path is ABSOLUTE (resolved against the process cwd
31
+ * if a relative `sessionsDir` was given) and the stem is unique per launch, so a
32
+ * second launch in the same checkout never appends to / replays the first's
33
+ * session.
34
+ */
35
+ export declare function generateSessionPath(input: GenerateSessionPathInput): string;
36
+ //# sourceMappingURL=session-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-path.d.ts","sourceRoot":"","sources":["../src/session-path.ts"],"names":[],"mappings":"AA8FA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvD;AAcD,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAM3E"}
@@ -0,0 +1,129 @@
1
+ import { homedir } from 'node:os';
2
+ import { join, resolve } from 'node:path';
3
+ /**
4
+ * pi's env override for its agent dir. Real pi reads
5
+ * `${APP_NAME.toUpperCase()}_CODING_AGENT_DIR` (i.e. `PI_CODING_AGENT_DIR`) in its
6
+ * `getAgentDir()` (verified vs pinned source `config.ts`); when set, ALL of pi's
7
+ * default session paths move under it. dorfl's replica MUST honour the same
8
+ * var, or a user/CI that points pi at a custom agent dir would have dorfl
9
+ * write sessions to `~/.pi/agent/sessions` while pi reads the custom dir — sessions
10
+ * then invisible to pi AND pi-remote (the very breakage this task fixes). Also the
11
+ * clean lever for test isolation (point it at a scratch dir). NOTE: we honour only
12
+ * the agent-dir var, not pi's separate `PI_CODING_AGENT_SESSION_DIR` — dorfl
13
+ * already has its own `sessionsDir` override for that role.
14
+ */
15
+ const PI_AGENT_DIR_ENV = 'PI_CODING_AGENT_DIR';
16
+ /** Expand a leading `~`/`~/` to the home dir (pi's `expandTildePath` behaviour). */
17
+ function expandTilde(p) {
18
+ if (p === '~') {
19
+ return homedir();
20
+ }
21
+ if (p.startsWith('~/') || p.startsWith('~\\')) {
22
+ return join(homedir(), p.slice(2));
23
+ }
24
+ return p;
25
+ }
26
+ /**
27
+ * Generate the **full pi session-file path** the harness passes as `--session
28
+ * <path>` (task `session-path-pi-default`). This is the single source of the
29
+ * session path: the caller generates it ONCE (before pi launches, so the
30
+ * `do --watch` tailer can tail the KNOWN path) and threads it into BOTH the
31
+ * adapter (`LaunchInput.session`) and the tailer.
32
+ *
33
+ * ## Why a full FILE path, not `--session-dir`
34
+ *
35
+ * dorfl used to pin `--session-dir <cwd>/.dorfl-pi-session`, which
36
+ * (1) hid sessions from the pi-remote dashboard (`SessionManager.listAll()` only
37
+ * scans `~/.pi/agent/sessions/`), (2) made `do --watch` race onto a stale
38
+ * prior-run log (newest-by-mtime in a shared dir), and (3) polluted the in-place
39
+ * checkout with an untracked dir. Passing `--session <full-path>` fixes all
40
+ * three: pi creates+writes the session at exactly that path, it takes precedence
41
+ * over `--session-dir`, and the watcher tails a path it knew before pi started.
42
+ *
43
+ * ## The four load-bearing pi `--session` invariants (verified vs pinned pi
44
+ * source `core/session-manager.ts` + `main.ts` `resolveSessionPath`)
45
+ *
46
+ * 1. **The arg MUST be PATH-SHAPED — absolute and ending `.jsonl`.** pi's
47
+ * `resolveSessionPath` takes the file-path branch ONLY when the arg contains
48
+ * a slash OR ends `.jsonl`; otherwise it treats the arg as a session-ID to
49
+ * look up, fails `not_found`, and pi EXITS 1. So `<sessionsDir>/<id>.jsonl`
50
+ * is required (a bare id would kill the run).
51
+ * 2. **pi creates+writes a NON-EXISTENT `--session` path** (`SessionManager.open`
52
+ * on a missing file → `newSession()` pinned to the path). So the FILENAME
53
+ * must be UNIQUE PER LAUNCH: a reused name on an existing non-empty file would
54
+ * make pi LOAD + APPEND (resume), silently replaying the prior run.
55
+ * 3. **The header `cwd` falls back to `process.cwd()` for a new file** (no header
56
+ * to read), so dashboard repo-grouping is correct ONLY because the adapter
57
+ * spawns pi with `cwd: input.dir`. The FOLDER does not imply the repo.
58
+ * 4. **`listAll` is NON-RECURSIVE (one level):** a session is dashboard-visible
59
+ * via the default `listAll()` ONLY as a `.jsonl` DIRECTLY inside a first-level
60
+ * subdir of `~/.pi/agent/sessions/` — which the default {@link
61
+ * piDefaultSessionDir} (a direct child) gives.
62
+ *
63
+ * ## Why the slug helper is replicated, not imported
64
+ *
65
+ * dorfl depends ONLY on `commander` (see
66
+ * `work/notes/observations/task-premise-pi-coding-agent-not-a-dep.md`). pi's exported
67
+ * `getDefaultSessionDir(cwd)` lives in `@earendil-works/pi-coding-agent`, whose
68
+ * dependency tree is heavy (`pi-agent-core`, `pi-ai`, `zod`, `ws`). Pulling that
69
+ * in for one tiny slug function is not worth it, so the encoding is REPLICATED
70
+ * here (the same choice the do-watch task made for its session-log type). The
71
+ * encoding is verified verbatim against pinned pi source `getDefaultSessionDirPath`:
72
+ *
73
+ * join(agentDir, 'sessions', `--${resolve(cwd).replace(/^[/\\]/,'').replace(/[/\\:]/g,'-')}--`)
74
+ *
75
+ * where `agentDir` is `~/.pi/agent`. If a runtime dep on pi-coding-agent is ever
76
+ * wanted, swapping this for the import is a one-line change.
77
+ */
78
+ /**
79
+ * pi's agent dir — the parent of `sessions/`. Honours `PI_CODING_AGENT_DIR`
80
+ * (matching real pi's `getAgentDir()`), else `~/.pi/agent`. Read at call time (not
81
+ * cached) so a test setting `process.env.PI_CODING_AGENT_DIR` is respected.
82
+ */
83
+ function piAgentDir() {
84
+ const override = process.env[PI_AGENT_DIR_ENV];
85
+ if (override !== undefined && override !== '') {
86
+ return expandTilde(override);
87
+ }
88
+ return join(homedir(), '.pi', 'agent');
89
+ }
90
+ /**
91
+ * pi's DEFAULT per-cwd sessions folder for `cwd` — a direct child of
92
+ * `~/.pi/agent/sessions/` (invariant #4), so the dashboard's non-recursive
93
+ * `listAll()` scans it and groups by the session header `cwd`. Replicates pi's
94
+ * `getDefaultSessionDirPath` encoding verbatim (verified vs pinned source). PURE
95
+ * (does not create the folder — the parent is ensured at generation time / by
96
+ * pi's own `SessionManager.open`).
97
+ */
98
+ export function piDefaultSessionDir(cwd) {
99
+ const resolvedCwd = resolve(cwd);
100
+ const safe = `--${resolvedCwd.replace(/^[/\\]/, '').replace(/[/\\:]/g, '-')}--`;
101
+ return join(piAgentDir(), 'sessions', safe);
102
+ }
103
+ /**
104
+ * Build a filename STEM that is UNIQUE PER LAUNCH (invariant #2). The `id`
105
+ * (slug for in-place, work-id for job-worktree) is the human-readable anchor; a
106
+ * timestamp + a short random suffix make it collision-proof even for two
107
+ * launches in the same millisecond / same checkout reusing the same slug.
108
+ */
109
+ function uniqueStem(id) {
110
+ const ts = Date.now().toString(36);
111
+ const rand = Math.random().toString(36).slice(2, 8);
112
+ return `${id}-${ts}-${rand}`;
113
+ }
114
+ /**
115
+ * Generate the absolute, `.jsonl`-ending session FILE path to pass as
116
+ * `--session <path>` (invariant #1). `<root>/<id>-<unique>.jsonl`, where `<root>`
117
+ * is the resolved `sessionsDir` or — when unset — pi's default per-cwd folder
118
+ * (the DYNAMIC default). The path is ABSOLUTE (resolved against the process cwd
119
+ * if a relative `sessionsDir` was given) and the stem is unique per launch, so a
120
+ * second launch in the same checkout never appends to / replays the first's
121
+ * session.
122
+ */
123
+ export function generateSessionPath(input) {
124
+ const root = input.sessionsDir !== undefined && input.sessionsDir !== ''
125
+ ? resolve(input.sessionsDir)
126
+ : piDefaultSessionDir(input.cwd);
127
+ return join(root, `${uniqueStem(input.id)}.jsonl`);
128
+ }
129
+ //# sourceMappingURL=session-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-path.js","sourceRoot":"","sources":["../src/session-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAE/C,oFAAoF;AACpF,SAAS,WAAW,CAAC,CAAS;IAC7B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACf,OAAO,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH;;;;GAIG;AACH,SAAS,UAAU;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC;IAChF,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,EAAU;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;AAC9B,CAAC;AAmBD;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IAClE,MAAM,IAAI,GACT,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE;QAC1D,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;QAC5B,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type SidecarModel } from './sidecar.js';
2
+ /**
3
+ * The ATOMIC APPLY — the keystone the advance state-machine invariant
4
+ * `needsAnswers:false ⟺ no active sidecar` rests on. It mutates the item BODY
5
+ * and the SIDECAR in ONE commit, so the human never sees a torn "answer applied
6
+ * but sidecar still open" (a re-ask) or its reverse.
7
+ *
8
+ * Two shapes, both ONE commit:
9
+ *
10
+ * - **append / re-pause** (the sidecar is NOT fully answered after this apply):
11
+ * write the updated item body (if any) and the updated sidecar, leaving
12
+ * `needsAnswers: true`. The sidecar stays present (still carries pending
13
+ * questions).
14
+ * - **full resolution** (every entry answered): write the updated item body,
15
+ * CLEAR `needsAnswers` (→ `false`) on the item, and DELETE the sidecar — all
16
+ * in the SAME commit. After this the invariant holds: `needsAnswers:false`
17
+ * and no sidecar file.
18
+ *
19
+ * This task delivers the single-commit primitive over a working tree (the
20
+ * throwaway-git-repo pattern the tasking-lock / claim-cas tests use). It does
21
+ * NOT take the `advancing` CAS lock or race the arbiter — that is the lock
22
+ * task's job; this is the contract the lock later wraps. The caller supplies
23
+ * the item's CURRENT body and its on-disk PATH (relative to the repo root); the
24
+ * apply rewrites that file + the sidecar and commits them together.
25
+ */
26
+ /** Whether to leave the sidecar present (re-pause) or delete it (resolved). */
27
+ export type ApplyMode = 'repause' | 'resolve';
28
+ export interface ApplyAtomicOptions {
29
+ /** Working clone/worktree the apply commits in. */
30
+ cwd: string;
31
+ /**
32
+ * Item path RELATIVE to `cwd` (e.g. `work/backlog/foo.md`). The sidecar path
33
+ * is derived from the model's identity — NOT from this path — so it survives
34
+ * the item's `git mv`s (identity-keyed, never folder-keyed).
35
+ */
36
+ itemPath: string;
37
+ /**
38
+ * The NEW item body to write (the apply rung's mutation of the item). When
39
+ * omitted the item body is left as-is on disk (only `needsAnswers` is touched,
40
+ * and only on full resolution).
41
+ */
42
+ itemBody?: string;
43
+ /** The sidecar model after this apply (entries updated/appended). */
44
+ sidecar: SidecarModel;
45
+ /**
46
+ * Override the resolution decision. By default it is DERIVED from the model
47
+ * (`allAnswered(sidecar)` ⇒ resolve, else re-pause) — the source of truth. An
48
+ * explicit `mode` is for the caller that already classified; it must agree
49
+ * with the derived state or the apply throws (no torn invariant).
50
+ */
51
+ mode?: ApplyMode;
52
+ /** Advisory committer id for the commit subject. Defaults to git user.name. */
53
+ by?: string;
54
+ /** Environment for child git processes. */
55
+ env?: NodeJS.ProcessEnv;
56
+ /** Sink for human-readable progress notes. */
57
+ note?: (message: string) => void;
58
+ }
59
+ export interface ApplyAtomicResult {
60
+ /** `resolved` (sidecar deleted, needsAnswers cleared) or `repaused` (still open). */
61
+ outcome: 'resolved' | 'repaused';
62
+ /** The commit sha the apply produced. */
63
+ commit: string;
64
+ /** The sidecar path (relative to `cwd`) the apply touched. */
65
+ sidecarPath: string;
66
+ }
67
+ /** Raised for usage errors (a torn mode, a missing repo). */
68
+ export declare class ApplyAtomicError extends Error {
69
+ constructor(message: string);
70
+ }
71
+ /**
72
+ * Apply an answer batch ATOMICALLY: rewrite the item body + the sidecar in ONE
73
+ * commit, and on full resolution clear `needsAnswers` AND delete the sidecar in
74
+ * that SAME commit. Returns the produced commit + the outcome.
75
+ *
76
+ * The resolution decision is DERIVED from the model (`allAnswered` ⇒ resolve) —
77
+ * the entries are the source of truth, never the frontmatter mirror. A supplied
78
+ * {@link ApplyAtomicOptions.mode} must AGREE with that derived state, else the
79
+ * apply throws (it refuses to publish a torn invariant: a `resolve` that leaves
80
+ * pending entries, or a `repause` that leaves none).
81
+ */
82
+ export declare function applyAtomic(options: ApplyAtomicOptions): ApplyAtomicResult;
83
+ //# sourceMappingURL=sidecar-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar-apply.d.ts","sourceRoot":"","sources":["../src/sidecar-apply.ts"],"names":[],"mappings":"AAIA,OAAO,EAIN,KAAK,YAAY,EACjB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,+EAA+E;AAC/E,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IAClC,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IACjC,qFAAqF;IACrF,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC;IACjC,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI3B;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAgE1E"}