@reticlehq/server 2.0.1 → 2.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 (479) hide show
  1. package/LICENSE-ENTERPRISE +37 -0
  2. package/README.md +5 -1
  3. package/dist/bridge-security.d.ts +1 -1
  4. package/dist/bridge-security.js +1 -1
  5. package/dist/bridge.d.ts +7 -0
  6. package/dist/bridge.d.ts.map +1 -1
  7. package/dist/bridge.js +62 -6
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/bridge.test-harness.d.ts +5 -0
  10. package/dist/bridge.test-harness.d.ts.map +1 -1
  11. package/dist/bridge.test-harness.js +4 -0
  12. package/dist/bridge.test-harness.js.map +1 -1
  13. package/dist/capsule/capsule-store.d.ts +66 -0
  14. package/dist/capsule/capsule-store.d.ts.map +1 -0
  15. package/dist/capsule/capsule-store.js +110 -0
  16. package/dist/capsule/capsule-store.js.map +1 -0
  17. package/dist/capsule/capsule.d.ts +19 -0
  18. package/dist/capsule/capsule.d.ts.map +1 -0
  19. package/dist/capsule/capsule.js +36 -0
  20. package/dist/capsule/capsule.js.map +1 -0
  21. package/dist/capsule/causal-summary.d.ts +36 -0
  22. package/dist/capsule/causal-summary.d.ts.map +1 -0
  23. package/dist/capsule/causal-summary.js +111 -0
  24. package/dist/capsule/causal-summary.js.map +1 -0
  25. package/dist/capsule/divergence.d.ts +31 -0
  26. package/dist/capsule/divergence.d.ts.map +1 -0
  27. package/dist/capsule/divergence.js +41 -0
  28. package/dist/capsule/divergence.js.map +1 -0
  29. package/dist/capsule/minimize.d.ts +13 -0
  30. package/dist/capsule/minimize.d.ts.map +1 -0
  31. package/dist/capsule/minimize.js +23 -0
  32. package/dist/capsule/minimize.js.map +1 -0
  33. package/dist/capsule/predicate-to-links.d.ts +9 -0
  34. package/dist/capsule/predicate-to-links.d.ts.map +1 -0
  35. package/dist/capsule/predicate-to-links.js +31 -0
  36. package/dist/capsule/predicate-to-links.js.map +1 -0
  37. package/dist/cli-flow-commands.d.ts +31 -0
  38. package/dist/cli-flow-commands.d.ts.map +1 -0
  39. package/dist/cli-flow-commands.js +207 -0
  40. package/dist/cli-flow-commands.js.map +1 -0
  41. package/dist/cli-launch.d.ts.map +1 -1
  42. package/dist/cli-launch.js +1 -2
  43. package/dist/cli-launch.js.map +1 -1
  44. package/dist/cli-parse.d.ts +18 -2
  45. package/dist/cli-parse.d.ts.map +1 -1
  46. package/dist/cli-parse.js +57 -0
  47. package/dist/cli-parse.js.map +1 -1
  48. package/dist/cli-port.d.ts +10 -4
  49. package/dist/cli-port.d.ts.map +1 -1
  50. package/dist/cli-port.js +32 -6
  51. package/dist/cli-port.js.map +1 -1
  52. package/dist/cli-verify.d.ts.map +1 -1
  53. package/dist/cli-verify.js +29 -10
  54. package/dist/cli-verify.js.map +1 -1
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +83 -13
  57. package/dist/cli.js.map +1 -1
  58. package/dist/crawl/crawl-tools.d.ts.map +1 -1
  59. package/dist/crawl/crawl-tools.js +12 -0
  60. package/dist/crawl/crawl-tools.js.map +1 -1
  61. package/dist/crawl/crawl.d.ts +23 -1
  62. package/dist/crawl/crawl.d.ts.map +1 -1
  63. package/dist/crawl/crawl.js +42 -12
  64. package/dist/crawl/crawl.js.map +1 -1
  65. package/dist/daemon-resilience.d.ts +5 -5
  66. package/dist/daemon-resilience.js +5 -5
  67. package/dist/daemon.d.ts +9 -3
  68. package/dist/daemon.d.ts.map +1 -1
  69. package/dist/daemon.js +41 -8
  70. package/dist/daemon.js.map +1 -1
  71. package/dist/domain/domain-tools.d.ts.map +1 -1
  72. package/dist/domain/domain-tools.js +11 -1
  73. package/dist/domain/domain-tools.js.map +1 -1
  74. package/dist/domain/flow-risk.d.ts +4 -4
  75. package/dist/domain/flow-risk.js +4 -4
  76. package/dist/ee/audit-log.d.ts +2 -2
  77. package/dist/ee/audit-log.js +2 -2
  78. package/dist/events/event-filters.d.ts +35 -1
  79. package/dist/events/event-filters.d.ts.map +1 -1
  80. package/dist/events/event-filters.js +93 -6
  81. package/dist/events/event-filters.js.map +1 -1
  82. package/dist/events/predicate-eval.d.ts +15 -0
  83. package/dist/events/predicate-eval.d.ts.map +1 -1
  84. package/dist/events/predicate-eval.js +130 -9
  85. package/dist/events/predicate-eval.js.map +1 -1
  86. package/dist/events/predicate.d.ts +22 -1
  87. package/dist/events/predicate.d.ts.map +1 -1
  88. package/dist/events/predicate.js +169 -15
  89. package/dist/events/predicate.js.map +1 -1
  90. package/dist/events/ring-buffer.d.ts +10 -8
  91. package/dist/events/ring-buffer.d.ts.map +1 -1
  92. package/dist/events/ring-buffer.js +84 -25
  93. package/dist/events/ring-buffer.js.map +1 -1
  94. package/dist/flows/affected.d.ts +25 -0
  95. package/dist/flows/affected.d.ts.map +1 -0
  96. package/dist/flows/affected.js +36 -0
  97. package/dist/flows/affected.js.map +1 -0
  98. package/dist/flows/annotate.d.ts +4 -4
  99. package/dist/flows/annotate.js +4 -4
  100. package/dist/flows/assertion-integrity.d.ts +24 -0
  101. package/dist/flows/assertion-integrity.d.ts.map +1 -0
  102. package/dist/flows/assertion-integrity.js +27 -0
  103. package/dist/flows/assertion-integrity.js.map +1 -0
  104. package/dist/flows/assertion-tiers-store.d.ts +80 -0
  105. package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
  106. package/dist/flows/assertion-tiers-store.js +99 -0
  107. package/dist/flows/assertion-tiers-store.js.map +1 -0
  108. package/dist/flows/buddy-status.d.ts +25 -0
  109. package/dist/flows/buddy-status.d.ts.map +1 -0
  110. package/dist/flows/buddy-status.js +33 -0
  111. package/dist/flows/buddy-status.js.map +1 -0
  112. package/dist/flows/coverage.d.ts +28 -0
  113. package/dist/flows/coverage.d.ts.map +1 -0
  114. package/dist/flows/coverage.js +22 -0
  115. package/dist/flows/coverage.js.map +1 -0
  116. package/dist/flows/decision.d.ts.map +1 -1
  117. package/dist/flows/decision.js +18 -9
  118. package/dist/flows/decision.js.map +1 -1
  119. package/dist/flows/flake-store.d.ts +20 -0
  120. package/dist/flows/flake-store.d.ts.map +1 -0
  121. package/dist/flows/flake-store.js +59 -0
  122. package/dist/flows/flake-store.js.map +1 -0
  123. package/dist/flows/flake.d.ts +58 -0
  124. package/dist/flows/flake.d.ts.map +1 -0
  125. package/dist/flows/flake.js +36 -0
  126. package/dist/flows/flake.js.map +1 -0
  127. package/dist/flows/flow-classify.d.ts +8 -8
  128. package/dist/flows/flow-classify.d.ts.map +1 -1
  129. package/dist/flows/flow-classify.js +12 -20
  130. package/dist/flows/flow-classify.js.map +1 -1
  131. package/dist/flows/flow-replay-run.d.ts +6 -0
  132. package/dist/flows/flow-replay-run.d.ts.map +1 -1
  133. package/dist/flows/flow-replay-run.js +49 -0
  134. package/dist/flows/flow-replay-run.js.map +1 -1
  135. package/dist/flows/flow-replay.d.ts +9 -0
  136. package/dist/flows/flow-replay.d.ts.map +1 -1
  137. package/dist/flows/flow-replay.js +52 -18
  138. package/dist/flows/flow-replay.js.map +1 -1
  139. package/dist/flows/flow-report.d.ts +4 -4
  140. package/dist/flows/flow-report.d.ts.map +1 -1
  141. package/dist/flows/flow-report.js +2 -1
  142. package/dist/flows/flow-report.js.map +1 -1
  143. package/dist/flows/flow-sources.d.ts +20 -0
  144. package/dist/flows/flow-sources.d.ts.map +1 -0
  145. package/dist/flows/flow-sources.js +33 -0
  146. package/dist/flows/flow-sources.js.map +1 -0
  147. package/dist/flows/flow-tools.d.ts +13 -1
  148. package/dist/flows/flow-tools.d.ts.map +1 -1
  149. package/dist/flows/flow-tools.js +97 -152
  150. package/dist/flows/flow-tools.js.map +1 -1
  151. package/dist/flows/flows.d.ts +9 -4
  152. package/dist/flows/flows.d.ts.map +1 -1
  153. package/dist/flows/flows.js +39 -27
  154. package/dist/flows/flows.js.map +1 -1
  155. package/dist/flows/gate.d.ts +39 -0
  156. package/dist/flows/gate.d.ts.map +1 -0
  157. package/dist/flows/gate.js +34 -0
  158. package/dist/flows/gate.js.map +1 -0
  159. package/dist/flows/git-changed.d.ts +9 -0
  160. package/dist/flows/git-changed.d.ts.map +1 -0
  161. package/dist/flows/git-changed.js +25 -0
  162. package/dist/flows/git-changed.js.map +1 -0
  163. package/dist/flows/heal-run.d.ts +19 -0
  164. package/dist/flows/heal-run.d.ts.map +1 -0
  165. package/dist/flows/heal-run.js +137 -0
  166. package/dist/flows/heal-run.js.map +1 -0
  167. package/dist/flows/parallel-suite.d.ts +27 -0
  168. package/dist/flows/parallel-suite.d.ts.map +1 -0
  169. package/dist/flows/parallel-suite.js +51 -0
  170. package/dist/flows/parallel-suite.js.map +1 -0
  171. package/dist/flows/replay.d.ts +13 -0
  172. package/dist/flows/replay.d.ts.map +1 -1
  173. package/dist/flows/replay.js +56 -23
  174. package/dist/flows/replay.js.map +1 -1
  175. package/dist/flows/watch-batcher.d.ts +18 -0
  176. package/dist/flows/watch-batcher.d.ts.map +1 -0
  177. package/dist/flows/watch-batcher.js +20 -0
  178. package/dist/flows/watch-batcher.js.map +1 -0
  179. package/dist/honesty/blind-spots.d.ts +37 -0
  180. package/dist/honesty/blind-spots.d.ts.map +1 -0
  181. package/dist/honesty/blind-spots.js +57 -0
  182. package/dist/honesty/blind-spots.js.map +1 -0
  183. package/dist/honesty/honesty.d.ts +57 -0
  184. package/dist/honesty/honesty.d.ts.map +1 -0
  185. package/dist/honesty/honesty.js +63 -0
  186. package/dist/honesty/honesty.js.map +1 -0
  187. package/dist/http-server.d.ts +5 -9
  188. package/dist/http-server.d.ts.map +1 -1
  189. package/dist/http-server.js +5 -9
  190. package/dist/http-server.js.map +1 -1
  191. package/dist/idle-shutdown.d.ts +2 -2
  192. package/dist/idle-shutdown.js +2 -2
  193. package/dist/index.d.ts +3 -3
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +131 -73
  196. package/dist/index.js.map +1 -1
  197. package/dist/init/agent-rules.d.ts +38 -0
  198. package/dist/init/agent-rules.d.ts.map +1 -0
  199. package/dist/init/agent-rules.js +65 -0
  200. package/dist/init/agent-rules.js.map +1 -0
  201. package/dist/init/mcp.d.ts.map +1 -1
  202. package/dist/init/mcp.js +4 -3
  203. package/dist/init/mcp.js.map +1 -1
  204. package/dist/init/plan.d.ts +6 -0
  205. package/dist/init/plan.d.ts.map +1 -1
  206. package/dist/init/plan.js +79 -3
  207. package/dist/init/plan.js.map +1 -1
  208. package/dist/init/run.d.ts.map +1 -1
  209. package/dist/init/run.js +4 -0
  210. package/dist/init/run.js.map +1 -1
  211. package/dist/init/snippets.js +1 -1
  212. package/dist/init/vite-config.d.ts +1 -1
  213. package/dist/init/vite-config.js +2 -2
  214. package/dist/init/vite-config.js.map +1 -1
  215. package/dist/input/network-detail.d.ts +74 -0
  216. package/dist/input/network-detail.d.ts.map +1 -0
  217. package/dist/input/network-detail.js +160 -0
  218. package/dist/input/network-detail.js.map +1 -0
  219. package/dist/input/network-mock-tools.d.ts.map +1 -1
  220. package/dist/input/network-mock-tools.js +1 -6
  221. package/dist/input/network-mock-tools.js.map +1 -1
  222. package/dist/input/network-mock.d.ts +4 -4
  223. package/dist/input/real-input.d.ts +44 -11
  224. package/dist/input/real-input.d.ts.map +1 -1
  225. package/dist/input/real-input.js +57 -9
  226. package/dist/input/real-input.js.map +1 -1
  227. package/dist/input/viewport-tools.d.ts.map +1 -1
  228. package/dist/input/viewport-tools.js +1 -6
  229. package/dist/input/viewport-tools.js.map +1 -1
  230. package/dist/journal/ambient-store.d.ts +16 -0
  231. package/dist/journal/ambient-store.d.ts.map +1 -0
  232. package/dist/journal/ambient-store.js +46 -0
  233. package/dist/journal/ambient-store.js.map +1 -0
  234. package/dist/journal/ambient.d.ts +48 -0
  235. package/dist/journal/ambient.d.ts.map +1 -0
  236. package/dist/journal/ambient.js +48 -0
  237. package/dist/journal/ambient.js.map +1 -0
  238. package/dist/journal/attach-journal.d.ts +22 -0
  239. package/dist/journal/attach-journal.d.ts.map +1 -0
  240. package/dist/journal/attach-journal.js +20 -0
  241. package/dist/journal/attach-journal.js.map +1 -0
  242. package/dist/journal/deviation-report.d.ts +28 -0
  243. package/dist/journal/deviation-report.d.ts.map +1 -0
  244. package/dist/journal/deviation-report.js +54 -0
  245. package/dist/journal/deviation-report.js.map +1 -0
  246. package/dist/journal/deviation-service.d.ts +12 -0
  247. package/dist/journal/deviation-service.d.ts.map +1 -0
  248. package/dist/journal/deviation-service.js +32 -0
  249. package/dist/journal/deviation-service.js.map +1 -0
  250. package/dist/journal/envelope-store.d.ts +19 -0
  251. package/dist/journal/envelope-store.d.ts.map +1 -0
  252. package/dist/journal/envelope-store.js +62 -0
  253. package/dist/journal/envelope-store.js.map +1 -0
  254. package/dist/journal/envelope.d.ts +232 -0
  255. package/dist/journal/envelope.d.ts.map +1 -0
  256. package/dist/journal/envelope.js +94 -0
  257. package/dist/journal/envelope.js.map +1 -0
  258. package/dist/journal/journal-query.d.ts +20 -0
  259. package/dist/journal/journal-query.d.ts.map +1 -0
  260. package/dist/journal/journal-query.js +28 -0
  261. package/dist/journal/journal-query.js.map +1 -0
  262. package/dist/journal/journal-recorder.d.ts +38 -0
  263. package/dist/journal/journal-recorder.d.ts.map +1 -0
  264. package/dist/journal/journal-recorder.js +81 -0
  265. package/dist/journal/journal-recorder.js.map +1 -0
  266. package/dist/journal/retention.d.ts +21 -0
  267. package/dist/journal/retention.d.ts.map +1 -0
  268. package/dist/journal/retention.js +50 -0
  269. package/dist/journal/retention.js.map +1 -0
  270. package/dist/journal/rollups.d.ts +49 -0
  271. package/dist/journal/rollups.d.ts.map +1 -0
  272. package/dist/journal/rollups.js +83 -0
  273. package/dist/journal/rollups.js.map +1 -0
  274. package/dist/journal/session-end.d.ts +32 -0
  275. package/dist/journal/session-end.d.ts.map +1 -0
  276. package/dist/journal/session-end.js +52 -0
  277. package/dist/journal/session-end.js.map +1 -0
  278. package/dist/journal/session-journal.d.ts +25 -0
  279. package/dist/journal/session-journal.d.ts.map +1 -0
  280. package/dist/journal/session-journal.js +168 -0
  281. package/dist/journal/session-journal.js.map +1 -0
  282. package/dist/license/license.d.ts +8 -3
  283. package/dist/license/license.d.ts.map +1 -1
  284. package/dist/license/license.js +34 -11
  285. package/dist/license/license.js.map +1 -1
  286. package/dist/mcp-proxy.d.ts +20 -0
  287. package/dist/mcp-proxy.d.ts.map +1 -1
  288. package/dist/mcp-proxy.js +52 -29
  289. package/dist/mcp-proxy.js.map +1 -1
  290. package/dist/mcp.d.ts +22 -0
  291. package/dist/mcp.d.ts.map +1 -1
  292. package/dist/mcp.js +93 -10
  293. package/dist/mcp.js.map +1 -1
  294. package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
  295. package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
  296. package/dist/oracles/flow-instrument-gaps.js +45 -0
  297. package/dist/oracles/flow-instrument-gaps.js.map +1 -0
  298. package/dist/oracles/propose-consequences.d.ts +22 -0
  299. package/dist/oracles/propose-consequences.d.ts.map +1 -0
  300. package/dist/oracles/propose-consequences.js +93 -0
  301. package/dist/oracles/propose-consequences.js.map +1 -0
  302. package/dist/oracles/self-instrument.d.ts +32 -0
  303. package/dist/oracles/self-instrument.d.ts.map +1 -0
  304. package/dist/oracles/self-instrument.js +44 -0
  305. package/dist/oracles/self-instrument.js.map +1 -0
  306. package/dist/pairing-token.d.ts +1 -1
  307. package/dist/phenomena/phenomena.d.ts +27 -0
  308. package/dist/phenomena/phenomena.d.ts.map +1 -0
  309. package/dist/phenomena/phenomena.js +102 -0
  310. package/dist/phenomena/phenomena.js.map +1 -0
  311. package/dist/pool/browser-pool.d.ts +5 -3
  312. package/dist/pool/browser-pool.d.ts.map +1 -1
  313. package/dist/pool/browser-pool.js +21 -3
  314. package/dist/pool/browser-pool.js.map +1 -1
  315. package/dist/pool/playwright-launcher.d.ts +2 -2
  316. package/dist/pool/playwright-launcher.d.ts.map +1 -1
  317. package/dist/pool/playwright-launcher.js +20 -6
  318. package/dist/pool/playwright-launcher.js.map +1 -1
  319. package/dist/project/file-lock.d.ts +2 -0
  320. package/dist/project/file-lock.d.ts.map +1 -0
  321. package/dist/project/file-lock.js +24 -0
  322. package/dist/project/file-lock.js.map +1 -0
  323. package/dist/project/fs-port.d.ts +18 -0
  324. package/dist/project/fs-port.d.ts.map +1 -1
  325. package/dist/project/fs-port.js +24 -2
  326. package/dist/project/fs-port.js.map +1 -1
  327. package/dist/project/project-store.d.ts.map +1 -1
  328. package/dist/project/project-store.js +13 -7
  329. package/dist/project/project-store.js.map +1 -1
  330. package/dist/project/project-tools.d.ts +0 -6
  331. package/dist/project/project-tools.d.ts.map +1 -1
  332. package/dist/project/project-tools.js +25 -7
  333. package/dist/project/project-tools.js.map +1 -1
  334. package/dist/project/reticle-dir.d.ts +39 -14
  335. package/dist/project/reticle-dir.d.ts.map +1 -1
  336. package/dist/project/reticle-dir.js +30 -4
  337. package/dist/project/reticle-dir.js.map +1 -1
  338. package/dist/runs/build-verification-run.d.ts +1 -1
  339. package/dist/runs/build-verification-run.js +1 -1
  340. package/dist/runs/repair-prompt.d.ts +2 -0
  341. package/dist/runs/repair-prompt.d.ts.map +1 -1
  342. package/dist/runs/repair-prompt.js +14 -1
  343. package/dist/runs/repair-prompt.js.map +1 -1
  344. package/dist/runs/reticle-runner.d.ts +1 -1
  345. package/dist/runs/reticle-runner.d.ts.map +1 -1
  346. package/dist/runs/run-diff.d.ts +34 -0
  347. package/dist/runs/run-diff.d.ts.map +1 -0
  348. package/dist/runs/run-diff.js +71 -0
  349. package/dist/runs/run-diff.js.map +1 -0
  350. package/dist/runs/run-store.d.ts +6 -1
  351. package/dist/runs/run-store.d.ts.map +1 -1
  352. package/dist/runs/run-store.js +22 -2
  353. package/dist/runs/run-store.js.map +1 -1
  354. package/dist/runs/run-tools.d.ts.map +1 -1
  355. package/dist/runs/run-tools.js +16 -3
  356. package/dist/runs/run-tools.js.map +1 -1
  357. package/dist/runs/verify-server.js +1 -1
  358. package/dist/runs/verify-server.js.map +1 -1
  359. package/dist/server-version.d.ts +5 -0
  360. package/dist/server-version.d.ts.map +1 -1
  361. package/dist/server-version.js +5 -0
  362. package/dist/server-version.js.map +1 -1
  363. package/dist/session/control-envelope.d.ts +9 -1
  364. package/dist/session/control-envelope.d.ts.map +1 -1
  365. package/dist/session/control-envelope.js +13 -1
  366. package/dist/session/control-envelope.js.map +1 -1
  367. package/dist/session/live-control-tools.d.ts +1 -1
  368. package/dist/session/live-control-tools.d.ts.map +1 -1
  369. package/dist/session/live-control-tools.js +2 -7
  370. package/dist/session/live-control-tools.js.map +1 -1
  371. package/dist/session/live-control.d.ts +38 -0
  372. package/dist/session/live-control.d.ts.map +1 -0
  373. package/dist/session/live-control.js +64 -0
  374. package/dist/session/live-control.js.map +1 -0
  375. package/dist/session/observed-state.d.ts +46 -0
  376. package/dist/session/observed-state.d.ts.map +1 -0
  377. package/dist/session/observed-state.js +76 -0
  378. package/dist/session/observed-state.js.map +1 -0
  379. package/dist/session/output-budget.d.ts +9 -0
  380. package/dist/session/output-budget.d.ts.map +1 -1
  381. package/dist/session/output-budget.js +12 -1
  382. package/dist/session/output-budget.js.map +1 -1
  383. package/dist/session/review-store.d.ts +1 -1
  384. package/dist/session/review-store.d.ts.map +1 -1
  385. package/dist/session/review-store.js +2 -2
  386. package/dist/session/review-store.js.map +1 -1
  387. package/dist/session/session-manager.d.ts +9 -7
  388. package/dist/session/session-manager.d.ts.map +1 -1
  389. package/dist/session/session-manager.js +8 -8
  390. package/dist/session/session-manager.js.map +1 -1
  391. package/dist/session/session-readiness.js +1 -1
  392. package/dist/session/session-readiness.js.map +1 -1
  393. package/dist/session/session-reaper.d.ts +1 -1
  394. package/dist/session/session-reaper.js +1 -1
  395. package/dist/session/session-recommendation.d.ts +1 -1
  396. package/dist/session/session-recommendation.js +1 -1
  397. package/dist/session/session-tools.js +1 -1
  398. package/dist/session/session-tools.js.map +1 -1
  399. package/dist/session/session.d.ts +44 -12
  400. package/dist/session/session.d.ts.map +1 -1
  401. package/dist/session/session.js +116 -47
  402. package/dist/session/session.js.map +1 -1
  403. package/dist/tools/act-tools.d.ts.map +1 -1
  404. package/dist/tools/act-tools.js +257 -70
  405. package/dist/tools/act-tools.js.map +1 -1
  406. package/dist/tools/act-view.d.ts +4 -4
  407. package/dist/tools/act-view.js +4 -4
  408. package/dist/tools/assert-grade.d.ts.map +1 -1
  409. package/dist/tools/assert-grade.js +15 -26
  410. package/dist/tools/assert-grade.js.map +1 -1
  411. package/dist/tools/browser-tools.d.ts.map +1 -1
  412. package/dist/tools/browser-tools.js +32 -8
  413. package/dist/tools/browser-tools.js.map +1 -1
  414. package/dist/tools/contract-tools.d.ts.map +1 -1
  415. package/dist/tools/contract-tools.js +5 -0
  416. package/dist/tools/contract-tools.js.map +1 -1
  417. package/dist/tools/dynamic-tools.d.ts.map +1 -1
  418. package/dist/tools/dynamic-tools.js +7 -6
  419. package/dist/tools/dynamic-tools.js.map +1 -1
  420. package/dist/tools/invoke-tool.d.ts.map +1 -1
  421. package/dist/tools/invoke-tool.js +41 -30
  422. package/dist/tools/invoke-tool.js.map +1 -1
  423. package/dist/tools/lease-tools.d.ts +16 -0
  424. package/dist/tools/lease-tools.d.ts.map +1 -1
  425. package/dist/tools/lease-tools.js +11 -0
  426. package/dist/tools/lease-tools.js.map +1 -1
  427. package/dist/tools/merge-tools.d.ts +43 -0
  428. package/dist/tools/merge-tools.d.ts.map +1 -0
  429. package/dist/tools/merge-tools.js +66 -0
  430. package/dist/tools/merge-tools.js.map +1 -0
  431. package/dist/tools/observe-tools.d.ts.map +1 -1
  432. package/dist/tools/observe-tools.js +172 -29
  433. package/dist/tools/observe-tools.js.map +1 -1
  434. package/dist/tools/profiles.d.ts +18 -13
  435. package/dist/tools/profiles.d.ts.map +1 -1
  436. package/dist/tools/profiles.js +39 -33
  437. package/dist/tools/profiles.js.map +1 -1
  438. package/dist/tools/query-paginate.d.ts +9 -2
  439. package/dist/tools/query-paginate.d.ts.map +1 -1
  440. package/dist/tools/query-paginate.js +21 -4
  441. package/dist/tools/query-paginate.js.map +1 -1
  442. package/dist/tools/read-tools.d.ts.map +1 -1
  443. package/dist/tools/read-tools.js +95 -2
  444. package/dist/tools/read-tools.js.map +1 -1
  445. package/dist/tools/snapshot-delta.d.ts +2 -0
  446. package/dist/tools/snapshot-delta.d.ts.map +1 -1
  447. package/dist/tools/snapshot-delta.js +0 -0
  448. package/dist/tools/snapshot-delta.js.map +1 -1
  449. package/dist/tools/tool-kit.d.ts +11 -2
  450. package/dist/tools/tool-kit.d.ts.map +1 -1
  451. package/dist/tools/tool-kit.js +24 -1
  452. package/dist/tools/tool-kit.js.map +1 -1
  453. package/dist/tools/tool-names.d.ts +19 -10
  454. package/dist/tools/tool-names.d.ts.map +1 -1
  455. package/dist/tools/tool-names.js +23 -13
  456. package/dist/tools/tool-names.js.map +1 -1
  457. package/dist/tools/tools-helpers.d.ts +12 -0
  458. package/dist/tools/tools-helpers.d.ts.map +1 -1
  459. package/dist/tools/tools-helpers.js +20 -0
  460. package/dist/tools/tools-helpers.js.map +1 -1
  461. package/dist/tools/tools.d.ts.map +1 -1
  462. package/dist/tools/tools.js +162 -12
  463. package/dist/tools/tools.js.map +1 -1
  464. package/dist/update/update-checker.d.ts +14 -1
  465. package/dist/update/update-checker.d.ts.map +1 -1
  466. package/dist/update/update-checker.js +9 -5
  467. package/dist/update/update-checker.js.map +1 -1
  468. package/dist/update/updater.d.ts +20 -2
  469. package/dist/update/updater.d.ts.map +1 -1
  470. package/dist/update/updater.js +48 -14
  471. package/dist/update/updater.js.map +1 -1
  472. package/dist/visual/visual-tools.d.ts.map +1 -1
  473. package/dist/visual/visual-tools.js +1 -6
  474. package/dist/visual/visual-tools.js.map +1 -1
  475. package/package.json +8 -3
  476. package/dist/update/update-tools.d.ts +0 -3
  477. package/dist/update/update-tools.d.ts.map +0 -1
  478. package/dist/update/update-tools.js +0 -94
  479. package/dist/update/update-tools.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ import { type ReticleEvent } from '@reticlehq/core';
