@reticlehq/server 2.0.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 (483) hide show
  1. package/LICENSE +105 -0
  2. package/README.md +17 -0
  3. package/dist/bridge-security.d.ts +23 -0
  4. package/dist/bridge-security.d.ts.map +1 -0
  5. package/dist/bridge-security.js +44 -0
  6. package/dist/bridge-security.js.map +1 -0
  7. package/dist/bridge.d.ts +42 -0
  8. package/dist/bridge.d.ts.map +1 -0
  9. package/dist/bridge.js +281 -0
  10. package/dist/bridge.js.map +1 -0
  11. package/dist/bridge.test-harness.d.ts +42 -0
  12. package/dist/bridge.test-harness.d.ts.map +1 -0
  13. package/dist/bridge.test-harness.js +192 -0
  14. package/dist/bridge.test-harness.js.map +1 -0
  15. package/dist/cli-launch.d.ts +53 -0
  16. package/dist/cli-launch.d.ts.map +1 -0
  17. package/dist/cli-launch.js +109 -0
  18. package/dist/cli-launch.js.map +1 -0
  19. package/dist/cli-parse.d.ts +74 -0
  20. package/dist/cli-parse.d.ts.map +1 -0
  21. package/dist/cli-parse.js +321 -0
  22. package/dist/cli-parse.js.map +1 -0
  23. package/dist/cli-port.d.ts +26 -0
  24. package/dist/cli-port.d.ts.map +1 -0
  25. package/dist/cli-port.js +57 -0
  26. package/dist/cli-port.js.map +1 -0
  27. package/dist/cli-verify.d.ts +46 -0
  28. package/dist/cli-verify.d.ts.map +1 -0
  29. package/dist/cli-verify.js +181 -0
  30. package/dist/cli-verify.js.map +1 -0
  31. package/dist/cli.d.ts +6 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +337 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/cloud/cloud-sync.d.ts +50 -0
  36. package/dist/cloud/cloud-sync.d.ts.map +1 -0
  37. package/dist/cloud/cloud-sync.js +47 -0
  38. package/dist/cloud/cloud-sync.js.map +1 -0
  39. package/dist/crawl/crawl-tools.d.ts +8 -0
  40. package/dist/crawl/crawl-tools.d.ts.map +1 -0
  41. package/dist/crawl/crawl-tools.js +61 -0
  42. package/dist/crawl/crawl-tools.js.map +1 -0
  43. package/dist/crawl/crawl.d.ts +45 -0
  44. package/dist/crawl/crawl.d.ts.map +1 -0
  45. package/dist/crawl/crawl.js +106 -0
  46. package/dist/crawl/crawl.js.map +1 -0
  47. package/dist/daemon-resilience.d.ts +17 -0
  48. package/dist/daemon-resilience.d.ts.map +1 -0
  49. package/dist/daemon-resilience.js +23 -0
  50. package/dist/daemon-resilience.js.map +1 -0
  51. package/dist/daemon.d.ts +26 -0
  52. package/dist/daemon.d.ts.map +1 -0
  53. package/dist/daemon.js +122 -0
  54. package/dist/daemon.js.map +1 -0
  55. package/dist/domain/domain-model.d.ts +64 -0
  56. package/dist/domain/domain-model.d.ts.map +1 -0
  57. package/dist/domain/domain-model.js +127 -0
  58. package/dist/domain/domain-model.js.map +1 -0
  59. package/dist/domain/domain-tools.d.ts +9 -0
  60. package/dist/domain/domain-tools.d.ts.map +1 -0
  61. package/dist/domain/domain-tools.js +66 -0
  62. package/dist/domain/domain-tools.js.map +1 -0
  63. package/dist/domain/flow-risk.d.ts +34 -0
  64. package/dist/domain/flow-risk.d.ts.map +1 -0
  65. package/dist/domain/flow-risk.js +81 -0
  66. package/dist/domain/flow-risk.js.map +1 -0
  67. package/dist/ee/audit-log.d.ts +15 -0
  68. package/dist/ee/audit-log.d.ts.map +1 -0
  69. package/dist/ee/audit-log.js +12 -0
  70. package/dist/ee/audit-log.js.map +1 -0
  71. package/dist/events/event-filters.d.ts +65 -0
  72. package/dist/events/event-filters.d.ts.map +1 -0
  73. package/dist/events/event-filters.js +98 -0
  74. package/dist/events/event-filters.js.map +1 -0
  75. package/dist/events/predicate-eval.d.ts +91 -0
  76. package/dist/events/predicate-eval.d.ts.map +1 -0
  77. package/dist/events/predicate-eval.js +299 -0
  78. package/dist/events/predicate-eval.js.map +1 -0
  79. package/dist/events/predicate.d.ts +19 -0
  80. package/dist/events/predicate.d.ts.map +1 -0
  81. package/dist/events/predicate.js +188 -0
  82. package/dist/events/predicate.js.map +1 -0
  83. package/dist/events/reaction.d.ts +34 -0
  84. package/dist/events/reaction.d.ts.map +1 -0
  85. package/dist/events/reaction.js +60 -0
  86. package/dist/events/reaction.js.map +1 -0
  87. package/dist/events/ring-buffer.d.ts +32 -0
  88. package/dist/events/ring-buffer.d.ts.map +1 -0
  89. package/dist/events/ring-buffer.js +75 -0
  90. package/dist/events/ring-buffer.js.map +1 -0
  91. package/dist/flows/annotate-tools.d.ts +16 -0
  92. package/dist/flows/annotate-tools.d.ts.map +1 -0
  93. package/dist/flows/annotate-tools.js +136 -0
  94. package/dist/flows/annotate-tools.js.map +1 -0
  95. package/dist/flows/annotate.d.ts +22 -0
  96. package/dist/flows/annotate.d.ts.map +1 -0
  97. package/dist/flows/annotate.js +134 -0
  98. package/dist/flows/annotate.js.map +1 -0
  99. package/dist/flows/annotation-store.d.ts +23 -0
  100. package/dist/flows/annotation-store.d.ts.map +1 -0
  101. package/dist/flows/annotation-store.js +51 -0
  102. package/dist/flows/annotation-store.js.map +1 -0
  103. package/dist/flows/decision.d.ts +13 -0
  104. package/dist/flows/decision.d.ts.map +1 -0
  105. package/dist/flows/decision.js +111 -0
  106. package/dist/flows/decision.js.map +1 -0
  107. package/dist/flows/flow-classify.d.ts +52 -0
  108. package/dist/flows/flow-classify.d.ts.map +1 -0
  109. package/dist/flows/flow-classify.js +99 -0
  110. package/dist/flows/flow-classify.js.map +1 -0
  111. package/dist/flows/flow-replay-run.d.ts +15 -0
  112. package/dist/flows/flow-replay-run.d.ts.map +1 -0
  113. package/dist/flows/flow-replay-run.js +120 -0
  114. package/dist/flows/flow-replay-run.js.map +1 -0
  115. package/dist/flows/flow-replay.d.ts +49 -0
  116. package/dist/flows/flow-replay.d.ts.map +1 -0
  117. package/dist/flows/flow-replay.js +391 -0
  118. package/dist/flows/flow-replay.js.map +1 -0
  119. package/dist/flows/flow-report.d.ts +23 -0
  120. package/dist/flows/flow-report.d.ts.map +1 -0
  121. package/dist/flows/flow-report.js +106 -0
  122. package/dist/flows/flow-report.js.map +1 -0
  123. package/dist/flows/flow-scope.d.ts +25 -0
  124. package/dist/flows/flow-scope.d.ts.map +1 -0
  125. package/dist/flows/flow-scope.js +32 -0
  126. package/dist/flows/flow-scope.js.map +1 -0
  127. package/dist/flows/flow-success.d.ts +33 -0
  128. package/dist/flows/flow-success.d.ts.map +1 -0
  129. package/dist/flows/flow-success.js +131 -0
  130. package/dist/flows/flow-success.js.map +1 -0
  131. package/dist/flows/flow-tools.d.ts +4 -0
  132. package/dist/flows/flow-tools.d.ts.map +1 -0
  133. package/dist/flows/flow-tools.js +460 -0
  134. package/dist/flows/flow-tools.js.map +1 -0
  135. package/dist/flows/flows.d.ts +86 -0
  136. package/dist/flows/flows.d.ts.map +1 -0
  137. package/dist/flows/flows.js +319 -0
  138. package/dist/flows/flows.js.map +1 -0
  139. package/dist/flows/heal.d.ts +43 -0
  140. package/dist/flows/heal.d.ts.map +1 -0
  141. package/dist/flows/heal.js +98 -0
  142. package/dist/flows/heal.js.map +1 -0
  143. package/dist/flows/recordings.d.ts +46 -0
  144. package/dist/flows/recordings.d.ts.map +1 -0
  145. package/dist/flows/recordings.js +43 -0
  146. package/dist/flows/recordings.js.map +1 -0
  147. package/dist/flows/replay.d.ts +23 -0
  148. package/dist/flows/replay.d.ts.map +1 -0
  149. package/dist/flows/replay.js +160 -0
  150. package/dist/flows/replay.js.map +1 -0
  151. package/dist/http-server.d.ts +39 -0
  152. package/dist/http-server.d.ts.map +1 -0
  153. package/dist/http-server.js +145 -0
  154. package/dist/http-server.js.map +1 -0
  155. package/dist/idle-shutdown.d.ts +34 -0
  156. package/dist/idle-shutdown.d.ts.map +1 -0
  157. package/dist/idle-shutdown.js +68 -0
  158. package/dist/idle-shutdown.js.map +1 -0
  159. package/dist/index.d.ts +135 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +371 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/init/cursor.d.ts +25 -0
  164. package/dist/init/cursor.d.ts.map +1 -0
  165. package/dist/init/cursor.js +49 -0
  166. package/dist/init/cursor.js.map +1 -0
  167. package/dist/init/detect.d.ts +49 -0
  168. package/dist/init/detect.d.ts.map +1 -0
  169. package/dist/init/detect.js +84 -0
  170. package/dist/init/detect.js.map +1 -0
  171. package/dist/init/mcp.d.ts +40 -0
  172. package/dist/init/mcp.d.ts.map +1 -0
  173. package/dist/init/mcp.js +55 -0
  174. package/dist/init/mcp.js.map +1 -0
  175. package/dist/init/node-io.d.ts +8 -0
  176. package/dist/init/node-io.d.ts.map +1 -0
  177. package/dist/init/node-io.js +57 -0
  178. package/dist/init/node-io.js.map +1 -0
  179. package/dist/init/plan.d.ts +72 -0
  180. package/dist/init/plan.d.ts.map +1 -0
  181. package/dist/init/plan.js +280 -0
  182. package/dist/init/plan.js.map +1 -0
  183. package/dist/init/project-id.d.ts +17 -0
  184. package/dist/init/project-id.d.ts.map +1 -0
  185. package/dist/init/project-id.js +38 -0
  186. package/dist/init/project-id.js.map +1 -0
  187. package/dist/init/run.d.ts +42 -0
  188. package/dist/init/run.d.ts.map +1 -0
  189. package/dist/init/run.js +171 -0
  190. package/dist/init/run.js.map +1 -0
  191. package/dist/init/snippets.d.ts +33 -0
  192. package/dist/init/snippets.d.ts.map +1 -0
  193. package/dist/init/snippets.js +117 -0
  194. package/dist/init/snippets.js.map +1 -0
  195. package/dist/init/vite-config.d.ts +25 -0
  196. package/dist/init/vite-config.d.ts.map +1 -0
  197. package/dist/init/vite-config.js +45 -0
  198. package/dist/init/vite-config.js.map +1 -0
  199. package/dist/input/network-mock-tools.d.ts +3 -0
  200. package/dist/input/network-mock-tools.d.ts.map +1 -0
  201. package/dist/input/network-mock-tools.js +94 -0
  202. package/dist/input/network-mock-tools.js.map +1 -0
  203. package/dist/input/network-mock.d.ts +55 -0
  204. package/dist/input/network-mock.d.ts.map +1 -0
  205. package/dist/input/network-mock.js +62 -0
  206. package/dist/input/network-mock.js.map +1 -0
  207. package/dist/input/real-input.d.ts +174 -0
  208. package/dist/input/real-input.d.ts.map +1 -0
  209. package/dist/input/real-input.js +289 -0
  210. package/dist/input/real-input.js.map +1 -0
  211. package/dist/input/scroll-find.d.ts +41 -0
  212. package/dist/input/scroll-find.d.ts.map +1 -0
  213. package/dist/input/scroll-find.js +59 -0
  214. package/dist/input/scroll-find.js.map +1 -0
  215. package/dist/input/scroll-tools.d.ts +8 -0
  216. package/dist/input/scroll-tools.d.ts.map +1 -0
  217. package/dist/input/scroll-tools.js +68 -0
  218. package/dist/input/scroll-tools.js.map +1 -0
  219. package/dist/input/viewport-tools.d.ts +3 -0
  220. package/dist/input/viewport-tools.d.ts.map +1 -0
  221. package/dist/input/viewport-tools.js +65 -0
  222. package/dist/input/viewport-tools.js.map +1 -0
  223. package/dist/license/license.d.ts +108 -0
  224. package/dist/license/license.d.ts.map +1 -0
  225. package/dist/license/license.js +203 -0
  226. package/dist/license/license.js.map +1 -0
  227. package/dist/log.d.ts +6 -0
  228. package/dist/log.d.ts.map +1 -0
  229. package/dist/log.js +9 -0
  230. package/dist/log.js.map +1 -0
  231. package/dist/mcp-proxy.d.ts +16 -0
  232. package/dist/mcp-proxy.d.ts.map +1 -0
  233. package/dist/mcp-proxy.js +168 -0
  234. package/dist/mcp-proxy.js.map +1 -0
  235. package/dist/mcp.d.ts +14 -0
  236. package/dist/mcp.d.ts.map +1 -0
  237. package/dist/mcp.js +101 -0
  238. package/dist/mcp.js.map +1 -0
  239. package/dist/pairing-token.d.ts +28 -0
  240. package/dist/pairing-token.d.ts.map +1 -0
  241. package/dist/pairing-token.js +62 -0
  242. package/dist/pairing-token.js.map +1 -0
  243. package/dist/pool/browser-pool.d.ts +90 -0
  244. package/dist/pool/browser-pool.d.ts.map +1 -0
  245. package/dist/pool/browser-pool.js +221 -0
  246. package/dist/pool/browser-pool.js.map +1 -0
  247. package/dist/pool/lease-reaper.d.ts +16 -0
  248. package/dist/pool/lease-reaper.d.ts.map +1 -0
  249. package/dist/pool/lease-reaper.js +41 -0
  250. package/dist/pool/lease-reaper.js.map +1 -0
  251. package/dist/pool/playwright-launcher.d.ts +19 -0
  252. package/dist/pool/playwright-launcher.d.ts.map +1 -0
  253. package/dist/pool/playwright-launcher.js +51 -0
  254. package/dist/pool/playwright-launcher.js.map +1 -0
  255. package/dist/project/baselines.d.ts +22 -0
  256. package/dist/project/baselines.d.ts.map +1 -0
  257. package/dist/project/baselines.js +45 -0
  258. package/dist/project/baselines.js.map +1 -0
  259. package/dist/project/fs-port.d.ts +27 -0
  260. package/dist/project/fs-port.d.ts.map +1 -0
  261. package/dist/project/fs-port.js +32 -0
  262. package/dist/project/fs-port.js.map +1 -0
  263. package/dist/project/project-store.d.ts +32 -0
  264. package/dist/project/project-store.d.ts.map +1 -0
  265. package/dist/project/project-store.js +127 -0
  266. package/dist/project/project-store.js.map +1 -0
  267. package/dist/project/project-tools.d.ts +9 -0
  268. package/dist/project/project-tools.d.ts.map +1 -0
  269. package/dist/project/project-tools.js +118 -0
  270. package/dist/project/project-tools.js.map +1 -0
  271. package/dist/project/reticle-dir.d.ts +61 -0
  272. package/dist/project/reticle-dir.d.ts.map +1 -0
  273. package/dist/project/reticle-dir.js +144 -0
  274. package/dist/project/reticle-dir.js.map +1 -0
  275. package/dist/runs/build-verification-run.d.ts +30 -0
  276. package/dist/runs/build-verification-run.d.ts.map +1 -0
  277. package/dist/runs/build-verification-run.js +71 -0
  278. package/dist/runs/build-verification-run.js.map +1 -0
  279. package/dist/runs/profile-redact.d.ts +16 -0
  280. package/dist/runs/profile-redact.d.ts.map +1 -0
  281. package/dist/runs/profile-redact.js +32 -0
  282. package/dist/runs/profile-redact.js.map +1 -0
  283. package/dist/runs/render-report.d.ts +9 -0
  284. package/dist/runs/render-report.d.ts.map +1 -0
  285. package/dist/runs/render-report.js +70 -0
  286. package/dist/runs/render-report.js.map +1 -0
  287. package/dist/runs/repair-prompt.d.ts +15 -0
  288. package/dist/runs/repair-prompt.d.ts.map +1 -0
  289. package/dist/runs/repair-prompt.js +59 -0
  290. package/dist/runs/repair-prompt.js.map +1 -0
  291. package/dist/runs/replay-mapping.d.ts +12 -0
  292. package/dist/runs/replay-mapping.d.ts.map +1 -0
  293. package/dist/runs/replay-mapping.js +35 -0
  294. package/dist/runs/replay-mapping.js.map +1 -0
  295. package/dist/runs/reticle-runner.d.ts +48 -0
  296. package/dist/runs/reticle-runner.d.ts.map +1 -0
  297. package/dist/runs/reticle-runner.js +56 -0
  298. package/dist/runs/reticle-runner.js.map +1 -0
  299. package/dist/runs/risk-classify.d.ts +27 -0
  300. package/dist/runs/risk-classify.d.ts.map +1 -0
  301. package/dist/runs/risk-classify.js +76 -0
  302. package/dist/runs/risk-classify.js.map +1 -0
  303. package/dist/runs/run-store.d.ts +40 -0
  304. package/dist/runs/run-store.d.ts.map +1 -0
  305. package/dist/runs/run-store.js +118 -0
  306. package/dist/runs/run-store.js.map +1 -0
  307. package/dist/runs/run-tools.d.ts +10 -0
  308. package/dist/runs/run-tools.d.ts.map +1 -0
  309. package/dist/runs/run-tools.js +69 -0
  310. package/dist/runs/run-tools.js.map +1 -0
  311. package/dist/runs/runner-port.d.ts +14 -0
  312. package/dist/runs/runner-port.d.ts.map +1 -0
  313. package/dist/runs/runner-port.js +23 -0
  314. package/dist/runs/runner-port.js.map +1 -0
  315. package/dist/runs/verify-http.d.ts +34 -0
  316. package/dist/runs/verify-http.d.ts.map +1 -0
  317. package/dist/runs/verify-http.js +102 -0
  318. package/dist/runs/verify-http.js.map +1 -0
  319. package/dist/runs/verify-server.d.ts +26 -0
  320. package/dist/runs/verify-server.d.ts.map +1 -0
  321. package/dist/runs/verify-server.js +99 -0
  322. package/dist/runs/verify-server.js.map +1 -0
  323. package/dist/server-version.d.ts +3 -0
  324. package/dist/server-version.d.ts.map +1 -0
  325. package/dist/server-version.js +5 -0
  326. package/dist/server-version.js.map +1 -0
  327. package/dist/session/control-envelope.d.ts +49 -0
  328. package/dist/session/control-envelope.d.ts.map +1 -0
  329. package/dist/session/control-envelope.js +44 -0
  330. package/dist/session/control-envelope.js.map +1 -0
  331. package/dist/session/live-control-tools.d.ts +16 -0
  332. package/dist/session/live-control-tools.d.ts.map +1 -0
  333. package/dist/session/live-control-tools.js +204 -0
  334. package/dist/session/live-control-tools.js.map +1 -0
  335. package/dist/session/output-budget.d.ts +41 -0
  336. package/dist/session/output-budget.d.ts.map +1 -0
  337. package/dist/session/output-budget.js +54 -0
  338. package/dist/session/output-budget.js.map +1 -0
  339. package/dist/session/presenter-args.d.ts +8 -0
  340. package/dist/session/presenter-args.d.ts.map +1 -0
  341. package/dist/session/presenter-args.js +15 -0
  342. package/dist/session/presenter-args.js.map +1 -0
  343. package/dist/session/review-store.d.ts +40 -0
  344. package/dist/session/review-store.d.ts.map +1 -0
  345. package/dist/session/review-store.js +61 -0
  346. package/dist/session/review-store.js.map +1 -0
  347. package/dist/session/session-health.d.ts +22 -0
  348. package/dist/session/session-health.d.ts.map +1 -0
  349. package/dist/session/session-health.js +26 -0
  350. package/dist/session/session-health.js.map +1 -0
  351. package/dist/session/session-manager.d.ts +43 -0
  352. package/dist/session/session-manager.d.ts.map +1 -0
  353. package/dist/session/session-manager.js +155 -0
  354. package/dist/session/session-manager.js.map +1 -0
  355. package/dist/session/session-readiness.d.ts +35 -0
  356. package/dist/session/session-readiness.d.ts.map +1 -0
  357. package/dist/session/session-readiness.js +32 -0
  358. package/dist/session/session-readiness.js.map +1 -0
  359. package/dist/session/session-reaper.d.ts +37 -0
  360. package/dist/session/session-reaper.d.ts.map +1 -0
  361. package/dist/session/session-reaper.js +94 -0
  362. package/dist/session/session-reaper.js.map +1 -0
  363. package/dist/session/session-recommendation.d.ts +18 -0
  364. package/dist/session/session-recommendation.d.ts.map +1 -0
  365. package/dist/session/session-recommendation.js +14 -0
  366. package/dist/session/session-recommendation.js.map +1 -0
  367. package/dist/session/session-tools.d.ts +9 -0
  368. package/dist/session/session-tools.d.ts.map +1 -0
  369. package/dist/session/session-tools.js +43 -0
  370. package/dist/session/session-tools.js.map +1 -0
  371. package/dist/session/session.d.ts +166 -0
  372. package/dist/session/session.d.ts.map +1 -0
  373. package/dist/session/session.js +408 -0
  374. package/dist/session/session.js.map +1 -0
  375. package/dist/session/state-select.d.ts +8 -0
  376. package/dist/session/state-select.d.ts.map +1 -0
  377. package/dist/session/state-select.js +8 -0
  378. package/dist/session/state-select.js.map +1 -0
  379. package/dist/token-auth.d.ts +24 -0
  380. package/dist/token-auth.d.ts.map +1 -0
  381. package/dist/token-auth.js +71 -0
  382. package/dist/token-auth.js.map +1 -0
  383. package/dist/tools/act-tools.d.ts +3 -0
  384. package/dist/tools/act-tools.d.ts.map +1 -0
  385. package/dist/tools/act-tools.js +327 -0
  386. package/dist/tools/act-tools.js.map +1 -0
  387. package/dist/tools/act-view.d.ts +19 -0
  388. package/dist/tools/act-view.d.ts.map +1 -0
  389. package/dist/tools/act-view.js +46 -0
  390. package/dist/tools/act-view.js.map +1 -0
  391. package/dist/tools/assert-grade.d.ts +21 -0
  392. package/dist/tools/assert-grade.d.ts.map +1 -0
  393. package/dist/tools/assert-grade.js +52 -0
  394. package/dist/tools/assert-grade.js.map +1 -0
  395. package/dist/tools/browser-tools.d.ts +3 -0
  396. package/dist/tools/browser-tools.d.ts.map +1 -0
  397. package/dist/tools/browser-tools.js +52 -0
  398. package/dist/tools/browser-tools.js.map +1 -0
  399. package/dist/tools/contract-tools.d.ts +8 -0
  400. package/dist/tools/contract-tools.d.ts.map +1 -0
  401. package/dist/tools/contract-tools.js +62 -0
  402. package/dist/tools/contract-tools.js.map +1 -0
  403. package/dist/tools/dynamic-tools.d.ts +7 -0
  404. package/dist/tools/dynamic-tools.d.ts.map +1 -0
  405. package/dist/tools/dynamic-tools.js +103 -0
  406. package/dist/tools/dynamic-tools.js.map +1 -0
  407. package/dist/tools/error-recovery.d.ts +31 -0
  408. package/dist/tools/error-recovery.d.ts.map +1 -0
  409. package/dist/tools/error-recovery.js +52 -0
  410. package/dist/tools/error-recovery.js.map +1 -0
  411. package/dist/tools/invoke-tool.d.ts +23 -0
  412. package/dist/tools/invoke-tool.d.ts.map +1 -0
  413. package/dist/tools/invoke-tool.js +99 -0
  414. package/dist/tools/invoke-tool.js.map +1 -0
  415. package/dist/tools/lease-tools.d.ts +31 -0
  416. package/dist/tools/lease-tools.d.ts.map +1 -0
  417. package/dist/tools/lease-tools.js +164 -0
  418. package/dist/tools/lease-tools.js.map +1 -0
  419. package/dist/tools/observe-tools.d.ts +3 -0
  420. package/dist/tools/observe-tools.d.ts.map +1 -0
  421. package/dist/tools/observe-tools.js +259 -0
  422. package/dist/tools/observe-tools.js.map +1 -0
  423. package/dist/tools/profiles.d.ts +33 -0
  424. package/dist/tools/profiles.d.ts.map +1 -0
  425. package/dist/tools/profiles.js +105 -0
  426. package/dist/tools/profiles.js.map +1 -0
  427. package/dist/tools/query-paginate.d.ts +15 -0
  428. package/dist/tools/query-paginate.d.ts.map +1 -0
  429. package/dist/tools/query-paginate.js +31 -0
  430. package/dist/tools/query-paginate.js.map +1 -0
  431. package/dist/tools/read-tools.d.ts +3 -0
  432. package/dist/tools/read-tools.d.ts.map +1 -0
  433. package/dist/tools/read-tools.js +329 -0
  434. package/dist/tools/read-tools.js.map +1 -0
  435. package/dist/tools/snapshot-delta.d.ts +59 -0
  436. package/dist/tools/snapshot-delta.d.ts.map +1 -0
  437. package/dist/tools/snapshot-delta.js +0 -0
  438. package/dist/tools/snapshot-delta.js.map +1 -0
  439. package/dist/tools/tool-invoker.d.ts +15 -0
  440. package/dist/tools/tool-invoker.d.ts.map +1 -0
  441. package/dist/tools/tool-invoker.js +20 -0
  442. package/dist/tools/tool-invoker.js.map +1 -0
  443. package/dist/tools/tool-kit.d.ts +60 -0
  444. package/dist/tools/tool-kit.d.ts.map +1 -0
  445. package/dist/tools/tool-kit.js +33 -0
  446. package/dist/tools/tool-kit.js.map +1 -0
  447. package/dist/tools/tool-names.d.ts +89 -0
  448. package/dist/tools/tool-names.d.ts.map +1 -0
  449. package/dist/tools/tool-names.js +88 -0
  450. package/dist/tools/tool-names.js.map +1 -0
  451. package/dist/tools/tools-helpers.d.ts +12 -0
  452. package/dist/tools/tools-helpers.d.ts.map +1 -0
  453. package/dist/tools/tools-helpers.js +22 -0
  454. package/dist/tools/tools-helpers.js.map +1 -0
  455. package/dist/tools/tools.d.ts +4 -0
  456. package/dist/tools/tools.d.ts.map +1 -0
  457. package/dist/tools/tools.js +268 -0
  458. package/dist/tools/tools.js.map +1 -0
  459. package/dist/update/update-checker.d.ts +20 -0
  460. package/dist/update/update-checker.d.ts.map +1 -0
  461. package/dist/update/update-checker.js +94 -0
  462. package/dist/update/update-checker.js.map +1 -0
  463. package/dist/update/update-tools.d.ts +3 -0
  464. package/dist/update/update-tools.d.ts.map +1 -0
  465. package/dist/update/update-tools.js +94 -0
  466. package/dist/update/update-tools.js.map +1 -0
  467. package/dist/update/updater.d.ts +31 -0
  468. package/dist/update/updater.d.ts.map +1 -0
  469. package/dist/update/updater.js +120 -0
  470. package/dist/update/updater.js.map +1 -0
  471. package/dist/visual/visual-diff.d.ts +46 -0
  472. package/dist/visual/visual-diff.d.ts.map +1 -0
  473. package/dist/visual/visual-diff.js +100 -0
  474. package/dist/visual/visual-diff.js.map +1 -0
  475. package/dist/visual/visual-store.d.ts +22 -0
  476. package/dist/visual/visual-store.d.ts.map +1 -0
  477. package/dist/visual/visual-store.js +60 -0
  478. package/dist/visual/visual-store.js.map +1 -0
  479. package/dist/visual/visual-tools.d.ts +9 -0
  480. package/dist/visual/visual-tools.d.ts.map +1 -0
  481. package/dist/visual/visual-tools.js +182 -0
  482. package/dist/visual/visual-tools.js.map +1 -0
  483. package/package.json +68 -0
