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
package/dist/gate.d.ts ADDED
@@ -0,0 +1,278 @@
1
+ import { type Exemption, type GateStepResult, type GateVerdict } from '@looply/core';
2
+ import { type ChangedEntry, type ScopeDecl, type ScopeViolation } from './scope-rule';
3
+ /**
4
+ * The gate executor.
5
+ *
6
+ * Two classes of failure, and conflating them is a real bug: an **abort** means an
7
+ * interlock tripped (a production database is reachable, or the diff touched a
8
+ * railed path) and must stop everything before a single step runs; a **red** means
9
+ * a check failed and the round is discarded normally.
10
+ */
11
+ export interface StepSpec {
12
+ name: string;
13
+ run: string;
14
+ timeoutS?: number;
15
+ /** Glob; the step is skipped when no changed path matches it. */
16
+ when?: string;
17
+ /** A required step that never ran blocks the commit — it is not an implicit pass. */
18
+ required?: boolean;
19
+ }
20
+ export interface CommandResult {
21
+ ok: boolean;
22
+ timedOut: boolean;
23
+ ms: number;
24
+ output?: string;
25
+ /**
26
+ * The process exit status, when the runner had one.
27
+ *
28
+ * ⚠️ ABSENT MEANS THE RUNNER DID NOT SAY, NOT ZERO. The contained gate runner
29
+ * always had the code — `UntrustedExecutionResult` carries it — and folded it
30
+ * into `ok` on the way out, so a rejected candidate's evidence could record
31
+ * "it failed" and never "it exited 2". A runner that cannot produce one
32
+ * (a step that never started) leaves it out, and the evidence says null.
33
+ */
34
+ exitCode?: number;
35
+ /**
36
+ * The step did not RUN, as distinct from running and failing.
37
+ *
38
+ * Set only by a runner that could not start the step at all — no contained
39
+ * toolchain, untrusted execution unavailable. `ok` is still false, so every
40
+ * existing reader keeps refusing the commit; this only tells the round what
41
+ * it may charge the item for.
42
+ */
43
+ unavailable?: boolean;
44
+ /**
45
+ * WHAT THIS INVOCATION COST, WHEN THE PROVIDER SAID.
46
+ *
47
+ * 🔴 IT WAS PARSED AND THEN DROPPED ON THE FLOOR. `parseAgentEnvelope` reads
48
+ * `total_cost_usd`, `num_turns`, `usage` and `session_id` off every JSON
49
+ * envelope — and `unwrapEnvelope`, the only thing any production caller uses,
50
+ * returned a `CommandResult` with nowhere to put them. So the field existed,
51
+ * the parser had a docblock about why discarding it was theatre, and all
52
+ * three call sites discarded it anyway.
53
+ *
54
+ * ⚠️ ABSENT MEANS THE PROVIDER DID NOT SAY, NOT ZERO. The round runs its
55
+ * agent with `--output-format text` and gets no envelope at all, so the
56
+ * expensive path reports nothing here — which `withinEnvelope` reads as
57
+ * unmeasurable and REFUSES against a dollar ceiling, rather than as free.
58
+ */
59
+ cost?: InvocationCost;
60
+ }
61
+ /**
62
+ * WHAT ONE PROVIDER INVOCATION COST, DECLARED ONCE.
63
+ *
64
+ * 🔴 THIS WAS TWO DECLARATIONS AND THEY DRIFTED THE MOMENT ONE GREW. The same
65
+ * six fields were written out here and again on `AgentEnvelope['cost']`;
66
+ * `unwrapEnvelope` spreads the envelope's object into this one wholesale, so
67
+ * adding a field to the parser put it on the wire at RUNTIME while this type
68
+ * said it did not exist — and a field a type does not name is a field nothing
69
+ * downstream can read. Found the moment M7-3 added the two cache counts.
70
+ *
71
+ * One type, in the lower module, imported by the parser above it. There is no
72
+ * second place to update and therefore no second place to forget.
73
+ *
74
+ * ⚠️ ABSENT MEANS THE PROVIDER DID NOT SAY, NOT ZERO. The round runs its agent
75
+ * with `--output-format text` and gets no envelope at all, so the expensive
76
+ * path reports nothing here — which `withinEnvelope` reads as unmeasurable and
77
+ * REFUSES against a dollar ceiling, rather than as free.
78
+ */
79
+ export interface InvocationCost {
80
+ readonly usd?: number;
81
+ readonly turns?: number;
82
+ readonly sessionId?: string;
83
+ readonly inputTokens?: number;
84
+ readonly outputTokens?: number;
85
+ /**
86
+ * Context served from the provider's cache, and context written into it —
87
+ * whether this turn paid again for what it already had (the audit's E-05).
88
+ */
89
+ readonly cacheReadTokens?: number;
90
+ readonly cacheWriteTokens?: number;
91
+ }
92
+ export type CommandRunner = (cmd: string, timeoutMs: number) => Promise<CommandResult>;
93
+ export declare const ABORT_PROD = 91;
94
+ export declare const ABORT_RAILS = 92;
95
+ /**
96
+ * The name of the synthetic gate step a scope refusal fails.
97
+ *
98
+ * 🔴 A SCOPE VIOLATION IS A RED, NOT AN ABORT, AND THE DIFFERENCE IS NOT
99
+ * COSMETIC. It was written as a third abort code first, and two things already
100
+ * in this codebase said that was wrong:
101
+ *
102
+ * - `rejectionInput` WITHHOLDS THE PATCH of an aborted candidate, because the
103
+ * rails fire on content that must not be copied into a record. A change that
104
+ * is merely in the wrong PLACE is ordinary work, and withholding it would
105
+ * destroy the very evidence bounded repair runs on. That withheld message
106
+ * even reads "the rails aborted this candidate", which a scope abort would
107
+ * have made false.
108
+ * - an abort raises a `critical` alert. A model that strayed one file outside
109
+ * its grant is a round to discard and brief, not a page at 3am.
110
+ *
111
+ * So the round goes red on this named step: the candidate is never accepted, no
112
+ * gate step runs against a tree that may have weakened it, the attempt is spent,
113
+ * the evidence is retained, and the worker is told what it did. Rails keep sole
114
+ * ownership of `abort`.
115
+ *
116
+ * ⚠️ A PROJECT COULD NAME A REAL GATE STEP `scope`. Nothing forbids it, and the
117
+ * result would be two steps sharing a name in the record rather than a wrong
118
+ * verdict. Said here rather than left to be discovered.
119
+ */
120
+ export declare const SCOPE_STEP = "scope";
121
+ export interface Rails {
122
+ forbiddenPaths: readonly string[];
123
+ prodPatterns: readonly string[];
124
+ }
125
+ export interface InterlockInput {
126
+ changedPaths: readonly string[];
127
+ rails: Rails;
128
+ /** Contents of any env files worth inspecting, plus the live environment. */
129
+ envValues: readonly string[];
130
+ /**
131
+ * Granted exemptions (DESIGN §8). A grant opens a railed path only when
132
+ * `isExemptionValid` accepts it for this item, this exact path and this
133
+ * moment — a raw path list here would skip the expiry and the one-item
134
+ * check, which is precisely the widening the core model exists to prevent.
135
+ */
136
+ exemptions?: readonly Exemption[];
137
+ /** The item this round is running; exemptions are per-item. */
138
+ itemId?: string;
139
+ /** Clock for the expiry check. */
140
+ now?: number;
141
+ /**
142
+ * The diff WITH its status codes, which `changedPaths` does not carry.
143
+ *
144
+ * Required for the scope interlock and for nothing else: telling an added
145
+ * file from a modified one is the entire difference between `scope.additive`
146
+ * meaning what it says and meaning nothing. A caller that omits it leaves
147
+ * the scope check unrun rather than guessing, and a guess here would be a
148
+ * guess about whether a file already existed.
149
+ */
150
+ changedEntries?: readonly ChangedEntry[];
151
+ /** The project's declared scope; see `scope-rule.ts` for the semantics. */
152
+ scope?: ScopeDecl;
153
+ }
154
+ export interface AbortResult {
155
+ code: number;
156
+ reason: string;
157
+ paths?: string[];
158
+ }
159
+ export declare const DEFAULT_TIMEOUT_S = 600;
160
+ /**
161
+ * Interlocks run before any step. They are hard aborts, not tallied failures —
162
+ * a railed path in the diff may mean the gate itself is broken, which is a
163
+ * different emergency from a failing test.
164
+ */
165
+ export declare function checkInterlocks(input: InterlockInput): AbortResult | null;
166
+ export interface ScopeRefusal {
167
+ readonly reason: string;
168
+ readonly paths: string[];
169
+ readonly violations: readonly ScopeViolation[];
170
+ }
171
+ /**
172
+ * Whether this diff left the grant it was given.
173
+ *
174
+ * Runs BEFORE any gate step, for the reason `judged-by.ts` gives: a round's
175
+ * spec files sit inside the scope it may change, so a gate measured after a
176
+ * candidate edited it is measuring the candidate's own gate.
177
+ *
178
+ * ⚠️ RETURNS null WHEN IT CANNOT MEASURE, rather than passing quietly on a
179
+ * technicality. Two distinct ways that happens, and neither is a violation: the
180
+ * caller supplied no `scope` (every caller that predates this check), or supplied
181
+ * no `changedEntries` (no status codes, so an addition and a modification are
182
+ * indistinguishable). Both are absences of INPUT, not findings about a diff, and
183
+ * turning either into a refusal would fail every round on a field nobody filled
184
+ * in.
185
+ */
186
+ export declare function scopeRefusal(input: InterlockInput): ScopeRefusal | null;
187
+ /**
188
+ * The grants that actually opened a railed path for this diff. The caller puts
189
+ * these in the commit trailer — a door opened silently is indistinguishable in
190
+ * the log from a rail that never fired, and DESIGN §8 requires the opposite.
191
+ */
192
+ export declare function exemptionsUsed(input: InterlockInput): Exemption[];
193
+ /** A step runs unless it has a `when:` filter that no changed path satisfies. */
194
+ export declare function shouldRunStep(step: StepSpec, changedPaths: readonly string[]): boolean;
195
+ export interface GateResult {
196
+ verdict: GateVerdict;
197
+ steps: GateStepResult[];
198
+ abort?: AbortResult;
199
+ /** Grants that opened railed paths this round; the trailer records them. */
200
+ exemptionsUsed?: Exemption[];
201
+ }
202
+ /**
203
+ * One executed step, as it happened: the command, the exit, the text.
204
+ *
205
+ * 🔴 NOT ON `GateResult`, AND NOT ON THE LEDGER. The result is the wire shape:
206
+ * it reaches the event stream and the server, it carries a digest for exactly
207
+ * that reason, and a test pins that no raw output appears anywhere on it. This
208
+ * is the other half — the text a person needs to see WHY a candidate was
209
+ * rejected — and it travels through `RunGateInput.diagnostics`, a sink the
210
+ * round hands straight to evidence retention, so the text exists in one place
211
+ * (beside the discarded patch, before `git reset --hard` destroys the only
212
+ * other copy) and never on an object that is serialised. The previous trial
213
+ * recorded `outputDigest: 38faf4ea…` for a red typecheck and nothing else; the
214
+ * reason it failed was unrecoverable from the run.
215
+ *
216
+ * Bounded per step (`GATE_STEP_OUTPUT_MAX_CHARS`), truncation marked in the
217
+ * text and in `outputTruncated`. Skipped steps produce none.
218
+ */
219
+ export interface GateStepDiagnostic {
220
+ step: string;
221
+ /** The configured shell line, verbatim. */
222
+ command: string;
223
+ /** null when the runner produced no status — a step that never started. */
224
+ exitCode: number | null;
225
+ timedOut: boolean;
226
+ /** The step could not run at all (no toolchain, no container). */
227
+ unavailable: boolean;
228
+ ok: boolean;
229
+ ms: number;
230
+ /**
231
+ * Which of the four things happened. `failed` is the ordinary red: the step
232
+ * ran to completion and said no. The others are about the environment or a
233
+ * resource, and a repair prompt must not present them as the code's fault.
234
+ */
235
+ classification: 'passed' | 'failed' | 'timed_out' | 'unavailable';
236
+ /** stdout and stderr interleaved — the runner reports them as one stream. */
237
+ output: string;
238
+ outputChars: number;
239
+ outputTruncated: boolean;
240
+ }
241
+ /**
242
+ * How much of one step's output the round keeps for evidence.
243
+ *
244
+ * 256K characters keeps a whole failing jest run with its summary; a tsc error
245
+ * list is far smaller. Past the bound the HEAD and the TAIL are kept — the tail
246
+ * because that is where every toolchain prints its summary, the head because
247
+ * that is where the first error is — and the cut is announced in the text.
248
+ */
249
+ export declare const GATE_STEP_OUTPUT_MAX_CHARS: number;
250
+ /**
251
+ * Keep `text` inside `maxChars`, announcing the cut in the text itself.
252
+ *
253
+ * ⚠️ NEVER SILENT. Evidence that was trimmed and does not say so reads as the
254
+ * whole story, and a person repairing from it would be repairing against a
255
+ * log that stops mid-error with no warning that it did.
256
+ */
257
+ export declare function boundText(text: string, maxChars: number): {
258
+ text: string;
259
+ chars: number;
260
+ truncated: boolean;
261
+ };
262
+ export interface RunGateInput {
263
+ steps: readonly StepSpec[];
264
+ changedPaths: readonly string[];
265
+ runner: CommandRunner;
266
+ interlocks?: InterlockInput;
267
+ /** Receives each executed step's {@link GateStepDiagnostic}; see that type for why it is a sink. */
268
+ diagnostics?: (d: GateStepDiagnostic) => void;
269
+ }
270
+ /**
271
+ * Run the gate. Steps execute in the order given — configuration puts the cheapest
272
+ * first, so a broken typecheck never waits on a full test suite — and execution
273
+ * stops at the first failure, because everything after it is uninformative.
274
+ */
275
+ export declare function runGate(input: RunGateInput): Promise<GateResult>;
276
+ /** Required step names, for the commit check in `@looply/core`. */
277
+ export declare function requiredSteps(steps: readonly StepSpec[]): string[];
278
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
package/dist/gate.js ADDED
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GATE_STEP_OUTPUT_MAX_CHARS = exports.DEFAULT_TIMEOUT_S = exports.SCOPE_STEP = exports.ABORT_RAILS = exports.ABORT_PROD = void 0;
4
+ exports.checkInterlocks = checkInterlocks;
5
+ exports.scopeRefusal = scopeRefusal;
6
+ exports.exemptionsUsed = exemptionsUsed;
7
+ exports.shouldRunStep = shouldRunStep;
8
+ exports.boundText = boundText;
9
+ exports.runGate = runGate;
10
+ exports.requiredSteps = requiredSteps;
11
+ const core_1 = require("@looply/core");
12
+ const glob_1 = require("./glob");
13
+ const scope_rule_1 = require("./scope-rule");
14
+ exports.ABORT_PROD = 91;
15
+ exports.ABORT_RAILS = 92;
16
+ /**
17
+ * The name of the synthetic gate step a scope refusal fails.
18
+ *
19
+ * 🔴 A SCOPE VIOLATION IS A RED, NOT AN ABORT, AND THE DIFFERENCE IS NOT
20
+ * COSMETIC. It was written as a third abort code first, and two things already
21
+ * in this codebase said that was wrong:
22
+ *
23
+ * - `rejectionInput` WITHHOLDS THE PATCH of an aborted candidate, because the
24
+ * rails fire on content that must not be copied into a record. A change that
25
+ * is merely in the wrong PLACE is ordinary work, and withholding it would
26
+ * destroy the very evidence bounded repair runs on. That withheld message
27
+ * even reads "the rails aborted this candidate", which a scope abort would
28
+ * have made false.
29
+ * - an abort raises a `critical` alert. A model that strayed one file outside
30
+ * its grant is a round to discard and brief, not a page at 3am.
31
+ *
32
+ * So the round goes red on this named step: the candidate is never accepted, no
33
+ * gate step runs against a tree that may have weakened it, the attempt is spent,
34
+ * the evidence is retained, and the worker is told what it did. Rails keep sole
35
+ * ownership of `abort`.
36
+ *
37
+ * ⚠️ A PROJECT COULD NAME A REAL GATE STEP `scope`. Nothing forbids it, and the
38
+ * result would be two steps sharing a name in the record rather than a wrong
39
+ * verdict. Said here rather than left to be discovered.
40
+ */
41
+ exports.SCOPE_STEP = 'scope';
42
+ exports.DEFAULT_TIMEOUT_S = 600;
43
+ /**
44
+ * Split the railed paths in the diff into violations and doors legitimately
45
+ * opened. Missing `itemId` or `now` fails closed — with no item to check
46
+ * against or no clock for the expiry, no grant can be shown valid, so none is.
47
+ */
48
+ function splitRailViolations(input) {
49
+ const { exemptions = [], itemId, now } = input;
50
+ const canExempt = exemptions.length > 0 && itemId !== undefined && now !== undefined;
51
+ const violations = [];
52
+ const used = [];
53
+ for (const path of (0, glob_1.filterMatching)(input.changedPaths, input.rails.forbiddenPaths)) {
54
+ const grant = canExempt ? exemptions.find((e) => (0, core_1.isExemptionValid)(e, now, itemId, path)) : undefined;
55
+ if (grant === undefined)
56
+ violations.push(path);
57
+ else if (!used.includes(grant))
58
+ used.push(grant);
59
+ }
60
+ return { violations, used };
61
+ }
62
+ /**
63
+ * Interlocks run before any step. They are hard aborts, not tallied failures —
64
+ * a railed path in the diff may mean the gate itself is broken, which is a
65
+ * different emergency from a failing test.
66
+ */
67
+ function checkInterlocks(input) {
68
+ for (const value of input.envValues) {
69
+ const hit = input.rails.prodPatterns.find((p) => value.toLowerCase().includes(p.toLowerCase()));
70
+ if (hit) {
71
+ return {
72
+ code: exports.ABORT_PROD,
73
+ reason: `a database URL points at a remote host (matched ${JSON.stringify(hit)})`,
74
+ };
75
+ }
76
+ }
77
+ const { violations } = splitRailViolations(input);
78
+ if (violations.length) {
79
+ return {
80
+ code: exports.ABORT_RAILS,
81
+ reason: 'the round touched paths the rails forbid',
82
+ paths: violations,
83
+ };
84
+ }
85
+ return null;
86
+ }
87
+ /**
88
+ * Whether this diff left the grant it was given.
89
+ *
90
+ * Runs BEFORE any gate step, for the reason `judged-by.ts` gives: a round's
91
+ * spec files sit inside the scope it may change, so a gate measured after a
92
+ * candidate edited it is measuring the candidate's own gate.
93
+ *
94
+ * ⚠️ RETURNS null WHEN IT CANNOT MEASURE, rather than passing quietly on a
95
+ * technicality. Two distinct ways that happens, and neither is a violation: the
96
+ * caller supplied no `scope` (every caller that predates this check), or supplied
97
+ * no `changedEntries` (no status codes, so an addition and a modification are
98
+ * indistinguishable). Both are absences of INPUT, not findings about a diff, and
99
+ * turning either into a refusal would fail every round on a field nobody filled
100
+ * in.
101
+ */
102
+ function scopeRefusal(input) {
103
+ const { scope, changedEntries } = input;
104
+ if (scope === undefined || changedEntries === undefined)
105
+ return null;
106
+ const violations = (0, scope_rule_1.scopeViolations)(changedEntries, scope);
107
+ if (violations.length === 0)
108
+ return null;
109
+ return {
110
+ reason: (0, scope_rule_1.describeScopeViolations)(violations),
111
+ paths: violations.map((v) => v.path),
112
+ violations,
113
+ };
114
+ }
115
+ /**
116
+ * The grants that actually opened a railed path for this diff. The caller puts
117
+ * these in the commit trailer — a door opened silently is indistinguishable in
118
+ * the log from a rail that never fired, and DESIGN §8 requires the opposite.
119
+ */
120
+ function exemptionsUsed(input) {
121
+ return splitRailViolations(input).used;
122
+ }
123
+ /** A step runs unless it has a `when:` filter that no changed path satisfies. */
124
+ function shouldRunStep(step, changedPaths) {
125
+ const when = step.when;
126
+ if (!when)
127
+ return true;
128
+ return changedPaths.some((p) => (0, glob_1.matchesGlob)(p, when));
129
+ }
130
+ /**
131
+ * How much of one step's output the round keeps for evidence.
132
+ *
133
+ * 256K characters keeps a whole failing jest run with its summary; a tsc error
134
+ * list is far smaller. Past the bound the HEAD and the TAIL are kept — the tail
135
+ * because that is where every toolchain prints its summary, the head because
136
+ * that is where the first error is — and the cut is announced in the text.
137
+ */
138
+ exports.GATE_STEP_OUTPUT_MAX_CHARS = 256 * 1024;
139
+ /**
140
+ * Keep `text` inside `maxChars`, announcing the cut in the text itself.
141
+ *
142
+ * ⚠️ NEVER SILENT. Evidence that was trimmed and does not say so reads as the
143
+ * whole story, and a person repairing from it would be repairing against a
144
+ * log that stops mid-error with no warning that it did.
145
+ */
146
+ function boundText(text, maxChars) {
147
+ const chars = text.length;
148
+ if (chars <= maxChars)
149
+ return { text, chars, truncated: false };
150
+ const head = Math.floor(maxChars / 4);
151
+ const tail = maxChars - head;
152
+ const omitted = chars - head - tail;
153
+ return {
154
+ text: `${text.slice(0, head)}\n\n[… looply: ${omitted} characters omitted here; ` +
155
+ `the full output was ${chars} characters …]\n\n${text.slice(chars - tail)}`,
156
+ chars,
157
+ truncated: true,
158
+ };
159
+ }
160
+ /**
161
+ * Run the gate. Steps execute in the order given — configuration puts the cheapest
162
+ * first, so a broken typecheck never waits on a full test suite — and execution
163
+ * stops at the first failure, because everything after it is uninformative.
164
+ */
165
+ async function runGate(input) {
166
+ let used = [];
167
+ if (input.interlocks) {
168
+ const abort = checkInterlocks(input.interlocks);
169
+ if (abort)
170
+ return { verdict: 'abort', steps: [], abort };
171
+ used = exemptionsUsed(input.interlocks);
172
+ /**
173
+ * Scope AFTER the rails and BEFORE the first step. Both halves of that
174
+ * ordering are load-bearing: rails first, so a mandatory deny is never
175
+ * reported as a scope question and `scope.free` can never open a railed path;
176
+ * steps after, so nothing is measured on a tree whose candidate may have
177
+ * altered the measuring.
178
+ */
179
+ const refusal = scopeRefusal(input.interlocks);
180
+ if (refusal) {
181
+ // The reason reaches the worker through the DIAGNOSTICS, which is the
182
+ // channel `prepareRepair` reads to brief a repair attempt. A step result
183
+ // carries a digest and never text, by the contract on `GateStepResult`.
184
+ const detail = refusal.violations
185
+ .map((v) => v.path + ' [' + v.status + '] ' + v.because)
186
+ .join('\n');
187
+ const text = refusal.reason + '\n' + detail;
188
+ input.diagnostics?.({
189
+ step: exports.SCOPE_STEP,
190
+ command: '(scope check - no command was run)',
191
+ exitCode: null,
192
+ timedOut: false,
193
+ // Not `unavailable`: the check RAN and answered. `unavailable` means the
194
+ // environment could not measure, and a repair prompt must not present
195
+ // this as something other than the candidate's own doing.
196
+ unavailable: false,
197
+ ok: false,
198
+ ms: 0,
199
+ classification: 'failed',
200
+ output: text,
201
+ outputChars: text.length,
202
+ outputTruncated: false,
203
+ });
204
+ return {
205
+ verdict: 'red',
206
+ steps: [{ step: exports.SCOPE_STEP, ok: false, ms: 0, outputDigest: (0, core_1.failureOutputDigest)(refusal.reason) }],
207
+ ...(used.length ? { exemptionsUsed: used } : {}),
208
+ };
209
+ }
210
+ }
211
+ const done = (verdict, steps) => used.length ? { verdict, steps, exemptionsUsed: used } : { verdict, steps };
212
+ const results = [];
213
+ for (const step of input.steps) {
214
+ if (!shouldRunStep(step, input.changedPaths)) {
215
+ // Recorded, never silently omitted: a skip is information, and hiding it is
216
+ // how a gate starts claiming coverage it does not have.
217
+ results.push({ step: step.name, ok: true, ms: 0, skipped: true });
218
+ continue;
219
+ }
220
+ const timeoutMs = (step.timeoutS ?? exports.DEFAULT_TIMEOUT_S) * 1000;
221
+ const r = await input.runner(step.run, timeoutMs);
222
+ const result = { step: step.name, ok: r.ok, ms: r.ms };
223
+ if (r.timedOut)
224
+ result.timedOut = true;
225
+ // The text, kept OFF the result and handed to the sink. Bounded now rather
226
+ // than at the point of writing, so nothing downstream can hold an
227
+ // unbounded log by forgetting to.
228
+ const bounded = boundText(r.output ?? '', exports.GATE_STEP_OUTPUT_MAX_CHARS);
229
+ input.diagnostics?.({
230
+ step: step.name,
231
+ command: step.run,
232
+ exitCode: typeof r.exitCode === 'number' ? r.exitCode : null,
233
+ timedOut: r.timedOut,
234
+ unavailable: r.unavailable === true,
235
+ ok: r.ok,
236
+ ms: r.ms,
237
+ classification: r.unavailable === true ? 'unavailable' : r.timedOut ? 'timed_out' : r.ok ? 'passed' : 'failed',
238
+ output: bounded.text,
239
+ outputChars: bounded.chars,
240
+ outputTruncated: bounded.truncated,
241
+ });
242
+ /**
243
+ * Only on failure, and only when there was output. A green step has no
244
+ * failure to identify, and signing one would put a digest of ordinary build
245
+ * chatter on every event for nothing.
246
+ *
247
+ * ⚠️ A TIMEOUT STILL GETS ONE, and that is deliberate even though
248
+ * `FailureFacts` excludes the timeout FLAG from the signature: what a
249
+ * timeout printed before it was killed is often the same text every time,
250
+ * and the detector's own contract says a timeout is a resource outcome
251
+ * rather than a deterministic failure — so it is the OUTPUT that decides
252
+ * sameness here, not the fact of timing out.
253
+ */
254
+ if (!r.ok && r.output !== undefined && r.output !== '' && r.unavailable !== true) {
255
+ result.outputDigest = (0, core_1.failureOutputDigest)(r.output);
256
+ }
257
+ results.push(result);
258
+ /**
259
+ * A step that could not run stops the gate as a failure does — everything
260
+ * after it would be as uninformative — but it is a different verdict.
261
+ *
262
+ * ⚠️ AND IT CARRIES NO DIGEST, above. A signature is what loop safety uses
263
+ * to decide "the same failure keeps coming back"; signing "no contained
264
+ * toolchain" would let a broken machine raise a hold against a pursuit
265
+ * whose code was never examined.
266
+ */
267
+ if (r.unavailable === true)
268
+ return done('blocked', results);
269
+ if (!r.ok)
270
+ return done('red', results);
271
+ }
272
+ return done('green', results);
273
+ }
274
+ /** Required step names, for the commit check in `@looply/core`. */
275
+ function requiredSteps(steps) {
276
+ return steps.filter((s) => s.required).map((s) => s.name);
277
+ }
278
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}