@reticlehq/server 2.1.0 → 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 (436) 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 +18 -2
  42. package/dist/cli-parse.d.ts.map +1 -1
  43. package/dist/cli-parse.js +57 -0
  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.map +1 -1
  50. package/dist/cli-verify.js +29 -10
  51. package/dist/cli-verify.js.map +1 -1
  52. package/dist/cli.d.ts.map +1 -1
  53. package/dist/cli.js +81 -2
  54. package/dist/cli.js.map +1 -1
  55. package/dist/crawl/crawl-tools.d.ts.map +1 -1
  56. package/dist/crawl/crawl-tools.js +12 -0
  57. package/dist/crawl/crawl-tools.js.map +1 -1
  58. package/dist/crawl/crawl.d.ts +23 -1
  59. package/dist/crawl/crawl.d.ts.map +1 -1
  60. package/dist/crawl/crawl.js +36 -9
  61. package/dist/crawl/crawl.js.map +1 -1
  62. package/dist/daemon-resilience.d.ts +5 -5
  63. package/dist/daemon-resilience.js +5 -5
  64. package/dist/daemon.d.ts +1 -1
  65. package/dist/daemon.js +1 -1
  66. package/dist/domain/domain-tools.d.ts.map +1 -1
  67. package/dist/domain/domain-tools.js +11 -1
  68. package/dist/domain/domain-tools.js.map +1 -1
  69. package/dist/domain/flow-risk.d.ts +4 -4
  70. package/dist/domain/flow-risk.js +4 -4
  71. package/dist/ee/audit-log.d.ts +2 -2
  72. package/dist/ee/audit-log.js +2 -2
  73. package/dist/events/event-filters.d.ts +29 -1
  74. package/dist/events/event-filters.d.ts.map +1 -1
  75. package/dist/events/event-filters.js +75 -1
  76. package/dist/events/event-filters.js.map +1 -1
  77. package/dist/events/predicate-eval.d.ts +15 -0
  78. package/dist/events/predicate-eval.d.ts.map +1 -1
  79. package/dist/events/predicate-eval.js +97 -18
  80. package/dist/events/predicate-eval.js.map +1 -1
  81. package/dist/events/predicate.d.ts +22 -1
  82. package/dist/events/predicate.d.ts.map +1 -1
  83. package/dist/events/predicate.js +154 -20
  84. package/dist/events/predicate.js.map +1 -1
  85. package/dist/events/ring-buffer.d.ts +3 -3
  86. package/dist/events/ring-buffer.d.ts.map +1 -1
  87. package/dist/events/ring-buffer.js +54 -8
  88. package/dist/events/ring-buffer.js.map +1 -1
  89. package/dist/flows/affected.d.ts +25 -0
  90. package/dist/flows/affected.d.ts.map +1 -0
  91. package/dist/flows/affected.js +36 -0
  92. package/dist/flows/affected.js.map +1 -0
  93. package/dist/flows/annotate.d.ts +4 -4
  94. package/dist/flows/annotate.js +4 -4
  95. package/dist/flows/assertion-integrity.d.ts +24 -0
  96. package/dist/flows/assertion-integrity.d.ts.map +1 -0
  97. package/dist/flows/assertion-integrity.js +27 -0
  98. package/dist/flows/assertion-integrity.js.map +1 -0
  99. package/dist/flows/assertion-tiers-store.d.ts +80 -0
  100. package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
  101. package/dist/flows/assertion-tiers-store.js +99 -0
  102. package/dist/flows/assertion-tiers-store.js.map +1 -0
  103. package/dist/flows/buddy-status.d.ts +25 -0
  104. package/dist/flows/buddy-status.d.ts.map +1 -0
  105. package/dist/flows/buddy-status.js +33 -0
  106. package/dist/flows/buddy-status.js.map +1 -0
  107. package/dist/flows/coverage.d.ts +28 -0
  108. package/dist/flows/coverage.d.ts.map +1 -0
  109. package/dist/flows/coverage.js +22 -0
  110. package/dist/flows/coverage.js.map +1 -0
  111. package/dist/flows/decision.d.ts.map +1 -1
  112. package/dist/flows/decision.js +16 -8
  113. package/dist/flows/decision.js.map +1 -1
  114. package/dist/flows/flake-store.d.ts +20 -0
  115. package/dist/flows/flake-store.d.ts.map +1 -0
  116. package/dist/flows/flake-store.js +59 -0
  117. package/dist/flows/flake-store.js.map +1 -0
  118. package/dist/flows/flake.d.ts +58 -0
  119. package/dist/flows/flake.d.ts.map +1 -0
  120. package/dist/flows/flake.js +36 -0
  121. package/dist/flows/flake.js.map +1 -0
  122. package/dist/flows/flow-classify.d.ts +8 -8
  123. package/dist/flows/flow-classify.js +8 -8
  124. package/dist/flows/flow-replay-run.d.ts.map +1 -1
  125. package/dist/flows/flow-replay-run.js +36 -0
  126. package/dist/flows/flow-replay-run.js.map +1 -1
  127. package/dist/flows/flow-replay.d.ts +9 -0
  128. package/dist/flows/flow-replay.d.ts.map +1 -1
  129. package/dist/flows/flow-replay.js +48 -13
  130. package/dist/flows/flow-replay.js.map +1 -1
  131. package/dist/flows/flow-report.d.ts +4 -4
  132. package/dist/flows/flow-sources.d.ts +20 -0
  133. package/dist/flows/flow-sources.d.ts.map +1 -0
  134. package/dist/flows/flow-sources.js +33 -0
  135. package/dist/flows/flow-sources.js.map +1 -0
  136. package/dist/flows/flow-tools.d.ts +13 -1
  137. package/dist/flows/flow-tools.d.ts.map +1 -1
  138. package/dist/flows/flow-tools.js +92 -5
  139. package/dist/flows/flow-tools.js.map +1 -1
  140. package/dist/flows/flows.d.ts +9 -4
  141. package/dist/flows/flows.d.ts.map +1 -1
  142. package/dist/flows/flows.js +38 -21
  143. package/dist/flows/flows.js.map +1 -1
  144. package/dist/flows/gate.d.ts +39 -0
  145. package/dist/flows/gate.d.ts.map +1 -0
  146. package/dist/flows/gate.js +34 -0
  147. package/dist/flows/gate.js.map +1 -0
  148. package/dist/flows/git-changed.d.ts +9 -0
  149. package/dist/flows/git-changed.d.ts.map +1 -0
  150. package/dist/flows/git-changed.js +25 -0
  151. package/dist/flows/git-changed.js.map +1 -0
  152. package/dist/flows/heal-run.d.ts +1 -1
  153. package/dist/flows/heal-run.js +1 -1
  154. package/dist/flows/parallel-suite.d.ts +27 -0
  155. package/dist/flows/parallel-suite.d.ts.map +1 -0
  156. package/dist/flows/parallel-suite.js +51 -0
  157. package/dist/flows/parallel-suite.js.map +1 -0
  158. package/dist/flows/replay.d.ts.map +1 -1
  159. package/dist/flows/replay.js +33 -11
  160. package/dist/flows/replay.js.map +1 -1
  161. package/dist/flows/watch-batcher.d.ts +18 -0
  162. package/dist/flows/watch-batcher.d.ts.map +1 -0
  163. package/dist/flows/watch-batcher.js +20 -0
  164. package/dist/flows/watch-batcher.js.map +1 -0
  165. package/dist/honesty/blind-spots.d.ts +37 -0
  166. package/dist/honesty/blind-spots.d.ts.map +1 -0
  167. package/dist/honesty/blind-spots.js +57 -0
  168. package/dist/honesty/blind-spots.js.map +1 -0
  169. package/dist/honesty/honesty.d.ts +57 -0
  170. package/dist/honesty/honesty.d.ts.map +1 -0
  171. package/dist/honesty/honesty.js +63 -0
  172. package/dist/honesty/honesty.js.map +1 -0
  173. package/dist/http-server.d.ts +5 -5
  174. package/dist/http-server.js +4 -4
  175. package/dist/idle-shutdown.d.ts +2 -2
  176. package/dist/idle-shutdown.js +2 -2
  177. package/dist/index.d.ts +3 -2
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +98 -13
  180. package/dist/index.js.map +1 -1
  181. package/dist/init/agent-rules.d.ts +38 -0
  182. package/dist/init/agent-rules.d.ts.map +1 -0
  183. package/dist/init/agent-rules.js +65 -0
  184. package/dist/init/agent-rules.js.map +1 -0
  185. package/dist/init/plan.d.ts +6 -0
  186. package/dist/init/plan.d.ts.map +1 -1
  187. package/dist/init/plan.js +79 -3
  188. package/dist/init/plan.js.map +1 -1
  189. package/dist/init/run.d.ts.map +1 -1
  190. package/dist/init/run.js +4 -0
  191. package/dist/init/run.js.map +1 -1
  192. package/dist/init/snippets.js +1 -1
  193. package/dist/init/vite-config.d.ts +1 -1
  194. package/dist/init/vite-config.js +2 -2
  195. package/dist/init/vite-config.js.map +1 -1
  196. package/dist/input/network-detail.d.ts +74 -0
  197. package/dist/input/network-detail.d.ts.map +1 -0
  198. package/dist/input/network-detail.js +160 -0
  199. package/dist/input/network-detail.js.map +1 -0
  200. package/dist/input/network-mock.d.ts +4 -4
  201. package/dist/input/real-input.d.ts +44 -11
  202. package/dist/input/real-input.d.ts.map +1 -1
  203. package/dist/input/real-input.js +57 -9
  204. package/dist/input/real-input.js.map +1 -1
  205. package/dist/journal/ambient-store.d.ts +16 -0
  206. package/dist/journal/ambient-store.d.ts.map +1 -0
  207. package/dist/journal/ambient-store.js +46 -0
  208. package/dist/journal/ambient-store.js.map +1 -0
  209. package/dist/journal/ambient.d.ts +48 -0
  210. package/dist/journal/ambient.d.ts.map +1 -0
  211. package/dist/journal/ambient.js +48 -0
  212. package/dist/journal/ambient.js.map +1 -0
  213. package/dist/journal/attach-journal.d.ts +22 -0
  214. package/dist/journal/attach-journal.d.ts.map +1 -0
  215. package/dist/journal/attach-journal.js +20 -0
  216. package/dist/journal/attach-journal.js.map +1 -0
  217. package/dist/journal/deviation-report.d.ts +28 -0
  218. package/dist/journal/deviation-report.d.ts.map +1 -0
  219. package/dist/journal/deviation-report.js +54 -0
  220. package/dist/journal/deviation-report.js.map +1 -0
  221. package/dist/journal/deviation-service.d.ts +12 -0
  222. package/dist/journal/deviation-service.d.ts.map +1 -0
  223. package/dist/journal/deviation-service.js +32 -0
  224. package/dist/journal/deviation-service.js.map +1 -0
  225. package/dist/journal/envelope-store.d.ts +19 -0
  226. package/dist/journal/envelope-store.d.ts.map +1 -0
  227. package/dist/journal/envelope-store.js +62 -0
  228. package/dist/journal/envelope-store.js.map +1 -0
  229. package/dist/journal/envelope.d.ts +232 -0
  230. package/dist/journal/envelope.d.ts.map +1 -0
  231. package/dist/journal/envelope.js +94 -0
  232. package/dist/journal/envelope.js.map +1 -0
  233. package/dist/journal/journal-query.d.ts +20 -0
  234. package/dist/journal/journal-query.d.ts.map +1 -0
  235. package/dist/journal/journal-query.js +28 -0
  236. package/dist/journal/journal-query.js.map +1 -0
  237. package/dist/journal/journal-recorder.d.ts +38 -0
  238. package/dist/journal/journal-recorder.d.ts.map +1 -0
  239. package/dist/journal/journal-recorder.js +81 -0
  240. package/dist/journal/journal-recorder.js.map +1 -0
  241. package/dist/journal/retention.d.ts +21 -0
  242. package/dist/journal/retention.d.ts.map +1 -0
  243. package/dist/journal/retention.js +50 -0
  244. package/dist/journal/retention.js.map +1 -0
  245. package/dist/journal/rollups.d.ts +49 -0
  246. package/dist/journal/rollups.d.ts.map +1 -0
  247. package/dist/journal/rollups.js +83 -0
  248. package/dist/journal/rollups.js.map +1 -0
  249. package/dist/journal/session-end.d.ts +32 -0
  250. package/dist/journal/session-end.d.ts.map +1 -0
  251. package/dist/journal/session-end.js +52 -0
  252. package/dist/journal/session-end.js.map +1 -0
  253. package/dist/journal/session-journal.d.ts +25 -0
  254. package/dist/journal/session-journal.d.ts.map +1 -0
  255. package/dist/journal/session-journal.js +168 -0
  256. package/dist/journal/session-journal.js.map +1 -0
  257. package/dist/license/license.d.ts +8 -3
  258. package/dist/license/license.d.ts.map +1 -1
  259. package/dist/license/license.js +34 -11
  260. package/dist/license/license.js.map +1 -1
  261. package/dist/mcp-proxy.d.ts +20 -0
  262. package/dist/mcp-proxy.d.ts.map +1 -1
  263. package/dist/mcp-proxy.js +45 -27
  264. package/dist/mcp-proxy.js.map +1 -1
  265. package/dist/mcp.d.ts +14 -0
  266. package/dist/mcp.d.ts.map +1 -1
  267. package/dist/mcp.js +79 -9
  268. package/dist/mcp.js.map +1 -1
  269. package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
  270. package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
  271. package/dist/oracles/flow-instrument-gaps.js +45 -0
  272. package/dist/oracles/flow-instrument-gaps.js.map +1 -0
  273. package/dist/oracles/propose-consequences.d.ts +22 -0
  274. package/dist/oracles/propose-consequences.d.ts.map +1 -0
  275. package/dist/oracles/propose-consequences.js +93 -0
  276. package/dist/oracles/propose-consequences.js.map +1 -0
  277. package/dist/oracles/self-instrument.d.ts +32 -0
  278. package/dist/oracles/self-instrument.d.ts.map +1 -0
  279. package/dist/oracles/self-instrument.js +44 -0
  280. package/dist/oracles/self-instrument.js.map +1 -0
  281. package/dist/pairing-token.d.ts +1 -1
  282. package/dist/phenomena/phenomena.d.ts +27 -0
  283. package/dist/phenomena/phenomena.d.ts.map +1 -0
  284. package/dist/phenomena/phenomena.js +102 -0
  285. package/dist/phenomena/phenomena.js.map +1 -0
  286. package/dist/pool/browser-pool.d.ts +5 -3
  287. package/dist/pool/browser-pool.d.ts.map +1 -1
  288. package/dist/pool/browser-pool.js +21 -3
  289. package/dist/pool/browser-pool.js.map +1 -1
  290. package/dist/pool/playwright-launcher.d.ts.map +1 -1
  291. package/dist/pool/playwright-launcher.js +9 -2
  292. package/dist/pool/playwright-launcher.js.map +1 -1
  293. package/dist/project/file-lock.d.ts +2 -0
  294. package/dist/project/file-lock.d.ts.map +1 -0
  295. package/dist/project/file-lock.js +24 -0
  296. package/dist/project/file-lock.js.map +1 -0
  297. package/dist/project/fs-port.d.ts +18 -0
  298. package/dist/project/fs-port.d.ts.map +1 -1
  299. package/dist/project/fs-port.js +24 -2
  300. package/dist/project/fs-port.js.map +1 -1
  301. package/dist/project/project-store.d.ts.map +1 -1
  302. package/dist/project/project-store.js +13 -7
  303. package/dist/project/project-store.js.map +1 -1
  304. package/dist/project/project-tools.d.ts +0 -6
  305. package/dist/project/project-tools.d.ts.map +1 -1
  306. package/dist/project/project-tools.js +24 -1
  307. package/dist/project/project-tools.js.map +1 -1
  308. package/dist/project/reticle-dir.d.ts +39 -14
  309. package/dist/project/reticle-dir.d.ts.map +1 -1
  310. package/dist/project/reticle-dir.js +30 -4
  311. package/dist/project/reticle-dir.js.map +1 -1
  312. package/dist/runs/build-verification-run.d.ts +1 -1
  313. package/dist/runs/build-verification-run.js +1 -1
  314. package/dist/runs/repair-prompt.d.ts +2 -0
  315. package/dist/runs/repair-prompt.d.ts.map +1 -1
  316. package/dist/runs/repair-prompt.js +14 -1
  317. package/dist/runs/repair-prompt.js.map +1 -1
  318. package/dist/runs/reticle-runner.d.ts +1 -1
  319. package/dist/runs/reticle-runner.d.ts.map +1 -1
  320. package/dist/runs/run-diff.d.ts +34 -0
  321. package/dist/runs/run-diff.d.ts.map +1 -0
  322. package/dist/runs/run-diff.js +71 -0
  323. package/dist/runs/run-diff.js.map +1 -0
  324. package/dist/runs/run-store.d.ts +6 -1
  325. package/dist/runs/run-store.d.ts.map +1 -1
  326. package/dist/runs/run-store.js +22 -2
  327. package/dist/runs/run-store.js.map +1 -1
  328. package/dist/runs/run-tools.d.ts.map +1 -1
  329. package/dist/runs/run-tools.js +16 -3
  330. package/dist/runs/run-tools.js.map +1 -1
  331. package/dist/runs/verify-server.js +1 -1
  332. package/dist/runs/verify-server.js.map +1 -1
  333. package/dist/session/control-envelope.d.ts +9 -1
  334. package/dist/session/control-envelope.d.ts.map +1 -1
  335. package/dist/session/control-envelope.js +13 -1
  336. package/dist/session/control-envelope.js.map +1 -1
  337. package/dist/session/live-control-tools.d.ts +1 -1
  338. package/dist/session/live-control-tools.js +1 -1
  339. package/dist/session/live-control.d.ts +38 -0
  340. package/dist/session/live-control.d.ts.map +1 -0
  341. package/dist/session/live-control.js +64 -0
  342. package/dist/session/live-control.js.map +1 -0
  343. package/dist/session/observed-state.d.ts +46 -0
  344. package/dist/session/observed-state.d.ts.map +1 -0
  345. package/dist/session/observed-state.js +76 -0
  346. package/dist/session/observed-state.js.map +1 -0
  347. package/dist/session/output-budget.d.ts +9 -0
  348. package/dist/session/output-budget.d.ts.map +1 -1
  349. package/dist/session/output-budget.js +9 -0
  350. package/dist/session/output-budget.js.map +1 -1
  351. package/dist/session/review-store.d.ts +1 -1
  352. package/dist/session/review-store.d.ts.map +1 -1
  353. package/dist/session/review-store.js +2 -2
  354. package/dist/session/review-store.js.map +1 -1
  355. package/dist/session/session-manager.d.ts +9 -7
  356. package/dist/session/session-manager.d.ts.map +1 -1
  357. package/dist/session/session-manager.js +8 -8
  358. package/dist/session/session-manager.js.map +1 -1
  359. package/dist/session/session-readiness.js +1 -1
  360. package/dist/session/session-readiness.js.map +1 -1
  361. package/dist/session/session-reaper.d.ts +1 -1
  362. package/dist/session/session-reaper.js +1 -1
  363. package/dist/session/session-recommendation.d.ts +1 -1
  364. package/dist/session/session-recommendation.js +1 -1
  365. package/dist/session/session-tools.js +1 -1
  366. package/dist/session/session-tools.js.map +1 -1
  367. package/dist/session/session.d.ts +43 -11
  368. package/dist/session/session.d.ts.map +1 -1
  369. package/dist/session/session.js +115 -46
  370. package/dist/session/session.js.map +1 -1
  371. package/dist/tools/act-tools.d.ts.map +1 -1
  372. package/dist/tools/act-tools.js +252 -70
  373. package/dist/tools/act-tools.js.map +1 -1
  374. package/dist/tools/act-view.d.ts +4 -4
  375. package/dist/tools/act-view.js +4 -4
  376. package/dist/tools/browser-tools.d.ts.map +1 -1
  377. package/dist/tools/browser-tools.js +32 -8
  378. package/dist/tools/browser-tools.js.map +1 -1
  379. package/dist/tools/contract-tools.d.ts.map +1 -1
  380. package/dist/tools/contract-tools.js +5 -0
  381. package/dist/tools/contract-tools.js.map +1 -1
  382. package/dist/tools/dynamic-tools.d.ts.map +1 -1
  383. package/dist/tools/dynamic-tools.js +7 -6
  384. package/dist/tools/dynamic-tools.js.map +1 -1
  385. package/dist/tools/invoke-tool.d.ts.map +1 -1
  386. package/dist/tools/invoke-tool.js +32 -29
  387. package/dist/tools/invoke-tool.js.map +1 -1
  388. package/dist/tools/lease-tools.d.ts +16 -0
  389. package/dist/tools/lease-tools.d.ts.map +1 -1
  390. package/dist/tools/lease-tools.js +11 -0
  391. package/dist/tools/lease-tools.js.map +1 -1
  392. package/dist/tools/merge-tools.d.ts +43 -0
  393. package/dist/tools/merge-tools.d.ts.map +1 -0
  394. package/dist/tools/merge-tools.js +66 -0
  395. package/dist/tools/merge-tools.js.map +1 -0
  396. package/dist/tools/observe-tools.d.ts.map +1 -1
  397. package/dist/tools/observe-tools.js +172 -29
  398. package/dist/tools/observe-tools.js.map +1 -1
  399. package/dist/tools/profiles.d.ts +18 -13
  400. package/dist/tools/profiles.d.ts.map +1 -1
  401. package/dist/tools/profiles.js +39 -33
  402. package/dist/tools/profiles.js.map +1 -1
  403. package/dist/tools/query-paginate.d.ts +9 -2
  404. package/dist/tools/query-paginate.d.ts.map +1 -1
  405. package/dist/tools/query-paginate.js +21 -4
  406. package/dist/tools/query-paginate.js.map +1 -1
  407. package/dist/tools/read-tools.d.ts.map +1 -1
  408. package/dist/tools/read-tools.js +30 -1
  409. package/dist/tools/read-tools.js.map +1 -1
  410. package/dist/tools/snapshot-delta.d.ts +2 -0
  411. package/dist/tools/snapshot-delta.d.ts.map +1 -1
  412. package/dist/tools/snapshot-delta.js +0 -0
  413. package/dist/tools/snapshot-delta.js.map +1 -1
  414. package/dist/tools/tool-kit.d.ts +3 -2
  415. package/dist/tools/tool-kit.d.ts.map +1 -1
  416. package/dist/tools/tool-kit.js +11 -1
  417. package/dist/tools/tool-kit.js.map +1 -1
  418. package/dist/tools/tool-names.d.ts +18 -10
  419. package/dist/tools/tool-names.d.ts.map +1 -1
  420. package/dist/tools/tool-names.js +22 -13
  421. package/dist/tools/tool-names.js.map +1 -1
  422. package/dist/tools/tools-helpers.d.ts +12 -0
  423. package/dist/tools/tools-helpers.d.ts.map +1 -1
  424. package/dist/tools/tools-helpers.js +20 -0
  425. package/dist/tools/tools-helpers.js.map +1 -1
  426. package/dist/tools/tools.d.ts.map +1 -1
  427. package/dist/tools/tools.js +162 -12
  428. package/dist/tools/tools.js.map +1 -1
  429. package/dist/update/updater.d.ts +1 -1
  430. package/dist/update/updater.js +2 -2
  431. package/dist/update/updater.js.map +1 -1
  432. package/package.json +8 -3
  433. package/dist/update/update-tools.d.ts +0 -3
  434. package/dist/update/update-tools.d.ts.map +0 -1
  435. package/dist/update/update-tools.js +0 -94
  436. package/dist/update/update-tools.js.map +0 -1