@@ -0,0 +1,32 @@
1
+ import { type ReticleEvent } from '@reticlehq/core';
2
+ interface RingBufferOptions {
3
+ maxEvents?: number;
4
+ maxAgeMs?: number;
5
+ maxBytes?: number;
6
+ }
7
+ /**
8
+ * Bounded, time-aware event store per session. The single data structure that powers
9
+ * observe()/wait_for()/assert() — it lets us look both backward (recent buffer) and
10
+ * forward (await new events). See plan/02-architecture.md.
11
+ *
12
+ * `now` is injected so the buffer is deterministically testable (engineering standard:
13
+ * inject the clock, never call Date.now() inside logic).
14
+ */
15
+ export declare class RingBuffer {
16
+ #private;
17
+ constructor(options?: RingBufferOptions);
18
+ push(event: ReticleEvent, now: number): void;
19
+ /** Events at or after a given timestamp cursor. */
20
+ since(cursor: number): ReticleEvent[];
21
+ /** Events within the last `windowMs`, relative to `now`. */
22
+ window(windowMs: number, now: number): ReticleEvent[];
23
+ /** Snapshot of buffer health for the agent — total events held and cumulative drops since connect. */
24
+ bufferHealth(): {
25
+ total: number;
26
+ dropped: number;
27
+ };
28
+ /** Reset the drop counter and return the count that was cleared (for per-observe accounting). */
29
+ resetDropped(): number;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=ring-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1E,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,qBAAa,UAAU;;gBAST,OAAO,GAAE,iBAAsB;IAM3C,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ5C,mDAAmD;IACnD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAIrC,4DAA4D;IAC5D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE;IAgCrD,sGAAsG;IACtG,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAIlD,iGAAiG;IACjG,YAAY,IAAI,MAAM;CAKvB"}
@@ -0,0 +1,75 @@
1
+ import { RING_BUFFER_DEFAULTS } from '@reticlehq/core';
2
+ /**
3
+ * Bounded, time-aware event store per session. The single data structure that powers
4
+ * observe()/wait_for()/assert() — it lets us look both backward (recent buffer) and
5
+ * forward (await new events). See plan/02-architecture.md.
6
+ *
7
+ * `now` is injected so the buffer is deterministically testable (engineering standard:
8
+ * inject the clock, never call Date.now() inside logic).
9
+ */
10
+ export class RingBuffer {
11
+ #maxEvents;
12
+ #maxAgeMs;
13
+ #maxBytes;
14
+ #events = [];
15
+ #eventBytes = [];
16
+ #totalBytes = 0;
17
+ #droppedCount = 0;
18
+ constructor(options = {}) {
19
+ this.#maxEvents = options.maxEvents ?? RING_BUFFER_DEFAULTS.MAX_EVENTS;
20
+ this.#maxAgeMs = options.maxAgeMs ?? RING_BUFFER_DEFAULTS.MAX_AGE_MS;
21
+ this.#maxBytes = options.maxBytes ?? RING_BUFFER_DEFAULTS.MAX_BYTES;
22
+ }
23
+ push(event, now) {
24
+ this.#events.push(event);
25
+ const bytes = Buffer.byteLength(JSON.stringify(event), 'utf8');
26
+ this.#eventBytes.push(bytes);
27
+ this.#totalBytes += bytes;
28
+ this.#evict(now);
29
+ }
30
+ /** Events at or after a given timestamp cursor. */
31
+ since(cursor) {
32
+ return this.#events.slice(this.#lowerBound(cursor));
33
+ }
34
+ /** Events within the last `windowMs`, relative to `now`. */
35
+ window(windowMs, now) {
36
+ return this.#events.slice(this.#lowerBound(now - windowMs));
37
+ }
38
+ #lowerBound(target) {
39
+ let lo = 0;
40
+ let hi = this.#events.length;
41
+ while (lo < hi) {
42
+ const mid = (lo + hi) >>> 1;
43
+ if ((this.#events[mid]?.t ?? 0) < target)
44
+ lo = mid + 1;
45
+ else
46
+ hi = mid;
47
+ }
48
+ return lo;
49
+ }
50
+ #evict(now) {
51
+ const before = this.#events.length;
52
+ const cutoff = now - this.#maxAgeMs;
53
+ while (this.#events.length > this.#maxEvents ||
54
+ (this.#totalBytes > this.#maxBytes && this.#events.length > 0)) {
55
+ this.#events.shift();
56
+ this.#totalBytes -= this.#eventBytes.shift() ?? 0;
57
+ }
58
+ while ((this.#events[0]?.t ?? cutoff) < cutoff) {
59
+ this.#events.shift();
60
+ this.#totalBytes -= this.#eventBytes.shift() ?? 0;
61
+ }
62
+ this.#droppedCount += before - this.#events.length;
63
+ }
64
+ /** Snapshot of buffer health for the agent — total events held and cumulative drops since connect. */
65
+ bufferHealth() {
66
+ return { total: this.#events.length, dropped: this.#droppedCount };
67
+ }
68
+ /** Reset the drop counter and return the count that was cleared (for per-observe accounting). */
69
+ resetDropped() {
70
+ const n = this.#droppedCount;
71
+ this.#droppedCount = 0;
72
+ return n;
73
+ }
74
+ }
75
+ //# sourceMappingURL=ring-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring-buffer.js","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ToolDef } from '../tools/tools.js';
2
+ /**
3
+ * The reticle_annotate tool. A STRUCTURED annotation (the AnnotationSchema
4
+ * discriminated union) is compiled into the live recording's per-step expect / flow dynamic[] /
5
+ * flow success, which reticle_flow_save then folds onto disk. Returns the AnnotateResult envelope
6
+ * with the compiled-predicate confirmation text ("will assert signal diff:shown").
7
+ *
8
+ * FIRST CUT: structured annotations only. A free NATURAL-LANGUAGE annotation never compiles — it
9
+ * fails AnnotationSchema and is returned as UNKNOWN_KIND. NL → predicate compilation is explicitly
10
+ * FUTURE; no NL parser exists or is faked here.
11
+ *
12
+ * No-active-recording and no-step are SAFE, returned as structured codes (never thrown), so an
13
+ * agent that annotates at the wrong moment gets a clear error rather than a crash.
14
+ */
15
+ export declare const ANNOTATE_TOOLS: ToolDef[];
16
+ //# sourceMappingURL=annotate-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate-tools.d.ts","sourceRoot":"","sources":["../../src/flows/annotate-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AAI3D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,EAoInC,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { z } from 'zod';
2
+ import { AnnotationErrorCode, AnnotationSchema } from '@reticlehq/core';
3
+ import { ReticleTool } from '../tools/tool-names.js';
4
+ import { asString } from '../tools/tools-helpers.js';
5
+ import { compileAnnotation } from './annotate.js';
6
+ const DEFAULT_RECORDING = 'default';
7
+ /**
8
+ * The reticle_annotate tool. A STRUCTURED annotation (the AnnotationSchema
9
+ * discriminated union) is compiled into the live recording's per-step expect / flow dynamic[] /
10
+ * flow success, which reticle_flow_save then folds onto disk. Returns the AnnotateResult envelope
11
+ * with the compiled-predicate confirmation text ("will assert signal diff:shown").
12
+ *
13
+ * FIRST CUT: structured annotations only. A free NATURAL-LANGUAGE annotation never compiles — it
14
+ * fails AnnotationSchema and is returned as UNKNOWN_KIND. NL → predicate compilation is explicitly
15
+ * FUTURE; no NL parser exists or is faked here.
16
+ *
17
+ * No-active-recording and no-step are SAFE, returned as structured codes (never thrown), so an
18
+ * agent that annotates at the wrong moment gets a clear error rather than a crash.
19
+ */
20
+ export const ANNOTATE_TOOLS = [
21
+ {
22
+ name: ReticleTool.ANNOTATE,
23
+ description: 'Attach a STRUCTURED annotation to the active recording, compiling it into the flow. kind: ' +
24
+ 'assert-signal { name, dataMatches? } → the last step asserts that signal; assert-visible ' +
25
+ '{ testid } → the last step asserts that element is present; assert-state ' +
26
+ '{ statePath, store?, equals? } → the last step asserts a registered store value (the source ' +
27
+ 'of truth no DOM read can reach); mark-dynamic { testid } → the ' +
28
+ "flow records that region as LLM-dynamic (replay won't assert its content); success-state " +
29
+ '{ signal | statePath(+store,+equals) | net(+count) | console(+absent) | testid } → the flow golden ' +
30
+ 'end-condition (statePath asserts a registered store value — the source of truth no DOM read can ' +
31
+ 'reach; net asserts a request fired EXACTLY `count` times — catches double-submit; console+absent ' +
32
+ 'asserts a clean console — catches an action that logs an error). Folded onto disk by reticle_flow_save. ' +
33
+ 'Returns { ok:true, target:step|flow, compiled } (e.g. "will assert signal diff:shown") or ' +
34
+ '{ ok:false, code } (annotate_no_recording | annotate_no_step | annotate_unknown_kind | ' +
35
+ 'annotate_missing_field). FIRST CUT: structured only — a free natural-language string is ' +
36
+ 'rejected (annotate_unknown_kind), never guessed into a predicate. Pass `flow` to target a ' +
37
+ "named recording (defaults to 'default'); `name` is the assert-signal's SIGNAL name, not the recording.",
38
+ inputSchema: {
39
+ // `flow` selects the recording; `name`/`signal`/`testid`/`dataMatches` are the annotation fields.
40
+ flow: z.string().optional().describe("Named recording to annotate. Defaults to 'default'."),
41
+ kind: z
42
+ .string()
43
+ .describe('Annotation kind: assert-signal | assert-visible | assert-state | mark-dynamic | success-state | intent.'),
44
+ name: z.string().optional().describe('Signal name for assert-signal annotations.'),
45
+ text: z
46
+ .string()
47
+ .optional()
48
+ .describe("Business goal for an intent annotation, e.g. 'ship a deploy to production'."),
49
+ testid: z
50
+ .string()
51
+ .optional()
52
+ .describe('data-testid value for assert-visible / mark-dynamic / success-state annotations.'),
53
+ signal: z.string().optional().describe('Signal name for success-state annotations.'),
54
+ statePath: z
55
+ .string()
56
+ .optional()
57
+ .describe("Store dot-path for an assert-state (last step) or success-state (golden end) store-truth assertion (e.g. 'deployments.0.status'). With `store` and optional `equals` — asserts the app's source of truth, not just the DOM."),
58
+ store: z
59
+ .string()
60
+ .optional()
61
+ .describe('Store name for a statePath assert-state/success-state annotation.'),
62
+ equals: z
63
+ .unknown()
64
+ .optional()
65
+ .describe('Expected value for statePath: a literal, or a { $gte | $contains | $length }.'),
66
+ hold: z
67
+ .boolean()
68
+ .optional()
69
+ .describe('Treat statePath as an INVARIANT that must still hold AFTER the action settles (a blast-radius "this unrelated path must not have moved" check), not a condition to wait for. Without it a wait-until-true read passes before an over-reaching side-effect lands.'),
70
+ dataMatches: z
71
+ .record(z.unknown())
72
+ .optional()
73
+ .describe('Key/value pairs the signal payload must match (assert-signal only).'),
74
+ net: z
75
+ .object({
76
+ method: z.string().optional(),
77
+ urlContains: z.string().optional(),
78
+ status: z.number().optional(),
79
+ count: z.number().int().nonnegative().optional(),
80
+ })
81
+ .optional()
82
+ .describe('Network golden end-condition for success-state: the flow succeeds only when EXACTLY `count` requests match { method?, urlContains?, status? } since the action (omit count = presence). Catches the double-submit / retry-storm regression a presence check passes.'),
83
+ console: z
84
+ .object({
85
+ level: z.string().optional(),
86
+ absent: z.boolean().optional(),
87
+ })
88
+ .optional()
89
+ .describe('Console golden end-condition for success-state: with absent:true the flow succeeds only when the action logged NO console message at `level` (default "error") — "completed with a clean console". Catches an action that logs a caught error/rejection while the UI still renders fine.'),
90
+ sessionId: z
91
+ .string()
92
+ .optional()
93
+ .describe('Active session ID from reticle_sessions. Omit when only one browser session is open.'),
94
+ annotation: z
95
+ .unknown()
96
+ .optional()
97
+ .describe('Structured annotation: { kind, name, dataMatches? } for assert-signal; { kind, testid } for assert-visible / mark-dynamic; { kind, signal?, testid? } for success-state.'),
98
+ },
99
+ outputSchema: {
100
+ ok: z.boolean(),
101
+ target: z.string().optional(),
102
+ compiled: z.string().optional(),
103
+ code: z.string().optional(),
104
+ },
105
+ handler: (deps, args) => {
106
+ const name = asString(args['flow']) ?? DEFAULT_RECORDING;
107
+ // Structured boundary: a free NL string / unknown kind fails the schema → UNKNOWN_KIND.
108
+ const parsed = AnnotationSchema.safeParse(args);
109
+ if (!parsed.success) {
110
+ return Promise.resolve({ ok: false, code: AnnotationErrorCode.UNKNOWN_KIND });
111
+ }
112
+ const stepCount = deps.recordings.stepCount(name);
113
+ const compiled = deps.recordings.getCompiled(name) !== undefined;
114
+ if (stepCount === undefined && !compiled) {
115
+ return Promise.resolve({ ok: false, code: AnnotationErrorCode.NO_ACTIVE_RECORDING });
116
+ }
117
+ const outcome = compileAnnotation(parsed.data, stepCount ?? 0);
118
+ if (!outcome.result.ok)
119
+ return Promise.resolve(outcome.result);
120
+ const patch = outcome.patch;
121
+ if (patch !== undefined) {
122
+ if (patch.dynamicAdd !== undefined)
123
+ deps.annotations.addDynamic(name, patch.dynamicAdd);
124
+ if (patch.success !== undefined)
125
+ deps.annotations.setSuccess(name, patch.success);
126
+ if (patch.intent !== undefined)
127
+ deps.annotations.setIntent(name, patch.intent);
128
+ if (patch.stepIndex !== undefined && patch.stepExpect !== undefined) {
129
+ deps.annotations.setStepExpect(name, patch.stepIndex, patch.stepExpect);
130
+ }
131
+ }
132
+ return Promise.resolve(outcome.result);
133
+ },
134
+ },
135
+ ];
136
+ //# sourceMappingURL=annotate-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate-tools.js","sourceRoot":"","sources":["../../src/flows/annotate-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type Annotation, type AnnotateOutcome } from '@reticlehq/core';
2
+ /**
3
+ * The PURE compiler at the heart of the annotation facet. A structured annotation +
4
+ * the current captured-step count → an AnnotateOutcome (a result envelope + the patch to apply to
5
+ * the AnnotationStore). No IO, no clock, unit-testable in isolation.
6
+ *
7
+ * assert-signal → step.expect.signal (+ signalData) on the LAST step (needs ≥1 step)
8
+ * assert-visible → step.expect.element.testid on the LAST step (needs ≥1 step)
9
+ * mark-dynamic → flow.dynamic[] += testid flow-level, allowed with 0 steps
10
+ * success-state → flow.success = { signal | element } flow-level (signal XOR testid; both → signal)
11
+ *
12
+ * FIRST CUT: only the four structured kinds above. Free natural-language annotation → predicate
13
+ * compilation is explicitly FUTURE — an NL string never reaches here (AnnotationSchema
14
+ * rejects it upstream; the tool maps that to UNKNOWN_KIND). No NL parser exists or is faked.
15
+ */
16
+ export declare function compileAnnotation(a: Annotation, stepCount: number): AnnotateOutcome;
17
+ /**
18
+ * Human-readable confirmation text for the recorder strip / tool result,
19
+ * e.g. `will assert signal diff:shown`. The leading word is the named COMPILED_PREDICATE_PREFIX.
20
+ */
21
+ export declare function describeCompiled(a: Annotation): string;
22
+ //# sourceMappingURL=annotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate.d.ts","sourceRoot":"","sources":["../../src/flows/annotate.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAuDnF;AAwBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAqCtD"}
@@ -0,0 +1,134 @@
1
+ import { AnnotationErrorCode, AnnotationKind, AnnotationTarget, COMPILED_PREDICATE_PREFIX, } from '@reticlehq/core';
2
+ /**
3
+ * The PURE compiler at the heart of the annotation facet. A structured annotation +
4
+ * the current captured-step count → an AnnotateOutcome (a result envelope + the patch to apply to
5
+ * the AnnotationStore). No IO, no clock, unit-testable in isolation.
6
+ *
7
+ * assert-signal → step.expect.signal (+ signalData) on the LAST step (needs ≥1 step)
8
+ * assert-visible → step.expect.element.testid on the LAST step (needs ≥1 step)
9
+ * mark-dynamic → flow.dynamic[] += testid flow-level, allowed with 0 steps
10
+ * success-state → flow.success = { signal | element } flow-level (signal XOR testid; both → signal)
11
+ *
12
+ * FIRST CUT: only the four structured kinds above. Free natural-language annotation → predicate
13
+ * compilation is explicitly FUTURE — an NL string never reaches here (AnnotationSchema
14
+ * rejects it upstream; the tool maps that to UNKNOWN_KIND). No NL parser exists or is faked.
15
+ */
16
+ export function compileAnnotation(a, stepCount) {
17
+ switch (a.kind) {
18
+ case AnnotationKind.ASSERT_SIGNAL: {
19
+ if (stepCount === 0)
20
+ return noStep();
21
+ const expect = { signal: a.name };
22
+ if (a.dataMatches !== undefined)
23
+ expect.signalData = a.dataMatches;
24
+ return stepPatch(a, stepCount, expect);
25
+ }
26
+ case AnnotationKind.ASSERT_VISIBLE: {
27
+ if (stepCount === 0)
28
+ return noStep();
29
+ return stepPatch(a, stepCount, { element: { testid: a.testid } });
30
+ }
31
+ case AnnotationKind.ASSERT_STATE: {
32
+ if (stepCount === 0)
33
+ return noStep();
34
+ const state = { path: a.statePath };
35
+ if (a.store !== undefined)
36
+ state.store = a.store;
37
+ if (a.equals !== undefined)
38
+ state.equals = a.equals;
39
+ return stepPatch(a, stepCount, { state });
40
+ }
41
+ case AnnotationKind.MARK_DYNAMIC:
42
+ return {
43
+ result: { ok: true, target: AnnotationTarget.FLOW, compiled: describeCompiled(a) },
44
+ patch: { dynamicAdd: a.testid },
45
+ };
46
+ case AnnotationKind.SUCCESS_STATE: {
47
+ // Precedence: signal > state > net > console > testid (a consequence end-condition beats a
48
+ // presence check). None of them → MISSING_FIELD.
49
+ if (a.signal !== undefined) {
50
+ return flowSuccess(a, { signal: a.signal });
51
+ }
52
+ if (a.statePath !== undefined) {
53
+ const state = { path: a.statePath };
54
+ if (a.store !== undefined)
55
+ state.store = a.store;
56
+ if (a.equals !== undefined)
57
+ state.equals = a.equals;
58
+ if (a.hold !== undefined)
59
+ state.hold = a.hold;
60
+ return flowSuccess(a, { state });
61
+ }
62
+ if (a.net !== undefined) {
63
+ return flowSuccess(a, { net: a.net });
64
+ }
65
+ if (a.console !== undefined) {
66
+ return flowSuccess(a, { console: a.console });
67
+ }
68
+ if (a.testid !== undefined) {
69
+ return flowSuccess(a, { element: { testid: a.testid } });
70
+ }
71
+ return { result: { ok: false, code: AnnotationErrorCode.MISSING_FIELD } };
72
+ }
73
+ case AnnotationKind.INTENT:
74
+ // Flow-level, allowed with 0 steps (the business goal is declared up front).
75
+ return {
76
+ result: { ok: true, target: AnnotationTarget.FLOW, compiled: describeCompiled(a) },
77
+ patch: { intent: a.text },
78
+ };
79
+ }
80
+ }
81
+ function noStep() {
82
+ return { result: { ok: false, code: AnnotationErrorCode.NO_STEP_TO_ANNOTATE } };
83
+ }
84
+ function stepPatch(a, stepCount, stepExpect) {
85
+ return {
86
+ result: {
87
+ ok: true,
88
+ target: AnnotationTarget.STEP,
89
+ compiled: describeCompiled(a),
90
+ },
91
+ patch: { stepIndex: stepCount - 1, stepExpect },
92
+ };
93
+ }
94
+ function flowSuccess(a, success) {
95
+ return {
96
+ result: { ok: true, target: AnnotationTarget.FLOW, compiled: describeCompiled(a) },
97
+ patch: { success },
98
+ };
99
+ }
100
+ /**
101
+ * Human-readable confirmation text for the recorder strip / tool result,
102
+ * e.g. `will assert signal diff:shown`. The leading word is the named COMPILED_PREDICATE_PREFIX.
103
+ */
104
+ export function describeCompiled(a) {
105
+ switch (a.kind) {
106
+ case AnnotationKind.ASSERT_SIGNAL:
107
+ return `${COMPILED_PREDICATE_PREFIX} assert signal ${a.name}`;
108
+ case AnnotationKind.ASSERT_VISIBLE:
109
+ return `${COMPILED_PREDICATE_PREFIX} assert ${a.testid} visible`;
110
+ case AnnotationKind.ASSERT_STATE:
111
+ return `${COMPILED_PREDICATE_PREFIX} assert state ${a.statePath}${a.equals !== undefined ? ` == ${JSON.stringify(a.equals)}` : ''}`;
112
+ case AnnotationKind.MARK_DYNAMIC:
113
+ return `${COMPILED_PREDICATE_PREFIX} ignore ${a.testid} (dynamic)`;
114
+ case AnnotationKind.SUCCESS_STATE:
115
+ if (a.signal !== undefined) {
116
+ return `${COMPILED_PREDICATE_PREFIX} succeed when signal ${a.signal}`;
117
+ }
118
+ if (a.statePath !== undefined) {
119
+ return `${COMPILED_PREDICATE_PREFIX} succeed when state ${a.statePath}${a.equals !== undefined ? ` == ${JSON.stringify(a.equals)}` : ''}`;
120
+ }
121
+ if (a.net !== undefined) {
122
+ const target = a.net.urlContains ?? a.net.method ?? 'request';
123
+ return `${COMPILED_PREDICATE_PREFIX} succeed when ${a.net.count !== undefined ? `exactly ${String(a.net.count)} ` : ''}net ${target}`;
124
+ }
125
+ if (a.console !== undefined) {
126
+ const level = a.console.level ?? 'error';
127
+ return `${COMPILED_PREDICATE_PREFIX} succeed when ${a.console.absent === true ? `no console.${level}` : `console.${level}`}`;
128
+ }
129
+ return `${COMPILED_PREDICATE_PREFIX} succeed when ${a.testid ?? ''} visible`;
130
+ case AnnotationKind.INTENT:
131
+ return `${COMPILED_PREDICATE_PREFIX} intent: ${a.text}`;
132
+ }
133
+ }
134
+ //# sourceMappingURL=annotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotate.js","sourceRoot":"","sources":["../../src/flows/annotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { FlowExpect } from '@reticlehq/core';
2
+ export declare class AnnotationStore {
3
+ #private;
4
+ /** Testids whose CONTENT must not be asserted at replay (mark-dynamic). Copy, never the live array. */
5
+ dynamic(name: string): string[];
6
+ /** The flow's golden end-condition (success-state), or undefined. */
7
+ success(name: string): FlowExpect | undefined;
8
+ /** The flow's declared business goal (intent annotation), or undefined. */
9
+ intent(name: string): string | undefined;
10
+ /** Per-step expect predicates compiled from assert-* annotations, keyed by step index. */
11
+ stepExpect(name: string): Map<number, FlowExpect>;
12
+ /** Append a dynamic testid (mark-dynamic). De-duped so repeated marks stay idempotent. */
13
+ addDynamic(name: string, testid: string): void;
14
+ /** Set the flow's success expectation (success-state); a later set overwrites. */
15
+ setSuccess(name: string, expect: FlowExpect): void;
16
+ /** Set the flow's declared business goal (intent); a later set overwrites. */
17
+ setIntent(name: string, text: string): void;
18
+ /** Set one step's expect (assert-signal / assert-visible); a later set on the same index wins. */
19
+ setStepExpect(name: string, index: number, expect: FlowExpect): void;
20
+ /** Drop a recording's annotations (called after reticle_flow_save folds them onto disk). */
21
+ clear(name: string): void;
22
+ }
23
+ //# sourceMappingURL=annotation-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-store.d.ts","sourceRoot":"","sources":["../../src/flows/annotation-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkBlD,qBAAa,eAAe;;IAY1B,uGAAuG;IACvG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI/B,qEAAqE;IACrE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAKjD,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK9C,kFAAkF;IAClF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIlD,8EAA8E;IAC9E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3C,kGAAkG;IAClG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIpE,4FAA4F;IAC5F,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAG1B"}
@@ -0,0 +1,51 @@
1
+ export class AnnotationStore {
2
+ #byName = new Map();
3
+ #bucket(name) {
4
+ let bucket = this.#byName.get(name);
5
+ if (bucket === undefined) {
6
+ bucket = { dynamic: [], stepExpect: new Map() };
7
+ this.#byName.set(name, bucket);
8
+ }
9
+ return bucket;
10
+ }
11
+ /** Testids whose CONTENT must not be asserted at replay (mark-dynamic). Copy, never the live array. */
12
+ dynamic(name) {
13
+ return [...(this.#byName.get(name)?.dynamic ?? [])];
14
+ }
15
+ /** The flow's golden end-condition (success-state), or undefined. */
16
+ success(name) {
17
+ return this.#byName.get(name)?.success;
18
+ }
19
+ /** The flow's declared business goal (intent annotation), or undefined. */
20
+ intent(name) {
21
+ return this.#byName.get(name)?.intent;
22
+ }
23
+ /** Per-step expect predicates compiled from assert-* annotations, keyed by step index. */
24
+ stepExpect(name) {
25
+ const source = this.#byName.get(name)?.stepExpect;
26
+ return source === undefined ? new Map() : new Map(source);
27
+ }
28
+ /** Append a dynamic testid (mark-dynamic). De-duped so repeated marks stay idempotent. */
29
+ addDynamic(name, testid) {
30
+ const bucket = this.#bucket(name);
31
+ if (!bucket.dynamic.includes(testid))
32
+ bucket.dynamic.push(testid);
33
+ }
34
+ /** Set the flow's success expectation (success-state); a later set overwrites. */
35
+ setSuccess(name, expect) {
36
+ this.#bucket(name).success = expect;
37
+ }
38
+ /** Set the flow's declared business goal (intent); a later set overwrites. */
39
+ setIntent(name, text) {
40
+ this.#bucket(name).intent = text;
41
+ }
42
+ /** Set one step's expect (assert-signal / assert-visible); a later set on the same index wins. */
43
+ setStepExpect(name, index, expect) {
44
+ this.#bucket(name).stepExpect.set(index, expect);
45
+ }
46
+ /** Drop a recording's annotations (called after reticle_flow_save folds them onto disk). */
47
+ clear(name) {
48
+ this.#byName.delete(name);
49
+ }
50
+ }
51
+ //# sourceMappingURL=annotation-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-store.js","sourceRoot":"","sources":["../../src/flows/annotation-store.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,eAAe;IACjB,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE3D,OAAO,CAAC,IAAY;QAClB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uGAAuG;IACvG,OAAO,CAAC,IAAY;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACzC,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC;IAED,0FAA0F;IAC1F,UAAU,CAAC,IAAY;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;QAClD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,EAAsB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,0FAA0F;IAC1F,UAAU,CAAC,IAAY,EAAE,MAAc;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,kFAAkF;IAClF,UAAU,CAAC,IAAY,EAAE,MAAkB;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC;IACtC,CAAC;IAED,8EAA8E;IAC9E,SAAS,CAAC,IAAY,EAAE,IAAY;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,kGAAkG;IAClG,aAAa,CAAC,IAAY,EAAE,KAAa,EAAE,MAAkB;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { type FlowFile, type FlowReplayResult, type ReplayDecision, type SuiteVerdict } from '@reticlehq/core';
2
+ export declare function buildDecision(result: FlowReplayResult, flow?: FlowFile): ReplayDecision;
3
+ /**
4
+ * Aggregate per-flow replays into one suite verdict — the autonomous loop's consolidated answer
5
+ * after a build: did anything break, and what's the prioritized fix list. Pure: pass the already
6
+ * decision-annotated replay results + their flows. Passing flows are counted; only failures carry
7
+ * detail (token-cheap), each with the actionable decision so the agent fixes without re-querying.
8
+ */
9
+ export declare function buildSuiteVerdict(runs: ReadonlyArray<{
10
+ replay: FlowReplayResult;
11
+ flow?: FlowFile;
12
+ }>): SuiteVerdict;
13
+ //# sourceMappingURL=decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/flows/decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EAErB,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AA0BzB,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,cAAc,CAyDvF;AAQD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC,GACjE,YAAY,CAuBd"}