2
+ /**
3
+ * The causal summary (Tier 1) — the bounded ~50–100 token block on EVERY act, green included: what the
4
+ * app did in the act's window, as counts + a headline, not a raw event dump. Diffs come from the
5
+ * storage/state events; attribution from. Pure composition over the attributed event window.
6
+ */
7
+ export interface StateDiff {
8
+ path: string;
9
+ from: unknown;
10
+ to: unknown;
11
+ }
12
+ export interface StorageDiff {
13
+ key: string;
14
+ from?: unknown;
15
+ to?: unknown;
16
+ }
17
+ export interface CausalSummary {
18
+ net: {
19
+ total: number;
20
+ errors: number;
21
+ headline?: string;
22
+ };
23
+ consoleErrors: number;
24
+ statePathsChanged: string[];
25
+ storageKeysChanged: string[];
26
+ /** Before→after for each changed store path — the diffs, not just the names. Values capped. */
27
+ stateDiffs: StateDiff[];
28
+ /** Before→after for each changed storage key. Values capped. */
29
+ storageDiffs: StorageDiff[];
30
+ route?: string;
31
+ signals: string[];
32
+ layoutShift?: number;
33
+ longTasks: number;
34
+ }
35
+ export declare function causalSummary(events: readonly ReticleEvent[]): CausalSummary;
36
+ //# sourceMappingURL=causal-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"causal-summary.d.ts","sourceRoot":"","sources":["../../src/capsule/causal-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE3E;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;CACb;AACD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,+FAA+F;IAC/F,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwBD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,aAAa,CAmF5E"}
@@ -0,0 +1,111 @@
1
+ import { EventType, PerfMetric } from '@reticlehq/core';
2
+ function pushUnique(list, value) {
3
+ if (typeof value === 'string' && value.length > 0 && !list.includes(value))
4
+ list.push(value);
5
+ }
6
+ /** Keep a diff value bounded so the per-act summary never bloats: primitives capped to a short string. */
7
+ const MAX_DIFF_LEN = 140;
8
+ /** Truncate to at most MAX_DIFF_LEN chars total, including the ellipsis marker. */
9
+ function truncate(text) {
10
+ return text.length > MAX_DIFF_LEN ? `${text.slice(0, MAX_DIFF_LEN - 1)}…` : text;
11
+ }
12
+ function capValue(value) {
13
+ if (value === undefined || value === null)
14
+ return value;
15
+ if (typeof value === 'string')
16
+ return truncate(value);
17
+ if (typeof value === 'number' || typeof value === 'boolean')
18
+ return value;
19
+ // Objects/arrays: a shallow, length-capped JSON repr (never a deep dump on the hot path).
20
+ try {
21
+ return truncate(JSON.stringify(value));
22
+ }
23
+ catch {
24
+ return '[unserializable]';
25
+ }
26
+ }
27
+ export function causalSummary(events) {
28
+ let netTotal = 0;
29
+ let netErrors = 0;
30
+ let headline;
31
+ let consoleErrors = 0;
32
+ const statePathsChanged = [];
33
+ const storageKeysChanged = [];
34
+ const stateDiffs = [];
35
+ const storageDiffs = [];
36
+ let route;
37
+ const signals = [];
38
+ let layoutShift;
39
+ let longTasks = 0;
40
+ for (const event of events) {
41
+ const data = event.data;
42
+ switch (event.type) {
43
+ case EventType.NET_REQUEST: {
44
+ netTotal += 1;
45
+ const status = data['status'];
46
+ const failed = data['ok'] === false || (typeof status === 'number' && status >= 400);
47
+ if (failed) {
48
+ netErrors += 1;
49
+ // Headline is the first failing request — the thing most worth the agent's eye.
50
+ headline ??= `${String(data['method'])} ${String(data['url'])} ${String(status)}`;
51
+ }
52
+ break;
53
+ }
54
+ case EventType.CONSOLE_ERROR:
55
+ case EventType.ERROR_UNCAUGHT:
56
+ consoleErrors += 1;
57
+ break;
58
+ case EventType.STATE_CHANGE: {
59
+ pushUnique(statePathsChanged, data['name']);
60
+ // The subscribed-store observer emits { name, path, value, old } — `value` is the AFTER side
61
+ // (`new` is accepted too for any producer that uses it). Presence of either makes it a real
62
+ // before→after diff rather than a bare reading.
63
+ const path = typeof data['path'] === 'string' ? data['path'] : data['name'];
64
+ const hasAfter = 'value' in data || 'new' in data;
65
+ if (typeof path === 'string' && path.length > 0 && ('old' in data || hasAfter)) {
66
+ const after = 'value' in data ? data['value'] : data['new'];
67
+ stateDiffs.push({ path, from: capValue(data['old']), to: capValue(after) });
68
+ }
69
+ break;
70
+ }
71
+ case EventType.STORAGE_CHANGE: {
72
+ pushUnique(storageKeysChanged, data['key']);
73
+ const key = data['key'];
74
+ if (typeof key === 'string' && key.length > 0) {
75
+ storageDiffs.push({ key, from: capValue(data['old']), to: capValue(data['new']) });
76
+ }
77
+ break;
78
+ }
79
+ case EventType.ROUTE_CHANGE:
80
+ if (typeof data['pathname'] === 'string')
81
+ route = data['pathname'];
82
+ break;
83
+ case EventType.SIGNAL:
84
+ pushUnique(signals, data['name']);
85
+ break;
86
+ case EventType.PERF:
87
+ if (data['metric'] === PerfMetric.CLS && typeof data['value'] === 'number') {
88
+ layoutShift = Math.max(layoutShift ?? 0, data['value']);
89
+ }
90
+ else if (data['metric'] === PerfMetric.LONGTASK) {
91
+ longTasks += 1;
92
+ }
93
+ break;
94
+ default:
95
+ break;
96
+ }
97
+ }
98
+ return {
99
+ net: { total: netTotal, errors: netErrors, ...(headline === undefined ? {} : { headline }) },
100
+ consoleErrors,
101
+ statePathsChanged,
102
+ storageKeysChanged,
103
+ stateDiffs,
104
+ storageDiffs,
105
+ ...(route === undefined ? {} : { route }),
106
+ signals,
107
+ ...(layoutShift === undefined ? {} : { layoutShift }),
108
+ longTasks,
109
+ };
110
+ }
111
+ //# sourceMappingURL=causal-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"causal-summary.js","sourceRoot":"","sources":["../../src/capsule/causal-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type ReticleEvent } from '@reticlehq/core';
2
+ /**
3
+ * First-divergence — the brain of the divergence capsule (Tier 2). Given the chain the flow DECLARED
4
+ * should happen (its mustHold, as ordered expected links) and what was OBSERVED, walk the declaration and
5
+ * report the FIRST link where expected ≠ observed, values side by side. That single link is where the
6
+ * fault lives — the agent fixes it without re-exploring. Pure; the acceptance bar is that for every
7
+ * hidden-500 / hung-request fixture it names the correct link.
8
+ */
9
+ export type ExpectedLink = {
10
+ kind: 'signal';
11
+ name: string;
12
+ } | {
13
+ kind: 'net';
14
+ urlContains: string;
15
+ status?: number;
16
+ } | {
17
+ kind: 'state';
18
+ name: string;
19
+ };
20
+ export interface Divergence {
21
+ /** The declared link that did not hold. */
22
+ expected: ExpectedLink;
23
+ /** Human description of what was observed instead (the closest attempt, or "nothing"). */
24
+ observed: string;
25
+ }
26
+ /**
27
+ * Walk the declared chain in order; return the first link not satisfied by the observed events (with a
28
+ * side-by-side of what happened instead), or null when the whole chain held.
29
+ */
30
+ export declare function firstDivergence(expected: readonly ExpectedLink[], observed: readonly ReticleEvent[]): Divergence | null;
31
+ //# sourceMappingURL=divergence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divergence.d.ts","sourceRoot":"","sources":["../../src/capsule/divergence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmCD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAChC,UAAU,GAAG,IAAI,CAOnB"}
@@ -0,0 +1,41 @@
1
+ import { EventType } from '@reticlehq/core';
2
+ function net(events) {
3
+ return events.filter((e) => e.type === EventType.NET_REQUEST);
4
+ }
5
+ function satisfies(link, events) {
6
+ switch (link.kind) {
7
+ case 'signal':
8
+ return events.some((e) => e.type === EventType.SIGNAL && e.data['name'] === link.name);
9
+ case 'state':
10
+ return events.some((e) => e.type === EventType.STATE_CHANGE && e.data['name'] === link.name);
11
+ case 'net':
12
+ return net(events).some((e) => typeof e.data['url'] === 'string' &&
13
+ e.data['url'].includes(link.urlContains) &&
14
+ (link.status === undefined || e.data['status'] === link.status));
15
+ }
16
+ }
17
+ /** Describe what WAS observed for a link that failed — the closest attempt, for a side-by-side. */
18
+ function observedFor(link, events) {
19
+ if (link.kind === 'net') {
20
+ const match = net(events).find((e) => typeof e.data['url'] === 'string' && e.data['url'].includes(link.urlContains));
21
+ if (match === undefined)
22
+ return `no request to ${link.urlContains}`;
23
+ return `${link.urlContains} responded ${String(match.data['status'])} (expected ${String(link.status)})`;
24
+ }
25
+ if (link.kind === 'signal')
26
+ return `signal "${link.name}" never fired`;
27
+ return `state "${link.name}" never changed`;
28
+ }
29
+ /**
30
+ * Walk the declared chain in order; return the first link not satisfied by the observed events (with a
31
+ * side-by-side of what happened instead), or null when the whole chain held.
32
+ */
33
+ export function firstDivergence(expected, observed) {
34
+ for (const link of expected) {
35
+ if (!satisfies(link, observed)) {
36
+ return { expected: link, observed: observedFor(link, observed) };
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ //# sourceMappingURL=divergence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divergence.js","sourceRoot":"","sources":["../../src/capsule/divergence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,iBAAiB,CAAC;AAsB/D,SAAS,GAAG,CAAC,MAA+B;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,IAAkB,EAAE,MAA+B;IACpE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;gBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;gBACxC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAClE,CAAC;IACN,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,SAAS,WAAW,CAAC,IAAkB,EAAE,MAA+B;IACtE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CACrF,CAAC;QACF,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;QACpE,OAAO,GAAG,IAAI,CAAC,WAAW,cAAc,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3G,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,WAAW,IAAI,CAAC,IAAI,eAAe,CAAC;IACvE,OAAO,UAAU,IAAI,CAAC,IAAI,iBAAiB,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAiC,EACjC,QAAiC;IAEjC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Bug-capsule minimization — first cut: prefix-trim. A recorded flow that fails is often mostly setup;
3
+ * the capsule should be the SMALLEST flow that still reproduces the failure, so a regression flow stays
4
+ * fast and legible. Prefix-trim drops leading steps while the failure persists — the cheap, deterministic
5
+ * v1 (delta-debugging over arbitrary subsets is a later refinement). The `stillFails` predicate is
6
+ * injected (a real replay), so this stays pure and unit-testable.
7
+ */
8
+ /**
9
+ * Return the shortest trailing sub-flow that still fails, by removing leading steps one at a time while
10
+ * `stillFails` holds. Never trims below one step. Deterministic given a deterministic predicate.
11
+ */
12
+ export declare function prefixTrim<T>(steps: readonly T[], stillFails: (candidate: readonly T[]) => Promise<boolean>): Promise<T[]>;
13
+ //# sourceMappingURL=minimize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimize.d.ts","sourceRoot":"","sources":["../../src/capsule/minimize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GACxD,OAAO,CAAC,CAAC,EAAE,CAAC,CAQd"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Bug-capsule minimization — first cut: prefix-trim. A recorded flow that fails is often mostly setup;
3
+ * the capsule should be the SMALLEST flow that still reproduces the failure, so a regression flow stays
4
+ * fast and legible. Prefix-trim drops leading steps while the failure persists — the cheap, deterministic
5
+ * v1 (delta-debugging over arbitrary subsets is a later refinement). The `stillFails` predicate is
6
+ * injected (a real replay), so this stays pure and unit-testable.
7
+ */
8
+ /**
9
+ * Return the shortest trailing sub-flow that still fails, by removing leading steps one at a time while
10
+ * `stillFails` holds. Never trims below one step. Deterministic given a deterministic predicate.
11
+ */
12
+ export async function prefixTrim(steps, stillFails) {
13
+ let kept = [...steps];
14
+ while (kept.length > 1) {
15
+ const trimmed = kept.slice(1);
16
+ if (await stillFails(trimmed))
17
+ kept = trimmed;
18
+ else
19
+ break;
20
+ }
21
+ return kept;
22
+ }
23
+ //# sourceMappingURL=minimize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimize.js","sourceRoot":"","sources":["../../src/capsule/minimize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAmB,EACnB,UAAyD;IAEzD,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,OAAO,CAAC;;YACzC,MAAM;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Predicate } from '../events/predicate.js';
2
+ import type { ExpectedLink } from './divergence.js';
3
+ /**
4
+ * Convert a mustHold predicate into the ordered ExpectedLinks the divergence capsule walks. Only the
5
+ * consequence kinds (signal/net/state) become links — a presence check (element/text) can't diverge in a
6
+ * dataflow sense. allOf/anyOf flatten in order; other kinds are skipped. Pure; feeds the capsule on red.
7
+ */
8
+ export declare function predicateToExpectedLinks(predicate: Predicate): ExpectedLink[];
9
+ //# sourceMappingURL=predicate-to-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-to-links.d.ts","sourceRoot":"","sources":["../../src/capsule/predicate-to-links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,EAAE,CAwB7E"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Convert a mustHold predicate into the ordered ExpectedLinks the divergence capsule walks. Only the
3
+ * consequence kinds (signal/net/state) become links — a presence check (element/text) can't diverge in a
4
+ * dataflow sense. allOf/anyOf flatten in order; other kinds are skipped. Pure; feeds the capsule on red.
5
+ */
6
+ export function predicateToExpectedLinks(predicate) {
7
+ switch (predicate.kind) {
8
+ case 'signal':
9
+ return predicate.name === undefined ? [] : [{ kind: 'signal', name: predicate.name }];
10
+ case 'net':
11
+ return predicate.urlContains === undefined
12
+ ? []
13
+ : [
14
+ {
15
+ kind: 'net',
16
+ urlContains: predicate.urlContains,
17
+ ...(predicate.status === undefined ? {} : { status: predicate.status }),
18
+ },
19
+ ];
20
+ case 'state': {
21
+ const name = predicate.store ?? predicate.path;
22
+ return [{ kind: 'state', name }];
23
+ }
24
+ case 'allOf':
25
+ case 'anyOf':
26
+ return predicate.predicates.flatMap(predicateToExpectedLinks);
27
+ default:
28
+ return [];
29
+ }
30
+ }
31
+ //# sourceMappingURL=predicate-to-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-to-links.js","sourceRoot":"","sources":["../../src/capsule/predicate-to-links.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAoB;IAC3D,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACxF,KAAK,KAAK;YACR,OAAO,SAAS,CAAC,WAAW,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE;wBACE,IAAI,EAAE,KAAK;wBACX,WAAW,EAAE,SAAS,CAAC,WAAW;wBAClC,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;qBACxE;iBACF,CAAC;QACR,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;YAC/C,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAChE;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * CLI commands that operate on SAVED FLOWS: watch, capsules, and the gate.
3
+ *
4
+ * Split out of cli.ts, which was 653 lines — over the project's own cap, and the file a contributor
5
+ * opens first. These five functions form one cohesive group: they all read the flow store and report on
6
+ * verification state, and none of them touch daemon lifecycle, which is what the rest of cli.ts does.
7
+ */
8
+ import { type FileSystemPort } from './project/fs-port.js';
9
+ import { type NamedFlow } from './flows/flow-sources.js';
10
+ /** Load the {name, steps} of every saved flow for the active project. */
11
+ /** Explicit files plus, when --since is given, the git-changed files since that ref. */
12
+ export declare function resolveChangedFiles(files: string[], since: string | undefined): Promise<string[]>;
13
+ export declare function loadNamedFlows(fs: FileSystemPort, reticleRoot: string): Promise<NamedFlow[]>;
14
+ /**
15
+ * `reticle watch [url]` — on every save, report which saved flows must re-verify (the affected set).
16
+ * Environment-side (costs the agent nothing per turn); the buddy loop. This v1 detects + reports on
17
+ * change; auto-replaying the affected flows against the app is the next increment. Long-running.
18
+ */
19
+ export declare function handleWatch(): void;
20
+ /**
21
+ * `reticle capsules` — list saved fail-to-pass bug capsules (.reticle/capsules). Each is a minimal
22
+ * failing reproduction plus the consequence that should have held; replay one with reticle_flow_replay.
23
+ */
24
+ export declare function handleCapsules(): Promise<void>;
25
+ /**
26
+ * `reticle gate <file...>` — exit non-zero unless passing artifacts cover the flows affected by the
27
+ * changed files. Flaky flows are quarantined (surfaced, not blocking). The environment-side enforcement
28
+ * that makes verification unavoidable. Never throws; a fault fails closed (exit 1).
29
+ */
30
+ export declare function handleGate(files: string[], since: string | undefined): Promise<void>;
31
+ //# sourceMappingURL=cli-flow-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-flow-commands.d.ts","sourceRoot":"","sources":["../src/cli-flow-commands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAW7E,yEAAyE;AACzE,wFAAwF;AACxF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,cAAc,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,EAAE,CAAC,CAStB;AA0CD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAiClC;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBpD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D1F"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * CLI commands that operate on SAVED FLOWS: watch, capsules, and the gate.
3
+ *
4
+ * Split out of cli.ts, which was 653 lines — over the project's own cap, and the file a contributor
5
+ * opens first. These five functions form one cohesive group: they all read the flow store and report on
6
+ * verification state, and none of them touch daemon lifecycle, which is what the rest of cli.ts does.
7
+ */
8
+ import { readProjectId } from './cli-port.js';
9
+ import { changedFilesSince } from './flows/git-changed.js';
10
+ import { join } from 'node:path';
11
+ import { ReticleDir, RunFlowStatus } from '@reticlehq/core';
12
+ import { FlowStore } from './flows/flows.js';
13
+ import { RunStore } from './runs/run-store.js';
14
+ import { createNodeFileSystem } from './project/fs-port.js';
15
+ import { affectedSavedFlows } from './flows/flow-sources.js';
16
+ import { gateDecision } from './flows/gate.js';
17
+ import { FlakeStore } from './flows/flake-store.js';
18
+ import { formatBuddyStatus } from './flows/buddy-status.js';
19
+ import { CapsuleStore } from './capsule/capsule-store.js';
20
+ import { AssertionTiersStore } from './flows/assertion-tiers-store.js';
21
+ import { detectDowngrades } from './flows/assertion-integrity.js';
22
+ import { computeCoverage } from './flows/coverage.js';
23
+ import { createWatchBatcher } from './flows/watch-batcher.js';
24
+ import { watch } from 'node:fs';
25
+ import { log } from './log.js';
26
+ /** Load the {name, steps} of every saved flow for the active project. */
27
+ /** Explicit files plus, when --since is given, the git-changed files since that ref. */
28
+ export async function resolveChangedFiles(files, since) {
29
+ if (since === undefined)
30
+ return files;
31
+ return [...new Set([...files, ...(await changedFilesSince(since, process.cwd()))])];
32
+ }
33
+ export async function loadNamedFlows(fs, reticleRoot) {
34
+ const projectId = readProjectId(process.cwd());
35
+ const store = new FlowStore(fs, reticleRoot, { now: () => Date.now() });
36
+ const flows = [];
37
+ for (const name of await store.list(projectId)) {
38
+ const loaded = await store.load(name, projectId);
39
+ if (loaded.ok)
40
+ flows.push({ name: loaded.value.name, steps: loaded.value.steps });
41
+ }
42
+ return flows;
43
+ }
44
+ /** File-change extensions worth reacting to (skip node_modules churn, dotfiles, build output). */
45
+ /**
46
+ * The buddy channel: one ambient line a human can park in a statusline. Deliberately best-effort
47
+ * and silent on failure — a status line that throws is worse than no status line, and it must never
48
+ * interfere with the watch loop it rides on.
49
+ */
50
+ async function emitBuddyStatus(fs, reticleRoot, flows, affected) {
51
+ try {
52
+ const latest = await new RunStore(fs, reticleRoot).latest();
53
+ const passingNames = new Set((latest?.flows ?? [])
54
+ .filter((f) => f.status === RunFlowStatus.PASS || f.status === RunFlowStatus.HEALED)
55
+ .map((f) => f.name));
56
+ const quarantined = await new FlakeStore(fs, reticleRoot).flakyFlows();
57
+ const flaky = new Set(quarantined);
58
+ // A deviation is an at-risk flow with no passing artifact — and a quarantined flake is not a deviation.
59
+ const deviations = affected.filter((n) => !passingNames.has(n) && !flaky.has(n));
60
+ log('reticle_buddy', {
61
+ status: formatBuddyStatus({
62
+ total: flows.length,
63
+ passing: passingNames.size,
64
+ deviations,
65
+ quarantined,
66
+ }),
67
+ });
68
+ }
69
+ catch {
70
+ // never let the ambient line break the watcher
71
+ }
72
+ }
73
+ const WATCHED_EXTENSIONS = /\.(ts|tsx|js|jsx|mjs|cjs|vue|svelte)$/;
74
+ const WATCH_DEBOUNCE_MS = 200;
75
+ /**
76
+ * `reticle watch [url]` — on every save, report which saved flows must re-verify (the affected set).
77
+ * Environment-side (costs the agent nothing per turn); the buddy loop. This v1 detects + reports on
78
+ * change; auto-replaying the affected flows against the app is the next increment. Long-running.
79
+ */
80
+ export function handleWatch() {
81
+ const fs = createNodeFileSystem();
82
+ const reticleRoot = join(process.cwd(), ReticleDir.ROOT);
83
+ const batcher = createWatchBatcher({
84
+ debounceMs: WATCH_DEBOUNCE_MS,
85
+ schedule: (fn, ms) => {
86
+ setTimeout(fn, ms).unref();
87
+ },
88
+ onFlush: (files) => {
89
+ void loadNamedFlows(fs, reticleRoot)
90
+ .then(async (flows) => {
91
+ const result = affectedSavedFlows(flows, files);
92
+ if (result.affected.length > 0) {
93
+ log('reticle_watch_affected', { changed: files, affected: result.affected });
94
+ }
95
+ await emitBuddyStatus(fs, reticleRoot, flows, result.affected);
96
+ })
97
+ .catch((error) => {
98
+ log('reticle_watch_failed', {
99
+ error: error instanceof Error ? error.message : String(error),
100
+ });
101
+ });
102
+ },
103
+ });
104
+ log('reticle_watch_started', { cwd: process.cwd() });
105
+ // Print the ambient line once at startup so the human sees where they stand before touching anything.
106
+ void loadNamedFlows(fs, reticleRoot)
107
+ .then((flows) => emitBuddyStatus(fs, reticleRoot, flows, []))
108
+ .catch(() => undefined);
109
+ watch(process.cwd(), { recursive: true }, (_event, filename) => {
110
+ if (typeof filename === 'string' && WATCHED_EXTENSIONS.test(filename))
111
+ batcher.onChange(filename);
112
+ });
113
+ }
114
+ /**
115
+ * `reticle capsules` — list saved fail-to-pass bug capsules (.reticle/capsules). Each is a minimal
116
+ * failing reproduction plus the consequence that should have held; replay one with reticle_flow_replay.
117
+ */
118
+ export async function handleCapsules() {
119
+ try {
120
+ const fs = createNodeFileSystem();
121
+ const capsules = await new CapsuleStore(fs, join(process.cwd(), ReticleDir.ROOT)).all();
122
+ log('reticle_capsules', {
123
+ count: capsules.length,
124
+ capsules: capsules.map((c) => ({
125
+ id: c.id,
126
+ ...(c.flow === undefined ? {} : { flow: c.flow }),
127
+ origin: c.origin,
128
+ expected: c.expected,
129
+ observed: c.observed,
130
+ steps: c.steps.length,
131
+ })),
132
+ });
133
+ }
134
+ catch (error) {
135
+ log('reticle_capsules_failed', {
136
+ error: error instanceof Error ? error.message : String(error),
137
+ });
138
+ process.exitCode = 1;
139
+ }
140
+ }
141
+ /**
142
+ * `reticle gate <file...>` — exit non-zero unless passing artifacts cover the flows affected by the
143
+ * changed files. Flaky flows are quarantined (surfaced, not blocking). The environment-side enforcement
144
+ * that makes verification unavoidable. Never throws; a fault fails closed (exit 1).
145
+ */
146
+ export async function handleGate(files, since) {
147
+ try {
148
+ const fs = createNodeFileSystem();
149
+ const reticleRoot = join(process.cwd(), ReticleDir.ROOT);
150
+ const changed = await resolveChangedFiles(files, since);
151
+ const allFlows = await loadNamedFlows(fs, reticleRoot);
152
+ const affected = affectedSavedFlows(allFlows, changed).affected;
153
+ const latest = await new RunStore(fs, reticleRoot).latest();
154
+ const passing = (latest?.flows ?? [])
155
+ .filter((f) => f.status === RunFlowStatus.PASS || f.status === RunFlowStatus.HEALED)
156
+ .map((f) => f.name);
157
+ const flaky = await new FlakeStore(fs, reticleRoot).flakyFlows();
158
+ // Anti-reward-hacking: diff each flow's CURRENT assertions against what it asserted the last
159
+ // time it passed. A mustHold that dropped from a real consequence to a fakeable presence check is a
160
+ // green bought by weakening the test — and a flow that covered a changed file but no longer exists
161
+ // is coverage deleted rather than satisfied. Both block.
162
+ const baseline = await new AssertionTiersStore(fs, reticleRoot).load();
163
+ const byName = new Map(allFlows.map((f) => [f.name, f]));
164
+ const downgraded = Object.entries(baseline)
165
+ .filter(([name]) => affected.includes(name) && byName.has(name))
166
+ .map(([name, before]) => {
167
+ const current = byName.get(name);
168
+ const after = (current?.steps ?? []).map((s, i) => ({
169
+ step: i,
170
+ ...(s.expect === undefined ? {} : { expect: s.expect }),
171
+ }));
172
+ return { flow: name, steps: detectDowngrades(before.steps, after).map((d) => d.step) };
173
+ })
174
+ .filter((d) => d.steps.length > 0);
175
+ // A flow with a recorded passing baseline that has since vanished, while its files changed.
176
+ // A flow that PASSED covering these files and has since vanished is coverage DELETED, not satisfied —
177
+ // and it can never appear in `affected` (that is derived from flows that still exist), so it must be
178
+ // matched against the baseline's own recorded sources. Missing this made deleting a flow turn the
179
+ // gate green, which is precisely the gaming move exists to stop.
180
+ const changedSet = new Set(changed);
181
+ const deleted = Object.entries(baseline)
182
+ .filter(([name, entry]) => !byName.has(name) && entry.sources.some((f) => changedSet.has(f)))
183
+ .map(([name]) => name);
184
+ const result = gateDecision({ affected, passing, flaky, downgraded, deleted });
185
+ // Verified-surface coverage over flows: how much of the saved suite this run actually exercised.
186
+ const coverage = computeCoverage({ testids: [], signals: [], flows: allFlows.map((f) => f.name) }, { testids: [], signals: [], flows: passing });
187
+ log('reticle_gate', {
188
+ pass: result.pass,
189
+ uncovered: result.uncovered,
190
+ quarantined: result.quarantined,
191
+ ...(result.downgraded.length > 0 ? { downgraded: result.downgraded } : {}),
192
+ ...(result.deleted.length > 0 ? { deletedCoverage: result.deleted } : {}),
193
+ coverage: {
194
+ pct: coverage.flows.pct,
195
+ covered: coverage.flows.covered,
196
+ total: coverage.flows.total,
197
+ },
198
+ });
199
+ if (!result.pass)
200
+ process.exitCode = 1;
201
+ }
202
+ catch (error) {
203
+ log('reticle_gate_failed', { error: error instanceof Error ? error.message : String(error) });
204
+ process.exitCode = 1;
205
+ }
206
+ }
207
+ //# sourceMappingURL=cli-flow-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-flow-commands.js","sourceRoot":"","sources":["../src/cli-flow-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-launch.d.ts","sourceRoot":"","sources":["../src/cli-launch.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH,sFAAsF;AACtF,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAsBA;AAKD,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB1D;AAED,uGAAuG;AACvG,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAU3B;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAO7F;AAWD,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAMjC;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAiB,GACtD,IAAI,CAGN"}
1
+ {"version":3,"file":"cli-launch.d.ts","sourceRoot":"","sources":["../src/cli-launch.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,sFAAsF;AACtF,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAsBA;AAKD,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB1D;AAED,uGAAuG;AACvG,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAU3B;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAO7F;AAWD,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAMjC;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAiB,GACtD,IAAI,CAGN"}
@@ -1,7 +1,6 @@
1
1
  import * as http from 'node:http';
2
2
  import { spawn } from 'node:child_process';
3
- import { LOOPBACK_HOST } from '@reticlehq/core';
4
- import { STATUS_PATH } from './http-server.js';
3
+ import { LOOPBACK_HOST, STATUS_PATH } from '@reticlehq/core';
5
4
  /**
6
5
  * Reduce the daemon's /status JSON to the compact view `reticle status` prints. Pure: narrows the
7
6
  * untrusted wire payload (never `any`) and tolerates a missing/partial body so a malformed response