@reticlehq/server 2.1.0 → 2.2.1

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 (471) 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 +22 -3
  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-parse.d.ts +36 -2
  42. package/dist/cli-parse.d.ts.map +1 -1
  43. package/dist/cli-parse.js +97 -2
  44. package/dist/cli-parse.js.map +1 -1
  45. package/dist/cli-port.d.ts +10 -4
  46. package/dist/cli-port.d.ts.map +1 -1
  47. package/dist/cli-port.js +32 -6
  48. package/dist/cli-port.js.map +1 -1
  49. package/dist/cli-verify.d.ts +2 -0
  50. package/dist/cli-verify.d.ts.map +1 -1
  51. package/dist/cli-verify.js +52 -11
  52. package/dist/cli-verify.js.map +1 -1
  53. package/dist/cli.d.ts +2 -3
  54. package/dist/cli.d.ts.map +1 -1
  55. package/dist/cli.js +175 -9
  56. package/dist/cli.js.map +1 -1
  57. package/dist/cloud/cloud-config.d.ts +37 -0
  58. package/dist/cloud/cloud-config.d.ts.map +1 -0
  59. package/dist/cloud/cloud-config.js +87 -0
  60. package/dist/cloud/cloud-config.js.map +1 -0
  61. package/dist/cloud/cloud-sync.d.ts +96 -3
  62. package/dist/cloud/cloud-sync.d.ts.map +1 -1
  63. package/dist/cloud/cloud-sync.js +131 -2
  64. package/dist/cloud/cloud-sync.js.map +1 -1
  65. package/dist/cloud-cli.d.ts +4 -0
  66. package/dist/cloud-cli.d.ts.map +1 -0
  67. package/dist/cloud-cli.js +507 -0
  68. package/dist/cloud-cli.js.map +1 -0
  69. package/dist/crawl/crawl-tools.d.ts.map +1 -1
  70. package/dist/crawl/crawl-tools.js +12 -0
  71. package/dist/crawl/crawl-tools.js.map +1 -1
  72. package/dist/crawl/crawl.d.ts +23 -1
  73. package/dist/crawl/crawl.d.ts.map +1 -1
  74. package/dist/crawl/crawl.js +36 -9
  75. package/dist/crawl/crawl.js.map +1 -1
  76. package/dist/daemon-resilience.d.ts +5 -5
  77. package/dist/daemon-resilience.js +5 -5
  78. package/dist/daemon.d.ts +1 -1
  79. package/dist/daemon.d.ts.map +1 -1
  80. package/dist/daemon.js +53 -8
  81. package/dist/daemon.js.map +1 -1
  82. package/dist/domain/domain-tools.d.ts.map +1 -1
  83. package/dist/domain/domain-tools.js +11 -1
  84. package/dist/domain/domain-tools.js.map +1 -1
  85. package/dist/domain/flow-risk.d.ts +4 -4
  86. package/dist/domain/flow-risk.js +4 -4
  87. package/dist/ee/audit-log.d.ts +2 -2
  88. package/dist/ee/audit-log.js +2 -2
  89. package/dist/events/event-filters.d.ts +29 -1
  90. package/dist/events/event-filters.d.ts.map +1 -1
  91. package/dist/events/event-filters.js +75 -1
  92. package/dist/events/event-filters.js.map +1 -1
  93. package/dist/events/predicate-eval.d.ts +15 -0
  94. package/dist/events/predicate-eval.d.ts.map +1 -1
  95. package/dist/events/predicate-eval.js +97 -18
  96. package/dist/events/predicate-eval.js.map +1 -1
  97. package/dist/events/predicate.d.ts +22 -1
  98. package/dist/events/predicate.d.ts.map +1 -1
  99. package/dist/events/predicate.js +154 -20
  100. package/dist/events/predicate.js.map +1 -1
  101. package/dist/events/ring-buffer.d.ts +3 -3
  102. package/dist/events/ring-buffer.d.ts.map +1 -1
  103. package/dist/events/ring-buffer.js +54 -8
  104. package/dist/events/ring-buffer.js.map +1 -1
  105. package/dist/flows/affected.d.ts +25 -0
  106. package/dist/flows/affected.d.ts.map +1 -0
  107. package/dist/flows/affected.js +36 -0
  108. package/dist/flows/affected.js.map +1 -0
  109. package/dist/flows/annotate.d.ts +4 -4
  110. package/dist/flows/annotate.js +4 -4
  111. package/dist/flows/assertion-integrity.d.ts +24 -0
  112. package/dist/flows/assertion-integrity.d.ts.map +1 -0
  113. package/dist/flows/assertion-integrity.js +27 -0
  114. package/dist/flows/assertion-integrity.js.map +1 -0
  115. package/dist/flows/assertion-tiers-store.d.ts +80 -0
  116. package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
  117. package/dist/flows/assertion-tiers-store.js +99 -0
  118. package/dist/flows/assertion-tiers-store.js.map +1 -0
  119. package/dist/flows/buddy-status.d.ts +25 -0
  120. package/dist/flows/buddy-status.d.ts.map +1 -0
  121. package/dist/flows/buddy-status.js +33 -0
  122. package/dist/flows/buddy-status.js.map +1 -0
  123. package/dist/flows/coverage.d.ts +28 -0
  124. package/dist/flows/coverage.d.ts.map +1 -0
  125. package/dist/flows/coverage.js +22 -0
  126. package/dist/flows/coverage.js.map +1 -0
  127. package/dist/flows/decision.d.ts.map +1 -1
  128. package/dist/flows/decision.js +16 -8
  129. package/dist/flows/decision.js.map +1 -1
  130. package/dist/flows/flake-store.d.ts +20 -0
  131. package/dist/flows/flake-store.d.ts.map +1 -0
  132. package/dist/flows/flake-store.js +59 -0
  133. package/dist/flows/flake-store.js.map +1 -0
  134. package/dist/flows/flake.d.ts +58 -0
  135. package/dist/flows/flake.d.ts.map +1 -0
  136. package/dist/flows/flake.js +36 -0
  137. package/dist/flows/flake.js.map +1 -0
  138. package/dist/flows/flow-classify.d.ts +8 -8
  139. package/dist/flows/flow-classify.js +8 -8
  140. package/dist/flows/flow-replay-run.d.ts.map +1 -1
  141. package/dist/flows/flow-replay-run.js +58 -5
  142. package/dist/flows/flow-replay-run.js.map +1 -1
  143. package/dist/flows/flow-replay.d.ts +9 -0
  144. package/dist/flows/flow-replay.d.ts.map +1 -1
  145. package/dist/flows/flow-replay.js +48 -13
  146. package/dist/flows/flow-replay.js.map +1 -1
  147. package/dist/flows/flow-report.d.ts +4 -4
  148. package/dist/flows/flow-sources.d.ts +20 -0
  149. package/dist/flows/flow-sources.d.ts.map +1 -0
  150. package/dist/flows/flow-sources.js +33 -0
  151. package/dist/flows/flow-sources.js.map +1 -0
  152. package/dist/flows/flow-tools.d.ts +13 -1
  153. package/dist/flows/flow-tools.d.ts.map +1 -1
  154. package/dist/flows/flow-tools.js +116 -13
  155. package/dist/flows/flow-tools.js.map +1 -1
  156. package/dist/flows/flows.d.ts +9 -4
  157. package/dist/flows/flows.d.ts.map +1 -1
  158. package/dist/flows/flows.js +38 -21
  159. package/dist/flows/flows.js.map +1 -1
  160. package/dist/flows/gate.d.ts +39 -0
  161. package/dist/flows/gate.d.ts.map +1 -0
  162. package/dist/flows/gate.js +34 -0
  163. package/dist/flows/gate.js.map +1 -0
  164. package/dist/flows/git-changed.d.ts +9 -0
  165. package/dist/flows/git-changed.d.ts.map +1 -0
  166. package/dist/flows/git-changed.js +25 -0
  167. package/dist/flows/git-changed.js.map +1 -0
  168. package/dist/flows/heal-run.d.ts +1 -1
  169. package/dist/flows/heal-run.js +1 -1
  170. package/dist/flows/parallel-suite.d.ts +27 -0
  171. package/dist/flows/parallel-suite.d.ts.map +1 -0
  172. package/dist/flows/parallel-suite.js +51 -0
  173. package/dist/flows/parallel-suite.js.map +1 -0
  174. package/dist/flows/replay.d.ts.map +1 -1
  175. package/dist/flows/replay.js +33 -11
  176. package/dist/flows/replay.js.map +1 -1
  177. package/dist/flows/server-verify.d.ts +16 -0
  178. package/dist/flows/server-verify.d.ts.map +1 -0
  179. package/dist/flows/server-verify.js +43 -0
  180. package/dist/flows/server-verify.js.map +1 -0
  181. package/dist/flows/watch-batcher.d.ts +18 -0
  182. package/dist/flows/watch-batcher.d.ts.map +1 -0
  183. package/dist/flows/watch-batcher.js +20 -0
  184. package/dist/flows/watch-batcher.js.map +1 -0
  185. package/dist/honesty/blind-spots.d.ts +37 -0
  186. package/dist/honesty/blind-spots.d.ts.map +1 -0
  187. package/dist/honesty/blind-spots.js +57 -0
  188. package/dist/honesty/blind-spots.js.map +1 -0
  189. package/dist/honesty/honesty.d.ts +57 -0
  190. package/dist/honesty/honesty.d.ts.map +1 -0
  191. package/dist/honesty/honesty.js +63 -0
  192. package/dist/honesty/honesty.js.map +1 -0
  193. package/dist/http-server.d.ts +5 -5
  194. package/dist/http-server.js +4 -4
  195. package/dist/idle-shutdown.d.ts +2 -2
  196. package/dist/idle-shutdown.js +2 -2
  197. package/dist/index.d.ts +3 -2
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +98 -13
  200. package/dist/index.js.map +1 -1
  201. package/dist/init/agent-rules.d.ts +38 -0
  202. package/dist/init/agent-rules.d.ts.map +1 -0
  203. package/dist/init/agent-rules.js +65 -0
  204. package/dist/init/agent-rules.js.map +1 -0
  205. package/dist/init/plan.d.ts +6 -0
  206. package/dist/init/plan.d.ts.map +1 -1
  207. package/dist/init/plan.js +79 -3
  208. package/dist/init/plan.js.map +1 -1
  209. package/dist/init/run.d.ts.map +1 -1
  210. package/dist/init/run.js +4 -0
  211. package/dist/init/run.js.map +1 -1
  212. package/dist/init/snippets.js +1 -1
  213. package/dist/init/vite-config.d.ts +1 -1
  214. package/dist/init/vite-config.js +2 -2
  215. package/dist/init/vite-config.js.map +1 -1
  216. package/dist/input/network-detail.d.ts +74 -0
  217. package/dist/input/network-detail.d.ts.map +1 -0
  218. package/dist/input/network-detail.js +160 -0
  219. package/dist/input/network-detail.js.map +1 -0
  220. package/dist/input/network-mock.d.ts +4 -4
  221. package/dist/input/real-input.d.ts +44 -11
  222. package/dist/input/real-input.d.ts.map +1 -1
  223. package/dist/input/real-input.js +57 -9
  224. package/dist/input/real-input.js.map +1 -1
  225. package/dist/journal/ambient-store.d.ts +16 -0
  226. package/dist/journal/ambient-store.d.ts.map +1 -0
  227. package/dist/journal/ambient-store.js +46 -0
  228. package/dist/journal/ambient-store.js.map +1 -0
  229. package/dist/journal/ambient.d.ts +48 -0
  230. package/dist/journal/ambient.d.ts.map +1 -0
  231. package/dist/journal/ambient.js +48 -0
  232. package/dist/journal/ambient.js.map +1 -0
  233. package/dist/journal/attach-journal.d.ts +22 -0
  234. package/dist/journal/attach-journal.d.ts.map +1 -0
  235. package/dist/journal/attach-journal.js +20 -0
  236. package/dist/journal/attach-journal.js.map +1 -0
  237. package/dist/journal/deviation-report.d.ts +28 -0
  238. package/dist/journal/deviation-report.d.ts.map +1 -0
  239. package/dist/journal/deviation-report.js +54 -0
  240. package/dist/journal/deviation-report.js.map +1 -0
  241. package/dist/journal/deviation-service.d.ts +12 -0
  242. package/dist/journal/deviation-service.d.ts.map +1 -0
  243. package/dist/journal/deviation-service.js +32 -0
  244. package/dist/journal/deviation-service.js.map +1 -0
  245. package/dist/journal/envelope-store.d.ts +19 -0
  246. package/dist/journal/envelope-store.d.ts.map +1 -0
  247. package/dist/journal/envelope-store.js +62 -0
  248. package/dist/journal/envelope-store.js.map +1 -0
  249. package/dist/journal/envelope.d.ts +232 -0
  250. package/dist/journal/envelope.d.ts.map +1 -0
  251. package/dist/journal/envelope.js +94 -0
  252. package/dist/journal/envelope.js.map +1 -0
  253. package/dist/journal/journal-query.d.ts +20 -0
  254. package/dist/journal/journal-query.d.ts.map +1 -0
  255. package/dist/journal/journal-query.js +28 -0
  256. package/dist/journal/journal-query.js.map +1 -0
  257. package/dist/journal/journal-recorder.d.ts +38 -0
  258. package/dist/journal/journal-recorder.d.ts.map +1 -0
  259. package/dist/journal/journal-recorder.js +81 -0
  260. package/dist/journal/journal-recorder.js.map +1 -0
  261. package/dist/journal/retention.d.ts +21 -0
  262. package/dist/journal/retention.d.ts.map +1 -0
  263. package/dist/journal/retention.js +50 -0
  264. package/dist/journal/retention.js.map +1 -0
  265. package/dist/journal/rollups.d.ts +49 -0
  266. package/dist/journal/rollups.d.ts.map +1 -0
  267. package/dist/journal/rollups.js +83 -0
  268. package/dist/journal/rollups.js.map +1 -0
  269. package/dist/journal/session-end.d.ts +32 -0
  270. package/dist/journal/session-end.d.ts.map +1 -0
  271. package/dist/journal/session-end.js +52 -0
  272. package/dist/journal/session-end.js.map +1 -0
  273. package/dist/journal/session-journal.d.ts +25 -0
  274. package/dist/journal/session-journal.d.ts.map +1 -0
  275. package/dist/journal/session-journal.js +168 -0
  276. package/dist/journal/session-journal.js.map +1 -0
  277. package/dist/license/license.d.ts +8 -3
  278. package/dist/license/license.d.ts.map +1 -1
  279. package/dist/license/license.js +34 -11
  280. package/dist/license/license.js.map +1 -1
  281. package/dist/mcp-proxy.d.ts +20 -0
  282. package/dist/mcp-proxy.d.ts.map +1 -1
  283. package/dist/mcp-proxy.js +45 -27
  284. package/dist/mcp-proxy.js.map +1 -1
  285. package/dist/mcp.d.ts +14 -0
  286. package/dist/mcp.d.ts.map +1 -1
  287. package/dist/mcp.js +79 -9
  288. package/dist/mcp.js.map +1 -1
  289. package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
  290. package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
  291. package/dist/oracles/flow-instrument-gaps.js +45 -0
  292. package/dist/oracles/flow-instrument-gaps.js.map +1 -0
  293. package/dist/oracles/propose-consequences.d.ts +22 -0
  294. package/dist/oracles/propose-consequences.d.ts.map +1 -0
  295. package/dist/oracles/propose-consequences.js +93 -0
  296. package/dist/oracles/propose-consequences.js.map +1 -0
  297. package/dist/oracles/self-instrument.d.ts +32 -0
  298. package/dist/oracles/self-instrument.d.ts.map +1 -0
  299. package/dist/oracles/self-instrument.js +44 -0
  300. package/dist/oracles/self-instrument.js.map +1 -0
  301. package/dist/pairing-token.d.ts +1 -1
  302. package/dist/phenomena/phenomena.d.ts +27 -0
  303. package/dist/phenomena/phenomena.d.ts.map +1 -0
  304. package/dist/phenomena/phenomena.js +102 -0
  305. package/dist/phenomena/phenomena.js.map +1 -0
  306. package/dist/pool/browser-pool.d.ts +5 -3
  307. package/dist/pool/browser-pool.d.ts.map +1 -1
  308. package/dist/pool/browser-pool.js +21 -3
  309. package/dist/pool/browser-pool.js.map +1 -1
  310. package/dist/pool/playwright-launcher.d.ts +2 -0
  311. package/dist/pool/playwright-launcher.d.ts.map +1 -1
  312. package/dist/pool/playwright-launcher.js +21 -2
  313. package/dist/pool/playwright-launcher.js.map +1 -1
  314. package/dist/project/baselines.d.ts.map +1 -1
  315. package/dist/project/baselines.js +5 -3
  316. package/dist/project/baselines.js.map +1 -1
  317. package/dist/project/file-lock.d.ts +2 -0
  318. package/dist/project/file-lock.d.ts.map +1 -0
  319. package/dist/project/file-lock.js +24 -0
  320. package/dist/project/file-lock.js.map +1 -0
  321. package/dist/project/fs-port.d.ts +18 -0
  322. package/dist/project/fs-port.d.ts.map +1 -1
  323. package/dist/project/fs-port.js +24 -2
  324. package/dist/project/fs-port.js.map +1 -1
  325. package/dist/project/project-store.d.ts.map +1 -1
  326. package/dist/project/project-store.js +33 -15
  327. package/dist/project/project-store.js.map +1 -1
  328. package/dist/project/project-tools.d.ts +0 -6
  329. package/dist/project/project-tools.d.ts.map +1 -1
  330. package/dist/project/project-tools.js +52 -6
  331. package/dist/project/project-tools.js.map +1 -1
  332. package/dist/project/reticle-dir.d.ts +39 -14
  333. package/dist/project/reticle-dir.d.ts.map +1 -1
  334. package/dist/project/reticle-dir.js +30 -4
  335. package/dist/project/reticle-dir.js.map +1 -1
  336. package/dist/runs/build-verification-run.d.ts +1 -1
  337. package/dist/runs/build-verification-run.js +1 -1
  338. package/dist/runs/repair-prompt.d.ts +2 -0
  339. package/dist/runs/repair-prompt.d.ts.map +1 -1
  340. package/dist/runs/repair-prompt.js +14 -1
  341. package/dist/runs/repair-prompt.js.map +1 -1
  342. package/dist/runs/reticle-runner.d.ts +1 -1
  343. package/dist/runs/reticle-runner.d.ts.map +1 -1
  344. package/dist/runs/run-diff.d.ts +34 -0
  345. package/dist/runs/run-diff.d.ts.map +1 -0
  346. package/dist/runs/run-diff.js +71 -0
  347. package/dist/runs/run-diff.js.map +1 -0
  348. package/dist/runs/run-store.d.ts +6 -1
  349. package/dist/runs/run-store.d.ts.map +1 -1
  350. package/dist/runs/run-store.js +22 -2
  351. package/dist/runs/run-store.js.map +1 -1
  352. package/dist/runs/run-tools.d.ts.map +1 -1
  353. package/dist/runs/run-tools.js +16 -3
  354. package/dist/runs/run-tools.js.map +1 -1
  355. package/dist/runs/verification-sync.d.ts +24 -0
  356. package/dist/runs/verification-sync.d.ts.map +1 -0
  357. package/dist/runs/verification-sync.js +67 -0
  358. package/dist/runs/verification-sync.js.map +1 -0
  359. package/dist/runs/verify-server.js +1 -1
  360. package/dist/runs/verify-server.js.map +1 -1
  361. package/dist/session/control-envelope.d.ts +9 -1
  362. package/dist/session/control-envelope.d.ts.map +1 -1
  363. package/dist/session/control-envelope.js +13 -1
  364. package/dist/session/control-envelope.js.map +1 -1
  365. package/dist/session/live-control-tools.d.ts +1 -1
  366. package/dist/session/live-control-tools.js +1 -1
  367. package/dist/session/live-control.d.ts +38 -0
  368. package/dist/session/live-control.d.ts.map +1 -0
  369. package/dist/session/live-control.js +64 -0
  370. package/dist/session/live-control.js.map +1 -0
  371. package/dist/session/observed-state.d.ts +46 -0
  372. package/dist/session/observed-state.d.ts.map +1 -0
  373. package/dist/session/observed-state.js +76 -0
  374. package/dist/session/observed-state.js.map +1 -0
  375. package/dist/session/output-budget.d.ts +9 -0
  376. package/dist/session/output-budget.d.ts.map +1 -1
  377. package/dist/session/output-budget.js +9 -0
  378. package/dist/session/output-budget.js.map +1 -1
  379. package/dist/session/review-store.d.ts +1 -1
  380. package/dist/session/review-store.d.ts.map +1 -1
  381. package/dist/session/review-store.js +2 -2
  382. package/dist/session/review-store.js.map +1 -1
  383. package/dist/session/session-manager.d.ts +9 -7
  384. package/dist/session/session-manager.d.ts.map +1 -1
  385. package/dist/session/session-manager.js +8 -8
  386. package/dist/session/session-manager.js.map +1 -1
  387. package/dist/session/session-readiness.js +1 -1
  388. package/dist/session/session-readiness.js.map +1 -1
  389. package/dist/session/session-reaper.d.ts +1 -1
  390. package/dist/session/session-reaper.js +1 -1
  391. package/dist/session/session-recommendation.d.ts +1 -1
  392. package/dist/session/session-recommendation.js +1 -1
  393. package/dist/session/session-tools.js +1 -1
  394. package/dist/session/session-tools.js.map +1 -1
  395. package/dist/session/session.d.ts +43 -11
  396. package/dist/session/session.d.ts.map +1 -1
  397. package/dist/session/session.js +115 -46
  398. package/dist/session/session.js.map +1 -1
  399. package/dist/telemetry/telemetry.d.ts +41 -0
  400. package/dist/telemetry/telemetry.d.ts.map +1 -0
  401. package/dist/telemetry/telemetry.js +220 -0
  402. package/dist/telemetry/telemetry.js.map +1 -0
  403. package/dist/tools/act-tools.d.ts.map +1 -1
  404. package/dist/tools/act-tools.js +252 -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/browser-tools.d.ts.map +1 -1
  409. package/dist/tools/browser-tools.js +32 -8
  410. package/dist/tools/browser-tools.js.map +1 -1
  411. package/dist/tools/contract-tools.d.ts.map +1 -1
  412. package/dist/tools/contract-tools.js +5 -0
  413. package/dist/tools/contract-tools.js.map +1 -1
  414. package/dist/tools/dynamic-tools.d.ts.map +1 -1
  415. package/dist/tools/dynamic-tools.js +8 -7
  416. package/dist/tools/dynamic-tools.js.map +1 -1
  417. package/dist/tools/invoke-tool.d.ts.map +1 -1
  418. package/dist/tools/invoke-tool.js +36 -29
  419. package/dist/tools/invoke-tool.js.map +1 -1
  420. package/dist/tools/lease-tools.d.ts +16 -0
  421. package/dist/tools/lease-tools.d.ts.map +1 -1
  422. package/dist/tools/lease-tools.js +11 -0
  423. package/dist/tools/lease-tools.js.map +1 -1
  424. package/dist/tools/merge-tools.d.ts +43 -0
  425. package/dist/tools/merge-tools.d.ts.map +1 -0
  426. package/dist/tools/merge-tools.js +66 -0
  427. package/dist/tools/merge-tools.js.map +1 -0
  428. package/dist/tools/observe-tools.d.ts.map +1 -1
  429. package/dist/tools/observe-tools.js +172 -29
  430. package/dist/tools/observe-tools.js.map +1 -1
  431. package/dist/tools/profiles.d.ts +18 -13
  432. package/dist/tools/profiles.d.ts.map +1 -1
  433. package/dist/tools/profiles.js +39 -33
  434. package/dist/tools/profiles.js.map +1 -1
  435. package/dist/tools/query-paginate.d.ts +9 -2
  436. package/dist/tools/query-paginate.d.ts.map +1 -1
  437. package/dist/tools/query-paginate.js +21 -4
  438. package/dist/tools/query-paginate.js.map +1 -1
  439. package/dist/tools/read-tools.d.ts.map +1 -1
  440. package/dist/tools/read-tools.js +30 -1
  441. package/dist/tools/read-tools.js.map +1 -1
  442. package/dist/tools/snapshot-delta.d.ts +2 -0
  443. package/dist/tools/snapshot-delta.d.ts.map +1 -1
  444. package/dist/tools/snapshot-delta.js +0 -0
  445. package/dist/tools/snapshot-delta.js.map +1 -1
  446. package/dist/tools/tool-kit.d.ts +3 -2
  447. package/dist/tools/tool-kit.d.ts.map +1 -1
  448. package/dist/tools/tool-kit.js +11 -1
  449. package/dist/tools/tool-kit.js.map +1 -1
  450. package/dist/tools/tool-names.d.ts +18 -10
  451. package/dist/tools/tool-names.d.ts.map +1 -1
  452. package/dist/tools/tool-names.js +22 -13
  453. package/dist/tools/tool-names.js.map +1 -1
  454. package/dist/tools/tools-helpers.d.ts +12 -0
  455. package/dist/tools/tools-helpers.d.ts.map +1 -1
  456. package/dist/tools/tools-helpers.js +20 -0
  457. package/dist/tools/tools-helpers.js.map +1 -1
  458. package/dist/tools/tools.d.ts.map +1 -1
  459. package/dist/tools/tools.js +162 -12
  460. package/dist/tools/tools.js.map +1 -1
  461. package/dist/update/update-checker.d.ts.map +1 -1
  462. package/dist/update/update-checker.js +26 -1
  463. package/dist/update/update-checker.js.map +1 -1
  464. package/dist/update/updater.d.ts +1 -1
  465. package/dist/update/updater.js +2 -2
  466. package/dist/update/updater.js.map +1 -1
  467. package/package.json +8 -3
  468. package/dist/update/update-tools.d.ts +0 -3
  469. package/dist/update/update-tools.d.ts.map +0 -1
  470. package/dist/update/update-tools.js +0 -94
  471. package/dist/update/update-tools.js.map +0 -1
