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,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.providerExecutableFor = providerExecutableFor;
4
+ exports.providerProfileDir = providerProfileDir;
5
+ exports.checkProviderAuth = checkProviderAuth;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_os_1 = require("node:os");
9
+ const node_path_1 = require("node:path");
10
+ /**
11
+ * WHO OWNS THE PROVIDER'S CREDENTIAL. NOT LOOPLY.
12
+ *
13
+ * ─────────────────────────────────────────────────────────────────────────────
14
+ * 🔴 THIS FILE USED TO COPY THE OPERATOR'S SUBSCRIPTION CREDENTIAL INTO EVERY
15
+ * RUN. `seedProviderState` read `~/.claude/.credentials.json` and wrote it into
16
+ * each run's sterile session directory, once per launch. It worked, and it was
17
+ * never approved as a design: Looply held a copy of a credential it does not
18
+ * own, in a directory it also sweeps as residue, once per execution. Nine such
19
+ * copies were found on this machine and disposed of.
20
+ *
21
+ * The provider owns its own credential now. Looply stores a PATH.
22
+ *
23
+ * ─────────────────────────────────────────────────────────────────────────────
24
+ * HOW IT WORKS, AND WHY THIS PARTICULAR MECHANISM.
25
+ *
26
+ * `CLAUDE_CONFIG_DIR` relocates the provider's whole profile — where it looks
27
+ * for credentials and where it keeps project state. Verified against the
28
+ * installed 2.1.260 rather than assumed: pointed at an empty directory, `auth
29
+ * status` reported `loggedIn: false` and a `projectsDirectory` inside it. Both
30
+ * halves matter. It relocates, AND it starts clean rather than inheriting the
31
+ * operator's `~/.claude` login, settings, hooks, plugins or transcripts.
32
+ *
33
+ * ⚠️ THE PROFILE IS MACHINE STATE, NOT PROJECT STATE. It is resolved from the
34
+ * daemon's own home, never from `.looply/config.yaml` — that file is inside the
35
+ * worktree, which the model may edit. A worker that could name the provider
36
+ * profile could point it at a directory it had written.
37
+ *
38
+ * ⚠️ AND IT IS DELIBERATELY NOT UNDER `provider-sessions/`. That tree is
39
+ * residue: `workspace-residue-sweep` deletes it when a workspace is retired. A
40
+ * credential store inside a cleanup root is a credential store a reap destroys.
41
+ *
42
+ * ⚠️ WHAT THIS DOES NOT CLAIM. Not process confinement — the provider still runs
43
+ * with host-user authority and can read what the operator can read. Not separate
44
+ * account quotas, not logout independence on the account side, and not secure
45
+ * erasure of anything. It is narrower than all of those: Looply no longer copies
46
+ * or handles the credential, and the provider manages its own.
47
+ */
48
+ /**
49
+ * The persistent, operator-controlled provider profile.
50
+ *
51
+ * One per machine, beside Looply's other machine state. The operator logs into
52
+ * it once with the provider's own flow; nothing here reads what lands there.
53
+ */
54
+ /**
55
+ * The provider executable inside an installed Claude Code package.
56
+ *
57
+ * 🔴 ONE DEFINITION, BECAUSE TWO WOULD DRIFT. `model-transport` composes this
58
+ * path to launch the provider and `doctor` needs the identical one to ask whether
59
+ * that provider is logged in. A readiness check against a different binary is the
60
+ * same class of mistake as one against a different profile: it answers honestly
61
+ * about something nobody is going to run.
62
+ *
63
+ * `null` in, `null` out — no package, no executable, and the caller says so in
64
+ * its own words.
65
+ */
66
+ function providerExecutableFor(packageDir) {
67
+ return packageDir === null ? null : (0, node_path_1.join)(packageDir, 'bin', 'claude.exe');
68
+ }
69
+ function providerProfileDir(deps = {}) {
70
+ return (0, node_path_1.join)(deps.home ?? (0, node_os_1.homedir)(), '.looply', 'provider-profile');
71
+ }
72
+ const DEFAULT_STATUS_TIMEOUT_MS = 20_000;
73
+ function defaultRun(exe, argv, env, timeoutMs) {
74
+ return (0, node_child_process_1.execFileSync)(exe, [...argv], {
75
+ encoding: 'utf8',
76
+ timeout: timeoutMs,
77
+ env: env,
78
+ stdio: ['ignore', 'pipe', 'pipe'],
79
+ });
80
+ }
81
+ /**
82
+ * Is the provider ready to authenticate itself, in the profile the run will use?
83
+ *
84
+ * ⚠️ NO MODEL IS INVOKED. `auth status` is a local command that prints the
85
+ * profile's own state as JSON. Checking whether a login exists must not cost a
86
+ * turn, and a check that did would be a check nobody could afford to run.
87
+ *
88
+ * ⚠️ AND IT ASKS IN THE SAME PROFILE THE RUN WILL USE. A readiness check against
89
+ * a different `CLAUDE_CONFIG_DIR` answers a different question, which is exactly
90
+ * the class of mistake `doctor --provider` was repaired for once already.
91
+ *
92
+ * Nothing here reads, parses, copies or transports a credential. The only thing
93
+ * consumed is a boolean and a method name.
94
+ */
95
+ function checkProviderAuth(executable, env, deps = {}) {
96
+ const profile = providerProfileDir(deps);
97
+ // Created rather than required: an empty profile is a profile the operator
98
+ // can log into, and refusing before it exists helps nobody.
99
+ try {
100
+ (0, node_fs_1.mkdirSync)(profile, { recursive: true });
101
+ }
102
+ catch {
103
+ /* a profile that cannot be made shows up as a status failure below */
104
+ }
105
+ if (!(0, node_fs_1.existsSync)(executable)) {
106
+ return {
107
+ ok: false,
108
+ reason: 'no_executable',
109
+ profile,
110
+ because: `no provider executable at ${executable}`,
111
+ };
112
+ }
113
+ const run = deps.run ?? defaultRun;
114
+ let out;
115
+ try {
116
+ out = run(executable, ['auth', 'status'], env, deps.timeoutMs ?? DEFAULT_STATUS_TIMEOUT_MS);
117
+ }
118
+ catch (e) {
119
+ const err = e;
120
+ // `execFileSync` reports a timeout by killing the child, which surfaces as a
121
+ // signal rather than as a distinct code.
122
+ if (err.code === 'ETIMEDOUT' || err.signal === 'SIGTERM') {
123
+ return {
124
+ ok: false,
125
+ reason: 'timed_out',
126
+ profile,
127
+ because: `the provider did not answer \`auth status\` within the timeout`,
128
+ };
129
+ }
130
+ /**
131
+ * 🔴 A NON-ZERO EXIT IS HOW THIS PROVIDER SAYS "NOT LOGGED IN".
132
+ *
133
+ * Measured on 2.1.260 against an empty profile: exit status 1, empty
134
+ * stderr, and the correct JSON on stdout saying `loggedIn: false`. The
135
+ * first version of this function read the exit code and reported
136
+ * `status_failed` — which is the same error in the other direction as
137
+ * calling everything a login problem. An answer that ARRIVED must be read
138
+ * before the exit code is judged.
139
+ */
140
+ const said = String(err.stdout ?? '');
141
+ if (said.trim() !== '') {
142
+ out = said;
143
+ }
144
+ else {
145
+ return {
146
+ ok: false,
147
+ reason: 'status_failed',
148
+ profile,
149
+ because: `\`auth status\` failed with no answer: ${err.message}`,
150
+ };
151
+ }
152
+ }
153
+ let parsed;
154
+ try {
155
+ parsed = JSON.parse(out);
156
+ }
157
+ catch {
158
+ return {
159
+ ok: false,
160
+ reason: 'unreadable_status',
161
+ profile,
162
+ // The ANSWER's shape, never its content: a status blob could carry an
163
+ // account identifier, and this line goes into logs.
164
+ because: `\`auth status\` did not answer JSON (${out.length} bytes)`,
165
+ };
166
+ }
167
+ if (parsed.loggedIn !== true) {
168
+ return {
169
+ ok: false,
170
+ reason: 'unauthenticated',
171
+ profile,
172
+ because: `the provider is not logged in for this profile. Run: ` +
173
+ `CLAUDE_CONFIG_DIR=${profile} "${executable}" auth login`,
174
+ };
175
+ }
176
+ return {
177
+ ok: true,
178
+ profile,
179
+ method: typeof parsed.authMethod === 'string' ? parsed.authMethod : 'unknown',
180
+ };
181
+ }
182
+ //# sourceMappingURL=provider-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-state.js","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import type { AgentSpec } from './agent-exec';
2
+ /**
3
+ * THE PROVIDERS LOOPLY KNOWS HOW TO START, AND HOW WELL IT KNOWS THEM.
4
+ *
5
+ * ─────────────────────────────────────────────────────────────────────────────
6
+ * 🔴 EVERY PRESET CARRIES ITS PROVENANCE, AND THAT IS THE POINT OF THIS FILE.
7
+ *
8
+ * A preset is a command line: a binary, some flags, and an assumption about how
9
+ * the prompt reaches the model. Getting any of it wrong produces a process that
10
+ * starts, accepts a prompt, and does nothing useful — or worse, one that hangs
11
+ * for the whole of an overnight run.
12
+ *
13
+ * So each preset says whether it has been EXERCISED or merely DECLARED:
14
+ *
15
+ * 'exercised' a real process has been driven through this exact command line
16
+ * in a test in this repository, and the transcript came back.
17
+ * 'declared' written from a provider's documentation. Nobody here has run
18
+ * it. It is a starting point for a person to confirm, not a
19
+ * promise that it works.
20
+ *
21
+ * ⚠️ A `declared` PRESET IS NOT A BUG AND MUST NOT BE PRESENTED AS VERIFIED.
22
+ * Neither the Codex CLI nor the Gemini CLI is installed on the machine this was
23
+ * built on — `command -v` finds neither — so shipping their flags as known-good
24
+ * would be inventing a measurement. What closes that gap is not more confident
25
+ * wording; it is `preflightProvider`, which runs the thing on the machine that
26
+ * has it and reports what actually happened.
27
+ *
28
+ * ─────────────────────────────────────────────────────────────────────────────
29
+ * WHY A REGISTRY AT ALL, GIVEN `agent.command` ALREADY TAKES ANY STRING
30
+ *
31
+ * Because the string is the easy half. The hard half is the three facts around
32
+ * it — whether the prompt goes on stdin or in an argument, whether the binary
33
+ * has an output-format flag, and where its runtime lives so containment can
34
+ * grant it — and those are what a person cannot guess and will get wrong.
35
+ */
36
+ /** How the prompt reaches the model. */
37
+ export type PromptChannel =
38
+ /**
39
+ * Written to the process's stdin, which is what Looply does everywhere.
40
+ *
41
+ * 🔴 THE ONLY CHANNEL THE TRANSPORT IMPLEMENTS. A provider needing anything
42
+ * else is not merely differently configured — it needs code, and saying so is
43
+ * the honest form of this field. See `SUPPORTED_PROMPT_CHANNELS`.
44
+ */
45
+ 'stdin'
46
+ /** Passed as a trailing command-line argument. NOT IMPLEMENTED. */
47
+ | 'argument';
48
+ /**
49
+ * What the transport can actually deliver today.
50
+ *
51
+ * ⚠️ A PRESET NAMING AN UNSUPPORTED CHANNEL IS REFUSED AT RESOLUTION RATHER
52
+ * THAN AT ROUND 1. The alternative is a run that starts, writes a prompt into a
53
+ * stdin nothing is reading, and waits — which looks exactly like a slow model.
54
+ */
55
+ export declare const SUPPORTED_PROMPT_CHANNELS: readonly PromptChannel[];
56
+ export type Provenance = 'exercised' | 'declared';
57
+ export interface ProviderPreset {
58
+ /** The name a person writes in `agent.provider`. */
59
+ readonly id: string;
60
+ /** What it is, for a message a person reads. */
61
+ readonly label: string;
62
+ readonly spec: AgentSpec;
63
+ readonly promptChannel: PromptChannel;
64
+ readonly provenance: Provenance;
65
+ /**
66
+ * Where the flags came from, in one sentence.
67
+ *
68
+ * 🔴 REQUIRED, INCLUDING FOR `exercised` ONES. "It works" is not provenance;
69
+ * what ran, and what it proved, is.
70
+ */
71
+ readonly source: string;
72
+ }
73
+ /**
74
+ * ⚠️ ORDER IS NOT PREFERENCE. This is a lookup, and presenting it as a ranking
75
+ * would imply a comparison nobody here has made — two of the three have never
76
+ * been run at all.
77
+ */
78
+ export declare const PROVIDER_PRESETS: readonly ProviderPreset[];
79
+ export declare function findPreset(id: string): ProviderPreset | undefined;
80
+ export interface ResolveOk {
81
+ ok: true;
82
+ spec: AgentSpec;
83
+ preset: ProviderPreset | null;
84
+ /**
85
+ * Said out loud when a preset has never been run here.
86
+ *
87
+ * ⚠️ A WARNING, NOT A REFUSAL. Refusing would make Looply unusable with a
88
+ * provider that works perfectly well and simply has not been tested in this
89
+ * repository — which is a statement about us, not about the provider.
90
+ */
91
+ warning: string | null;
92
+ }
93
+ export interface ResolveErr {
94
+ ok: false;
95
+ message: string;
96
+ }
97
+ /**
98
+ * Turn a configured provider name into a spec, or say why it cannot be one.
99
+ *
100
+ * ⚠️ FLAT RESULT, NOT A DISCRIMINATED UNION ON A NEGATED TAG. `strict` is off in
101
+ * this repository and `if (!r.ok) return r.message` does not narrow; the shape
102
+ * here is the one that survives that.
103
+ */
104
+ export declare function resolveProvider(input: {
105
+ readonly provider?: string;
106
+ readonly spec: AgentSpec;
107
+ }): ResolveOk | ResolveErr;
108
+ /**
109
+ * The agent spec a command should actually launch, preset applied.
110
+ *
111
+ * 🔴 THREE COMMANDS RESOLVED THE SAME PROJECT THREE DIFFERENT WAYS. `looply
112
+ * run` called `resolveProvider`; `looply scan` and `looply verify` passed
113
+ * `config.agent` straight through, so `agent.provider` was ignored entirely and
114
+ * the same repository used a different binary depending on which verb was
115
+ * typed. A preset that supplies "the prompt goes on stdin" and "this binary has
116
+ * no output-format flag" is not advice — it is how the process is started, and
117
+ * a command that skips it starts a different process.
118
+ *
119
+ * One function, so a fourth command cannot invent a fourth answer.
120
+ */
121
+ export declare function agentSpecFor(config: {
122
+ readonly provider?: string;
123
+ readonly agent: AgentSpec;
124
+ }): {
125
+ ok: true;
126
+ spec: AgentSpec;
127
+ warning: string | null;
128
+ } | {
129
+ ok: false;
130
+ message: string;
131
+ };
132
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,wCAAwC;AACxC,MAAM,MAAM,aAAa;AACvB;;;;;;GAMG;AACD,OAAO;AACT,mEAAmE;GACjE,UAAU,CAAC;AAEf;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,aAAa,EAAc,CAAC;AAE7E,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAwCrD,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjE;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,GAAG,SAAS,GAAG,UAAU,CA2EzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAOzF"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROVIDER_PRESETS = exports.SUPPORTED_PROMPT_CHANNELS = void 0;
4
+ exports.findPreset = findPreset;
5
+ exports.resolveProvider = resolveProvider;
6
+ exports.agentSpecFor = agentSpecFor;
7
+ /**
8
+ * What the transport can actually deliver today.
9
+ *
10
+ * ⚠️ A PRESET NAMING AN UNSUPPORTED CHANNEL IS REFUSED AT RESOLUTION RATHER
11
+ * THAN AT ROUND 1. The alternative is a run that starts, writes a prompt into a
12
+ * stdin nothing is reading, and waits — which looks exactly like a slow model.
13
+ */
14
+ exports.SUPPORTED_PROMPT_CHANNELS = ['stdin'];
15
+ /**
16
+ * ⚠️ ORDER IS NOT PREFERENCE. This is a lookup, and presenting it as a ranking
17
+ * would imply a comparison nobody here has made — two of the three have never
18
+ * been run at all.
19
+ */
20
+ exports.PROVIDER_PRESETS = [
21
+ {
22
+ id: 'claude',
23
+ label: 'Claude Code',
24
+ spec: {
25
+ command: 'claude -p --dangerously-skip-permissions',
26
+ outputFormatFlag: '--output-format',
27
+ },
28
+ promptChannel: 'stdin',
29
+ provenance: 'exercised',
30
+ source: 'The repository default since the transport was built. Driven end to end by the round e2e suite and by a compiled fake standing in for the real binary, both through this exact command line.',
31
+ },
32
+ {
33
+ id: 'codex',
34
+ label: 'OpenAI Codex CLI',
35
+ spec: {
36
+ // No output-format flag is claimed. An empty string is the contract's own
37
+ // way of saying "this binary has none", and inventing one would produce a
38
+ // process refused at startup for an unknown option.
39
+ command: 'codex exec',
40
+ outputFormatFlag: '',
41
+ },
42
+ promptChannel: 'stdin',
43
+ provenance: 'declared',
44
+ source: 'Written from the published CLI documentation. NOT installed on the machine this was built on and never executed here — confirm with `looply doctor --provider` before trusting it.',
45
+ },
46
+ {
47
+ id: 'gemini',
48
+ label: 'Gemini CLI',
49
+ spec: {
50
+ command: 'gemini',
51
+ outputFormatFlag: '',
52
+ },
53
+ promptChannel: 'stdin',
54
+ provenance: 'declared',
55
+ source: 'Written from the published CLI documentation. NOT installed on the machine this was built on and never executed here — confirm with `looply doctor --provider` before trusting it.',
56
+ },
57
+ ];
58
+ function findPreset(id) {
59
+ return exports.PROVIDER_PRESETS.find((p) => p.id === id);
60
+ }
61
+ /**
62
+ * Turn a configured provider name into a spec, or say why it cannot be one.
63
+ *
64
+ * ⚠️ FLAT RESULT, NOT A DISCRIMINATED UNION ON A NEGATED TAG. `strict` is off in
65
+ * this repository and `if (!r.ok) return r.message` does not narrow; the shape
66
+ * here is the one that survives that.
67
+ */
68
+ function resolveProvider(input) {
69
+ if (input.provider === undefined || input.provider === '') {
70
+ return { ok: true, spec: input.spec, preset: null, warning: null };
71
+ }
72
+ const preset = findPreset(input.provider);
73
+ if (!preset) {
74
+ return {
75
+ ok: false,
76
+ message: `no such provider: ${input.provider}. Known: ${exports.PROVIDER_PRESETS.map((p) => p.id).join(', ')}. Any other agent is configured with agent.command instead.`,
77
+ };
78
+ }
79
+ if (!exports.SUPPORTED_PROMPT_CHANNELS.includes(preset.promptChannel)) {
80
+ // 🔴 REFUSED AT RESOLUTION, NOT AT ROUND 1. A provider that wants the
81
+ // prompt as an argument would otherwise start, be handed a prompt on a
82
+ // stdin it never reads, and wait — indistinguishable from a slow model.
83
+ return {
84
+ ok: false,
85
+ message: `provider ${preset.id} needs the prompt on its ${preset.promptChannel}, and this build only delivers it on stdin. That is a code change, not a configuration one.`,
86
+ };
87
+ }
88
+ /**
89
+ * Did the config FILE contain this key?
90
+ *
91
+ * A spec with no `declared` list at all — every hand-built one in the tree,
92
+ * and every fixture — answers false, so a preset supplies its own facts.
93
+ * That is the direction that cannot silently discard a person's intent,
94
+ * because a hand-built spec has no person behind it.
95
+ */
96
+ const wrote = (key) => (input.spec.declared ?? []).includes(key);
97
+ return {
98
+ ok: true,
99
+ // 🔴 THE PRESET IS A DEFAULT, NOT AN OVERRIDE. An explicit `agent.command`
100
+ // wins, because somebody who wrote one is telling us something we do not
101
+ // know — a different binary name, a flag their build needs — and silently
102
+ // discarding it would be the worst kind of helpful.
103
+ /**
104
+ * 🔴 EXPLICIT MEANS WRITTEN DOWN, NOT MERELY PRESENT — AND THE OLD TEST
105
+ * MADE THE PRESET UNREACHABLE.
106
+ *
107
+ * `input.spec.command ? …` looks like "did the person write a command", and
108
+ * is not: `parseConfig` DEFAULTS `agent.command` to Claude's line, so it is
109
+ * truthy for every project that ever existed. The preset's command was
110
+ * therefore overridden every single time, and somebody who wrote
111
+ * `provider: codex` ran Claude — while being shown a warning about codex
112
+ * that reads as confirmation that codex is what they got.
113
+ *
114
+ * `declared` is the list of keys the FILE contained, so this asks the
115
+ * question it always meant to ask.
116
+ *
117
+ * 🔴 AND `no_host_tools` IS CARRIED. It was not in this spread at all, so a
118
+ * person who set `provider:` AND declared how their binary's tools are
119
+ * turned off had the declaration dropped on the floor — and was then
120
+ * refused at the first model call by a message naming the very field they
121
+ * had set. It is the one field on this object that decides whether the
122
+ * launch happens, and it was the one field that could not survive.
123
+ */
124
+ spec: {
125
+ ...preset.spec,
126
+ ...(wrote('command') ? { command: input.spec.command } : {}),
127
+ ...(wrote('output_format_flag') ? { outputFormatFlag: input.spec.outputFormatFlag } : {}),
128
+ ...(input.spec.runtime?.length ? { runtime: input.spec.runtime } : {}),
129
+ ...(input.spec.env?.length ? { env: input.spec.env } : {}),
130
+ ...(input.spec.noHostTools?.length ? { noHostTools: input.spec.noHostTools } : {}),
131
+ ...(input.spec.declared === undefined ? {} : { declared: input.spec.declared }),
132
+ },
133
+ preset,
134
+ warning: preset.provenance === 'declared'
135
+ ? `provider ${preset.id} has never been run by Looply's own tests: ${preset.source}`
136
+ : null,
137
+ };
138
+ }
139
+ /**
140
+ * The agent spec a command should actually launch, preset applied.
141
+ *
142
+ * 🔴 THREE COMMANDS RESOLVED THE SAME PROJECT THREE DIFFERENT WAYS. `looply
143
+ * run` called `resolveProvider`; `looply scan` and `looply verify` passed
144
+ * `config.agent` straight through, so `agent.provider` was ignored entirely and
145
+ * the same repository used a different binary depending on which verb was
146
+ * typed. A preset that supplies "the prompt goes on stdin" and "this binary has
147
+ * no output-format flag" is not advice — it is how the process is started, and
148
+ * a command that skips it starts a different process.
149
+ *
150
+ * One function, so a fourth command cannot invent a fourth answer.
151
+ */
152
+ function agentSpecFor(config) {
153
+ const resolved = resolveProvider({
154
+ ...(config.provider === undefined ? {} : { provider: config.provider }),
155
+ spec: config.agent,
156
+ });
157
+ if (!('spec' in resolved))
158
+ return { ok: false, message: resolved.message };
159
+ return { ok: true, spec: resolved.spec, warning: resolved.warning };
160
+ }
161
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { type PublicationRuling } from '@looply/core';
2
+ import { type CompatibleRecord } from './compatible-sets';
3
+ /**
4
+ * A PUBLICATION RECORDED FROM AN OPERATION THAT HAPPENED, NOT FROM A PERSON
5
+ * TYPING ONE.
6
+ *
7
+ * ─────────────────────────────────────────────────────────────────────────────
8
+ * 🔴 `OWNER_CHARTER.md` §6.D, in its own words: *"The programme controller must
9
+ * drive the existing compatible-set workflow through real local integration
10
+ * operations, not require me to type 'published' records. Only observed
11
+ * authorized operations create receipts."*
12
+ *
13
+ * So this is called AFTER a real integration tick has already moved a ref —
14
+ * never before, and never on an intention. A receipt written for work that
15
+ * might not happen is worse than no receipt, because a person reading it would
16
+ * believe the convergence had moved.
17
+ *
18
+ * ─────────────────────────────────────────────────────────────────────────────
19
+ * ⚠️ IT DECIDES NOTHING ITSELF. Every refusal comes from `publicationRuling` in
20
+ * core, which is the same function `looply repos --published` calls. That is
21
+ * the point of the fold existing: a run that wrote its own lines would be a
22
+ * second implementation of those refusals, and the one that forgets the drift
23
+ * check is the one that writes down a compatible pair that does not exist.
24
+ *
25
+ * ⚠️ AND IT IS NOT ATOMIC ACROSS REPOSITORIES, which the charter also says:
26
+ * *"No atomic cross-repository transaction claim."* One repository's
27
+ * publication is one record. The set says what is left.
28
+ */
29
+ /**
30
+ * What an integration tick actually did, as the tick reported it.
31
+ *
32
+ * ⚠️ NO REPOSITORY ID. The lane moves a ref in the checkout it was given; WHICH
33
+ * declared repository that checkout is is a question about the config, and
34
+ * `selfRepoId` answers it where the config is loaded. A lane that had to be
35
+ * told its own name could be told the wrong one.
36
+ */
37
+ export interface ObservedRefMove {
38
+ /** The ref that moved — `looply/integration` today. */
39
+ readonly ref: string;
40
+ /** Where that ref points now, as the operation left it. */
41
+ readonly to: string;
42
+ }
43
+ /** The same move, once somebody has said which declared repository it happened in. */
44
+ export interface ObservedPublication extends ObservedRefMove {
45
+ readonly repo: string;
46
+ }
47
+ export interface PublicationRecorderDeps {
48
+ /** Every repository this project declares, with a path that can be read. */
49
+ declared(): readonly {
50
+ id: string;
51
+ path: string;
52
+ }[];
53
+ /**
54
+ * Where a repository is now.
55
+ *
56
+ * ⚠️ NULL, NEVER A GUESS — the same contract `ReposDeps` states. An
57
+ * unreadable repository must reach the ruling as absent so it answers
58
+ * `unmeasurable`; inventing a sha would turn "I could not look" into "it has
59
+ * drifted", and those call for opposite things.
60
+ */
61
+ revisionOf(repo: {
62
+ id: string;
63
+ path: string;
64
+ }): Promise<{
65
+ sha: string;
66
+ from: string;
67
+ } | null>;
68
+ records(): Promise<readonly CompatibleRecord[]>;
69
+ append(record: CompatibleRecord): Promise<void>;
70
+ now(): string;
71
+ }
72
+ export interface RecorderOutcome {
73
+ readonly ruling: PublicationRuling;
74
+ /** True only when a record was appended. Never inferred from the kind. */
75
+ readonly recorded: boolean;
76
+ /** One line for the daemon log. */
77
+ readonly line: string;
78
+ }
79
+ /**
80
+ * Offer one observed publication to the ruling, and write the record only if it
81
+ * says to.
82
+ *
83
+ * The order matters and is the ruling's, not this function's: what makes the
84
+ * recording the WRONG ACT first, then drift, then whether it is already down.
85
+ * The one check that lives here is the last one, because it is about the
86
+ * OBSERVATION rather than about the set.
87
+ */
88
+ export declare function recordObservedPublication(deps: PublicationRecorderDeps, observed: ObservedPublication): Promise<RecorderOutcome>;
89
+ /**
90
+ * Where a repository is now, on this machine.
91
+ *
92
+ * ⚠️ ONE IMPLEMENTATION, TWO CALLERS — `looply repos` and the daemon's
93
+ * integrator. Two copies of "where is this repository" are two copies that can
94
+ * disagree, and the one that disagrees is the one deciding whether a set has
95
+ * drifted.
96
+ */
97
+ export declare function nodeRevisionOf(repo: {
98
+ id: string;
99
+ path: string;
100
+ }): Promise<{
101
+ sha: string;
102
+ from: string;
103
+ } | null>;
104
+ /**
105
+ * The daemon's recorder, or nothing at all.
106
+ *
107
+ * ⚠️ NOTHING is the right answer for most projects. A project that declares
108
+ * no sibling repositories has no compatible set to publish against, and a
109
+ * checkout that is not one of the declared repositories cannot say which one
110
+ * published — in both cases the honest thing is to have no recorder rather
111
+ * than one that refuses every tick into the log.
112
+ */
113
+ export declare function nodePublicationRecorder(cwd: string, projectState: string, declared: readonly {
114
+ id: string;
115
+ path: string;
116
+ }[]): ((observed: ObservedRefMove) => Promise<string | null>) | undefined;
117
+ //# sourceMappingURL=publication-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication-recorder.d.ts","sourceRoot":"","sources":["../src/publication-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAyD,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMjH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,sFAAsF;AACtF,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,QAAQ,IAAI,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD;;;;;;;OAOG;IACH,UAAU,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC9F,OAAO,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAkD1B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAetH;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAChD,CAAC,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAsBrE"}