@@ -1,9 +1,25 @@
1
- import { access, mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
1
+ import { access, appendFile, mkdir, open, readdir, readFile, rename, rm, stat, writeFile, } from 'node:fs/promises';
2
2
  /** Production adapter — the single import site of node:fs/promises in the server. */
3
3
  export function createNodeFileSystem() {
4
4
  return {
5
5
  readFile: (path) => readFile(path, 'utf8'),
6
+ readFileFrom: async (path, byteOffset) => {
7
+ const fh = await open(path, 'r');
8
+ try {
9
+ const { size } = await fh.stat();
10
+ if (byteOffset >= size)
11
+ return { text: '', size };
12
+ const length = size - byteOffset;
13
+ const buf = Buffer.allocUnsafe(length);
14
+ await fh.read(buf, 0, length, byteOffset);
15
+ return { text: buf.toString('utf8'), size };
16
+ }
17
+ finally {
18
+ await fh.close();
19
+ }
20
+ },
6
21
  writeFile: (path, data) => writeFile(path, data, 'utf8'),
22
+ appendFile: (path, data) => appendFile(path, data, 'utf8'),
7
23
  readFileBytes: async (path) => {
8
24
  const buf = await readFile(path);
9
25
  return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
@@ -24,7 +40,13 @@ export function createNodeFileSystem() {
24
40
  readdir: (path) => readdir(path),
25
41
  rename: (from, to) => rename(from, to),
26
42
  rm: async (path) => {
27
- await rm(path, { force: true });
43
+ // recursive so a session-journal DIRECTORY can be pruned; force so a missing path is a no-op.
44
+ // recursive is harmless for the file-removal callers (run/flow artifacts).
45
+ await rm(path, { recursive: true, force: true });
46
+ },
47
+ stat: async (path) => {
48
+ const s = await stat(path);
49
+ return { mtimeMs: s.mtimeMs };
28
50
  },
29
51
  isNotFound: (error) => error?.code === 'ENOENT',
30
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fs-port.js","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA2B3F,qFAAqF;AACrF,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;QACxD,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACpE,CAAC;QACD,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;QACrD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACtC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACjB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAE,KAA2C,EAAE,IAAI,KAAK,QAAQ;KACvF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fs-port.js","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-store.d.ts","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,gBAAgB,EAChB,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK/C,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAI5C;;;;GAIG;AACH,qBAAa,YAAY;;gBAKX,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAoB1D,mGAAmG;IAC7F,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA0BxC;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D,iGAAiG;IAC3F,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAS5D"}
1
+ {"version":3,"file":"project-store.d.ts","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,gBAAgB,EAChB,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAM/C,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAI5C;;;;GAIG;AACH,qBAAa,YAAY;;gBAKX,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAoB1D,mGAAmG;IAC7F,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA0BxC;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,iGAAiG;IAC3F,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAS5D"}
@@ -1,5 +1,6 @@
1
1
  import { PROJECT_FILE_VERSION, PROJECT_RUN_CAP, ProjectFileSchema, ProjectReadError, } from '@reticlehq/core';
2
2
  import { reticleDirPaths } from './reticle-dir.js';
3
+ import { withFileLock } from './file-lock.js';
3
4
  const JSON_INDENT = 2;
4
5
  const EMPTY_PROJECT = { version: PROJECT_FILE_VERSION, runs: [] };
5
6
  /**
@@ -63,13 +64,18 @@ export class ProjectStore {
63
64
  * (last PER_NAME of any one name, then cap to TOTAL overall) and writes byte-stably.
64
65
  */
65
66
  async recordRun(record) {
66
- const existing = await this.read();
67
- const base = existing.ok ? existing.file : EMPTY_PROJECT;
68
- const stamped = { ...record, at: this.#clock.now() };
69
- const runs = truncate([...base.runs, stamped]);
70
- const next = { ...base, runs };
71
- await this.#fs.mkdir(reticleDirPaths(this.#root).root);
72
- await this.#fs.writeFile(reticleDirPaths(this.#root).project, this.#serialize(next));
67
+ const path = reticleDirPaths(this.#root).project;
68
+ // Serialized per file: a parallel flow_verify records N runs concurrently, and an unlocked
69
+ // read-append-write drops every run but the last writer's (each read the same base list).
70
+ await withFileLock(path, async () => {
71
+ const existing = await this.read();
72
+ const base = existing.ok ? existing.file : EMPTY_PROJECT;
73
+ const stamped = { ...record, at: this.#clock.now() };
74
+ const runs = truncate([...base.runs, stamped]);
75
+ const next = { ...base, runs };
76
+ await this.#fs.mkdir(reticleDirPaths(this.#root).root);
77
+ await this.#fs.writeFile(path, this.#serialize(next));
78
+ });
73
79
  }
74
80
  /** The most-recent run for `name` (undefined on missing/malformed/none). Powers diff-vs-last. */
75
81
  async lastRun(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,3 @@
1
1
  import type { ToolDef } from '../tools/tools.js';
2
- /**
3
- * The cross-run memory tools. `reticle_project` reads .reticle/project.json (optionally
4
- * scoped to a name, with a diff-vs-last summary); `reticle_run_record` explicitly records an outcome
5
- * (the manual companion to the auto-record on reticle_flow_replay). Both keep the agent's "did this
6
- * behave like last run?" question answerable without re-deriving it from raw observations.
7
- */
8
2
  export declare const PROJECT_TOOLS: ToolDef[];
9
3
  //# sourceMappingURL=project-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-tools.d.ts","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AAmD3D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,EAoElC,CAAC"}
1
+ {"version":3,"file":"project-tools.d.ts","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AA4E3D,eAAO,MAAM,aAAa,EAAE,OAAO,EA4ElC,CAAC"}
@@ -3,6 +3,8 @@ import { ProjectReadError, RunKind, RunStatus } from '@reticlehq/core';
3
3
  import { ReticleTool } from '../tools/tool-names.js';
4
4
  import { sessionIdShape } from '../tools/tool-kit.js';
5
5
  import { asString } from '../tools/tools-helpers.js';
6
+ import { RunStore } from '../runs/run-store.js';
7
+ import { diffRuns as diffVerificationRuns, } from '../runs/run-diff.js';
6
8
  const REGRESSION_STATUSES = new Set([
7
9
  RunStatus.FAIL,
8
10
  RunStatus.DRIFT,
@@ -44,10 +46,23 @@ function lastTwoFor(runs, name) {
44
46
  * (the manual companion to the auto-record on reticle_flow_replay). Both keep the agent's "did this
45
47
  * behave like last run?" question answerable without re-deriving it from raw observations.
46
48
  */
49
+ /**
50
+ * The per-flow diff between the two most-recent verification ARTIFACTS (.reticle/runs), or undefined when
51
+ * fewer than two exist. Never throws — a missing/unreadable artifact must not break reading run history.
52
+ */
53
+ async function lastTwoRunArtifacts(deps) {
54
+ try {
55
+ const pair = await new RunStore(deps.fs, deps.reticleRoot).latestTwo();
56
+ return pair === undefined ? undefined : diffVerificationRuns(pair[0], pair[1]);
57
+ }
58
+ catch {
59
+ return undefined;
60
+ }
61
+ }
47
62
  export const PROJECT_TOOLS = [
48
63
  {
49
64
  name: ReticleTool.PROJECT,
50
- description: 'Read cross-run history from .reticle/project.json — the memory of how past runs behaved. With { name } it also returns the last run for that flow plus a diff-vs-last summary (status change, regressed flag, consoleErrors/driftSteps deltas) so you can answer "did it behave like last time?". Returns { runs, learned?, lastRun?, diff? } or { error, reason } when no/invalid history exists.',
65
+ description: 'Read cross-run history from .reticle/project.json — the memory of how past runs behaved. With { name } it also returns the last run for that flow plus a diff-vs-last summary (status change, regressed flag, consoleErrors/driftSteps deltas) so you can answer "did it behave like last time?". Returns { runs, learned?, lastRun?, diff?, runDiff? } — `diff` is the lightweight status/console/drift delta vs the previous run of that NAME; `runDiff` is the per-flow duration/status delta between the two most-recent full verification artifacts ("step 3: 412ms -> 987ms (+140%), +2 requests"). Or { error, reason } when no/invalid history exists.',
51
66
  inputSchema: {
52
67
  name: z.string().optional().describe('Filter runs by this name. Omit to return all runs.'),
53
68
  ...sessionIdShape,
@@ -55,6 +70,7 @@ export const PROJECT_TOOLS = [
55
70
  outputSchema: {
56
71
  runs: z.array(z.unknown()),
57
72
  diff: z.unknown().optional(),
73
+ runDiff: z.unknown().optional(),
58
74
  },
59
75
  handler: async (deps, args) => {
60
76
  const read = await deps.project.read();
@@ -72,11 +88,18 @@ export const PROJECT_TOOLS = [
72
88
  }
73
89
  const lastRun = await deps.project.lastRun(name);
74
90
  const pair = lastTwoFor(read.file.runs, name);
91
+ //: the RICH run diff (per-flow duration deltas past a noise floor, status changes, new/removed
92
+ // flows, verdict change) over the last two verification ARTIFACTS. That lives alongside — not
93
+ // instead of — the lightweight RunRecord diff above: `diff` answers "did this named run behave like
94
+ // last time?" from project.json, while `runDiff` answers "what changed between the last two full
95
+ // verification runs?" from .reticle/runs. Best-effort: no artifacts simply means no runDiff.
96
+ const runDiff = await lastTwoRunArtifacts(deps);
75
97
  return {
76
98
  runs: read.file.runs.filter((r) => r.name === name),
77
99
  learned: read.file.learned,
78
100
  lastRun,
79
101
  ...(pair !== undefined ? { diff: diffRuns(pair[0], pair[1]) } : {}),
102
+ ...(runDiff === undefined ? {} : { runDiff }),
80
103
  };
81
104
  },
82
105
  },
@@ -1 +1 @@
1
- {"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,58 @@
1
+ import type { FlowName, SessionId } from '@reticlehq/core';
1
2
  import { ContractReadError, type CapabilitiesContract, type RunId } from '@reticlehq/core';
2
3
  import type { FileSystemPort } from './fs-port.js';
3
- /** Resolved absolute paths inside a `.reticle/` root. Pure: join() only, no IO, no cwd. */
4
+ /** Resolved absolute paths inside a `.reticle/` root. Pure: join only, no IO, no cwd. */
4
5
  export interface ReticleDirPaths {
5
- /** .../.reticle */
6
+ /**.../.reticle */
6
7
  root: string;
7
- /** .../.reticle/contract.json */
8
+ /**.../.reticle/contract.json */
8
9
  contract: string;
9
- /** .../.reticle/flows */
10
+ /**.../.reticle/flows */
10
11
  flows: string;
11
- /** .../.reticle/baselines */
12
+ /**.../.reticle/baselines */
12
13
  baselines: string;
13
- /** .../.reticle/project.json (cross-run outcome memory) */
14
+ /**.../.reticle/project.json (cross-run outcome memory) */
14
15
  project: string;
15
- /** .../.reticle/visual (PNG baselines + diffs) */
16
+ /**.../.reticle/visual (PNG baselines + diffs) */
16
17
  visual: string;
17
- /** .../.reticle/runs (verification-run artifacts) */
18
+ /**.../.reticle/runs (verification-run artifacts) */
18
19
  runs: string;
20
+ /**.../.reticle/sessions (durable causal journal, one dir per session) */
21
+ sessions: string;
22
+ /**.../.reticle/envelopes.json (learned per-route expected envelopes) */
23
+ envelopes: string;
24
+ /**.../.reticle/ambient.json (learned ambient-churn region map) */
25
+ ambient: string;
26
+ /** .../.reticle/capsules (fail-to-pass bug capsules) */
27
+ capsules: string;
28
+ /**.../.reticle/flake.json (per-flow flake ledger) */
29
+ flake: string;
30
+ /**.../.reticle/assertion-tiers.json (last-passing assertion tiers; anti-reward-hacking baseline) */
31
+ tiers: string;
19
32
  }
20
33
  export declare function reticleDirPaths(root: string): ReticleDirPaths;
21
- /** The verification-run artifact path for `runId` (.reticle/runs/<runId>.json). */
34
+ /** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
22
35
  export declare function runPath(root: string, runId: string): string;
36
+ /** The journal directory for `sessionId` (.reticle/sessions/<id>). Guard the id first. */
37
+ export declare function sessionDirPath(root: string, sessionId: string): string;
38
+ /** The append-only event ledger path for a session (.reticle/sessions/<id>/events.jsonl). */
39
+ export declare function journalEventsPath(root: string, sessionId: string): string;
40
+ /** The append-only action ledger path for a session (.reticle/sessions/<id>/actions.jsonl). */
41
+ export declare function journalActionsPath(root: string, sessionId: string): string;
42
+ /**
43
+ * A sessionId must be a single safe path segment before it is joined into a disk path — same guard as
44
+ * run/flow ids (rejects '../', slashes, absolute, dotfiles). Session labels are user/tab-supplied, so
45
+ * this guard runs before any journal write.
46
+ */
47
+ export declare function isValidSessionId(sessionId: string): sessionId is SessionId;
23
48
  /**
24
49
  * A runId must be a single safe path segment — same guard as flow names (rejects '../', '/', '\\',
25
50
  * absolute, dotfiles). uuid-style ids (hyphens/underscores) pass. Guards every disk op before join.
26
51
  */
27
52
  export declare function isValidRunId(runId: string): runId is RunId;
28
- /** The PNG baseline path for `name` (.reticle/visual/<name>.png). */
53
+ /** The PNG baseline path for `name`.reticle/visual/<name>.png). */
29
54
  export declare function visualPath(root: string, name: string): string;
30
- /** The overlay-diff PNG path for `name` (.reticle/visual/<name>.diff.png). */
55
+ /** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
31
56
  export declare function visualDiffPath(root: string, name: string): string;
32
57
  /**
33
58
  * Path to a flow file. With a `projectId`, the flow lives in a per-project subdir
@@ -35,16 +60,16 @@ export declare function visualDiffPath(root: string, name: string): string;
35
60
  * apps' flows of the same name; without one it's the flat legacy path (`.reticle/flows/<name>.json`),
36
61
  * which is also where pre-existing (untagged) flows stay. Callers pass ONLY a validated projectId.
37
62
  */
38
- export declare function flowPath(root: string, name: string, projectId?: string): string;
63
+ export declare function flowPath(root: string, name: FlowName, projectId?: string): string;
39
64
  /** The directory a flow write targets: the per-project subdir, or the flat flows root for global. */
40
65
  export declare function flowDir(root: string, projectId?: string): string;
41
66
  /**
42
67
  * A flow name must be a single safe path segment — rejects '../', '/', '\\', absolute, dotfiles.
43
68
  * Guards every disk op before a path is ever joined, so a traversal name never escapes .reticle/.
44
69
  */
45
- export declare function isValidFlowName(name: string): boolean;
70
+ export declare function isValidFlowName(name: string): name is FlowName;
46
71
  export declare function baselinePath(root: string, name: string): string;
47
- /** Idempotent: creates .reticle/, .reticle/flows/, .reticle/baselines/ (recursive mkdir → safe to re-run). */
72
+ /** Idempotent: creates .reticle/,.reticle/flows/,.reticle/baselines/ (recursive mkdir → safe to re-run). */
48
73
  export declare function ensureReticleDir(fs: FileSystemPort, root: string): Promise<void>;
49
74
  /** Write the contract to .reticle/contract.json (auto-creating .reticle/ first). */
50
75
  export declare function writeContract(fs: FileSystemPort, root: string, capabilities: CapabilitiesContract, now: () => number): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"reticle-dir.d.ts","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,EAGjB,KAAK,oBAAoB,EAEzB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAU7D;AAED,mFAAmF;AACnF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,CAE1D;AAED,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/E;AAED,qGAAqG;AACrG,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,8GAA8G;AAC9G,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtF;AAiDD,oFAAoF;AACpF,wBAAsB,aAAa,CACjC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,oBAAoB,EAClC,GAAG,EAAE,MAAM,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,oBAAoB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE7C,6EAA6E;AAC7E,wBAAsB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyBhG"}
1
+ {"version":3,"file":"reticle-dir.d.ts","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,38 @@ export function reticleDirPaths(root) {
9
9
  project: join(root, ReticleDir.PROJECT_FILE),
10
10
  visual: join(root, ReticleDir.VISUAL_SUBDIR),
11
11
  runs: join(root, ReticleDir.RUNS_SUBDIR),
12
+ sessions: join(root, ReticleDir.SESSIONS_SUBDIR),
13
+ envelopes: join(root, ReticleDir.ENVELOPES_FILE),
14
+ ambient: join(root, ReticleDir.AMBIENT_FILE),
15
+ capsules: join(root, ReticleDir.CAPSULES_SUBDIR),
16
+ flake: join(root, ReticleDir.FLAKE_FILE),
17
+ tiers: join(root, ReticleDir.TIERS_FILE),
12
18
  };
13
19
  }
14
- /** The verification-run artifact path for `runId` (.reticle/runs/<runId>.json). */
20
+ /** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
15
21
  export function runPath(root, runId) {
16
22
  return join(root, ReticleDir.RUNS_SUBDIR, `${runId}.json`);
17
23
  }
24
+ /** The journal directory for `sessionId` (.reticle/sessions/<id>). Guard the id first. */
25
+ export function sessionDirPath(root, sessionId) {
26
+ return join(root, ReticleDir.SESSIONS_SUBDIR, sessionId);
27
+ }
28
+ /** The append-only event ledger path for a session (.reticle/sessions/<id>/events.jsonl). */
29
+ export function journalEventsPath(root, sessionId) {
30
+ return join(sessionDirPath(root, sessionId), ReticleDir.JOURNAL_EVENTS_FILE);
31
+ }
32
+ /** The append-only action ledger path for a session (.reticle/sessions/<id>/actions.jsonl). */
33
+ export function journalActionsPath(root, sessionId) {
34
+ return join(sessionDirPath(root, sessionId), ReticleDir.JOURNAL_ACTIONS_FILE);
35
+ }
36
+ /**
37
+ * A sessionId must be a single safe path segment before it is joined into a disk path — same guard as
38
+ * run/flow ids (rejects '../', slashes, absolute, dotfiles). Session labels are user/tab-supplied, so
39
+ * this guard runs before any journal write.
40
+ */
41
+ export function isValidSessionId(sessionId) {
42
+ return FLOW_NAME_PATTERN.test(sessionId) && !sessionId.includes('..');
43
+ }
18
44
  /**
19
45
  * A runId must be a single safe path segment — same guard as flow names (rejects '../', '/', '\\',
20
46
  * absolute, dotfiles). uuid-style ids (hyphens/underscores) pass. Guards every disk op before join.
@@ -22,11 +48,11 @@ export function runPath(root, runId) {
22
48
  export function isValidRunId(runId) {
23
49
  return FLOW_NAME_PATTERN.test(runId) && !runId.includes('..');
24
50
  }
25
- /** The PNG baseline path for `name` (.reticle/visual/<name>.png). */
51
+ /** The PNG baseline path for `name`.reticle/visual/<name>.png). */
26
52
  export function visualPath(root, name) {
27
53
  return join(root, ReticleDir.VISUAL_SUBDIR, `${name}.png`);
28
54
  }
29
- /** The overlay-diff PNG path for `name` (.reticle/visual/<name>.diff.png). */
55
+ /** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
30
56
  export function visualDiffPath(root, name) {
31
57
  return join(root, ReticleDir.VISUAL_SUBDIR, `${name}.diff.png`);
32
58
  }
@@ -57,7 +83,7 @@ export function isValidFlowName(name) {
57
83
  export function baselinePath(root, name) {
58
84
  return join(root, ReticleDir.BASELINES_SUBDIR, `${name}.json`);
59
85
  }
60
- /** Idempotent: creates .reticle/, .reticle/flows/, .reticle/baselines/ (recursive mkdir → safe to re-run). */
86
+ /** Idempotent: creates .reticle/,.reticle/flows/,.reticle/baselines/ (recursive mkdir → safe to re-run). */
61
87
  export async function ensureReticleDir(fs, root) {
62
88
  const p = reticleDirPaths(root);
63
89
  await fs.mkdir(p.root);
@@ -1 +1 @@
1
- {"version":3,"file":"reticle-dir.js","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reticle-dir.js","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * The verification-run assembler. A PURE mapping from already-produced verification results
3
3
  * (flow-replay outcomes, standalone checks, risks, evidence, repair packets) into the stable
4
4
  * ReticleVerificationRun artifact, with a deterministic verdict computed here. The clock is injected
5
- * (the single `createdAt` site — never Date.now() in logic, per rule 7). Gathering the inputs from a
5
+ * (the single `createdAt` site — never Date.now in logic, per rule 7). Gathering the inputs from a
6
6
  * live session is a separate adapter concern; this file owns the shape + the verdict rules so both
7
7
  * the MCP path and the programmatic Replay/Verify API produce byte-identical verdicts.
8
8
  */
@@ -2,7 +2,7 @@
2
2
  * The verification-run assembler. A PURE mapping from already-produced verification results
3
3
  * (flow-replay outcomes, standalone checks, risks, evidence, repair packets) into the stable
4
4
  * ReticleVerificationRun artifact, with a deterministic verdict computed here. The clock is injected
5
- * (the single `createdAt` site — never Date.now() in logic, per rule 7). Gathering the inputs from a
5
+ * (the single `createdAt` site — never Date.now in logic, per rule 7). Gathering the inputs from a
6
6
  * live session is a separate adapter concern; this file owns the shape + the verdict rules so both
7
7
  * the MCP path and the programmatic Replay/Verify API produce byte-identical verdicts.
8
8
  */
@@ -9,6 +9,8 @@ import { type FlowReplayResult, type RepairPacket } from '@reticlehq/core';
9
9
  * Build a repair packet for a failed replay, or undefined when the flow passed. The actual cause is
10
10
  * the decision's whatChanged, falling back to the replay error or a generic message.
11
11
  */
12
+ /** The deviation report's headline when it flagged something — narrows the replay's `unknown` deviation. */
13
+ export declare function deviationHeadline(deviation: unknown): string | undefined;
12
14
  export declare function buildRepairPacket(replay: FlowReplayResult): RepairPacket | undefined;
13
15
  /** Build the repair packets for a set of replays (failed ones only). */
14
16
  export declare function buildRepairPackets(replays: ReadonlyArray<FlowReplayResult>): RepairPacket[];
@@ -1 +1 @@
1
- {"version":3,"file":"repair-prompt.d.ts","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAgCzB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,SAAS,CAiBpF;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,YAAY,EAAE,CAE3F"}
1
+ {"version":3,"file":"repair-prompt.d.ts","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAgCzB;;;GAGG;AACH,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOxE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,SAAS,CAqBpF;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,YAAY,EAAE,CAE3F"}
@@ -35,11 +35,24 @@ function suggestedPrompt(name, actual, where, nextAction) {
35
35
  * Build a repair packet for a failed replay, or undefined when the flow passed. The actual cause is
36
36
  * the decision's whatChanged, falling back to the replay error or a generic message.
37
37
  */
38
+ /** The deviation report's headline when it flagged something — narrows the replay's `unknown` deviation. */
39
+ export function deviationHeadline(deviation) {
40
+ if (typeof deviation !== 'object' || deviation === null)
41
+ return undefined;
42
+ const d = deviation;
43
+ if (Array.isArray(d.deviations) && d.deviations.length > 0 && typeof d.headline === 'string') {
44
+ return d.headline;
45
+ }
46
+ return undefined;
47
+ }
38
48
  export function buildRepairPacket(replay) {
39
49
  if (replay.status === ReplayStatus.OK)
40
50
  return undefined;
41
51
  const decision = replay.decision;
42
- const actual = decision?.whatChanged ?? replay.error?.message ?? 'the flow failed';
52
+ const baseActual = decision?.whatChanged ?? replay.error?.message ?? 'the flow failed';
53
+ // Compose the deviation report's headline into the packet — it names the anomalous segment.
54
+ const deviationNote = deviationHeadline(replay.deviation);
55
+ const actual = deviationNote === undefined ? baseActual : `${baseActual} — deviation: ${deviationNote}`;
43
56
  const where = decision?.whereInSource;
44
57
  const sourceLocation = parseSource(where);
45
58
  const step = failingStepNumber(replay.steps);
@@ -1 +1 @@
1
- {"version":3,"file":"repair-prompt.js","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repair-prompt.js","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export interface RunnerPort {
23
23
  /** Injected run-id generator (no Math.random in logic) — the live adapter supplies a branded uuid. */
24
24
  newRunId(): RunId;
25
25
  }
26
- /** Run metadata the caller supplies; flows + verdict are produced by verify(). */
26
+ /** Run metadata the caller supplies; flows + verdict are produced by verify. */
27
27
  export interface VerifyOptions {
28
28
  names?: string[];
29
29
  project: VerificationRunInput['project'];
@@ -1 +1 @@
1
- {"version":3,"file":"reticle-runner.d.ts","sourceRoot":"","sources":["../../src/runs/reticle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG9F,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kGAAkG;IAClG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,GAAG,IAAI,MAAM,CAAC;IACd,sGAAsG;IACtG,QAAQ,IAAI,KAAK,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,qFAAqF;IACrF,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,qBAAa,aAAa;;gBAGZ,IAAI,EAAE,UAAU;IAI5B;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA+BnE"}
1
+ {"version":3,"file":"reticle-runner.d.ts","sourceRoot":"","sources":["../../src/runs/reticle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG9F,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kGAAkG;IAClG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,GAAG,IAAI,MAAM,CAAC;IACd,sGAAsG;IACtG,QAAQ,IAAI,KAAK,CAAC;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,qFAAqF;IACrF,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,qBAAa,aAAa;;gBAGZ,IAAI,EAAE,UAAU;IAI5B;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA+BnE"}
@@ -0,0 +1,34 @@
1
+ import type { ReticleVerificationRun } from '@reticlehq/core';
2
+ /** A per-flow change between two runs. Only flows with a meaningful change are reported. */
3
+ export interface FlowDelta {
4
+ name: string;
5
+ beforeMs: number;
6
+ afterMs: number;
7
+ durationDeltaMs: number;
8
+ durationDeltaPct: number;
9
+ beforeStatus: string;
10
+ afterStatus: string;
11
+ statusChanged: boolean;
12
+ /** Slower past the noise floor, or a status change — worth the agent's attention. */
13
+ regressed: boolean;
14
+ }
15
+ export interface RunDiff {
16
+ flows: FlowDelta[];
17
+ newFlows: string[];
18
+ removedFlows: string[];
19
+ verdictChange?: {
20
+ from: string;
21
+ to: string;
22
+ };
23
+ headline: string;
24
+ }
25
+ /** Below this percent, a duration change is noise (machine jitter), not a regression. */
26
+ export declare const DEFAULT_NOISE_FLOOR_PCT = 10;
27
+ /**
28
+ * Compare two verification runs — the concrete answer to "what changed between run A and B". Flow
29
+ * durations are diffed with a noise floor (jitter below it is ignored); status changes and new/removed
30
+ * flows are always surfaced. Deterministic and pure; flows are matched by name. Per-step deltas + net/
31
+ * console diffs land once runs persist per-step detail.
32
+ */
33
+ export declare function diffRuns(before: ReticleVerificationRun, after: ReticleVerificationRun, noiseFloorPct?: number): RunDiff;
34
+ //# sourceMappingURL=run-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-diff.d.ts","sourceRoot":"","sources":["../../src/runs/run-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,iBAAiB,CAAC;AAE7E,4FAA4F;AAC5F,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,qFAAqF;IACrF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,KAAK,CAAC;AA2B1C;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,sBAAsB,EAC7B,aAAa,GAAE,MAAgC,GAC9C,OAAO,CAyCT"}