@@ -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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"}
@@ -4,7 +4,14 @@
4
4
  * file-size cap and keep the parser pure + unit-testable. Re-exported from cli.ts so existing
5
5
  * imports are unchanged.
6
6
  */
7
- export declare const CLI_USAGE = "usage:\n reticle init [--yes] [--dry-run] [--port N] [--no-mcp] [--no-install] (wire Reticle into the project in this directory)\n reticle serve [--port N] [--drive <url>] [--headed] [--http] [--http-port N] [--http-token T]\n reticle stop [--port N] [--quiet]\n reticle status [--port N]\n reticle open [url] [--port N] (show the app: reuse the connected tab, else open one)\n reticle verify <url> [--headed] [--timeout N] [--storage-state <file>] (one-shot: drive the URL, verify saved flows, exit 0=pass)\n reticle drive <url> [--headed] (foreground mode \u2014 for debugging)\n reticle mcp [--port N] [--drive <url>] [--headed] (MCP stdio proxy \u2014 auto-starts daemon if needed)\n reticle license (show enterprise license status: active | eval | missing)";
7
+ export declare const CLI_USAGE = "usage:\n reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] (wire Reticle into the project in this directory)\n reticle serve [--port N] [--drive <url>] [--headed] [--http] [--http-port N] [--http-token T]\n reticle stop [--port N] [--quiet]\n reticle status [--port N]\n reticle doctor [--port N] (diagnose setup: Chromium, daemon, port \u2014 one command)\n reticle open [url] [--port N] (show the app: reuse the connected tab, else open one)\n reticle verify <url> [--headed] [--timeout N] [--storage-state <file>] (one-shot: drive the URL, verify saved flows, exit 0=pass)\n reticle affected [--since <ref>] [file...] (which saved flows must re-verify for the changed files)\n reticle gate [--since <ref>] [file...] (exit non-zero unless passing artifacts cover the affected flows)\n reticle watch [url] (on save, report which saved flows must re-verify)\n reticle drive <url> [--headed] (foreground mode \u2014 for debugging)\n reticle mcp [--port N] [--drive <url>] [--headed] (MCP stdio proxy \u2014 auto-starts daemon if needed)\n reticle update (install the latest server version and restart)\n reticle rollback (restore the previous server version and restart)\n reticle license (show enterprise license status: active | eval | missing)\n reticle telemetry [status|enable|disable] (anonymous usage metrics \u2014 status shows what's sent + the policy)\n\nCloud (link this project to Reticle Cloud \u2014 runs/flows recorded on the dashboard):\n reticle login --email <e> [--code <c>] [--org <n>] (sign in: mails a code, then exchanges it)\n reticle link [--project <name|id>] (bind this repo: mints a scoped key, writes .reticle/cloud.json)\n reticle whoami (who am I signed in as, and is this repo attached?)\n reticle project <ls|create <name>> (list or create cloud projects)\n reticle config [--runs on|off] [--memory on|off] [--flows on|off] [--verify local|server]\n reticle push (send local run artifacts to the dashboard)\n reticle runs | regression | share <runId> (read cloud state; regression exits 3 if any flow broke)";
8
+ /** The `reticle telemetry` sub-actions. Bare `reticle telemetry` means `status`. */
9
+ export declare const TelemetryAction: {
10
+ readonly STATUS: "status";
11
+ readonly ENABLE: "enable";
12
+ readonly DISABLE: "disable";
13
+ };
14
+ export type TelemetryAction = (typeof TelemetryAction)[keyof typeof TelemetryAction];
8
15
  export declare const DAEMON_INNER_COMMAND = "_daemon";
