looply-cli 0.0.0-stage → 0.2.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 (785) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -3
  3. package/dist/.src-hash +1 -0
  4. package/dist/acceptance-observe.d.ts +108 -0
  5. package/dist/acceptance-observe.d.ts.map +1 -0
  6. package/dist/acceptance-observe.js +152 -0
  7. package/dist/acceptance-observe.js.map +1 -0
  8. package/dist/agent-cmd.d.ts +131 -0
  9. package/dist/agent-cmd.d.ts.map +1 -0
  10. package/dist/agent-cmd.js +154 -0
  11. package/dist/agent-cmd.js.map +1 -0
  12. package/dist/agent-contained.d.ts +114 -0
  13. package/dist/agent-contained.d.ts.map +1 -0
  14. package/dist/agent-contained.js +292 -0
  15. package/dist/agent-contained.js.map +1 -0
  16. package/dist/agent-driver.d.ts +130 -0
  17. package/dist/agent-driver.d.ts.map +1 -0
  18. package/dist/agent-driver.js +170 -0
  19. package/dist/agent-driver.js.map +1 -0
  20. package/dist/agent-envelope.d.ts +94 -0
  21. package/dist/agent-envelope.d.ts.map +1 -0
  22. package/dist/agent-envelope.js +214 -0
  23. package/dist/agent-envelope.js.map +1 -0
  24. package/dist/agent-exec.d.ts +182 -0
  25. package/dist/agent-exec.d.ts.map +1 -0
  26. package/dist/agent-exec.js +125 -0
  27. package/dist/agent-exec.js.map +1 -0
  28. package/dist/agent-runtime.d.ts +23 -0
  29. package/dist/agent-runtime.d.ts.map +1 -0
  30. package/dist/agent-runtime.js +143 -0
  31. package/dist/agent-runtime.js.map +1 -0
  32. package/dist/approval-gate-read.d.ts +66 -0
  33. package/dist/approval-gate-read.d.ts.map +1 -0
  34. package/dist/approval-gate-read.js +138 -0
  35. package/dist/approval-gate-read.js.map +1 -0
  36. package/dist/approval-resolution.d.ts +87 -0
  37. package/dist/approval-resolution.d.ts.map +1 -0
  38. package/dist/approval-resolution.js +100 -0
  39. package/dist/approval-resolution.js.map +1 -0
  40. package/dist/approval-resumes.d.ts +102 -0
  41. package/dist/approval-resumes.d.ts.map +1 -0
  42. package/dist/approval-resumes.js +167 -0
  43. package/dist/approval-resumes.js.map +1 -0
  44. package/dist/ask-brain.d.ts +167 -0
  45. package/dist/ask-brain.d.ts.map +1 -0
  46. package/dist/ask-brain.js +355 -0
  47. package/dist/ask-brain.js.map +1 -0
  48. package/dist/autonomy-authority.d.ts +80 -0
  49. package/dist/autonomy-authority.d.ts.map +1 -0
  50. package/dist/autonomy-authority.js +82 -0
  51. package/dist/autonomy-authority.js.map +1 -0
  52. package/dist/autonomy-controller.d.ts +321 -0
  53. package/dist/autonomy-controller.d.ts.map +1 -0
  54. package/dist/autonomy-controller.js +517 -0
  55. package/dist/autonomy-controller.js.map +1 -0
  56. package/dist/autonomy-store.d.ts +327 -0
  57. package/dist/autonomy-store.d.ts.map +1 -0
  58. package/dist/autonomy-store.js +581 -0
  59. package/dist/autonomy-store.js.map +1 -0
  60. package/dist/autonomy-tick.d.ts +257 -0
  61. package/dist/autonomy-tick.d.ts.map +1 -0
  62. package/dist/autonomy-tick.js +616 -0
  63. package/dist/autonomy-tick.js.map +1 -0
  64. package/dist/bin.d.ts +3 -0
  65. package/dist/bin.d.ts.map +1 -0
  66. package/dist/bin.js +2719 -0
  67. package/dist/bin.js.map +1 -0
  68. package/dist/brain-advice.d.ts +21 -0
  69. package/dist/brain-advice.d.ts.map +1 -0
  70. package/dist/brain-advice.js +51 -0
  71. package/dist/brain-advice.js.map +1 -0
  72. package/dist/candidate-replay-runtime.d.ts +125 -0
  73. package/dist/candidate-replay-runtime.d.ts.map +1 -0
  74. package/dist/candidate-replay-runtime.js +188 -0
  75. package/dist/candidate-replay-runtime.js.map +1 -0
  76. package/dist/checkout-carry.d.ts +76 -0
  77. package/dist/checkout-carry.d.ts.map +1 -0
  78. package/dist/checkout-carry.js +125 -0
  79. package/dist/checkout-carry.js.map +1 -0
  80. package/dist/citation-readers.d.ts +26 -0
  81. package/dist/citation-readers.d.ts.map +1 -0
  82. package/dist/citation-readers.js +102 -0
  83. package/dist/citation-readers.js.map +1 -0
  84. package/dist/command-receipts.d.ts +79 -0
  85. package/dist/command-receipts.d.ts.map +1 -0
  86. package/dist/command-receipts.js +143 -0
  87. package/dist/command-receipts.js.map +1 -0
  88. package/dist/command-runner.d.ts +32 -0
  89. package/dist/command-runner.d.ts.map +1 -0
  90. package/dist/command-runner.js +108 -0
  91. package/dist/command-runner.js.map +1 -0
  92. package/dist/compatible-sets.d.ts +67 -0
  93. package/dist/compatible-sets.d.ts.map +1 -0
  94. package/dist/compatible-sets.js +81 -0
  95. package/dist/compatible-sets.js.map +1 -0
  96. package/dist/compile-check.d.ts +31 -0
  97. package/dist/compile-check.d.ts.map +1 -0
  98. package/dist/compile-check.js +34 -0
  99. package/dist/compile-check.js.map +1 -0
  100. package/dist/compile-store.d.ts +16 -0
  101. package/dist/compile-store.d.ts.map +1 -0
  102. package/dist/compile-store.js +21 -0
  103. package/dist/compile-store.js.map +1 -0
  104. package/dist/completion.d.ts +106 -0
  105. package/dist/completion.d.ts.map +1 -0
  106. package/dist/completion.js +131 -0
  107. package/dist/completion.js.map +1 -0
  108. package/dist/config.d.ts +549 -0
  109. package/dist/config.d.ts.map +1 -0
  110. package/dist/config.js +763 -0
  111. package/dist/config.js.map +1 -0
  112. package/dist/control-file.d.ts +142 -0
  113. package/dist/control-file.d.ts.map +1 -0
  114. package/dist/control-file.js +144 -0
  115. package/dist/control-file.js.map +1 -0
  116. package/dist/coordinator-state.d.ts +131 -0
  117. package/dist/coordinator-state.d.ts.map +1 -0
  118. package/dist/coordinator-state.js +380 -0
  119. package/dist/coordinator-state.js.map +1 -0
  120. package/dist/coordinator.d.ts +95 -0
  121. package/dist/coordinator.d.ts.map +1 -0
  122. package/dist/coordinator.js +97 -0
  123. package/dist/coordinator.js.map +1 -0
  124. package/dist/cursor-store.d.ts +53 -0
  125. package/dist/cursor-store.d.ts.map +1 -0
  126. package/dist/cursor-store.js +98 -0
  127. package/dist/cursor-store.js.map +1 -0
  128. package/dist/daemon-cmd.d.ts +239 -0
  129. package/dist/daemon-cmd.d.ts.map +1 -0
  130. package/dist/daemon-cmd.js +1751 -0
  131. package/dist/daemon-cmd.js.map +1 -0
  132. package/dist/daemon-lock.d.ts +140 -0
  133. package/dist/daemon-lock.d.ts.map +1 -0
  134. package/dist/daemon-lock.js +352 -0
  135. package/dist/daemon-lock.js.map +1 -0
  136. package/dist/daemon-recovery.d.ts +78 -0
  137. package/dist/daemon-recovery.d.ts.map +1 -0
  138. package/dist/daemon-recovery.js +161 -0
  139. package/dist/daemon-recovery.js.map +1 -0
  140. package/dist/daemon.d.ts +368 -0
  141. package/dist/daemon.d.ts.map +1 -0
  142. package/dist/daemon.js +601 -0
  143. package/dist/daemon.js.map +1 -0
  144. package/dist/declared-response-shape.d.ts +93 -0
  145. package/dist/declared-response-shape.d.ts.map +1 -0
  146. package/dist/declared-response-shape.js +200 -0
  147. package/dist/declared-response-shape.js.map +1 -0
  148. package/dist/declared-surfaces.d.ts +16 -0
  149. package/dist/declared-surfaces.d.ts.map +1 -0
  150. package/dist/declared-surfaces.js +19 -0
  151. package/dist/declared-surfaces.js.map +1 -0
  152. package/dist/depends-review.d.ts +113 -0
  153. package/dist/depends-review.d.ts.map +1 -0
  154. package/dist/depends-review.js +110 -0
  155. package/dist/depends-review.js.map +1 -0
  156. package/dist/doctor.d.ts +91 -0
  157. package/dist/doctor.d.ts.map +1 -0
  158. package/dist/doctor.js +71 -0
  159. package/dist/doctor.js.map +1 -0
  160. package/dist/edge-approval.d.ts +105 -0
  161. package/dist/edge-approval.d.ts.map +1 -0
  162. package/dist/edge-approval.js +100 -0
  163. package/dist/edge-approval.js.map +1 -0
  164. package/dist/evidence-cache.d.ts +45 -0
  165. package/dist/evidence-cache.d.ts.map +1 -0
  166. package/dist/evidence-cache.js +90 -0
  167. package/dist/evidence-cache.js.map +1 -0
  168. package/dist/evidence-cmd.d.ts +133 -0
  169. package/dist/evidence-cmd.d.ts.map +1 -0
  170. package/dist/evidence-cmd.js +347 -0
  171. package/dist/evidence-cmd.js.map +1 -0
  172. package/dist/evidence-facts.d.ts +40 -0
  173. package/dist/evidence-facts.d.ts.map +1 -0
  174. package/dist/evidence-facts.js +114 -0
  175. package/dist/evidence-facts.js.map +1 -0
  176. package/dist/exclusive-lock.d.ts +52 -0
  177. package/dist/exclusive-lock.d.ts.map +1 -0
  178. package/dist/exclusive-lock.js +150 -0
  179. package/dist/exclusive-lock.js.map +1 -0
  180. package/dist/exec-domains.d.ts +140 -0
  181. package/dist/exec-domains.d.ts.map +1 -0
  182. package/dist/exec-domains.js +287 -0
  183. package/dist/exec-domains.js.map +1 -0
  184. package/dist/exemption-store.d.ts +197 -0
  185. package/dist/exemption-store.d.ts.map +1 -0
  186. package/dist/exemption-store.js +266 -0
  187. package/dist/exemption-store.js.map +1 -0
  188. package/dist/explicit-start-gate.d.ts +96 -0
  189. package/dist/explicit-start-gate.d.ts.map +1 -0
  190. package/dist/explicit-start-gate.js +103 -0
  191. package/dist/explicit-start-gate.js.map +1 -0
  192. package/dist/fs-trouble.d.ts +70 -0
  193. package/dist/fs-trouble.d.ts.map +1 -0
  194. package/dist/fs-trouble.js +98 -0
  195. package/dist/fs-trouble.js.map +1 -0
  196. package/dist/gate.d.ts +278 -0
  197. package/dist/gate.d.ts.map +1 -0
  198. package/dist/gate.js +278 -0
  199. package/dist/gate.js.map +1 -0
  200. package/dist/git-driver.d.ts +519 -0
  201. package/dist/git-driver.d.ts.map +1 -0
  202. package/dist/git-driver.js +900 -0
  203. package/dist/git-driver.js.map +1 -0
  204. package/dist/git-push-executor.d.ts +41 -0
  205. package/dist/git-push-executor.d.ts.map +1 -0
  206. package/dist/git-push-executor.js +142 -0
  207. package/dist/git-push-executor.js.map +1 -0
  208. package/dist/glob.d.ts +26 -0
  209. package/dist/glob.d.ts.map +1 -0
  210. package/dist/glob.js +93 -0
  211. package/dist/glob.js.map +1 -0
  212. package/dist/goal-adaptive.d.ts +295 -0
  213. package/dist/goal-adaptive.d.ts.map +1 -0
  214. package/dist/goal-adaptive.js +393 -0
  215. package/dist/goal-adaptive.js.map +1 -0
  216. package/dist/goal-compile.d.ts +342 -0
  217. package/dist/goal-compile.d.ts.map +1 -0
  218. package/dist/goal-compile.js +444 -0
  219. package/dist/goal-compile.js.map +1 -0
  220. package/dist/goal-depends-executor.d.ts +55 -0
  221. package/dist/goal-depends-executor.d.ts.map +1 -0
  222. package/dist/goal-depends-executor.js +202 -0
  223. package/dist/goal-depends-executor.js.map +1 -0
  224. package/dist/goal-execution-evidence.d.ts +135 -0
  225. package/dist/goal-execution-evidence.d.ts.map +1 -0
  226. package/dist/goal-execution-evidence.js +159 -0
  227. package/dist/goal-execution-evidence.js.map +1 -0
  228. package/dist/goal-gap.d.ts +140 -0
  229. package/dist/goal-gap.d.ts.map +1 -0
  230. package/dist/goal-gap.js +197 -0
  231. package/dist/goal-gap.js.map +1 -0
  232. package/dist/goal-met-target.d.ts +98 -0
  233. package/dist/goal-met-target.d.ts.map +1 -0
  234. package/dist/goal-met-target.js +92 -0
  235. package/dist/goal-met-target.js.map +1 -0
  236. package/dist/goal-ownership.d.ts +416 -0
  237. package/dist/goal-ownership.d.ts.map +1 -0
  238. package/dist/goal-ownership.js +576 -0
  239. package/dist/goal-ownership.js.map +1 -0
  240. package/dist/goal-runs.d.ts +82 -0
  241. package/dist/goal-runs.d.ts.map +1 -0
  242. package/dist/goal-runs.js +120 -0
  243. package/dist/goal-runs.js.map +1 -0
  244. package/dist/goal-store.d.ts +146 -0
  245. package/dist/goal-store.d.ts.map +1 -0
  246. package/dist/goal-store.js +294 -0
  247. package/dist/goal-store.js.map +1 -0
  248. package/dist/goal-view.d.ts +156 -0
  249. package/dist/goal-view.d.ts.map +1 -0
  250. package/dist/goal-view.js +499 -0
  251. package/dist/goal-view.js.map +1 -0
  252. package/dist/governed-approvals.d.ts +152 -0
  253. package/dist/governed-approvals.d.ts.map +1 -0
  254. package/dist/governed-approvals.js +246 -0
  255. package/dist/governed-approvals.js.map +1 -0
  256. package/dist/governed-broker.d.ts +169 -0
  257. package/dist/governed-broker.d.ts.map +1 -0
  258. package/dist/governed-broker.js +196 -0
  259. package/dist/governed-broker.js.map +1 -0
  260. package/dist/governed-run.d.ts +220 -0
  261. package/dist/governed-run.d.ts.map +1 -0
  262. package/dist/governed-run.js +406 -0
  263. package/dist/governed-run.js.map +1 -0
  264. package/dist/grant-reconcile.d.ts +63 -0
  265. package/dist/grant-reconcile.d.ts.map +1 -0
  266. package/dist/grant-reconcile.js +121 -0
  267. package/dist/grant-reconcile.js.map +1 -0
  268. package/dist/index-for-head.d.ts +56 -0
  269. package/dist/index-for-head.d.ts.map +1 -0
  270. package/dist/index-for-head.js +103 -0
  271. package/dist/index-for-head.js.map +1 -0
  272. package/dist/index.d.ts +39 -0
  273. package/dist/index.d.ts.map +1 -0
  274. package/dist/index.js +55 -0
  275. package/dist/index.js.map +1 -0
  276. package/dist/init-detect.d.ts +39 -0
  277. package/dist/init-detect.d.ts.map +1 -0
  278. package/dist/init-detect.js +188 -0
  279. package/dist/init-detect.js.map +1 -0
  280. package/dist/integration-deps.d.ts +62 -0
  281. package/dist/integration-deps.d.ts.map +1 -0
  282. package/dist/integration-deps.js +251 -0
  283. package/dist/integration-deps.js.map +1 -0
  284. package/dist/integration-runtime.d.ts +458 -0
  285. package/dist/integration-runtime.d.ts.map +1 -0
  286. package/dist/integration-runtime.js +681 -0
  287. package/dist/integration-runtime.js.map +1 -0
  288. package/dist/integration.d.ts +45 -0
  289. package/dist/integration.d.ts.map +1 -0
  290. package/dist/integration.js +87 -0
  291. package/dist/integration.js.map +1 -0
  292. package/dist/integrator.d.ts +84 -0
  293. package/dist/integrator.d.ts.map +1 -0
  294. package/dist/integrator.js +193 -0
  295. package/dist/integrator.js.map +1 -0
  296. package/dist/lane-claims.d.ts +174 -0
  297. package/dist/lane-claims.d.ts.map +1 -0
  298. package/dist/lane-claims.js +218 -0
  299. package/dist/lane-claims.js.map +1 -0
  300. package/dist/lane-coverage.d.ts +87 -0
  301. package/dist/lane-coverage.d.ts.map +1 -0
  302. package/dist/lane-coverage.js +129 -0
  303. package/dist/lane-coverage.js.map +1 -0
  304. package/dist/ledger-replay.d.ts +115 -0
  305. package/dist/ledger-replay.d.ts.map +1 -0
  306. package/dist/ledger-replay.js +155 -0
  307. package/dist/ledger-replay.js.map +1 -0
  308. package/dist/ledger-store.d.ts +68 -0
  309. package/dist/ledger-store.d.ts.map +1 -0
  310. package/dist/ledger-store.js +111 -0
  311. package/dist/ledger-store.js.map +1 -0
  312. package/dist/loop-safety-observer.d.ts +132 -0
  313. package/dist/loop-safety-observer.d.ts.map +1 -0
  314. package/dist/loop-safety-observer.js +76 -0
  315. package/dist/loop-safety-observer.js.map +1 -0
  316. package/dist/loop-safety-store.d.ts +339 -0
  317. package/dist/loop-safety-store.d.ts.map +1 -0
  318. package/dist/loop-safety-store.js +800 -0
  319. package/dist/loop-safety-store.js.map +1 -0
  320. package/dist/machine-store.d.ts +54 -0
  321. package/dist/machine-store.d.ts.map +1 -0
  322. package/dist/machine-store.js +149 -0
  323. package/dist/machine-store.js.map +1 -0
  324. package/dist/mcp-main.d.ts +2 -0
  325. package/dist/mcp-main.d.ts.map +1 -0
  326. package/dist/mcp-main.js +116 -0
  327. package/dist/mcp-main.js.map +1 -0
  328. package/dist/mcp-server.d.ts +72 -0
  329. package/dist/mcp-server.d.ts.map +1 -0
  330. package/dist/mcp-server.js +259 -0
  331. package/dist/mcp-server.js.map +1 -0
  332. package/dist/model-routing.d.ts +75 -0
  333. package/dist/model-routing.d.ts.map +1 -0
  334. package/dist/model-routing.js +108 -0
  335. package/dist/model-routing.js.map +1 -0
  336. package/dist/model-transport.d.ts +188 -0
  337. package/dist/model-transport.d.ts.map +1 -0
  338. package/dist/model-transport.js +625 -0
  339. package/dist/model-transport.js.map +1 -0
  340. package/dist/notify-cadence.d.ts +55 -0
  341. package/dist/notify-cadence.d.ts.map +1 -0
  342. package/dist/notify-cadence.js +68 -0
  343. package/dist/notify-cadence.js.map +1 -0
  344. package/dist/notify-channel.d.ts +69 -0
  345. package/dist/notify-channel.d.ts.map +1 -0
  346. package/dist/notify-channel.js +151 -0
  347. package/dist/notify-channel.js.map +1 -0
  348. package/dist/notify.d.ts +71 -0
  349. package/dist/notify.d.ts.map +1 -0
  350. package/dist/notify.js +125 -0
  351. package/dist/notify.js.map +1 -0
  352. package/dist/observation-inventory.d.ts +65 -0
  353. package/dist/observation-inventory.d.ts.map +1 -0
  354. package/dist/observation-inventory.js +139 -0
  355. package/dist/observation-inventory.js.map +1 -0
  356. package/dist/owned-children.d.ts +45 -0
  357. package/dist/owned-children.d.ts.map +1 -0
  358. package/dist/owned-children.js +64 -0
  359. package/dist/owned-children.js.map +1 -0
  360. package/dist/packet-for-goal.d.ts +19 -0
  361. package/dist/packet-for-goal.d.ts.map +1 -0
  362. package/dist/packet-for-goal.js +32 -0
  363. package/dist/packet-for-goal.js.map +1 -0
  364. package/dist/pair-cmd.d.ts +85 -0
  365. package/dist/pair-cmd.d.ts.map +1 -0
  366. package/dist/pair-cmd.js +205 -0
  367. package/dist/pair-cmd.js.map +1 -0
  368. package/dist/partial-asker.d.ts +96 -0
  369. package/dist/partial-asker.d.ts.map +1 -0
  370. package/dist/partial-asker.js +117 -0
  371. package/dist/partial-asker.js.map +1 -0
  372. package/dist/pdf-text-lines.d.ts +17 -0
  373. package/dist/pdf-text-lines.d.ts.map +1 -0
  374. package/dist/pdf-text-lines.js +70 -0
  375. package/dist/pdf-text-lines.js.map +1 -0
  376. package/dist/pdf-text-worker.d.ts +2 -0
  377. package/dist/pdf-text-worker.d.ts.map +1 -0
  378. package/dist/pdf-text-worker.js +81 -0
  379. package/dist/pdf-text-worker.js.map +1 -0
  380. package/dist/pdf-text.d.ts +56 -0
  381. package/dist/pdf-text.d.ts.map +1 -0
  382. package/dist/pdf-text.js +64 -0
  383. package/dist/pdf-text.js.map +1 -0
  384. package/dist/pending-action.d.ts +154 -0
  385. package/dist/pending-action.d.ts.map +1 -0
  386. package/dist/pending-action.js +148 -0
  387. package/dist/pending-action.js.map +1 -0
  388. package/dist/preemptor.d.ts +40 -0
  389. package/dist/preemptor.d.ts.map +1 -0
  390. package/dist/preemptor.js +49 -0
  391. package/dist/preemptor.js.map +1 -0
  392. package/dist/programme-mode.d.ts +29 -0
  393. package/dist/programme-mode.d.ts.map +1 -0
  394. package/dist/programme-mode.js +50 -0
  395. package/dist/programme-mode.js.map +1 -0
  396. package/dist/progress-view.d.ts +14 -0
  397. package/dist/progress-view.d.ts.map +1 -0
  398. package/dist/progress-view.js +114 -0
  399. package/dist/progress-view.js.map +1 -0
  400. package/dist/project-graph-builder.d.ts +81 -0
  401. package/dist/project-graph-builder.d.ts.map +1 -0
  402. package/dist/project-graph-builder.js +246 -0
  403. package/dist/project-graph-builder.js.map +1 -0
  404. package/dist/project-graph-runtime.d.ts +86 -0
  405. package/dist/project-graph-runtime.d.ts.map +1 -0
  406. package/dist/project-graph-runtime.js +112 -0
  407. package/dist/project-graph-runtime.js.map +1 -0
  408. package/dist/project-index-builder.d.ts +96 -0
  409. package/dist/project-index-builder.d.ts.map +1 -0
  410. package/dist/project-index-builder.js +298 -0
  411. package/dist/project-index-builder.js.map +1 -0
  412. package/dist/project-index-facts.d.ts +51 -0
  413. package/dist/project-index-facts.d.ts.map +1 -0
  414. package/dist/project-index-facts.js +117 -0
  415. package/dist/project-index-facts.js.map +1 -0
  416. package/dist/project-index-store.d.ts +97 -0
  417. package/dist/project-index-store.d.ts.map +1 -0
  418. package/dist/project-index-store.js +140 -0
  419. package/dist/project-index-store.js.map +1 -0
  420. package/dist/project-memory-store.d.ts +127 -0
  421. package/dist/project-memory-store.d.ts.map +1 -0
  422. package/dist/project-memory-store.js +302 -0
  423. package/dist/project-memory-store.js.map +1 -0
  424. package/dist/proposal-store.d.ts +14 -0
  425. package/dist/proposal-store.d.ts.map +1 -0
  426. package/dist/proposal-store.js +19 -0
  427. package/dist/proposal-store.js.map +1 -0
  428. package/dist/prover.d.ts +80 -0
  429. package/dist/prover.d.ts.map +1 -0
  430. package/dist/prover.js +137 -0
  431. package/dist/prover.js.map +1 -0
  432. package/dist/provider-identity-store.d.ts +34 -0
  433. package/dist/provider-identity-store.d.ts.map +1 -0
  434. package/dist/provider-identity-store.js +72 -0
  435. package/dist/provider-identity-store.js.map +1 -0
  436. package/dist/provider-identity.d.ts +104 -0
  437. package/dist/provider-identity.d.ts.map +1 -0
  438. package/dist/provider-identity.js +167 -0
  439. package/dist/provider-identity.js.map +1 -0
  440. package/dist/provider-limit.d.ts +79 -0
  441. package/dist/provider-limit.d.ts.map +1 -0
  442. package/dist/provider-limit.js +148 -0
  443. package/dist/provider-limit.js.map +1 -0
  444. package/dist/provider-preflight.d.ts +171 -0
  445. package/dist/provider-preflight.d.ts.map +1 -0
  446. package/dist/provider-preflight.js +395 -0
  447. package/dist/provider-preflight.js.map +1 -0
  448. package/dist/provider-state.d.ts +120 -0
  449. package/dist/provider-state.d.ts.map +1 -0
  450. package/dist/provider-state.js +182 -0
  451. package/dist/provider-state.js.map +1 -0
  452. package/dist/providers.d.ts +132 -0
  453. package/dist/providers.d.ts.map +1 -0
  454. package/dist/providers.js +161 -0
  455. package/dist/providers.js.map +1 -0
  456. package/dist/publication-recorder.d.ts +117 -0
  457. package/dist/publication-recorder.d.ts.map +1 -0
  458. package/dist/publication-recorder.js +124 -0
  459. package/dist/publication-recorder.js.map +1 -0
  460. package/dist/pursuit-delivery.d.ts +24 -0
  461. package/dist/pursuit-delivery.d.ts.map +1 -0
  462. package/dist/pursuit-delivery.js +38 -0
  463. package/dist/pursuit-delivery.js.map +1 -0
  464. package/dist/queue-store.d.ts +132 -0
  465. package/dist/queue-store.d.ts.map +1 -0
  466. package/dist/queue-store.js +185 -0
  467. package/dist/queue-store.js.map +1 -0
  468. package/dist/queue-summary.d.ts +14 -0
  469. package/dist/queue-summary.d.ts.map +1 -0
  470. package/dist/queue-summary.js +82 -0
  471. package/dist/queue-summary.js.map +1 -0
  472. package/dist/queue-view.d.ts +20 -0
  473. package/dist/queue-view.d.ts.map +1 -0
  474. package/dist/queue-view.js +163 -0
  475. package/dist/queue-view.js.map +1 -0
  476. package/dist/queue-write-lease.d.ts +106 -0
  477. package/dist/queue-write-lease.d.ts.map +1 -0
  478. package/dist/queue-write-lease.js +282 -0
  479. package/dist/queue-write-lease.js.map +1 -0
  480. package/dist/rails-home.d.ts +162 -0
  481. package/dist/rails-home.d.ts.map +1 -0
  482. package/dist/rails-home.js +452 -0
  483. package/dist/rails-home.js.map +1 -0
  484. package/dist/rails-migrations.d.ts +75 -0
  485. package/dist/rails-migrations.d.ts.map +1 -0
  486. package/dist/rails-migrations.js +199 -0
  487. package/dist/rails-migrations.js.map +1 -0
  488. package/dist/rails-stores.d.ts +49 -0
  489. package/dist/rails-stores.d.ts.map +1 -0
  490. package/dist/rails-stores.js +100 -0
  491. package/dist/rails-stores.js.map +1 -0
  492. package/dist/reaper.d.ts +69 -0
  493. package/dist/reaper.d.ts.map +1 -0
  494. package/dist/reaper.js +152 -0
  495. package/dist/reaper.js.map +1 -0
  496. package/dist/record-store.d.ts +36 -0
  497. package/dist/record-store.d.ts.map +1 -0
  498. package/dist/record-store.js +78 -0
  499. package/dist/record-store.js.map +1 -0
  500. package/dist/recovery-io.d.ts +50 -0
  501. package/dist/recovery-io.d.ts.map +1 -0
  502. package/dist/recovery-io.js +122 -0
  503. package/dist/recovery-io.js.map +1 -0
  504. package/dist/recovery.d.ts +146 -0
  505. package/dist/recovery.d.ts.map +1 -0
  506. package/dist/recovery.js +110 -0
  507. package/dist/recovery.js.map +1 -0
  508. package/dist/redraw.d.ts +34 -0
  509. package/dist/redraw.d.ts.map +1 -0
  510. package/dist/redraw.js +62 -0
  511. package/dist/redraw.js.map +1 -0
  512. package/dist/rejected-evidence.d.ts +255 -0
  513. package/dist/rejected-evidence.d.ts.map +1 -0
  514. package/dist/rejected-evidence.js +324 -0
  515. package/dist/rejected-evidence.js.map +1 -0
  516. package/dist/report-cmd.d.ts +32 -0
  517. package/dist/report-cmd.d.ts.map +1 -0
  518. package/dist/report-cmd.js +201 -0
  519. package/dist/report-cmd.js.map +1 -0
  520. package/dist/repos-cmd.d.ts +80 -0
  521. package/dist/repos-cmd.d.ts.map +1 -0
  522. package/dist/repos-cmd.js +240 -0
  523. package/dist/repos-cmd.js.map +1 -0
  524. package/dist/request-body-shape.d.ts +93 -0
  525. package/dist/request-body-shape.d.ts.map +1 -0
  526. package/dist/request-body-shape.js +407 -0
  527. package/dist/request-body-shape.js.map +1 -0
  528. package/dist/requirement-claims.d.ts +89 -0
  529. package/dist/requirement-claims.d.ts.map +1 -0
  530. package/dist/requirement-claims.js +92 -0
  531. package/dist/requirement-claims.js.map +1 -0
  532. package/dist/retention-apply-runtime.d.ts +105 -0
  533. package/dist/retention-apply-runtime.d.ts.map +1 -0
  534. package/dist/retention-apply-runtime.js +269 -0
  535. package/dist/retention-apply-runtime.js.map +1 -0
  536. package/dist/reverify.d.ts +41 -0
  537. package/dist/reverify.d.ts.map +1 -0
  538. package/dist/reverify.js +69 -0
  539. package/dist/reverify.js.map +1 -0
  540. package/dist/round-records.d.ts +65 -0
  541. package/dist/round-records.d.ts.map +1 -0
  542. package/dist/round-records.js +61 -0
  543. package/dist/round-records.js.map +1 -0
  544. package/dist/round-runner.d.ts +924 -0
  545. package/dist/round-runner.d.ts.map +1 -0
  546. package/dist/round-runner.js +1693 -0
  547. package/dist/round-runner.js.map +1 -0
  548. package/dist/run-approval.d.ts +180 -0
  549. package/dist/run-approval.d.ts.map +1 -0
  550. package/dist/run-approval.js +199 -0
  551. package/dist/run-approval.js.map +1 -0
  552. package/dist/run-cmd.d.ts +359 -0
  553. package/dist/run-cmd.d.ts.map +1 -0
  554. package/dist/run-cmd.js +4418 -0
  555. package/dist/run-cmd.js.map +1 -0
  556. package/dist/run-delivery.d.ts +71 -0
  557. package/dist/run-delivery.d.ts.map +1 -0
  558. package/dist/run-delivery.js +104 -0
  559. package/dist/run-delivery.js.map +1 -0
  560. package/dist/run-ended.d.ts +75 -0
  561. package/dist/run-ended.d.ts.map +1 -0
  562. package/dist/run-ended.js +27 -0
  563. package/dist/run-ended.js.map +1 -0
  564. package/dist/run-ending-locator.d.ts +125 -0
  565. package/dist/run-ending-locator.d.ts.map +1 -0
  566. package/dist/run-ending-locator.js +133 -0
  567. package/dist/run-ending-locator.js.map +1 -0
  568. package/dist/run-launcher.d.ts +459 -0
  569. package/dist/run-launcher.d.ts.map +1 -0
  570. package/dist/run-launcher.js +652 -0
  571. package/dist/run-launcher.js.map +1 -0
  572. package/dist/run-lease.d.ts +208 -0
  573. package/dist/run-lease.d.ts.map +1 -0
  574. package/dist/run-lease.js +301 -0
  575. package/dist/run-lease.js.map +1 -0
  576. package/dist/run-refusal-marks.d.ts +189 -0
  577. package/dist/run-refusal-marks.d.ts.map +1 -0
  578. package/dist/run-refusal-marks.js +249 -0
  579. package/dist/run-refusal-marks.js.map +1 -0
  580. package/dist/run-start-marks.d.ts +153 -0
  581. package/dist/run-start-marks.d.ts.map +1 -0
  582. package/dist/run-start-marks.js +269 -0
  583. package/dist/run-start-marks.js.map +1 -0
  584. package/dist/scan-cmd.d.ts +14 -0
  585. package/dist/scan-cmd.d.ts.map +1 -0
  586. package/dist/scan-cmd.js +270 -0
  587. package/dist/scan-cmd.js.map +1 -0
  588. package/dist/scan-events.d.ts +50 -0
  589. package/dist/scan-events.d.ts.map +1 -0
  590. package/dist/scan-events.js +91 -0
  591. package/dist/scan-events.js.map +1 -0
  592. package/dist/scan.d.ts +191 -0
  593. package/dist/scan.d.ts.map +1 -0
  594. package/dist/scan.js +417 -0
  595. package/dist/scan.js.map +1 -0
  596. package/dist/scope-rule.d.ts +148 -0
  597. package/dist/scope-rule.d.ts.map +1 -0
  598. package/dist/scope-rule.js +121 -0
  599. package/dist/scope-rule.js.map +1 -0
  600. package/dist/self-repo-id.d.ts +18 -0
  601. package/dist/self-repo-id.d.ts.map +1 -0
  602. package/dist/self-repo-id.js +70 -0
  603. package/dist/self-repo-id.js.map +1 -0
  604. package/dist/server-client.d.ts +766 -0
  605. package/dist/server-client.d.ts.map +1 -0
  606. package/dist/server-client.js +475 -0
  607. package/dist/server-client.js.map +1 -0
  608. package/dist/session-adapter-runtime.d.ts +195 -0
  609. package/dist/session-adapter-runtime.d.ts.map +1 -0
  610. package/dist/session-adapter-runtime.js +373 -0
  611. package/dist/session-adapter-runtime.js.map +1 -0
  612. package/dist/session-checkpoint-runtime.d.ts +62 -0
  613. package/dist/session-checkpoint-runtime.d.ts.map +1 -0
  614. package/dist/session-checkpoint-runtime.js +268 -0
  615. package/dist/session-checkpoint-runtime.js.map +1 -0
  616. package/dist/session-control-transport.d.ts +106 -0
  617. package/dist/session-control-transport.d.ts.map +1 -0
  618. package/dist/session-control-transport.js +232 -0
  619. package/dist/session-control-transport.js.map +1 -0
  620. package/dist/session-observation-store.d.ts +98 -0
  621. package/dist/session-observation-store.d.ts.map +1 -0
  622. package/dist/session-observation-store.js +155 -0
  623. package/dist/session-observation-store.js.map +1 -0
  624. package/dist/session-observe-runtime.d.ts +123 -0
  625. package/dist/session-observe-runtime.d.ts.map +1 -0
  626. package/dist/session-observe-runtime.js +317 -0
  627. package/dist/session-observe-runtime.js.map +1 -0
  628. package/dist/session-store.d.ts +98 -0
  629. package/dist/session-store.d.ts.map +1 -0
  630. package/dist/session-store.js +116 -0
  631. package/dist/session-store.js.map +1 -0
  632. package/dist/sessions-cmd.d.ts +202 -0
  633. package/dist/sessions-cmd.d.ts.map +1 -0
  634. package/dist/sessions-cmd.js +609 -0
  635. package/dist/sessions-cmd.js.map +1 -0
  636. package/dist/settings-overlay.d.ts +53 -0
  637. package/dist/settings-overlay.d.ts.map +1 -0
  638. package/dist/settings-overlay.js +175 -0
  639. package/dist/settings-overlay.js.map +1 -0
  640. package/dist/setup-prompt.d.ts +34 -0
  641. package/dist/setup-prompt.d.ts.map +1 -0
  642. package/dist/setup-prompt.js +92 -0
  643. package/dist/setup-prompt.js.map +1 -0
  644. package/dist/setup.d.ts +103 -0
  645. package/dist/setup.d.ts.map +1 -0
  646. package/dist/setup.js +283 -0
  647. package/dist/setup.js.map +1 -0
  648. package/dist/shared-grants.d.ts +164 -0
  649. package/dist/shared-grants.d.ts.map +1 -0
  650. package/dist/shared-grants.js +242 -0
  651. package/dist/shared-grants.js.map +1 -0
  652. package/dist/signals.d.ts +55 -0
  653. package/dist/signals.d.ts.map +1 -0
  654. package/dist/signals.js +85 -0
  655. package/dist/signals.js.map +1 -0
  656. package/dist/source-cmd.d.ts +201 -0
  657. package/dist/source-cmd.d.ts.map +1 -0
  658. package/dist/source-cmd.js +684 -0
  659. package/dist/source-cmd.js.map +1 -0
  660. package/dist/source-verdict.d.ts +99 -0
  661. package/dist/source-verdict.d.ts.map +1 -0
  662. package/dist/source-verdict.js +182 -0
  663. package/dist/source-verdict.js.map +1 -0
  664. package/dist/spend-ledger.d.ts +350 -0
  665. package/dist/spend-ledger.d.ts.map +1 -0
  666. package/dist/spend-ledger.js +546 -0
  667. package/dist/spend-ledger.js.map +1 -0
  668. package/dist/stale-run-sweep.d.ts +79 -0
  669. package/dist/stale-run-sweep.d.ts.map +1 -0
  670. package/dist/stale-run-sweep.js +116 -0
  671. package/dist/stale-run-sweep.js.map +1 -0
  672. package/dist/start-attempts.d.ts +385 -0
  673. package/dist/start-attempts.d.ts.map +1 -0
  674. package/dist/start-attempts.js +613 -0
  675. package/dist/start-attempts.js.map +1 -0
  676. package/dist/status-cmd.d.ts +28 -0
  677. package/dist/status-cmd.d.ts.map +1 -0
  678. package/dist/status-cmd.js +116 -0
  679. package/dist/status-cmd.js.map +1 -0
  680. package/dist/stop-follow-up.d.ts +107 -0
  681. package/dist/stop-follow-up.d.ts.map +1 -0
  682. package/dist/stop-follow-up.js +172 -0
  683. package/dist/stop-follow-up.js.map +1 -0
  684. package/dist/surface-lease.d.ts +118 -0
  685. package/dist/surface-lease.d.ts.map +1 -0
  686. package/dist/surface-lease.js +485 -0
  687. package/dist/surface-lease.js.map +1 -0
  688. package/dist/sync.d.ts +54 -0
  689. package/dist/sync.d.ts.map +1 -0
  690. package/dist/sync.js +93 -0
  691. package/dist/sync.js.map +1 -0
  692. package/dist/syncing-ledger.d.ts +45 -0
  693. package/dist/syncing-ledger.d.ts.map +1 -0
  694. package/dist/syncing-ledger.js +53 -0
  695. package/dist/syncing-ledger.js.map +1 -0
  696. package/dist/temp-fixtures.d.ts +68 -0
  697. package/dist/temp-fixtures.d.ts.map +1 -0
  698. package/dist/temp-fixtures.js +38 -0
  699. package/dist/temp-fixtures.js.map +1 -0
  700. package/dist/token-window.d.ts +84 -0
  701. package/dist/token-window.d.ts.map +1 -0
  702. package/dist/token-window.js +143 -0
  703. package/dist/token-window.js.map +1 -0
  704. package/dist/tool-bridge.d.ts +177 -0
  705. package/dist/tool-bridge.d.ts.map +1 -0
  706. package/dist/tool-bridge.js +329 -0
  707. package/dist/tool-bridge.js.map +1 -0
  708. package/dist/tool-call-record.d.ts +197 -0
  709. package/dist/tool-call-record.d.ts.map +1 -0
  710. package/dist/tool-call-record.js +276 -0
  711. package/dist/tool-call-record.js.map +1 -0
  712. package/dist/tool-protocol.d.ts +135 -0
  713. package/dist/tool-protocol.d.ts.map +1 -0
  714. package/dist/tool-protocol.js +104 -0
  715. package/dist/tool-protocol.js.map +1 -0
  716. package/dist/tool-worker.d.ts +3 -0
  717. package/dist/tool-worker.d.ts.map +1 -0
  718. package/dist/tool-worker.js +478 -0
  719. package/dist/tool-worker.js.map +1 -0
  720. package/dist/toolchain-mirror.d.ts +86 -0
  721. package/dist/toolchain-mirror.d.ts.map +1 -0
  722. package/dist/toolchain-mirror.js +307 -0
  723. package/dist/toolchain-mirror.js.map +1 -0
  724. package/dist/trusted-git.d.ts +243 -0
  725. package/dist/trusted-git.d.ts.map +1 -0
  726. package/dist/trusted-git.js +920 -0
  727. package/dist/trusted-git.js.map +1 -0
  728. package/dist/ui.d.ts +76 -0
  729. package/dist/ui.d.ts.map +1 -0
  730. package/dist/ui.js +118 -0
  731. package/dist/ui.js.map +1 -0
  732. package/dist/untrusted-exec.d.ts +275 -0
  733. package/dist/untrusted-exec.d.ts.map +1 -0
  734. package/dist/untrusted-exec.js +479 -0
  735. package/dist/untrusted-exec.js.map +1 -0
  736. package/dist/untrusted-gate.d.ts +73 -0
  737. package/dist/untrusted-gate.d.ts.map +1 -0
  738. package/dist/untrusted-gate.js +226 -0
  739. package/dist/untrusted-gate.js.map +1 -0
  740. package/dist/uploader.d.ts +153 -0
  741. package/dist/uploader.d.ts.map +1 -0
  742. package/dist/uploader.js +204 -0
  743. package/dist/uploader.js.map +1 -0
  744. package/dist/verifier.d.ts +66 -0
  745. package/dist/verifier.d.ts.map +1 -0
  746. package/dist/verifier.js +170 -0
  747. package/dist/verifier.js.map +1 -0
  748. package/dist/verify-apply.d.ts +26 -0
  749. package/dist/verify-apply.d.ts.map +1 -0
  750. package/dist/verify-apply.js +36 -0
  751. package/dist/verify-apply.js.map +1 -0
  752. package/dist/verify-cmd.d.ts +44 -0
  753. package/dist/verify-cmd.d.ts.map +1 -0
  754. package/dist/verify-cmd.js +125 -0
  755. package/dist/verify-cmd.js.map +1 -0
  756. package/dist/verify-pass.d.ts +73 -0
  757. package/dist/verify-pass.d.ts.map +1 -0
  758. package/dist/verify-pass.js +103 -0
  759. package/dist/verify-pass.js.map +1 -0
  760. package/dist/welcome.d.ts +43 -0
  761. package/dist/welcome.d.ts.map +1 -0
  762. package/dist/welcome.js +116 -0
  763. package/dist/welcome.js.map +1 -0
  764. package/dist/workspace-provisioner.d.ts +65 -0
  765. package/dist/workspace-provisioner.d.ts.map +1 -0
  766. package/dist/workspace-provisioner.js +66 -0
  767. package/dist/workspace-provisioner.js.map +1 -0
  768. package/dist/workspace-quarantine.d.ts +64 -0
  769. package/dist/workspace-quarantine.d.ts.map +1 -0
  770. package/dist/workspace-quarantine.js +156 -0
  771. package/dist/workspace-quarantine.js.map +1 -0
  772. package/dist/workspace-residue-sweep.d.ts +113 -0
  773. package/dist/workspace-residue-sweep.d.ts.map +1 -0
  774. package/dist/workspace-residue-sweep.js +158 -0
  775. package/dist/workspace-residue-sweep.js.map +1 -0
  776. package/dist/workspace.d.ts +639 -0
  777. package/dist/workspace.d.ts.map +1 -0
  778. package/dist/workspace.js +2026 -0
  779. package/dist/workspace.js.map +1 -0
  780. package/package.json +54 -6
  781. package/win/CredProbe.cs +64 -0
  782. package/win/FakeClaude.cs +56 -0
  783. package/win/HandleProbe.cs +116 -0
  784. package/win/TokenProbe.cs +53 -0
  785. package/win/appcontainer.ps1 +500 -0
