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,317 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_WATCH_OPTIONS = void 0;
4
+ exports.snapshot = snapshot;
5
+ exports.diffSnapshots = diffSnapshots;
6
+ exports.watchSession = watchSession;
7
+ exports.reportObservation = reportObservation;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = require("node:path");
11
+ const core_1 = require("@looply/core");
12
+ exports.DEFAULT_WATCH_OPTIONS = {
13
+ tickMs: 1_000,
14
+ maxEntries: 20_000,
15
+ maxDepth: 24,
16
+ maxHashBytes: 8 * 1024 * 1024,
17
+ };
18
+ /** Repository-relative, forward slashes, or null when it escapes the root. */
19
+ function relativeTo(root, abs) {
20
+ const r = (0, node_path_1.relative)((0, node_path_1.resolve)(root), abs);
21
+ if (r === '')
22
+ return null;
23
+ if (r.startsWith('..'))
24
+ return null;
25
+ return r.split(node_path_1.sep).join('/');
26
+ }
27
+ /**
28
+ * One scope entry, walked.
29
+ *
30
+ * ⚠️ THE BUDGET IS SHARED ACROSS ENTRIES, not per entry. A per-entry budget
31
+ * would let a grant with ten scope entries walk ten times the ceiling, which is
32
+ * the ceiling not existing.
33
+ */
34
+ function walkInto(root, prefix, opt, budget, out) {
35
+ const start = (0, node_path_1.resolve)(root, prefix);
36
+ const stack = [{ at: start, depth: 0 }];
37
+ while (stack.length > 0) {
38
+ const { at, depth } = stack.pop();
39
+ if (budget.left <= 0) {
40
+ out.unreadable.push(`${prefix} (walk stopped at ${opt.maxEntries} entries — the rest was not looked at)`);
41
+ return;
42
+ }
43
+ budget.left -= 1;
44
+ let st;
45
+ try {
46
+ st = (0, node_fs_1.lstatSync)(at);
47
+ }
48
+ catch {
49
+ // The scope entry itself missing is a different fact from a child that
50
+ // vanished mid-walk: the first is a grant naming something that is not
51
+ // there, the second is an ordinary race. Only the first is worth a line.
52
+ if (at === start)
53
+ out.unreadable.push(`${prefix} (could not be read)`);
54
+ continue;
55
+ }
56
+ if (st.isSymbolicLink()) {
57
+ const rel = relativeTo(root, at);
58
+ out.links.push(rel ?? at);
59
+ continue;
60
+ }
61
+ if (st.isDirectory()) {
62
+ if (depth >= opt.maxDepth) {
63
+ out.unreadable.push(`${relativeTo(root, at) ?? at} (deeper than ${opt.maxDepth} — not descended)`);
64
+ continue;
65
+ }
66
+ let children;
67
+ try {
68
+ children = (0, node_fs_1.readdirSync)(at);
69
+ }
70
+ catch {
71
+ out.unreadable.push(`${relativeTo(root, at) ?? at} (could not be listed)`);
72
+ continue;
73
+ }
74
+ for (const c of children)
75
+ stack.push({ at: (0, node_path_1.join)(at, c), depth: depth + 1 });
76
+ continue;
77
+ }
78
+ const rel = relativeTo(root, at);
79
+ if (rel === null) {
80
+ // Cannot happen through a normal walk from inside the root; recorded
81
+ // rather than dropped, because if it ever does the record must say so.
82
+ out.unreadable.push(`${at} (outside ${root} — not recorded)`);
83
+ continue;
84
+ }
85
+ out.files.set(rel, `${st.size}:${st.mtimeMs}:${contentStamp(at, st.size, budget, rel, out)}`);
86
+ }
87
+ }
88
+ /**
89
+ * The part of a stamp that actually detects an edit.
90
+ *
91
+ * ⚠️ A FILE PAST THE BUDGET IS NOT SKIPPED — it is stamped coarsely and said
92
+ * out loud. Skipping it would drop it from the snapshot entirely, which reads
93
+ * as "removed" on the next walk and then "appeared" on the one after: two
94
+ * fabricated events where there was no change at all.
95
+ */
96
+ function contentStamp(abs, size, budget, rel, out) {
97
+ if (size > budget.hashBytesLeft) {
98
+ out.unreadable.push(`${rel} (tracked by size and timestamp only — the hash budget ran out, and a same-size edit inside one filesystem tick would not be seen)`);
99
+ return 'coarse';
100
+ }
101
+ try {
102
+ const h = (0, node_crypto_1.createHash)('sha1').update((0, node_fs_1.readFileSync)(abs)).digest('hex').slice(0, 16);
103
+ budget.hashBytesLeft -= size;
104
+ return h;
105
+ }
106
+ catch {
107
+ out.unreadable.push(`${rel} (could not be read to hash — tracked by size and timestamp only)`);
108
+ return 'coarse';
109
+ }
110
+ }
111
+ /** A snapshot of everything the grant's scope covers, right now. */
112
+ function snapshot(root, scope, opt) {
113
+ const out = { files: new Map(), unreadable: [], links: [] };
114
+ const budget = { left: opt.maxEntries, hashBytesLeft: opt.maxHashBytes };
115
+ for (const prefix of scope)
116
+ walkInto(root, prefix, opt, budget, out);
117
+ return out;
118
+ }
119
+ /**
120
+ * What changed between two snapshots, as candidate events.
121
+ *
122
+ * ⚠️ `at` IS PASSED IN AND IS THE OBSERVER'S CLOCK. Using each file's mtime
123
+ * would hand a session the ability to place its own events before `coversFrom`
124
+ * and out of the record — it can write a file, so it can write a timestamp.
125
+ */
126
+ function diffSnapshots(before, after, at) {
127
+ const events = [];
128
+ for (const [path, stamp] of after) {
129
+ const was = before.get(path);
130
+ if (was === undefined)
131
+ events.push({ at, kind: 'wrote', path, detail: 'appeared' });
132
+ else if (was !== stamp)
133
+ events.push({ at, kind: 'wrote', path, detail: 'changed' });
134
+ }
135
+ for (const path of before.keys()) {
136
+ if (!after.has(path))
137
+ events.push({ at, kind: 'wrote', path, detail: 'removed' });
138
+ }
139
+ return events.sort((a, b) => (a.path ?? '').localeCompare(b.path ?? ''));
140
+ }
141
+ /**
142
+ * Watch a session, inside every bound the grant sets, and return the record.
143
+ *
144
+ * 🔴 IT RETURNS AN `ObservationRecord` WHATEVER HAPPENS, including when it could
145
+ * not start. `attached: false` is the honest answer to "the baseline walk
146
+ * failed", and the fold turns that into `nothing-established` rather than into
147
+ * an empty, reassuring list.
148
+ */
149
+ async function watchSession(window, opt, deps) {
150
+ const events = [];
151
+ const unreadable = new Set();
152
+ let predates = 0;
153
+ let outOfScope = 0;
154
+ let unjudgeable = 0;
155
+ /**
156
+ * 🔴 THE BASELINE. Its contents become the comparison and NEVER events. If
157
+ * this line ever grows an "and emit them too", every edit made before anybody
158
+ * asked is certified by the resulting record.
159
+ */
160
+ let previous;
161
+ try {
162
+ const base = snapshot(opt.root, window.scope, opt);
163
+ previous = base.files;
164
+ for (const u of base.unreadable)
165
+ unreadable.add(u);
166
+ }
167
+ catch (e) {
168
+ return {
169
+ sessionId: window.sessionId,
170
+ coversFrom: window.coversFrom,
171
+ coversTo: null,
172
+ events: [],
173
+ predates: 0,
174
+ outOfScope: 0,
175
+ unjudgeable: 0,
176
+ unreadable: [`${opt.root} (the baseline walk failed: ${e.message})`],
177
+ stop: null,
178
+ attached: false,
179
+ };
180
+ }
181
+ let lastRevision = deps.revision();
182
+ let stop = null;
183
+ let coversTo = null;
184
+ for (;;) {
185
+ const at = deps.now();
186
+ /**
187
+ * ⚠️ ASKED BEFORE WALKING, NOT AFTER. A tick that walked first would keep
188
+ * recording for one whole tick after a person revoked the grant — small in
189
+ * seconds, and exactly the window in which somebody revoking in a hurry
190
+ * cares.
191
+ */
192
+ let authorized;
193
+ try {
194
+ authorized = await deps.stillAuthorized();
195
+ }
196
+ catch {
197
+ /**
198
+ * 🔴 A SERVER THAT CANNOT BE ASKED IS NOT A GRANT THAT STILL HOLDS. The
199
+ * watch stops, and it stops as `revoked` rather than as some softer word,
200
+ * because continuing to observe on the strength of an unanswered question
201
+ * is observing without permission.
202
+ */
203
+ unreadable.add('the server could not be asked whether the grant still holds');
204
+ authorized = false;
205
+ }
206
+ stop = (0, core_1.stopFor)(window, { stillAuthorized: authorized, liveness: deps.liveness(), recorded: events.length, askedToStop: deps.askedToStop() }, at);
207
+ if (stop !== null) {
208
+ coversTo = at;
209
+ break;
210
+ }
211
+ let walked;
212
+ try {
213
+ walked = snapshot(opt.root, window.scope, opt);
214
+ }
215
+ catch (e) {
216
+ unreadable.add(`a walk of ${opt.root} threw (${e.message})`);
217
+ await deps.sleep(opt.tickMs);
218
+ continue;
219
+ }
220
+ for (const u of walked.unreadable)
221
+ unreadable.add(u);
222
+ const candidates = diffSnapshots(previous, walked.files, at);
223
+ previous = walked.files;
224
+ const revisionNow = deps.revision();
225
+ if (revisionNow !== null && revisionNow !== lastRevision) {
226
+ candidates.push({ at, kind: 'revision', path: '.', detail: `${lastRevision ?? 'unknown'} -> ${revisionNow}` });
227
+ lastRevision = revisionNow;
228
+ }
229
+ if (deps.liveness() === 'gone') {
230
+ candidates.push({ at, kind: 'exited', detail: `session ${window.sessionId} is gone` });
231
+ }
232
+ for (const candidate of candidates) {
233
+ /**
234
+ * 🔴 EVERY CANDIDATE GOES THROUGH THE FOLD. The runtime does not decide
235
+ * what belongs; it produces facts and the fold rules on them, which is
236
+ * why the rules are testable without a filesystem and why this loop
237
+ * cannot quietly acquire an exception.
238
+ */
239
+ const ruling = (0, core_1.ruleOnEvent)(window, candidate);
240
+ switch (ruling.kind) {
241
+ case 'record':
242
+ if (events.length < window.cap)
243
+ events.push(candidate);
244
+ break;
245
+ case 'predates':
246
+ predates += 1;
247
+ break;
248
+ case 'out-of-scope':
249
+ outOfScope += 1;
250
+ break;
251
+ case 'unjudgeable':
252
+ unjudgeable += 1;
253
+ break;
254
+ case 'after-the-end':
255
+ /**
256
+ * ⚠️ UNREACHABLE FROM THIS LOOP, AND SAID SO RATHER THAN DRESSED UP.
257
+ * Every candidate here carries the same `at` that `stopFor` was just
258
+ * asked about, so a tick past the expiry has already broken out
259
+ * above. The branch exists because the fold is shared and another
260
+ * caller may feed it events it did not stamp itself — and because a
261
+ * switch that silently fell through would be the place a real one
262
+ * hid later.
263
+ */
264
+ break;
265
+ }
266
+ }
267
+ /**
268
+ * 🔴 ASKED AGAIN, WITH THE NEW COUNT, BEFORE SLEEPING. A watch that filled
269
+ * up mid-tick and then slept would go on discarding events for a full tick
270
+ * while `events.length < cap` silently refused them — the "dropping events
271
+ * quietly" the cap exists to prevent, one layer down. Re-asking the FOLD
272
+ * rather than constructing a `full` stop here keeps the decision in one
273
+ * place.
274
+ */
275
+ stop = (0, core_1.stopFor)(window, { stillAuthorized: authorized, liveness: deps.liveness(), recorded: events.length, askedToStop: deps.askedToStop() }, at);
276
+ if (stop !== null) {
277
+ coversTo = at;
278
+ break;
279
+ }
280
+ await deps.sleep(opt.tickMs);
281
+ }
282
+ return {
283
+ sessionId: window.sessionId,
284
+ coversFrom: window.coversFrom,
285
+ coversTo,
286
+ events,
287
+ predates,
288
+ outOfScope,
289
+ unjudgeable,
290
+ unreadable: [...unreadable],
291
+ stop,
292
+ attached: true,
293
+ };
294
+ }
295
+ /**
296
+ * The lines a person reads after a watch.
297
+ *
298
+ * ⚠️ THE COMPLETENESS IS ON ITS OWN LINE, ALWAYS, even when it is `complete`.
299
+ * A reader who has to infer from the absence of a warning that a record is
300
+ * whole is a reader who will one day infer it from the absence of a bug.
301
+ */
302
+ function reportObservation(record, out) {
303
+ const c = (0, core_1.observationCompleteness)(record);
304
+ out(`watch: ${record.sessionId} — ${record.events.length} event(s) recorded`);
305
+ out(` covers ${record.coversFrom} .. ${record.coversTo ?? '(never closed)'}`);
306
+ out(` ${c.kind}: ${c.because}`);
307
+ if (record.predates > 0) {
308
+ out(` ${record.predates} event(s) predate the watch — NOT certified by it`);
309
+ }
310
+ if (record.outOfScope > 0)
311
+ out(` ${record.outOfScope} outside the granted scope, not recorded`);
312
+ if (record.unjudgeable > 0)
313
+ out(` ${record.unjudgeable} could not be placed against the scope`);
314
+ for (const u of record.unreadable)
315
+ out(` blind: ${u}`);
316
+ }
317
+ //# sourceMappingURL=session-observe-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-observe-runtime.js","sourceRoot":"","sources":["../src/session-observe-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import type { SessionAdoptionVerdict, SessionClaim } from '@looply/core';
2
+ import type { LedgerFs } from './ledger-store';
3
+ import { AppendOnlyStore } from './record-store';
4
+ /**
5
+ * THE SESSION HANDSHAKE RECORDS — `.looply/state/sessions.jsonl`.
6
+ *
7
+ * 🔴 FOUR KINDS OF WRITE-ONCE LINE, because every one of them is a thing that
8
+ * HAPPENED and not a field to be updated. The same reasoning as
9
+ * `compatible-sets.ts`: a store whose records supersede each other can say what
10
+ * is currently believed but not what occurred, and for adoption what occurred
11
+ * is the entire evidentiary record — *when* a person authorized control, *when*
12
+ * the session acknowledged, *what* was measured at the moment of each decision.
13
+ *
14
+ * offered a session presented a claim through the adapter. One per
15
+ * handshake, because a session may present again after fixing
16
+ * whatever got it refused.
17
+ * decided what looply answered that handshake. One per handshake.
18
+ * authorized a PERSON authorized control of this session. One per session.
19
+ * 🔴 NO LOCAL COMMAND WRITES THIS, and that is deliberate.
20
+ * `approval-architecture.spec.ts` holds the rule: the server is
21
+ * the authority, and a file this machine could write saying
22
+ * somebody approved would be a second answer nobody gave. The
23
+ * kind exists because it is the shape a server-issued grant will
24
+ * take; until that path exists, a session tops out at
25
+ * observe-only.
26
+ * acked the SESSION acknowledged the control handshake. One per session.
27
+ *
28
+ * ⚠️ THE LAST TWO ARE SEPARATE LINES ON PURPOSE. Control needs both halves and
29
+ * they arrive from different parties at different moments; collapsing them into
30
+ * one "controlled: true" would destroy the only evidence that the session
31
+ * cooperated rather than was seized.
32
+ */
33
+ export type SessionRecord = {
34
+ readonly id: string;
35
+ readonly kind: 'offered';
36
+ readonly sessionId: string;
37
+ readonly at: string;
38
+ readonly claim: SessionClaim;
39
+ } | {
40
+ readonly id: string;
41
+ readonly kind: 'decided';
42
+ readonly sessionId: string;
43
+ readonly at: string;
44
+ readonly handshakeId: string;
45
+ readonly verdict: SessionAdoptionVerdict;
46
+ } | {
47
+ readonly id: string;
48
+ readonly kind: 'authorized';
49
+ readonly sessionId: string;
50
+ readonly at: string;
51
+ readonly by: string;
52
+ } | {
53
+ readonly id: string;
54
+ readonly kind: 'acked';
55
+ readonly sessionId: string;
56
+ readonly at: string;
57
+ };
58
+ export declare const decidedId: (handshakeId: string) => string;
59
+ export declare const authorizedId: (sessionId: string) => string;
60
+ export declare const ackedId: (sessionId: string) => string;
61
+ export declare class SessionStore extends AppendOnlyStore<SessionRecord> {
62
+ constructor(stateDir: string, fs: LedgerFs);
63
+ }
64
+ export declare function isSessionRecord(v: unknown): v is SessionRecord;
65
+ /** What is true about one session, folded out of its lines. */
66
+ export interface SessionStanding {
67
+ readonly sessionId: string;
68
+ /** The most recent decision, or null if it has only ever offered. */
69
+ readonly verdict: SessionAdoptionVerdict | null;
70
+ readonly decidedAt: string | null;
71
+ readonly authorized: boolean;
72
+ readonly acked: boolean;
73
+ readonly handshakes: number;
74
+ }
75
+ /**
76
+ * ⚠️ THE LATEST DECISION WINS, AND THE EARLIER ONES STAY ON RECORD. A session
77
+ * refused at 10:00 for being on the wrong sha and observed at 10:05 after
78
+ * moving is one session with two handshakes, and the refusal is not erased by
79
+ * the acceptance — it is why anybody would trust the acceptance.
80
+ */
81
+ export declare function standingOf(records: readonly SessionRecord[], sessionId: string): SessionStanding | null;
82
+ /**
83
+ * The most recent claim a session presented, or null if it never has.
84
+ *
85
+ * ⚠️ THE LATEST ONE, NOT THE FIRST. A session that re-presented after moving
86
+ * to a new revision has a newer scope and a newer workspace, and a watcher
87
+ * bounded by the FIRST claim would be bounded by paths that are no longer the
88
+ * ones the project agreed to.
89
+ *
90
+ * 🔴 AND IT IS STILL NOT EVIDENCE. A claim is what the session ASSERTS;
91
+ * `sessionAdoptionVerdict` is what compared it against the tree. This is only
92
+ * ever read for a session whose latest verdict already accepted it — which is
93
+ * why the scope here is a scope the project's own configuration allowed.
94
+ */
95
+ export declare function latestClaimOf(records: readonly SessionRecord[], sessionId: string): SessionClaim | null;
96
+ /** Every session that has ever presented, newest handshake first. */
97
+ export declare function sessionsKnown(records: readonly SessionRecord[]): string[];
98
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;CAC1C,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC1H;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAErG,eAAO,MAAM,SAAS,GAAI,aAAa,MAAM,KAAG,MAAkC,CAAC;AACnF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAAmC,CAAC;AACrF,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,KAAG,MAA8B,CAAC;AAE3E,qBAAa,YAAa,SAAQ,eAAe,CAAC,aAAa,CAAC;gBAClD,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ;CAG3C;AAWD,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,CAgB9D;AAED,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAmBvG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAWvG;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,EAAE,CAOzE"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionStore = exports.ackedId = exports.authorizedId = exports.decidedId = void 0;
4
+ exports.isSessionRecord = isSessionRecord;
5
+ exports.standingOf = standingOf;
6
+ exports.latestClaimOf = latestClaimOf;
7
+ exports.sessionsKnown = sessionsKnown;
8
+ const record_store_1 = require("./record-store");
9
+ const decidedId = (handshakeId) => `${handshakeId}:decided`;
10
+ exports.decidedId = decidedId;
11
+ const authorizedId = (sessionId) => `${sessionId}:authorized`;
12
+ exports.authorizedId = authorizedId;
13
+ const ackedId = (sessionId) => `${sessionId}:acked`;
14
+ exports.ackedId = ackedId;
15
+ class SessionStore extends record_store_1.AppendOnlyStore {
16
+ constructor(stateDir, fs) {
17
+ super(stateDir, 'sessions.jsonl', isSessionRecord, fs);
18
+ }
19
+ }
20
+ exports.SessionStore = SessionStore;
21
+ function isClaim(v) {
22
+ if (typeof v !== 'object' || v === null)
23
+ return false;
24
+ const o = v;
25
+ const strings = ['sessionId', 'adapter', 'adapterVersion', 'repo', 'workspace', 'host', 'sourceSha', 'budgetOwner'];
26
+ if (!strings.every((k) => typeof o[k] === 'string'))
27
+ return false;
28
+ if (typeof o['pid'] !== 'number' || !Number.isInteger(o['pid']))
29
+ return false;
30
+ return Array.isArray(o['scope']) && o['scope'].every((s) => typeof s === 'string');
31
+ }
32
+ function isSessionRecord(v) {
33
+ if (typeof v !== 'object' || v === null)
34
+ return false;
35
+ const o = v;
36
+ if (typeof o['id'] !== 'string' || typeof o['sessionId'] !== 'string' || typeof o['at'] !== 'string')
37
+ return false;
38
+ switch (o['kind']) {
39
+ case 'offered':
40
+ return isClaim(o['claim']);
41
+ case 'decided':
42
+ return typeof o['handshakeId'] === 'string' && typeof o['verdict'] === 'object' && o['verdict'] !== null;
43
+ case 'authorized':
44
+ return typeof o['by'] === 'string';
45
+ case 'acked':
46
+ return true;
47
+ default:
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * ⚠️ THE LATEST DECISION WINS, AND THE EARLIER ONES STAY ON RECORD. A session
53
+ * refused at 10:00 for being on the wrong sha and observed at 10:05 after
54
+ * moving is one session with two handshakes, and the refusal is not erased by
55
+ * the acceptance — it is why anybody would trust the acceptance.
56
+ */
57
+ function standingOf(records, sessionId) {
58
+ const mine = records.filter((r) => r.sessionId === sessionId);
59
+ if (mine.length === 0)
60
+ return null;
61
+ let verdict = null;
62
+ let decidedAt = null;
63
+ let authorized = false;
64
+ let acked = false;
65
+ let handshakes = 0;
66
+ for (const r of mine) {
67
+ if (r.kind === 'offered')
68
+ handshakes += 1;
69
+ else if (r.kind === 'authorized')
70
+ authorized = true;
71
+ else if (r.kind === 'acked')
72
+ acked = true;
73
+ else if (r.kind === 'decided' && (decidedAt === null || r.at >= decidedAt)) {
74
+ verdict = r.verdict;
75
+ decidedAt = r.at;
76
+ }
77
+ }
78
+ return { sessionId, verdict, decidedAt, authorized, acked, handshakes };
79
+ }
80
+ /**
81
+ * The most recent claim a session presented, or null if it never has.
82
+ *
83
+ * ⚠️ THE LATEST ONE, NOT THE FIRST. A session that re-presented after moving
84
+ * to a new revision has a newer scope and a newer workspace, and a watcher
85
+ * bounded by the FIRST claim would be bounded by paths that are no longer the
86
+ * ones the project agreed to.
87
+ *
88
+ * 🔴 AND IT IS STILL NOT EVIDENCE. A claim is what the session ASSERTS;
89
+ * `sessionAdoptionVerdict` is what compared it against the tree. This is only
90
+ * ever read for a session whose latest verdict already accepted it — which is
91
+ * why the scope here is a scope the project's own configuration allowed.
92
+ */
93
+ function latestClaimOf(records, sessionId) {
94
+ let claim = null;
95
+ let at = null;
96
+ for (const r of records) {
97
+ if (r.kind !== 'offered' || r.sessionId !== sessionId)
98
+ continue;
99
+ if (at === null || r.at >= at) {
100
+ claim = r.claim;
101
+ at = r.at;
102
+ }
103
+ }
104
+ return claim;
105
+ }
106
+ /** Every session that has ever presented, newest handshake first. */
107
+ function sessionsKnown(records) {
108
+ const seen = new Map();
109
+ for (const r of records) {
110
+ const prev = seen.get(r.sessionId);
111
+ if (prev === undefined || r.at > prev)
112
+ seen.set(r.sessionId, r.at);
113
+ }
114
+ return [...seen.entries()].sort((a, b) => (a[1] < b[1] ? 1 : a[1] > b[1] ? -1 : 0)).map(([id]) => id);
115
+ }
116
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}