9
16
  export declare const HEADED_FLAG = "--headed";
10
17
  export declare const PORT_FLAG = "--port";
@@ -35,8 +42,16 @@ export type CliResult = {
35
42
  port: number;
36
43
  } | {
37
44
  kind: 'license';
45
+ } | {
46
+ kind: 'telemetry';
47
+ action: TelemetryAction;
38
48
  } | {
39
49
  kind: 'version';
50
+ } | {
51
+ kind: 'help';
52
+ } | {
53
+ kind: 'doctor';
54
+ port: number;
40
55
  } | {
41
56
  kind: 'open';
42
57
  port: number;
@@ -60,15 +75,34 @@ export type CliResult = {
60
75
  headless: boolean;
61
76
  timeoutMs?: number;
62
77
  storageState?: string;
78
+ } | {
79
+ kind: 'affected';
80
+ files: string[];
81
+ since?: string;
82
+ } | {
83
+ kind: 'capsules';
84
+ } | {
85
+ kind: 'gate';
86
+ files: string[];
87
+ since?: string;
88
+ } | {
89
+ kind: 'watch';
90
+ url?: string;
91
+ } | {
92
+ kind: 'update';
93
+ } | {
94
+ kind: 'rollback';
63
95
  } | {
64
96
  kind: 'mcp';
65
97
  port: number;
66
98
  driveUrl?: string;
67
99
  headless: boolean;
100
+ http: boolean;
101
+ httpPort?: number;
102
+ httpToken?: string;
68
103
  } | {
69
104
  kind: 'error';
70
105
  message: string;
71
106
  };
72
- /** Pure CLI arg parser — exported for unit tests. argv = process.argv.slice(2). */
73
107
  export declare function parseCliArgs(argv: string[], defaultPort: number): CliResult;
74
108
  //# sourceMappingURL=cli-parse.d.ts.map