@@ -0,0 +1,546 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADMISSION_HOLD_MS = void 0;
4
+ exports.admissionHoldMs = admissionHoldMs;
5
+ exports.spendLedgerPath = spendLedgerPath;
6
+ exports.spendLockPath = spendLockPath;
7
+ exports.recordSpend = recordSpend;
8
+ exports.readSpend = readSpend;
9
+ exports.spendInWindow = spendInWindow;
10
+ exports.spentByRun = spentByRun;
11
+ exports.peekEnvelope = peekEnvelope;
12
+ exports.admitSpend = admitSpend;
13
+ exports.recordingSpend = recordingSpend;
14
+ const node_crypto_1 = require("node:crypto");
15
+ const node_fs_1 = require("node:fs");
16
+ const node_os_1 = require("node:os");
17
+ const node_path_1 = require("node:path");
18
+ const core_1 = require("@looply/core");
19
+ const exclusive_lock_1 = require("./exclusive-lock");
20
+ /**
21
+ * How long an admission hold counts against the window.
22
+ *
23
+ * Long enough to cover the gap between admitting a run and that run's first
24
+ * recorded invocation — a spawn, a git clone, a queue load, a first model call.
25
+ * Short enough that a hold left behind by a crashed daemon costs one window's
26
+ * arithmetic rather than a night.
27
+ */
28
+ exports.ADMISSION_HOLD_MS = 5 * 60 * 1000;
29
+ /**
30
+ * How long a reservation actually counts for: THE WINDOW THE CEILING IS
31
+ * WRITTEN OVER, never less than the floor above.
32
+ *
33
+ * 🔴 A FIVE-MINUTE HOLD ON A FORTY-FIVE-MINUTE TURN IS NOT A CEILING.
34
+ *
35
+ * MEASURED: a $10 ceiling, a $2 estimate, and runs whose first invocation had
36
+ * not yet returned — the ordinary case, because an implementer turn takes
37
+ * tens of minutes and records its cost only at the end. Every hold expired at
38
+ * five minutes; every later start re-read a machine that had spent $0; TWENTY
39
+ * were admitted against a ceiling of five. The window was never wrong about
40
+ * completed work. It simply forgot the work in progress.
41
+ *
42
+ * The window is the right horizon because it is the one the operator wrote: a
43
+ * reservation counts until it settles, or until it falls out of the window it
44
+ * was made in — at which point it cannot affect that window's arithmetic
45
+ * anyway. A hold abandoned by a crashed daemon therefore costs one window, the
46
+ * tolerance the floor above was chosen for, and it errs toward REFUSING starts
47
+ * rather than admitting unbounded ones. For a budget that is the only
48
+ * survivable direction to be wrong in.
49
+ */
50
+ function admissionHoldMs(windowMs) {
51
+ return Number.isFinite(windowMs) ? Math.max(exports.ADMISSION_HOLD_MS, windowMs) : exports.ADMISSION_HOLD_MS;
52
+ }
53
+ /**
54
+ * ⚠️ ONE PATH PER MACHINE, AND NOT DERIVED FROM `cwd`.
55
+ *
56
+ * The rails ledgers next door are keyed by repository identity, which is right
57
+ * for them and wrong here: the envelope bounds what this MACHINE may spend, and
58
+ * a per-project ledger would let ten projects each stay comfortably inside a
59
+ * ceiling that was written once. Deriving it from `process.cwd()` would have
60
+ * been worse still — the same machine would keep several ledgers depending on
61
+ * where the command was typed.
62
+ */
63
+ function spendLedgerPath(home = (0, node_os_1.homedir)()) {
64
+ return (0, node_path_1.join)(home, '.looply', 'spend.jsonl');
65
+ }
66
+ /**
67
+ * The mutex that makes an admission decision authoritative.
68
+ *
69
+ * Machine-level, beside the ledger it serialises, because the ledger is what it
70
+ * protects and the ceiling is a machine's. See `exclusive-lock`.
71
+ */
72
+ function spendLockPath(home = (0, node_os_1.homedir)()) {
73
+ return (0, node_path_1.join)(home, '.looply', '.spend.lock');
74
+ }
75
+ /**
76
+ * Append one invocation's cost.
77
+ *
78
+ * 🔴 THE RETURN VALUE IS NOT DECORATION. Unlike the schedule log, a spend
79
+ * record that fails to write makes the machine look CHEAPER than it is, and the
80
+ * next ceiling check passes on a number that is missing a term. The caller is
81
+ * told so it can record the invocation as unmeasured instead of as absent.
82
+ *
83
+ * ⚠️ LED BY A NEWLINE, for the reason `coordinator.recordActions` wrote down: a
84
+ * torn write must cost one record, not two.
85
+ */
86
+ function recordSpend(record, home = (0, node_os_1.homedir)()) {
87
+ const path = spendLedgerPath(home);
88
+ try {
89
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
90
+ (0, node_fs_1.appendFileSync)(path, `\n${JSON.stringify(record)}\n`, 'utf8');
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ /**
98
+ * Every parseable record, or why the ledger could not be read.
99
+ *
100
+ * 🔴 AN UNREADABLE LEDGER USED TO READ AS AN EMPTY ONE. Both answered `[]`, so
101
+ * a permissions change, a full disk or a corrupt file made a $250 night pass a
102
+ * $5 ceiling — the ceiling comparing against a number it had no basis for.
103
+ *
104
+ * ⚠️ ENOENT IS THE ONE ERROR THAT IS AN ANSWER. A ledger that does not exist is
105
+ * a machine that has spent nothing, which is true and is different from a
106
+ * machine that cannot say.
107
+ *
108
+ * ⚠️ AND A TORN FRAGMENT IS STILL SKIPPED ALONE rather than failing the read —
109
+ * that is what the leading newline buys, and a fragment is a record lost, not a
110
+ * total that cannot be trusted.
111
+ */
112
+ function readSpend(home = (0, node_os_1.homedir)()) {
113
+ let raw;
114
+ try {
115
+ raw = (0, node_fs_1.readFileSync)(spendLedgerPath(home), 'utf8');
116
+ }
117
+ catch (e) {
118
+ const code = e.code;
119
+ if (code === 'ENOENT')
120
+ return { ok: true, records: [] };
121
+ return { ok: false, because: `the spend ledger could not be read: ${e.message}` };
122
+ }
123
+ const out = [];
124
+ for (const line of raw.split('\n')) {
125
+ const text = line.trim();
126
+ if (text === '')
127
+ continue;
128
+ try {
129
+ const parsed = JSON.parse(text);
130
+ /**
131
+ * 🔴 A ROW THAT PARSES BUT IS NOT A SPEND RECORD IS A REFUSAL, NOT A
132
+ * ROW TO SKIP.
133
+ *
134
+ * A torn write does not produce valid JSON — that is what the leading
135
+ * newline and the `JSON.parse` catch above are for. Valid JSON missing
136
+ * `at` or `ms` is a CORRUPT LEDGER, and dropping it silently makes the
137
+ * machine look cheaper than it is, which is the one direction a budget
138
+ * cannot be wrong in.
139
+ */
140
+ if (typeof parsed?.at !== 'string' || typeof parsed?.ms !== 'number') {
141
+ return {
142
+ ok: false,
143
+ because: 'the spend ledger contains a record with no timestamp or no duration, so what this ' +
144
+ `machine has spent cannot be totalled: ${text.slice(0, 120)}`,
145
+ };
146
+ }
147
+ out.push(parsed);
148
+ }
149
+ catch {
150
+ // A fragment from a torn write. Skipped alone, which is what the leading
151
+ // newline buys.
152
+ }
153
+ }
154
+ return { ok: true, records: out };
155
+ }
156
+ function spendInWindow(now, windowMs, runsInFlight, home = (0, node_os_1.homedir)(),
157
+ /**
158
+ * What to charge an invocation that reported no cost.
159
+ *
160
+ * Absent keeps the strict reading — an unmeasured row makes the window
161
+ * unmeasurable — which is right for a caller that has no estimate to stand
162
+ * in with. See the charging loop.
163
+ */
164
+ assumedUsd) {
165
+ const read = readSpend(home);
166
+ if (!read.ok)
167
+ return { ok: false, because: read.because };
168
+ const since = now - windowMs;
169
+ const all = read.records;
170
+ /**
171
+ * ⚠️ A RESERVATION IS CLOSED BY A LATER ROW NAMING IT, never by being
172
+ * rewritten. So the open ones are those with no settlement and no
173
+ * cancellation anywhere in the file — including rows OUTSIDE the window,
174
+ * because a reservation made an hour ago and settled a minute ago is closed
175
+ * however the window falls.
176
+ */
177
+ const closed = new Set(all.filter((r) => r.kind === 'settlement' || r.kind === 'cancellation').map((r) => r.id));
178
+ /** An expired hold counts as nothing. See `holdUntil`. */
179
+ const expired = (r) => {
180
+ const until = Date.parse(r.holdUntil ?? '');
181
+ return Number.isFinite(until) ? now >= until : false;
182
+ };
183
+ /**
184
+ * 🔴 NO UPPER BOUND, AND `at <= now` LET A CLAIMANT SPEND THE SAME
185
+ * ALLOWANCE TWICE.
186
+ *
187
+ * The window used to end at the reader's own clock, which reads as obviously
188
+ * right and is not: a row stamped LATER than this reader's `now` is money
189
+ * somebody is already holding, and excluding it makes the machine look
190
+ * cheaper than it is to precisely the process least able to tell.
191
+ *
192
+ * MEASURED, $3 ceiling and $2 estimates, with the schedule forced: B
193
+ * published at T+1000 and was admitted; A, whose key was T, then read a
194
+ * window ending at T — so B's row was in A's FUTURE and invisible — and was
195
+ * admitted too. The window held $4. Serialising the check-and-claim did not
196
+ * help, because the row was not merely sorted away, it was filtered out.
197
+ *
198
+ * ⚠️ A FUTURE-STAMPED ROW IS COUNTED, WHICH OVER-COUNTS RATHER THAN UNDER.
199
+ * Clock skew between two processes on one machine is small; a row an hour
200
+ * ahead would be counted now and again in an hour. That direction refuses a
201
+ * start that might have fitted. The other direction spends money nobody
202
+ * authorised, and a budget may only ever be wrong in the first.
203
+ */
204
+ const inWindow = all.filter((r) => {
205
+ const at = Date.parse(r.at);
206
+ return Number.isFinite(at) && at >= since;
207
+ });
208
+ /**
209
+ * WHAT COUNTS TOWARD THE MONEY CEILING:
210
+ * - a completed invocation, at what it cost;
211
+ * - a settlement, at what the run TURNED OUT to cost — INSTEAD of that
212
+ * run's own rows, never on top of them;
213
+ * - an OPEN reservation, at what it expects to cost.
214
+ * A cancellation counts as nothing, which is what it means.
215
+ *
216
+ * 🔴 A SETTLEMENT REPLACES ITS RUN'S ROWS. IT USED TO BE ADDED TO THEM.
217
+ *
218
+ * MEASURED: a run admitted at a $2 estimate records three real invocations of
219
+ * $1, then settles at `spentByRun` = $3 — and the window read $6. The
220
+ * settlement's own amount was summed on top of the very rows it was computed
221
+ * from, so every reconciled run counted twice, and the wall clock doubled
222
+ * with it. A ceiling fed a number twice its truth refuses at half its value.
223
+ */
224
+ const settledAt = new Map();
225
+ for (const r of inWindow) {
226
+ if (r.kind !== 'settlement' || r.runId === undefined)
227
+ continue;
228
+ // What it says it covers, and only if it does not say, when it was written.
229
+ const covers = r.coversUpTo ?? r.at;
230
+ const seen = settledAt.get(r.runId);
231
+ if (seen === undefined || covers > seen)
232
+ settledAt.set(r.runId, covers);
233
+ }
234
+ /**
235
+ * ⚠️ A SETTLEMENT REPLACES ONLY WHAT IT WAS COMPUTED FROM. It sums the
236
+ * run's rows AS OF THE MOMENT IT IS WRITTEN, so a row that lands afterwards
237
+ * — a straggling invocation, a second settlement — is money it never saw and
238
+ * is counted on top, exactly as any other spend would be.
239
+ */
240
+ const supersededBySettlement = (r) => {
241
+ if (r.kind === 'settlement' || r.runId === undefined)
242
+ return false;
243
+ const at = settledAt.get(r.runId);
244
+ return at !== undefined && r.at <= at;
245
+ };
246
+ const charged = inWindow.filter((r) => {
247
+ if (r.kind === 'cancellation')
248
+ return false;
249
+ if (r.kind === 'reservation')
250
+ return !closed.has(r.id) && !expired(r);
251
+ // A settled run is represented by its settlement and by nothing else.
252
+ if (supersededBySettlement(r))
253
+ return false;
254
+ return true;
255
+ });
256
+ /**
257
+ * 🔴 AN UNMEASURED INVOCATION IS CHARGED AT THE ESTIMATE, NOT TREATED AS
258
+ * UNKNOWABLE — AND THE OLD BEHAVIOUR SELF-LOCKED THE MACHINE AFTER ONE ROUND.
259
+ *
260
+ * MEASURED: the round runs its agent with `--output-format text` and receives
261
+ * no envelope, so its spend row carries no `usd` BY DESIGN. One such row made
262
+ * the whole window `null`, `withinEnvelope` refuses on null, and therefore
263
+ * the FIRST round turn of the FIRST run locked every later start out of the
264
+ * window — with a refusal telling the person to change provider for a
265
+ * suppression looply itself chose.
266
+ *
267
+ * ⚠️ SO THE GUARANTEE IS NAMED HONESTLY RATHER THAN OVERSTATED. This is an
268
+ * ADMISSION CEILING OVER ESTIMATED SPEND, reconciled to actual wherever the
269
+ * provider reports one. It is not a hard provider-dollar cap, and nothing
270
+ * here claims to be: an invocation already in flight can exceed its estimate,
271
+ * bounded only by the provider's own turn limit.
272
+ *
273
+ * ⚠️ AND `assumedUsd` IS ONLY EVER USED FOR ROWS THAT REPORT NOTHING. A
274
+ * provider that DOES report cost is believed, always.
275
+ */
276
+ let usd = 0;
277
+ for (const r of charged) {
278
+ if (usd === null)
279
+ break;
280
+ const amount = r.kind === 'reservation' ? r.estimateUsd : r.usd;
281
+ if (typeof amount === 'number' && Number.isFinite(amount)) {
282
+ usd += amount;
283
+ continue;
284
+ }
285
+ if (assumedUsd !== undefined && Number.isFinite(assumedUsd)) {
286
+ usd += assumedUsd;
287
+ continue;
288
+ }
289
+ usd = null;
290
+ }
291
+ /**
292
+ * ⚠️ A SETTLEMENT IS NOT A SECOND START. It closes a reservation that was
293
+ * already counted, so counting both would report twice the starts and twice
294
+ * the wall clock for one invocation.
295
+ */
296
+ const starts = charged.filter((r) => r.kind !== 'settlement');
297
+ return {
298
+ ok: true,
299
+ spend: {
300
+ runsInFlight,
301
+ startsInWindow: starts.length,
302
+ wallClockMs: charged.reduce((sum, r) => sum + (Number.isFinite(r.ms) ? r.ms : 0), 0),
303
+ usd,
304
+ },
305
+ };
306
+ }
307
+ /**
308
+ * What one run has ACTUALLY cost so far, from its own rows.
309
+ *
310
+ * 🔴 THIS IS THE OTHER HALF OF ADMISSION. A reservation is a promise; this is
311
+ * the receipt. Settling with it turns "we held $2.50 for this run" into "this
312
+ * run cost $1.87", which is what the next admission must compare against.
313
+ *
314
+ * ⚠️ NULL WHEN ANY OF ITS ROWS IS UNMEASURED, for the same reason the window
315
+ * total is: the round path reports no cost at all, so a run that did rounds has
316
+ * spent an amount nobody can state. Settling at a number would be inventing
317
+ * one; settling at `null` keeps the window unmeasurable, which the ceiling
318
+ * refuses on.
319
+ */
320
+ function spentByRun(runId, home = (0, node_os_1.homedir)()) {
321
+ const read = readSpend(home);
322
+ if (!read.ok)
323
+ return null;
324
+ const mine = read.records.filter((r) => r.runId === runId && r.kind !== 'reservation');
325
+ if (mine.length === 0)
326
+ return 0;
327
+ let total = 0;
328
+ for (const r of mine) {
329
+ if (typeof r.usd === 'number' && Number.isFinite(r.usd))
330
+ total += r.usd;
331
+ else
332
+ return null;
333
+ }
334
+ return total;
335
+ }
336
+ /**
337
+ * WOULD ADMISSION REFUSE RIGHT NOW? — READ ONLY, RESERVING NOTHING.
338
+ *
339
+ * 🔴 A SECOND READER OF ONE POLICY, NEVER A SECOND POLICY. It calls exactly the
340
+ * same `withinEnvelope` over exactly the same window that `admitSpend` does; the
341
+ * only difference is that it writes nothing.
342
+ *
343
+ * ⚠️ AND IT IS ADVISORY, WHICH IS THE WHOLE POINT. The autonomy tick uses it so
344
+ * a start already obviously over the ceiling costs no spawn, no workspace and
345
+ * none of a small number of attempts. It must NOT reserve: the canonical
346
+ * admission is `runLoop`'s, and a reservation taken here would be held again
347
+ * there — one start holding twice its estimate, and a machine refusing itself
348
+ * at half its ceiling.
349
+ *
350
+ * ⚠️ A PASS HERE PROMISES NOTHING. The window moves between this and the run's
351
+ * own admission, and the run's is the one that decides. That is the correct
352
+ * direction for an optimisation: it can only ever refuse something the gate
353
+ * would also have refused.
354
+ */
355
+ function peekEnvelope(env, runsInFlight, now, home = (0, node_os_1.homedir)(),
356
+ /** What an unmeasured invocation is assumed to have cost. See `spendInWindow`. */
357
+ estimateUsd) {
358
+ const view = spendInWindow(now, env.windowMs, runsInFlight, home, estimateUsd);
359
+ if (!view.ok)
360
+ return { ok: false, because: view.because };
361
+ const verdict = (0, core_1.withinEnvelope)(env, view.spend);
362
+ return verdict.ok ? { ok: true } : { ok: false, because: `${verdict.because} (${verdict.ceiling})` };
363
+ }
364
+ function admitSpend(env, what, estimateUsd, runsInFlight, now = () => Date.now(), home = (0, node_os_1.homedir)(),
365
+ /**
366
+ * WHICH RUN THIS HOLD IS FOR, so its settlement can REPLACE that run's rows.
367
+ *
368
+ * 🔴 WITHOUT IT EVERY RECONCILED RUN WAS CHARGED TWICE. The settlement's
369
+ * amount is computed BY SUMMING the run's own rows — and with nothing tying
370
+ * it to them, `spendInWindow` added it to the very rows it came from.
371
+ * MEASURED: three real invocations of $1 settled at $3, and the window read
372
+ * $6. A ceiling fed twice its truth refuses at half its value.
373
+ */
374
+ runId) {
375
+ const id = (0, node_crypto_1.randomUUID)();
376
+ const reservedAt = new Date(now()).toISOString();
377
+ /**
378
+ * 🔴 THE WHOLE CHECK-AND-CLAIM IS ONE CRITICAL SECTION, AND ORDERING ROWS
379
+ * INSTEAD OF SERIALISING THEM ADMITTED TWICE THE CEILING.
380
+ *
381
+ * The previous mechanism gave every claimant a key of `(at, id)` and had it
382
+ * count only intents sorting at or before its own. That resolves a herd —
383
+ * the k-th claimant sees exactly k — but only if everybody publishes before
384
+ * anybody decides.
385
+ *
386
+ * MEASURED, $3 ceiling and $2 estimates, with the schedule forced rather than
387
+ * raced: B took key T+1000, published, and was ADMITTED. A took key T —
388
+ * EARLIER — published afterwards, excluded B from its own view as "later",
389
+ * and was ALSO ADMITTED. The window held $4 against a $3 ceiling. A total
390
+ * order over rows says who is first; it does not say who has already been
391
+ * told yes.
392
+ *
393
+ * Inside this lock, publication and decision happen together, so there is no
394
+ * interval in which a claim has been decided but not published — which is
395
+ * precisely why a late publication cannot invalidate anybody's safety: there
396
+ * is no such thing. Every claimant sees every prior claim, whatever its clock
397
+ * says, and the herd is resolved by taking turns.
398
+ *
399
+ * ⚠️ AND A LOCK IT CANNOT TAKE IS A REFUSAL. The ceiling's whole purpose is
400
+ * that concurrent starts see each other; one that could not serialise itself
401
+ * has no idea what anybody else is holding, and admitting it would be
402
+ * admitting an unbounded number of them. Same rule as a reservation that will
403
+ * not write.
404
+ */
405
+ return (0, exclusive_lock_1.withExclusiveLock)(spendLockPath(home), () => {
406
+ /**
407
+ * ONE OPEN HOLD PER RUN, EVER.
408
+ *
409
+ * 🔴 A REPLAYED ADMISSION USED TO RESERVE TWICE. A run that is admitted
410
+ * again — a restart, a retried launch, a supervisor that calls the seam
411
+ * twice — wrote a second reservation while the first was still open, so ONE
412
+ * run held TWO estimates against the window and the machine refused itself at
413
+ * a fraction of its ceiling. Worse in the other direction too: neither hold
414
+ * could be settled by the other's rows.
415
+ *
416
+ * A run cannot be running twice, so an earlier open hold for the same run is
417
+ * superseded here — by appending a cancellation naming it, never by
418
+ * rewriting anything, which is the ledger's rule everywhere.
419
+ */
420
+ if (runId !== undefined) {
421
+ const prior = readSpend(home);
422
+ if (prior.ok) {
423
+ const closedAlready = new Set(prior.records.filter((r) => r.kind === 'settlement' || r.kind === 'cancellation').map((r) => r.id));
424
+ for (const r of prior.records) {
425
+ if (r.kind !== 'reservation' || r.runId !== runId || r.id === undefined)
426
+ continue;
427
+ if (closedAlready.has(r.id))
428
+ continue;
429
+ recordSpend({ at: reservedAt, what, kind: 'cancellation', id: r.id, ms: 0, runId }, home);
430
+ }
431
+ }
432
+ }
433
+ const wrote = recordSpend({
434
+ at: reservedAt,
435
+ what,
436
+ kind: 'reservation',
437
+ id,
438
+ ms: 0,
439
+ holdUntil: new Date(now() + admissionHoldMs(env.windowMs)).toISOString(),
440
+ ...(runId === undefined ? {} : { runId }),
441
+ ...(estimateUsd === undefined ? {} : { estimateUsd }),
442
+ }, home);
443
+ /**
444
+ * 🔴 A RESERVATION THAT WILL NOT WRITE IS A REFUSAL, NOT A SHRUG. The whole
445
+ * mechanism is that concurrent starts see each other's intent; one that could
446
+ * not record its own is invisible to everybody else, and admitting it would
447
+ * be admitting an unbounded number of them.
448
+ */
449
+ if (!wrote) {
450
+ return {
451
+ ok: false,
452
+ because: 'this machine could not record what it is about to spend, so it cannot bound it',
453
+ };
454
+ }
455
+ const close = (kind, usd, ms) => {
456
+ /**
457
+ * The last row of this run that exists AS THIS SETTLEMENT IS WRITTEN — the
458
+ * exact set it replaces. See `SpendRecord.coversUpTo`.
459
+ */
460
+ let coversUpTo;
461
+ if (kind === 'settlement' && runId !== undefined) {
462
+ const seen = readSpend(home);
463
+ if (seen.ok) {
464
+ for (const r of seen.records) {
465
+ if (r.runId !== runId || r.kind === 'reservation')
466
+ continue;
467
+ if (coversUpTo === undefined || r.at > coversUpTo)
468
+ coversUpTo = r.at;
469
+ }
470
+ }
471
+ }
472
+ recordSpend({
473
+ at: new Date(now()).toISOString(),
474
+ what,
475
+ kind,
476
+ id,
477
+ ms,
478
+ ...(runId === undefined ? {} : { runId }),
479
+ ...(coversUpTo === undefined ? {} : { coversUpTo }),
480
+ ...(usd === undefined ? {} : { usd }),
481
+ }, home);
482
+ };
483
+ const view = spendInWindow(now(), env.windowMs, runsInFlight, home, estimateUsd);
484
+ if (!view.ok) {
485
+ close('cancellation', undefined, 0);
486
+ return { ok: false, because: view.because };
487
+ }
488
+ const verdict = (0, core_1.withinEnvelope)(env, view.spend);
489
+ if (!verdict.ok) {
490
+ close('cancellation', undefined, 0);
491
+ return { ok: false, because: `${verdict.because} (${verdict.ceiling})` };
492
+ }
493
+ let closed = false;
494
+ return {
495
+ ok: true,
496
+ admission: {
497
+ settle: (actualUsd, ms) => {
498
+ if (closed)
499
+ return;
500
+ closed = true;
501
+ close('settlement', actualUsd, ms);
502
+ },
503
+ cancel: () => {
504
+ if (closed)
505
+ return;
506
+ closed = true;
507
+ close('cancellation', undefined, 0);
508
+ },
509
+ },
510
+ };
511
+ }, (why) => ({
512
+ ok: false,
513
+ // Same sentence the unwritable-reservation path uses, because it is the
514
+ // same fact from the person's side: this machine could not record what it
515
+ // is about to spend, so it cannot show the start is inside the ceiling.
516
+ because: `this machine could not record what it is about to spend — it could not serialise its budget admission (${why})`,
517
+ }));
518
+ }
519
+ /**
520
+ * Wrap an agent invocation so its cost is recorded.
521
+ *
522
+ * ⚠️ AT THE INVOCATION, NOT AT THE PARSE. `unwrapEnvelope` is pure and stays
523
+ * pure — a parser that wrote a file would be impossible to use in a test and
524
+ * would record a cost every time somebody re-read a transcript. This wraps the
525
+ * one place where an invocation actually happens.
526
+ */
527
+ function recordingSpend(what, now, home,
528
+ /** Which run this invocation belongs to, so its reservation can be settled. */
529
+ runId) {
530
+ return (r) => {
531
+ recordSpend({
532
+ at: new Date(now()).toISOString(),
533
+ what,
534
+ ms: r.ms,
535
+ ...(runId === undefined ? {} : { runId }),
536
+ ...(r.cost?.usd === undefined ? {} : { usd: r.cost.usd }),
537
+ ...(r.cost?.turns === undefined ? {} : { turns: r.cost.turns }),
538
+ ...(r.cost?.sessionId === undefined ? {} : { sessionId: r.cost.sessionId }),
539
+ ...(r.cost?.inputTokens === undefined ? {} : { inputTokens: r.cost.inputTokens }),
540
+ ...(r.cost?.outputTokens === undefined ? {} : { outputTokens: r.cost.outputTokens }),
541
+ ...(r.cost?.cacheReadTokens === undefined ? {} : { cacheReadTokens: r.cost.cacheReadTokens }),
542
+ ...(r.cost?.cacheWriteTokens === undefined ? {} : { cacheWriteTokens: r.cost.cacheWriteTokens }),
543
+ }, home);
544
+ };
545
+ }
546
+ //# sourceMappingURL=spend-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-ledger.js","sourceRoot":"","sources":["../src/spend-ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { type StartupRecovery } from './daemon-recovery';
2
+ import { type ProbeFn } from './run-lease';
3
+ /**
4
+ * THE STALE-RUN SWEEP, OVER EVERY CHECKOUT THIS PROJECT EXECUTES IN.
5
+ *
6
+ * ─────────────────────────────────────────────────────────────────────────────
7
+ * 🔴 IT SWEPT THE DAEMON'S OWN CHECKOUT AND NOTHING ELSE.
8
+ *
9
+ * `recoverStaleRunOnStartup` was built over `join(opts.cwd, STATE_DIR,
10
+ * 'state')` — one lease, one ledger, one git tree: the main checkout's. A run
11
+ * the coordinator PLACED in a linked worktree holds its lease and writes its
12
+ * ledger THERE, so when it was killed nothing ever looked: its lease stayed
13
+ * `dead`, its ledger never got a `run.ended`, and the controller waiting on
14
+ * that ending waited for ever. Combined with the daemon reading the wrong
15
+ * ledger in the first place, a crashed placed run was invisible twice over.
16
+ *
17
+ * ─────────────────────────────────────────────────────────────────────────────
18
+ * WHICH CHECKOUTS, AND WHY NOT "EVERY DIRECTORY UNDER THE ROOT"
19
+ *
20
+ * The main checkout, always — exactly as before. Then each directory directly
21
+ * under THIS project's workspaces root (`workspacesRoot(cwd)`, keyed by the
22
+ * repository's identity) that
23
+ *
24
+ * • carries a `.looply` directory — a workspace looply cut, not litter;
25
+ * • is not QUARANTINED — a quarantine is a durable "looply must not touch
26
+ * this", and a sweep is touching;
27
+ * • is still a checkout of THIS repository — a directory somebody moved
28
+ * another repository into would otherwise be swept as ours.
29
+ *
30
+ * Deduplicated by real path, so a root reached twice (a symlinked home, a
31
+ * junction) is swept once, and the main checkout is never swept a second time
32
+ * under another name. No recursion: a workspace is one level below the root by
33
+ * construction (`createWorkspace`), and a sweep that walked deeper would be
34
+ * deciding about directories nothing here created.
35
+ *
36
+ * ⚠️ EACH CHECKOUT IS SWEPT WITH ITS OWN STORES AND ITS OWN GIT. The lease, the
37
+ * ledger and the working tree are EXECUTION-scoped facts, and
38
+ * `recoverStaleRunOnStartup` is built for exactly one of each. Every guarantee
39
+ * that function makes — `free`/`active`/`ambiguous` leave it alone, a dirty tree
40
+ * blocks, a closed run is not closed twice, the queue is never touched — holds
41
+ * per checkout, unchanged. A live sibling in another workspace is not looked at
42
+ * by the sweep of this one, so nothing it holds can be affected.
43
+ *
44
+ * ⚠️ ONE CHECKOUT'S FAILURE DOES NOT STOP THE OTHERS. A workspace whose ledger
45
+ * will not open logs and is skipped, and the next is still swept; the daemon
46
+ * loop already treats a throw from the whole sweep the same way.
47
+ */
48
+ export interface StaleRunSweepDeps {
49
+ /** The daemon's working directory: the project's main checkout. */
50
+ cwd: string;
51
+ projectId: string;
52
+ log(line: string): void;
53
+ now?: () => number;
54
+ home?: string;
55
+ /** Injected by tests that cannot own a real dead process. */
56
+ probe?: ProbeFn;
57
+ }
58
+ export interface SweptCheckout {
59
+ checkout: string;
60
+ outcome: StartupRecovery | {
61
+ kind: 'failed';
62
+ because: string;
63
+ } | {
64
+ kind: 'released';
65
+ runId: string;
66
+ because: string;
67
+ };
68
+ }
69
+ /**
70
+ * The checkouts a sweep of this project covers, in a deterministic order: the
71
+ * main checkout first, then the workspaces by name.
72
+ */
73
+ export declare function sweepTargets(cwd: string, home?: string): string[];
74
+ /**
75
+ * The daemon's `recoverStaleRun` dependency. ONE factory for the daemon and the
76
+ * end-to-end proof, so the proof sweeps with the sweep the daemon runs.
77
+ */
78
+ export declare function makeStaleRunSweep(deps: StaleRunSweepDeps): () => Promise<SweptCheckout[]>;
79
+ //# sourceMappingURL=stale-run-sweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-run-sweep.d.ts","sourceRoot":"","sources":["../src/stale-run-sweep.ts"],"names":[],"mappings":"AAGA,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAA8B,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,eAAe,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,EAAE,CAgC5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAkDzF"}