looply-cli 0.0.0-stage → 0.3.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 (793) 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 +2727 -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/serve-cmd.d.ts +115 -0
  605. package/dist/serve-cmd.d.ts.map +1 -0
  606. package/dist/serve-cmd.js +505 -0
  607. package/dist/serve-cmd.js.map +1 -0
  608. package/dist/serve.d.ts +167 -0
  609. package/dist/serve.d.ts.map +1 -0
  610. package/dist/serve.js +336 -0
  611. package/dist/serve.js.map +1 -0
  612. package/dist/server-client.d.ts +766 -0
  613. package/dist/server-client.d.ts.map +1 -0
  614. package/dist/server-client.js +475 -0
  615. package/dist/server-client.js.map +1 -0
  616. package/dist/session-adapter-runtime.d.ts +195 -0
  617. package/dist/session-adapter-runtime.d.ts.map +1 -0
  618. package/dist/session-adapter-runtime.js +373 -0
  619. package/dist/session-adapter-runtime.js.map +1 -0
  620. package/dist/session-checkpoint-runtime.d.ts +62 -0
  621. package/dist/session-checkpoint-runtime.d.ts.map +1 -0
  622. package/dist/session-checkpoint-runtime.js +268 -0
  623. package/dist/session-checkpoint-runtime.js.map +1 -0
  624. package/dist/session-control-transport.d.ts +106 -0
  625. package/dist/session-control-transport.d.ts.map +1 -0
  626. package/dist/session-control-transport.js +232 -0
  627. package/dist/session-control-transport.js.map +1 -0
  628. package/dist/session-observation-store.d.ts +98 -0
  629. package/dist/session-observation-store.d.ts.map +1 -0
  630. package/dist/session-observation-store.js +155 -0
  631. package/dist/session-observation-store.js.map +1 -0
  632. package/dist/session-observe-runtime.d.ts +123 -0
  633. package/dist/session-observe-runtime.d.ts.map +1 -0
  634. package/dist/session-observe-runtime.js +317 -0
  635. package/dist/session-observe-runtime.js.map +1 -0
  636. package/dist/session-store.d.ts +98 -0
  637. package/dist/session-store.d.ts.map +1 -0
  638. package/dist/session-store.js +116 -0
  639. package/dist/session-store.js.map +1 -0
  640. package/dist/sessions-cmd.d.ts +202 -0
  641. package/dist/sessions-cmd.d.ts.map +1 -0
  642. package/dist/sessions-cmd.js +609 -0
  643. package/dist/sessions-cmd.js.map +1 -0
  644. package/dist/settings-overlay.d.ts +53 -0
  645. package/dist/settings-overlay.d.ts.map +1 -0
  646. package/dist/settings-overlay.js +175 -0
  647. package/dist/settings-overlay.js.map +1 -0
  648. package/dist/setup-prompt.d.ts +34 -0
  649. package/dist/setup-prompt.d.ts.map +1 -0
  650. package/dist/setup-prompt.js +92 -0
  651. package/dist/setup-prompt.js.map +1 -0
  652. package/dist/setup.d.ts +103 -0
  653. package/dist/setup.d.ts.map +1 -0
  654. package/dist/setup.js +283 -0
  655. package/dist/setup.js.map +1 -0
  656. package/dist/shared-grants.d.ts +164 -0
  657. package/dist/shared-grants.d.ts.map +1 -0
  658. package/dist/shared-grants.js +242 -0
  659. package/dist/shared-grants.js.map +1 -0
  660. package/dist/signals.d.ts +55 -0
  661. package/dist/signals.d.ts.map +1 -0
  662. package/dist/signals.js +85 -0
  663. package/dist/signals.js.map +1 -0
  664. package/dist/source-cmd.d.ts +201 -0
  665. package/dist/source-cmd.d.ts.map +1 -0
  666. package/dist/source-cmd.js +684 -0
  667. package/dist/source-cmd.js.map +1 -0
  668. package/dist/source-verdict.d.ts +99 -0
  669. package/dist/source-verdict.d.ts.map +1 -0
  670. package/dist/source-verdict.js +182 -0
  671. package/dist/source-verdict.js.map +1 -0
  672. package/dist/spend-ledger.d.ts +350 -0
  673. package/dist/spend-ledger.d.ts.map +1 -0
  674. package/dist/spend-ledger.js +546 -0
  675. package/dist/spend-ledger.js.map +1 -0
  676. package/dist/stale-run-sweep.d.ts +79 -0
  677. package/dist/stale-run-sweep.d.ts.map +1 -0
  678. package/dist/stale-run-sweep.js +116 -0
  679. package/dist/stale-run-sweep.js.map +1 -0
  680. package/dist/start-attempts.d.ts +385 -0
  681. package/dist/start-attempts.d.ts.map +1 -0
  682. package/dist/start-attempts.js +613 -0
  683. package/dist/start-attempts.js.map +1 -0
  684. package/dist/status-cmd.d.ts +28 -0
  685. package/dist/status-cmd.d.ts.map +1 -0
  686. package/dist/status-cmd.js +116 -0
  687. package/dist/status-cmd.js.map +1 -0
  688. package/dist/stop-follow-up.d.ts +107 -0
  689. package/dist/stop-follow-up.d.ts.map +1 -0
  690. package/dist/stop-follow-up.js +172 -0
  691. package/dist/stop-follow-up.js.map +1 -0
  692. package/dist/surface-lease.d.ts +118 -0
  693. package/dist/surface-lease.d.ts.map +1 -0
  694. package/dist/surface-lease.js +485 -0
  695. package/dist/surface-lease.js.map +1 -0
  696. package/dist/sync.d.ts +54 -0
  697. package/dist/sync.d.ts.map +1 -0
  698. package/dist/sync.js +93 -0
  699. package/dist/sync.js.map +1 -0
  700. package/dist/syncing-ledger.d.ts +45 -0
  701. package/dist/syncing-ledger.d.ts.map +1 -0
  702. package/dist/syncing-ledger.js +53 -0
  703. package/dist/syncing-ledger.js.map +1 -0
  704. package/dist/temp-fixtures.d.ts +68 -0
  705. package/dist/temp-fixtures.d.ts.map +1 -0
  706. package/dist/temp-fixtures.js +38 -0
  707. package/dist/temp-fixtures.js.map +1 -0
  708. package/dist/token-window.d.ts +84 -0
  709. package/dist/token-window.d.ts.map +1 -0
  710. package/dist/token-window.js +143 -0
  711. package/dist/token-window.js.map +1 -0
  712. package/dist/tool-bridge.d.ts +177 -0
  713. package/dist/tool-bridge.d.ts.map +1 -0
  714. package/dist/tool-bridge.js +329 -0
  715. package/dist/tool-bridge.js.map +1 -0
  716. package/dist/tool-call-record.d.ts +197 -0
  717. package/dist/tool-call-record.d.ts.map +1 -0
  718. package/dist/tool-call-record.js +276 -0
  719. package/dist/tool-call-record.js.map +1 -0
  720. package/dist/tool-protocol.d.ts +135 -0
  721. package/dist/tool-protocol.d.ts.map +1 -0
  722. package/dist/tool-protocol.js +104 -0
  723. package/dist/tool-protocol.js.map +1 -0
  724. package/dist/tool-worker.d.ts +3 -0
  725. package/dist/tool-worker.d.ts.map +1 -0
  726. package/dist/tool-worker.js +478 -0
  727. package/dist/tool-worker.js.map +1 -0
  728. package/dist/toolchain-mirror.d.ts +86 -0
  729. package/dist/toolchain-mirror.d.ts.map +1 -0
  730. package/dist/toolchain-mirror.js +307 -0
  731. package/dist/toolchain-mirror.js.map +1 -0
  732. package/dist/trusted-git.d.ts +243 -0
  733. package/dist/trusted-git.d.ts.map +1 -0
  734. package/dist/trusted-git.js +920 -0
  735. package/dist/trusted-git.js.map +1 -0
  736. package/dist/ui.d.ts +76 -0
  737. package/dist/ui.d.ts.map +1 -0
  738. package/dist/ui.js +118 -0
  739. package/dist/ui.js.map +1 -0
  740. package/dist/untrusted-exec.d.ts +275 -0
  741. package/dist/untrusted-exec.d.ts.map +1 -0
  742. package/dist/untrusted-exec.js +479 -0
  743. package/dist/untrusted-exec.js.map +1 -0
  744. package/dist/untrusted-gate.d.ts +73 -0
  745. package/dist/untrusted-gate.d.ts.map +1 -0
  746. package/dist/untrusted-gate.js +226 -0
  747. package/dist/untrusted-gate.js.map +1 -0
  748. package/dist/uploader.d.ts +153 -0
  749. package/dist/uploader.d.ts.map +1 -0
  750. package/dist/uploader.js +204 -0
  751. package/dist/uploader.js.map +1 -0
  752. package/dist/verifier.d.ts +66 -0
  753. package/dist/verifier.d.ts.map +1 -0
  754. package/dist/verifier.js +170 -0
  755. package/dist/verifier.js.map +1 -0
  756. package/dist/verify-apply.d.ts +26 -0
  757. package/dist/verify-apply.d.ts.map +1 -0
  758. package/dist/verify-apply.js +36 -0
  759. package/dist/verify-apply.js.map +1 -0
  760. package/dist/verify-cmd.d.ts +44 -0
  761. package/dist/verify-cmd.d.ts.map +1 -0
  762. package/dist/verify-cmd.js +125 -0
  763. package/dist/verify-cmd.js.map +1 -0
  764. package/dist/verify-pass.d.ts +73 -0
  765. package/dist/verify-pass.d.ts.map +1 -0
  766. package/dist/verify-pass.js +103 -0
  767. package/dist/verify-pass.js.map +1 -0
  768. package/dist/welcome.d.ts +43 -0
  769. package/dist/welcome.d.ts.map +1 -0
  770. package/dist/welcome.js +116 -0
  771. package/dist/welcome.js.map +1 -0
  772. package/dist/workspace-provisioner.d.ts +65 -0
  773. package/dist/workspace-provisioner.d.ts.map +1 -0
  774. package/dist/workspace-provisioner.js +66 -0
  775. package/dist/workspace-provisioner.js.map +1 -0
  776. package/dist/workspace-quarantine.d.ts +64 -0
  777. package/dist/workspace-quarantine.d.ts.map +1 -0
  778. package/dist/workspace-quarantine.js +156 -0
  779. package/dist/workspace-quarantine.js.map +1 -0
  780. package/dist/workspace-residue-sweep.d.ts +113 -0
  781. package/dist/workspace-residue-sweep.d.ts.map +1 -0
  782. package/dist/workspace-residue-sweep.js +158 -0
  783. package/dist/workspace-residue-sweep.js.map +1 -0
  784. package/dist/workspace.d.ts +639 -0
  785. package/dist/workspace.d.ts.map +1 -0
  786. package/dist/workspace.js +2026 -0
  787. package/dist/workspace.js.map +1 -0
  788. package/package.json +52 -4
  789. package/win/CredProbe.cs +64 -0
  790. package/win/FakeClaude.cs +56 -0
  791. package/win/HandleProbe.cs +116 -0
  792. package/win/TokenProbe.cs +53 -0
  793. package/win/appcontainer.ps1 +500 -0
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectIndexStore = exports.MAX_SNAPSHOTS = void 0;
4
+ const core_1 = require("@looply/core");
5
+ /**
6
+ * How many snapshots to keep.
7
+ *
8
+ * Small on purpose: a snapshot is worth keeping only while somebody might
9
+ * still be on that revision, and a rebuild is cheap. The alternative — an
10
+ * unbounded directory of derived files — is the defect that arrives months
11
+ * later on somebody else's machine, which this codebase has already met once.
12
+ */
13
+ exports.MAX_SNAPSHOTS = 4;
14
+ class ProjectIndexStore {
15
+ stateDir;
16
+ fs;
17
+ state = 'ok';
18
+ constructor(stateDir, fs) {
19
+ this.stateDir = stateDir;
20
+ this.fs = fs;
21
+ }
22
+ pathFor(treeSha) {
23
+ return `${this.stateDir}/project-index-${treeSha}.json`;
24
+ }
25
+ status() {
26
+ return this.state;
27
+ }
28
+ /**
29
+ * The snapshot for a tree, or null.
30
+ *
31
+ * 🔴 REFUSES A SNAPSHOT THAT DOES NOT DESCRIBE THE TREE ASKED FOR. The file
32
+ * name says which revision it is, and so does the content; if they disagree,
33
+ * something copied a file or a write was interrupted, and the honest answer
34
+ * is "I do not have one" rather than a plausible index of the wrong revision.
35
+ * A stale index is worse than no index, because a reader cannot tell.
36
+ */
37
+ async load(treeSha,
38
+ /**
39
+ * 🔴 THE PACKAGE SET THE CALLER WILL BUILD WITH, AND WITHOUT IT THIS CACHE
40
+ * IS KEYED ON LESS THAN THE SNAPSHOT DEPENDS ON.
41
+ *
42
+ * Found by an adversarial review during Phase 13, and it is a fourth class
43
+ * of staleness none of the checks below can see. A snapshot is a function
44
+ * of (tree, packages) — `run-cmd.ts` builds it with
45
+ * `workspacePackages(config)`, derived from `config.scope.free`, which is
46
+ * read from a WORKING-TREE config file that no tree sha covers. That value
47
+ * reaches the snapshot twice: every file’s `packageName`, and the signed
48
+ * `packages` array.
49
+ *
50
+ * So a person adding a workspace to their config, without committing and
51
+ * without any code changing, got the previous package set back for ever
52
+ * under a matching key — and `factsFromIndex` then wrote "package X lives
53
+ * at Y" from it. No version bump is even conceptually available for that
54
+ * class: nothing about the CODE changed.
55
+ *
56
+ * ⚠️ OPTIONAL, SO EVERY EXISTING CALLER KEEPS WORKING — but a caller that
57
+ * omits it is asking to be handed a snapshot built under a package set
58
+ * nobody compared. The two production callers both pass it.
59
+ */
60
+ expectedPackages) {
61
+ let text;
62
+ try {
63
+ text = await this.fs.readFile(this.pathFor(treeSha));
64
+ }
65
+ catch {
66
+ this.state = 'unreadable';
67
+ return null;
68
+ }
69
+ if (text === null)
70
+ return null;
71
+ let parsed;
72
+ try {
73
+ parsed = JSON.parse(text);
74
+ }
75
+ catch {
76
+ // A torn write. The repository can rebuild it; nothing is lost but time.
77
+ return null;
78
+ }
79
+ if (!isSnapshot(parsed))
80
+ return null;
81
+ if (parsed.schema !== core_1.PROJECT_INDEX_SCHEMA)
82
+ return null;
83
+ /**
84
+ * 🔴 AND THE EXTRACTOR VERSION, WHICH IS NOT THE SCHEMA. A snapshot written
85
+ * by older extraction code describes the repository the way that code used
86
+ * to — on the correct revision, in the correct shape, and wrongly. The tree
87
+ * sha cannot see it and neither can the schema, which changes only when the
88
+ * FILE SHAPE does.
89
+ */
90
+ if (parsed.extractor !== core_1.INDEX_EXTRACTOR_VERSION)
91
+ return null;
92
+ // The content must agree with the name it was filed under.
93
+ if (parsed.treeSha !== treeSha)
94
+ return null;
95
+ /**
96
+ * And with the package set it would be rebuilt under. Compared as a sorted
97
+ * join rather than element-wise because both sides are already sorted by
98
+ * construction (`buildProjectIndex` sorts, and so does this) — so a
99
+ * disagreement here is a real difference in membership, never in order.
100
+ */
101
+ if (expectedPackages !== undefined) {
102
+ const want = [...expectedPackages].sort().join(String.fromCharCode(0));
103
+ const have = [...parsed.packages].sort().join(String.fromCharCode(0));
104
+ if (want !== have)
105
+ return null;
106
+ }
107
+ return parsed;
108
+ }
109
+ /**
110
+ * Write a snapshot for its own tree.
111
+ *
112
+ * Temp-then-rename, so a reader never sees half a file — the same contract
113
+ * every other durable write in this repository uses, and the reason `load`
114
+ * can treat unparseable JSON as merely absent rather than as corruption to
115
+ * reason about.
116
+ */
117
+ async save(snapshot) {
118
+ await this.fs.mkdir(this.stateDir);
119
+ const target = this.pathFor(snapshot.treeSha);
120
+ const tmp = `${target}.${process.pid}.tmp`;
121
+ await this.fs.writeFile(tmp, `${JSON.stringify(snapshot, null, 2)}\n`);
122
+ await this.fs.rename(tmp, target);
123
+ }
124
+ }
125
+ exports.ProjectIndexStore = ProjectIndexStore;
126
+ function isSnapshot(v) {
127
+ if (typeof v !== 'object' || v === null)
128
+ return false;
129
+ const o = v;
130
+ return (typeof o['schema'] === 'number' &&
131
+ // Absent on a snapshot written before the version existed, which is
132
+ // exactly the kind that must not be reused.
133
+ typeof o['extractor'] === 'number' &&
134
+ typeof o['treeSha'] === 'string' &&
135
+ Array.isArray(o['files']) &&
136
+ Array.isArray(o['symbols']) &&
137
+ Array.isArray(o['imports']) &&
138
+ Array.isArray(o['packages']));
139
+ }
140
+ //# sourceMappingURL=project-index-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-index-store.js","sourceRoot":"","sources":["../src/project-index-store.ts"],"names":[],"mappings":";;;AAAA,uCAIsB;AAsCtB;;;;;;;GAOG;AACU,QAAA,aAAa,GAAG,CAAC,CAAC;AAE/B,MAAa,iBAAiB;IAIT;IACA;IAJX,KAAK,GAAoB,IAAI,CAAC;IAEtC,YACmB,QAAgB,EAChB,EAAgE;QADhE,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAA8D;IAChF,CAAC;IAEI,OAAO,CAAC,OAAe;QAC7B,OAAO,GAAG,IAAI,CAAC,QAAQ,kBAAkB,OAAO,OAAO,CAAC;IAC1D,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CACR,OAAe;IACf;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAAoC;QAEpC,IAAI,IAAmB,CAAC;QACxB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAoB;YAAE,OAAO,IAAI,CAAC;QACxD;;;;;;WAMG;QACH,IAAI,MAAM,CAAC,SAAS,KAAK,8BAAuB;YAAE,OAAO,IAAI,CAAC;QAC9D,2DAA2D;QAC3D,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAC5C;;;;;WAKG;QACH,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,QAA8B;QACvC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QAC3C,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;CAgBF;AA3HD,8CA2HC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,CACL,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAC/B,oEAAoE;QACpE,4CAA4C;QAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ;QAClC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { type MemoryKind, type ProjectMemoryRecord } from '@looply/core';
2
+ import type { LedgerFs } from './ledger-store';
3
+ /**
4
+ * How many records of one kind, for one pursuit, the reader keeps.
5
+ *
6
+ * 🔴 PER BUCKET, NOT GLOBAL, AND PHASE 9 IS WHY. Its safety history used one
7
+ * global window across every goal on the machine, so a busy pursuit evicted a
8
+ * quiet one's history before it reached the threshold that would have stopped
9
+ * it — the brake switched itself off on the busiest machines, silently. A
10
+ * global bound here would do the same to memory: one active goal would erase
11
+ * another's decisions.
12
+ */
13
+ export declare const MAX_PER_BUCKET = 32;
14
+ /**
15
+ * Caps on the free-text fields.
16
+ *
17
+ * Deliberately small. A `content` long enough to hold a stack trace is a
18
+ * `content` long enough to hold a secret, and the point of memory is a claim a
19
+ * person could have written on a card.
20
+ */
21
+ export declare const MAX_SUBJECT_CHARS = 200;
22
+ export declare const MAX_CONTENT_CHARS = 1000;
23
+ export declare const MAX_NOTE_CHARS = 200;
24
+ export declare const MAX_REFS = 16;
25
+ export type MemoryStoreState = 'ok' | 'unreadable';
26
+ export type RememberResult = {
27
+ readonly ok: true;
28
+ readonly record: ProjectMemoryRecord;
29
+ } | {
30
+ readonly ok: false;
31
+ readonly because: string;
32
+ };
33
+ /** What a caller supplies. `id` and `recordedAt` are the store's to mint. */
34
+ export type MemoryDraft = Omit<ProjectMemoryRecord, 'id' | 'recordedAt'> & {
35
+ /** Only meaningful on an attempt; see `semanticKey`. */
36
+ readonly distinct?: string;
37
+ };
38
+ export interface MemoryQuery {
39
+ readonly kind?: MemoryKind;
40
+ readonly goalId?: string;
41
+ readonly subject?: string;
42
+ readonly path?: string;
43
+ /** Hard ceiling on what comes back. Defaults to `MAX_PER_BUCKET`. */
44
+ readonly limit?: number;
45
+ }
46
+ /** A record as held in memory: what was written, plus its identity. */
47
+ type Held = ProjectMemoryRecord & {
48
+ readonly key: string;
49
+ };
50
+ export declare class ProjectMemoryStore {
51
+ private readonly stateDir;
52
+ /**
53
+ * 🔴 THE ISOLATION KEY, FIXED AT CONSTRUCTION. A record whose scope names a
54
+ * different project is not filtered out of a query — it is never loaded.
55
+ * Isolation that depends on every caller remembering to pass a filter is
56
+ * isolation that holds until the first caller forgets.
57
+ */
58
+ private readonly projectKey;
59
+ private readonly fs;
60
+ private readonly now;
61
+ private records;
62
+ private state;
63
+ private opened;
64
+ private minted;
65
+ constructor(stateDir: string,
66
+ /**
67
+ * 🔴 THE ISOLATION KEY, FIXED AT CONSTRUCTION. A record whose scope names a
68
+ * different project is not filtered out of a query — it is never loaded.
69
+ * Isolation that depends on every caller remembering to pass a filter is
70
+ * isolation that holds until the first caller forgets.
71
+ */
72
+ projectKey: string, fs: LedgerFs, now?: () => number);
73
+ private get path();
74
+ /** Read what is on disk. Never throws: an unreadable file is a state. */
75
+ open(): Promise<MemoryStoreState>;
76
+ /**
77
+ * Parse the ledger, skipping anything unreadable.
78
+ *
79
+ * ⚠️ A BAD LINE IS SKIPPED, NOT FATAL. A torn final line is what a crash
80
+ * leaves, and it costs one record. Refusing to read the whole file over it
81
+ * would discard every decision and every failed approach the project has
82
+ * accumulated — which is a far worse outcome than losing the last one.
83
+ *
84
+ * A line whose `schema` is unknown is skipped for a different reason: this
85
+ * repository's convention is that a reader REFUSES TO GUESS rather than
86
+ * silently misreading a shape it does not know.
87
+ */
88
+ private parse;
89
+ status(): MemoryStoreState;
90
+ /**
91
+ * Write something down, if its author is entitled to assert it.
92
+ *
93
+ * `writtenByModel` is supplied by the RUNTIME, never by the record. See
94
+ * `admitMemory` for why that separation is the whole fence.
95
+ */
96
+ remember(draft: MemoryDraft, writtenByModel: boolean): Promise<RememberResult>;
97
+ /** Trim the free-text fields to their caps. See the header on why. */
98
+ private bound;
99
+ /** Every record ever written for this project, newest last. History, not truth. */
100
+ history(): readonly Held[];
101
+ /** The ids a later record has explicitly replaced. */
102
+ private supersededIds;
103
+ /**
104
+ * What memory says about the present.
105
+ *
106
+ * 🔴 BOUNDED PER BUCKET AND CURRENCY-FILTERED. A caller asking "what do you
107
+ * know" must not receive the project's entire history: an unbounded answer is
108
+ * one nobody reads and a context nobody can budget.
109
+ */
110
+ current(currentTreeSha: string | null, query?: MemoryQuery): readonly Held[];
111
+ }
112
+ /**
113
+ * The per-working-copy isolation key.
114
+ *
115
+ * 🔴 NOT THE SERVER'S `projectId`. An unpaired machine stamps events
116
+ * `projectId: 'local'` — a shared literal — so two unrelated repositories on one
117
+ * machine would collide under it. This is derived from the absolute path of the
118
+ * working copy, which is always available, needs no pairing, and differs
119
+ * between any two checkouts.
120
+ *
121
+ * ⚠️ IT FAILS CLOSED ON A MOVE. Relocating a repository changes its key, so its
122
+ * memory stops being found. That is the safe direction: the alternative is
123
+ * memory being adopted by whatever now occupies the old path.
124
+ */
125
+ export declare function projectKeyFor(absoluteRepoPath: string, sha256: (s: string) => string): string;
126
+ export {};
127
+ //# sourceMappingURL=project-memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory-store.d.ts","sourceRoot":"","sources":["../src/project-memory-store.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA6C/C;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,YAAY,CAAC;AAEnD,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,YAAY,CAAC,GAAG;IACzE,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAeD,uEAAuE;AACvE,KAAK,IAAI,GAAG,mBAAmB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,qBAAa,kBAAkB;IAO3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAftB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAK;gBAGA,QAAQ,EAAE,MAAM;IACjC;;;;;OAKG;IACc,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,QAAQ,EACZ,GAAG,GAAE,MAAM,MAAyB;IAGvD,OAAO,KAAK,IAAI,GAEf;IAED,yEAAyE;IACnE,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAcvC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,KAAK;IAmBb,MAAM,IAAI,gBAAgB;IAI1B;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA2CpF,sEAAsE;IACtE,OAAO,CAAC,KAAK;IAab,mFAAmF;IACnF,OAAO,IAAI,SAAS,IAAI,EAAE;IAI1B,sDAAsD;IACtD,OAAO,CAAC,aAAa;IAMrB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,GAAE,WAAgB,GAAG,SAAS,IAAI,EAAE;CAiCjF;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAO7F"}
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectMemoryStore = exports.MAX_REFS = exports.MAX_NOTE_CHARS = exports.MAX_CONTENT_CHARS = exports.MAX_SUBJECT_CHARS = exports.MAX_PER_BUCKET = void 0;
4
+ exports.projectKeyFor = projectKeyFor;
5
+ const trusted_git_1 = require("./trusted-git");
6
+ const core_1 = require("@looply/core");
7
+ /**
8
+ * DURABLE PROJECT MEMORY — `.looply/state/project-memory.jsonl`.
9
+ *
10
+ * ─────────────────────────────────────────────────────────────────────────────
11
+ * APPEND-ONLY, AND NOT BY PREFERENCE
12
+ *
13
+ * Two runs can learn the same thing at once, and a daemon can be writing while
14
+ * a run is. The repository has exactly two durable-write idioms — append-only
15
+ * JSONL with a rebuilt projection, and create-once `O_EXCL` one file per fact —
16
+ * and a third was invented once, in Phase 9: a whole-document rewrite, which
17
+ * lost a concurrent writer's record and had to be replaced by this same shape.
18
+ * That lesson is two weeks old. This starts where it ended.
19
+ *
20
+ * The file is NEVER rewritten. Not trimmed, not compacted, not rotated. A
21
+ * compaction is a rewrite and a rewrite is the bug, so the bound lives on what
22
+ * is READ rather than on what is kept — see `MAX_PER_BUCKET`.
23
+ *
24
+ * ─────────────────────────────────────────────────────────────────────────────
25
+ * 🔴 EVERY RECORD IS LED BY A NEWLINE
26
+ *
27
+ * A crash part-way through an append leaves a fragment with no trailing
28
+ * newline. If the next record were merely terminated by one it would
29
+ * concatenate onto that fragment and BOTH would be unreadable — one torn write
30
+ * costing two records. Leading each record means a fragment always ends up
31
+ * alone on its line and is skipped by itself. The blank line this leaves in the
32
+ * ordinary case is skipped by the same rule, and it needs no read-before-append,
33
+ * so it stays correct against a concurrent writer.
34
+ *
35
+ * ─────────────────────────────────────────────────────────────────────────────
36
+ * WHAT CANNOT REACH THIS FILE
37
+ *
38
+ * There is no general redaction utility in this repository, and that is
39
+ * deliberate: the house policy is structural exclusion, because a blocklist
40
+ * fails open the day somebody adds a field it does not know. So this store has
41
+ * NO ACCESS PATH to command output, prompts, environments or logs — it accepts
42
+ * a subject, a claim, and identifiers. The length caps below are not tidiness;
43
+ * they are what stops a caller pasting a log into `content` and calling it a
44
+ * memory.
45
+ */
46
+ /** The one file. Never rewritten — see the header. */
47
+ const MEMORY_FILE = 'project-memory.jsonl';
48
+ /**
49
+ * How many records of one kind, for one pursuit, the reader keeps.
50
+ *
51
+ * 🔴 PER BUCKET, NOT GLOBAL, AND PHASE 9 IS WHY. Its safety history used one
52
+ * global window across every goal on the machine, so a busy pursuit evicted a
53
+ * quiet one's history before it reached the threshold that would have stopped
54
+ * it — the brake switched itself off on the busiest machines, silently. A
55
+ * global bound here would do the same to memory: one active goal would erase
56
+ * another's decisions.
57
+ */
58
+ exports.MAX_PER_BUCKET = 32;
59
+ /**
60
+ * Caps on the free-text fields.
61
+ *
62
+ * Deliberately small. A `content` long enough to hold a stack trace is a
63
+ * `content` long enough to hold a secret, and the point of memory is a claim a
64
+ * person could have written on a card.
65
+ */
66
+ exports.MAX_SUBJECT_CHARS = 200;
67
+ exports.MAX_CONTENT_CHARS = 1000;
68
+ exports.MAX_NOTE_CHARS = 200;
69
+ exports.MAX_REFS = 16;
70
+ class ProjectMemoryStore {
71
+ stateDir;
72
+ projectKey;
73
+ fs;
74
+ now;
75
+ records = [];
76
+ state = 'ok';
77
+ opened = false;
78
+ minted = 0;
79
+ constructor(stateDir,
80
+ /**
81
+ * 🔴 THE ISOLATION KEY, FIXED AT CONSTRUCTION. A record whose scope names a
82
+ * different project is not filtered out of a query — it is never loaded.
83
+ * Isolation that depends on every caller remembering to pass a filter is
84
+ * isolation that holds until the first caller forgets.
85
+ */
86
+ projectKey, fs, now = () => Date.now()) {
87
+ this.stateDir = stateDir;
88
+ this.projectKey = projectKey;
89
+ this.fs = fs;
90
+ this.now = now;
91
+ }
92
+ get path() {
93
+ return `${this.stateDir}/${MEMORY_FILE}`;
94
+ }
95
+ /** Read what is on disk. Never throws: an unreadable file is a state. */
96
+ async open() {
97
+ this.opened = true;
98
+ let text;
99
+ try {
100
+ text = await this.fs.readFile(this.path);
101
+ }
102
+ catch {
103
+ this.state = 'unreadable';
104
+ return this.state;
105
+ }
106
+ this.records = text === null ? [] : this.parse(text);
107
+ this.state = 'ok';
108
+ return this.state;
109
+ }
110
+ /**
111
+ * Parse the ledger, skipping anything unreadable.
112
+ *
113
+ * ⚠️ A BAD LINE IS SKIPPED, NOT FATAL. A torn final line is what a crash
114
+ * leaves, and it costs one record. Refusing to read the whole file over it
115
+ * would discard every decision and every failed approach the project has
116
+ * accumulated — which is a far worse outcome than losing the last one.
117
+ *
118
+ * A line whose `schema` is unknown is skipped for a different reason: this
119
+ * repository's convention is that a reader REFUSES TO GUESS rather than
120
+ * silently misreading a shape it does not know.
121
+ */
122
+ parse(text) {
123
+ const out = [];
124
+ for (const line of text.split('\n')) {
125
+ if (line.trim() === '')
126
+ continue;
127
+ let parsed;
128
+ try {
129
+ parsed = JSON.parse(line);
130
+ }
131
+ catch {
132
+ continue;
133
+ }
134
+ if (!isStoredLine(parsed))
135
+ continue;
136
+ if (parsed.schema !== core_1.PROJECT_MEMORY_SCHEMA)
137
+ continue;
138
+ // Never loaded, not merely filtered. See the constructor.
139
+ if (parsed.scope.projectKey !== this.projectKey)
140
+ continue;
141
+ out.push(parsed);
142
+ }
143
+ return out;
144
+ }
145
+ status() {
146
+ return this.state;
147
+ }
148
+ /**
149
+ * Write something down, if its author is entitled to assert it.
150
+ *
151
+ * `writtenByModel` is supplied by the RUNTIME, never by the record. See
152
+ * `admitMemory` for why that separation is the whole fence.
153
+ */
154
+ async remember(draft, writtenByModel) {
155
+ if (!this.opened)
156
+ throw new Error('ProjectMemoryStore.remember before open()');
157
+ if (this.state === 'unreadable') {
158
+ // Appending to a file we could not read would be writing into the dark:
159
+ // the duplicate check below is derived from what was loaded, so every
160
+ // repeat observation would land again and grow the file without bound.
161
+ return { ok: false, because: 'the memory ledger could not be read' };
162
+ }
163
+ if (draft.scope.projectKey !== this.projectKey) {
164
+ return { ok: false, because: 'that memory belongs to another project' };
165
+ }
166
+ const bounded = this.bound(draft);
167
+ const admission = (0, core_1.admitMemory)(bounded, writtenByModel);
168
+ if (!admission.ok)
169
+ return { ok: false, because: admission.because };
170
+ /**
171
+ * The same claim observed again is ONE memory. A newer observation of an
172
+ * unchanged claim still gets appended — the revision it was seen at is what
173
+ * makes it useful — but only when something a reader would act on differs,
174
+ * so a run that re-observes an unchanged world adds nothing.
175
+ */
176
+ const key = (0, core_1.semanticKey)(bounded);
177
+ const existing = this.records.find((r) => r.key === key);
178
+ if (existing !== undefined && existing.revision?.treeSha === draft.revision?.treeSha) {
179
+ return { ok: true, record: existing };
180
+ }
181
+ this.minted += 1;
182
+ const record = {
183
+ ...bounded,
184
+ id: `mem_${this.now().toString(36)}_${this.minted.toString(36)}`,
185
+ recordedAt: new Date(this.now()).toISOString(),
186
+ };
187
+ await this.fs.mkdir(this.stateDir);
188
+ await this.fs.appendFile(this.path, `\n${JSON.stringify({ schema: core_1.PROJECT_MEMORY_SCHEMA, key, ...record })}\n`);
189
+ this.records.push({ ...record, key });
190
+ return { ok: true, record };
191
+ }
192
+ /** Trim the free-text fields to their caps. See the header on why. */
193
+ bound(d) {
194
+ return {
195
+ ...d,
196
+ subject: d.subject.slice(0, exports.MAX_SUBJECT_CHARS),
197
+ content: d.content.slice(0, exports.MAX_CONTENT_CHARS),
198
+ provenance: {
199
+ ...d.provenance,
200
+ refs: d.provenance.refs.slice(0, exports.MAX_REFS),
201
+ ...(d.provenance.note === undefined ? {} : { note: d.provenance.note.slice(0, exports.MAX_NOTE_CHARS) }),
202
+ },
203
+ };
204
+ }
205
+ /** Every record ever written for this project, newest last. History, not truth. */
206
+ history() {
207
+ return this.records;
208
+ }
209
+ /** The ids a later record has explicitly replaced. */
210
+ supersededIds() {
211
+ const out = new Set();
212
+ for (const r of this.records)
213
+ if (r.supersedes !== undefined)
214
+ out.add(r.supersedes);
215
+ return out;
216
+ }
217
+ /**
218
+ * What memory says about the present.
219
+ *
220
+ * 🔴 BOUNDED PER BUCKET AND CURRENCY-FILTERED. A caller asking "what do you
221
+ * know" must not receive the project's entire history: an unbounded answer is
222
+ * one nobody reads and a context nobody can budget.
223
+ */
224
+ current(currentTreeSha, query = {}) {
225
+ const superseded = this.supersededIds();
226
+ const limit = Math.max(0, Math.min(query.limit ?? exports.MAX_PER_BUCKET, exports.MAX_PER_BUCKET));
227
+ const matching = this.records.filter((r) => {
228
+ // A withdrawal exists only to retire another record. It is never
229
+ // itself shown — it is not a claim, it is the act of dropping one.
230
+ if (r.withdrawn === true)
231
+ return false;
232
+ if (!(0, core_1.currencyOf)(r, { currentTreeSha, supersededIds: superseded }).current)
233
+ return false;
234
+ if (query.kind !== undefined && r.kind !== query.kind)
235
+ return false;
236
+ if (query.goalId !== undefined && r.scope.goalId !== query.goalId)
237
+ return false;
238
+ if (query.subject !== undefined && r.subject !== query.subject)
239
+ return false;
240
+ if (query.path !== undefined && r.scope.path !== query.path)
241
+ return false;
242
+ return true;
243
+ });
244
+ /**
245
+ * Newest wins for one semantic claim: a fact re-observed at a newer tree
246
+ * supersedes its own older observation without anybody writing a
247
+ * supersession, which is what stops a stale duplicate outliving its update.
248
+ */
249
+ // Newest wins for one semantic claim: a fact re-observed at a newer tree
250
+ // supersedes its own older observation without anybody writing a
251
+ // supersession, which stops a stale duplicate outliving its update.
252
+ //
253
+ // The key is the one stored at WRITE time, so two attempts differing only
254
+ // by the run they happened in stay two — see `StoredLine.key`.
255
+ const newestByClaim = new Map();
256
+ for (const r of matching)
257
+ newestByClaim.set(r.key, r);
258
+ const collapsed = [...newestByClaim.values()];
259
+ return collapsed.slice(Math.max(0, collapsed.length - limit));
260
+ }
261
+ }
262
+ exports.ProjectMemoryStore = ProjectMemoryStore;
263
+ function isStoredLine(v) {
264
+ if (typeof v !== 'object' || v === null)
265
+ return false;
266
+ const o = v;
267
+ const scope = o['scope'];
268
+ return (typeof o['schema'] === 'number' &&
269
+ typeof o['id'] === 'string' &&
270
+ typeof o['kind'] === 'string' &&
271
+ typeof o['source'] === 'string' &&
272
+ typeof o['subject'] === 'string' &&
273
+ typeof o['content'] === 'string' &&
274
+ typeof o['recordedAt'] === 'string' &&
275
+ typeof o['provenance'] === 'object' &&
276
+ o['provenance'] !== null &&
277
+ typeof scope === 'object' &&
278
+ scope !== null &&
279
+ typeof scope['projectKey'] === 'string');
280
+ }
281
+ /**
282
+ * The per-working-copy isolation key.
283
+ *
284
+ * 🔴 NOT THE SERVER'S `projectId`. An unpaired machine stamps events
285
+ * `projectId: 'local'` — a shared literal — so two unrelated repositories on one
286
+ * machine would collide under it. This is derived from the absolute path of the
287
+ * working copy, which is always available, needs no pairing, and differs
288
+ * between any two checkouts.
289
+ *
290
+ * ⚠️ IT FAILS CLOSED ON A MOVE. Relocating a repository changes its key, so its
291
+ * memory stops being found. That is the safe direction: the alternative is
292
+ * memory being adopted by whatever now occupies the old path.
293
+ */
294
+ function projectKeyFor(absoluteRepoPath, sha256) {
295
+ // 🔴 THE REPOSITORY, NOT THE DIRECTORY — same reason as `repoPathHash`. A run
296
+ // in a linked worktree was reading an EMPTY project memory and writing its
297
+ // own, so everything the project had learned stopped being carried in.
298
+ // Unchanged for an ordinary checkout, which resolves to itself.
299
+ const path = (0, trusted_git_1.repoIdentityPath)(absoluteRepoPath);
300
+ return `pk_${sha256(path.replace(/\\/g, '/').toLowerCase()).slice(0, 32)}`;
301
+ }
302
+ //# sourceMappingURL=project-memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory-store.js","sourceRoot":"","sources":["../src/project-memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ProposalRecord } from '@looply/core';
2
+ import type { LedgerFs } from './ledger-store';
3
+ import { AppendOnlyStore } from './record-store';
4
+ /**
5
+ * THE PROPOSAL RECORDS ON DISK — `.looply/state/proposals.jsonl`.
6
+ *
7
+ * Append-only (see `record-store.ts`), keyed by the record id — the QUESTION
8
+ * (goal, version, tree, prompt digest) — so the same question asked again is
9
+ * answered from here and the transport is not called twice for it.
10
+ */
11
+ export declare class ProposalStore extends AppendOnlyStore<ProposalRecord> {
12
+ constructor(stateDir: string, fs: LedgerFs);
13
+ }
14
+ //# sourceMappingURL=proposal-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-store.d.ts","sourceRoot":"","sources":["../src/proposal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,eAAe,CAAC,cAAc,CAAC;gBACpD,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ;CAG3C"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProposalStore = void 0;
4
+ const core_1 = require("@looply/core");
5
+ const record_store_1 = require("./record-store");
6
+ /**
7
+ * THE PROPOSAL RECORDS ON DISK — `.looply/state/proposals.jsonl`.
8
+ *
9
+ * Append-only (see `record-store.ts`), keyed by the record id — the QUESTION
10
+ * (goal, version, tree, prompt digest) — so the same question asked again is
11
+ * answered from here and the transport is not called twice for it.
12
+ */
13
+ class ProposalStore extends record_store_1.AppendOnlyStore {
14
+ constructor(stateDir, fs) {
15
+ super(stateDir, 'proposals.jsonl', core_1.isProposalRecord, fs);
16
+ }
17
+ }
18
+ exports.ProposalStore = ProposalStore;
19
+ //# sourceMappingURL=proposal-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-store.js","sourceRoot":"","sources":["../src/proposal-store.ts"],"names":[],"mappings":";;;AAAA,uCAAqE;AAErE,iDAAiD;AAEjD;;;;;;GAMG;AACH,MAAa,aAAc,SAAQ,8BAA+B;IAChE,YAAY,QAAgB,EAAE,EAAY;QACxC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,EAAE,uBAAgB,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF;AAJD,sCAIC"}