@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,329 @@
1
+ /**
2
+ * Read / record / replay tools — baselines + diff, recordings + replay, narrate, clock, state,
3
+ * explore. Split out of tools.ts; assembled back via ...READ_TOOLS.
4
+ */
5
+ import { z } from 'zod';
6
+ import { EventType, ReticleCommand, REPLAY_PROGRAM_VERSION, SnapshotMode } from '@reticlehq/core';
7
+ import { ReticleTool } from './tool-names.js';
8
+ import { replayProgram } from '../flows/replay.js';
9
+ import { diffLines } from '../project/baselines.js';
10
+ import { selectPath, capDepth } from '../session/state-select.js';
11
+ import { costHint } from '../session/output-budget.js';
12
+ import { buildReactionReport } from '../events/reaction.js';
13
+ import { asString, asNumber, parseInteractive } from './tools-helpers.js';
14
+ import { sessionIdShape, commandOrThrow, snapshotTree } from './tool-kit.js';
15
+ export const READ_TOOLS = [
16
+ {
17
+ name: ReticleTool.BASELINE_SAVE,
18
+ description: 'Snapshot the current semantic state under a name, to diff against later (regression detection).',
19
+ inputSchema: {
20
+ name: z
21
+ .string()
22
+ .describe('Label for this baseline snapshot (e.g. "dashboard-initial"). Use the same name in reticle_diff to compare.'),
23
+ ...sessionIdShape,
24
+ },
25
+ outputSchema: {
26
+ baseline: z.string().describe('Saved baseline name — pass to reticle_diff to compare.'),
27
+ lineCount: z.number(),
28
+ },
29
+ handler: async (deps, args) => {
30
+ const name = asString(args['name']) ?? 'default';
31
+ const { lines, route } = await snapshotTree(deps, asString(args['sessionId']));
32
+ deps.baselines.save({ name, lines, route });
33
+ return { baseline: name, lineCount: lines.length };
34
+ },
35
+ },
36
+ {
37
+ name: ReticleTool.BASELINE_LIST,
38
+ description: 'List saved baseline names.',
39
+ inputSchema: {},
40
+ outputSchema: {
41
+ baselines: z.array(z.string()),
42
+ },
43
+ handler: (deps) => Promise.resolve({ baselines: deps.baselines.list() }),
44
+ },
45
+ {
46
+ name: ReticleTool.DIFF,
47
+ description: 'Diff current semantic state vs a saved baseline: REMOVED/ADDED elements + console-error count. Call reticle_baseline_list to list saved baselines, reticle_baseline_save to create one. Pass `baseline` (name from reticle_baseline_list). Answers "did anything silently go missing/break?".',
48
+ inputSchema: {
49
+ baseline: z
50
+ .string()
51
+ .describe('Baseline name to compare against. Call reticle_baseline_list to get available names; names are created by reticle_baseline_save.'),
52
+ ...sessionIdShape,
53
+ },
54
+ outputSchema: {
55
+ baseline: z.string(),
56
+ removed: z.array(z.string()),
57
+ added: z.array(z.string()),
58
+ consoleErrors: z.number(),
59
+ routeChanged: z.boolean(),
60
+ },
61
+ handler: async (deps, args) => {
62
+ const name = asString(args['baseline']) ?? 'default';
63
+ const base = deps.baselines.get(name);
64
+ if (base === undefined)
65
+ throw new Error(`no baseline named '${name}'`);
66
+ const session = deps.sessions.resolve(asString(args['sessionId']));
67
+ const { lines, route } = await snapshotTree(deps, asString(args['sessionId']));
68
+ const { removed, added } = diffLines(base.lines, lines);
69
+ const consoleErrors = session
70
+ .eventsSince(0)
71
+ .filter((e) => e.type === EventType.CONSOLE_ERROR || e.type === EventType.ERROR_UNCAUGHT).length;
72
+ return { baseline: name, removed, added, consoleErrors, routeChanged: base.route !== route };
73
+ },
74
+ },
75
+ {
76
+ name: ReticleTool.RECORD_START,
77
+ description: 'Start recording the event timeline under a name (for replay / a flow report).',
78
+ inputSchema: {
79
+ recordingName: z
80
+ .string()
81
+ .describe('Identifier for this recording. Pass the same name to reticle_record_stop and reticle_replay.'),
82
+ ...sessionIdShape,
83
+ },
84
+ outputSchema: {
85
+ recordingName: z.string(),
86
+ since: z.number(),
87
+ },
88
+ handler: (deps, args) => {
89
+ const session = deps.sessions.resolve(asString(args['sessionId']));
90
+ const name = asString(args['recordingName']) ?? 'default';
91
+ const cursor = session.elapsed();
92
+ deps.recordings.start(name, cursor);
93
+ return Promise.resolve({ recordingName: name, since: cursor });
94
+ },
95
+ },
96
+ {
97
+ name: ReticleTool.RECORD_STOP,
98
+ description: 'Stop the recording identified by `recordingName` and return both the reaction report for the span and a compiled, replayable { program: { version, steps:[{tool,args,stable}] } } of the agent acts captured during it.',
99
+ inputSchema: {
100
+ recordingName: z
101
+ .string()
102
+ .describe('Identifier of an active recording started with reticle_record_start.'),
103
+ ...sessionIdShape,
104
+ },
105
+ outputSchema: {
106
+ recordingName: z.string(),
107
+ program: z.unknown(),
108
+ warning: z.string().optional(),
109
+ },
110
+ handler: (deps, args) => {
111
+ const session = deps.sessions.resolve(asString(args['sessionId']));
112
+ const name = asString(args['recordingName']) ?? 'default';
113
+ const rec = deps.recordings.stop(name);
114
+ if (rec === undefined)
115
+ throw new Error(`no active recording named '${name}'`);
116
+ const events = session.eventsSince(rec.cursor);
117
+ const program = {
118
+ name,
119
+ version: REPLAY_PROGRAM_VERSION,
120
+ steps: rec.steps,
121
+ };
122
+ deps.recordings.saveCompiled(program);
123
+ const unstable = rec.steps.filter((s) => !s.stable).length;
124
+ const report = buildReactionReport(events, session.elapsed() - rec.cursor);
125
+ return Promise.resolve({
126
+ recordingName: name,
127
+ program,
128
+ ...(unstable > 0
129
+ ? {
130
+ warning: `${String(unstable)} step(s) not bound to a testid; replay may be brittle (in-session only)`,
131
+ }
132
+ : {}),
133
+ ...report,
134
+ cost: costHint(report, events.length),
135
+ });
136
+ },
137
+ },
138
+ {
139
+ name: ReticleTool.REPLAY,
140
+ description: 'Re-execute a previously recorded program by recordingName. Re-resolves each step to its element by testid (falling back to the stored ref for unstable steps) and runs the actions in order against the live session. Stops at the first failure. Destructive controls require confirmDangerous:true on every replay; confirmation is never persisted. Returns { ok, steps:[{tool,ok,error?,note?}] }.',
141
+ inputSchema: {
142
+ recordingName: z
143
+ .string()
144
+ .describe('Name of a compiled recording (from reticle_record_stop) to re-execute.'),
145
+ confirmDangerous: z
146
+ .boolean()
147
+ .optional()
148
+ .describe('Set true to allow destructive controls during this replay only.'),
149
+ ...sessionIdShape,
150
+ },
151
+ outputSchema: {
152
+ recordingName: z.string(),
153
+ ok: z.boolean(),
154
+ steps: z.array(z.object({
155
+ tool: z.string(),
156
+ ok: z.boolean(),
157
+ error: z.string().optional(),
158
+ note: z.string().optional(),
159
+ })),
160
+ },
161
+ handler: async (deps, args) => {
162
+ const name = asString(args['recordingName']) ?? 'default';
163
+ const program = deps.recordings.getCompiled(name);
164
+ if (program === undefined)
165
+ throw new Error(`no compiled recording named '${name}'`);
166
+ const session = deps.sessions.resolve(asString(args['sessionId']));
167
+ const since = session.elapsed();
168
+ const steps = await replayProgram(session, program, args['confirmDangerous'] === true);
169
+ return { recordingName: name, since, steps, ok: steps.every((s) => s.ok) };
170
+ },
171
+ },
172
+ {
173
+ name: ReticleTool.NARRATE,
174
+ description: 'Narrate your intent on the page (presenter HUD) so the human watching sees what you are about to do and why. Use a short sentence before a meaningful action.',
175
+ inputSchema: {
176
+ text: z
177
+ .string()
178
+ .describe('Short sentence describing your next action, shown on the presenter HUD for the developer watching.'),
179
+ level: z
180
+ .string()
181
+ .optional()
182
+ .describe('Display severity: info | warn | error. Default: info.'),
183
+ ...sessionIdShape,
184
+ },
185
+ outputSchema: { ok: z.boolean() },
186
+ handler: async (deps, args) => {
187
+ const result = (await commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.NARRATE, {
188
+ text: args['text'],
189
+ level: args['level'],
190
+ }));
191
+ return { ok: true, ...result };
192
+ },
193
+ },
194
+ {
195
+ name: ReticleTool.CLOCK,
196
+ description: 'Control a fake clock: { freeze:true } to freeze time, { advanceMs:N } to fast-forward timers (toasts, debounces, auto-dismiss), { reset:true } to restore. Lets you test time-gated UI deterministically.',
197
+ inputSchema: {
198
+ freeze: z
199
+ .boolean()
200
+ .optional()
201
+ .describe('Freeze the fake clock. Time stops advancing until advanceMs or reset.'),
202
+ advanceMs: z
203
+ .number()
204
+ .optional()
205
+ .describe('Fast-forward time by this many milliseconds — triggers debounces, toasts, auto-dismiss timers.'),
206
+ reset: z.boolean().optional().describe('Restore the real clock.'),
207
+ ...sessionIdShape,
208
+ },
209
+ outputSchema: {
210
+ ok: z.boolean().optional(),
211
+ elapsed: z.number().optional(),
212
+ },
213
+ handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.CLOCK, {
214
+ freeze: args['freeze'],
215
+ advanceMs: args['advanceMs'],
216
+ reset: args['reset'],
217
+ }),
218
+ },
219
+ {
220
+ name: ReticleTool.STATE,
221
+ description: "Read live framework state without the app pre-broadcasting it. PREFERRED/RELIABLE: `store` reads a registered store (e.g. 'workspace'); omit `store` to read all stores. To avoid paying for a huge store, scope the read: `path` extracts a dot-path sub-tree (e.g. 'captionCache.v3', with numeric array indices), and `depth` collapses anything deeper than N levels to a size marker. A wrong `path` returns { found:false, availableKeys } so it is diagnosable. `ref` attempts a best-effort read of the nearest React component's hook state and is BOUNDED — on failure it returns component: { ok: false, reason: 'component-state-unavailable' }. Without path/depth: returns { stores, storeNames, component? }.",
222
+ inputSchema: {
223
+ ref: z
224
+ .string()
225
+ .optional()
226
+ .describe("Element ref — attempts a best-effort read of the nearest React component's hook state."),
227
+ store: z
228
+ .string()
229
+ .optional()
230
+ .describe("Registered store name (e.g. 'workspace'). Omit to read all stores."),
231
+ path: z
232
+ .string()
233
+ .optional()
234
+ .describe("Dot-path into the store (e.g. 'captionCache.v3'). Numeric array indices are supported."),
235
+ depth: z
236
+ .number()
237
+ .optional()
238
+ .describe('Collapse anything deeper than N levels to a size marker — avoids huge outputs for large stores.'),
239
+ ...sessionIdShape,
240
+ },
241
+ outputSchema: {
242
+ stores: z.record(z.unknown()).optional(),
243
+ storeNames: z.array(z.string()).optional(),
244
+ found: z.boolean().optional(),
245
+ value: z.unknown().optional(),
246
+ component: z
247
+ .object({ ok: z.boolean(), reason: z.string().optional(), state: z.unknown().optional() })
248
+ .optional(),
249
+ },
250
+ handler: async (deps, args) => {
251
+ const store = asString(args['store']);
252
+ const path = asString(args['path']);
253
+ const depth = asNumber(args['depth']);
254
+ // Forward path/depth so a CURRENT browser SDK scopes the read IN-PAGE, before the transport —
255
+ // the value never gets size-truncated in transit. (An older SDK ignores them and returns the
256
+ // whole store; we then scope server-side below as a back-compat fallback.)
257
+ const result = await commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.STATE_READ, {
258
+ ref: args['ref'],
259
+ store,
260
+ path,
261
+ depth,
262
+ });
263
+ // Normalize storeNames to a string[] regardless of how the wire delivered it — the
264
+ // outputSchema requires an array, and a non-array here makes MCP reject the whole result
265
+ // (so the agent gets nothing instead of the state). Defensive: a string becomes a 1-element array.
266
+ const root = result;
267
+ const names = Array.isArray(root.storeNames)
268
+ ? root.storeNames.filter((n) => typeof n === 'string')
269
+ : typeof root.storeNames === 'string' && root.storeNames.length > 0
270
+ ? [root.storeNames]
271
+ : [];
272
+ // The browser already scoped it in-page (the `found` shape) — pass through, just safe storeNames.
273
+ if (typeof root.found === 'boolean') {
274
+ return { ...root, storeNames: names };
275
+ }
276
+ if (path === undefined && depth === undefined) {
277
+ return { ...root, storeNames: names }; // unchanged shape, safe storeNames
278
+ }
279
+ // Back-compat: an older browser returned the whole store; scope it here (may already be
280
+ // size-truncated in transit for a very large store — that is the limitation this fix removes
281
+ // for current SDKs).
282
+ const base = store !== undefined ? (root.stores ?? {})[store] : result;
283
+ const selection = path !== undefined ? selectPath(base, path) : { found: true, value: base };
284
+ const value = selection.found && depth !== undefined ? capDepth(selection.value, depth) : selection.value;
285
+ return {
286
+ store,
287
+ path,
288
+ ...selection,
289
+ value,
290
+ storeNames: names,
291
+ };
292
+ },
293
+ },
294
+ {
295
+ name: ReticleTool.EXPLORE,
296
+ description: 'Autonomous-exploration helper: list interactive elements (with refs) + current console-error count, so the agent can drive the app and report anomalies.',
297
+ inputSchema: {
298
+ scope: z
299
+ .string()
300
+ .optional()
301
+ .describe('CSS selector or element ref to restrict the interactive element list to a subtree.'),
302
+ ...sessionIdShape,
303
+ },
304
+ outputSchema: {
305
+ interactive: z.array(z.unknown()),
306
+ consoleErrors: z.number(),
307
+ hint: z.string(),
308
+ },
309
+ handler: async (deps, args) => {
310
+ const session = deps.sessions.resolve(asString(args['sessionId']));
311
+ const result = await session.command(ReticleCommand.SNAPSHOT, {
312
+ mode: SnapshotMode.INTERACTIVE,
313
+ scope: args['scope'],
314
+ });
315
+ if (!result.ok)
316
+ throw new Error(result.error ?? 'snapshot failed');
317
+ const snap = (result.result ?? {});
318
+ const consoleErrors = session
319
+ .eventsSince(0)
320
+ .filter((e) => e.type === EventType.CONSOLE_ERROR || e.type === EventType.ERROR_UNCAUGHT).length;
321
+ return {
322
+ interactive: parseInteractive(snap.tree ?? ''),
323
+ consoleErrors,
324
+ hint: 'act on each ref, observe the reaction, and report failed requests / console errors / dead controls',
325
+ };
326
+ },
327
+ },
328
+ ];
329
+ //# sourceMappingURL=read-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-tools.js","sourceRoot":"","sources":["../../src/tools/read-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Server-side snapshot delta — return only what CHANGED since the agent's last look.
3
+ *
4
+ * Why (grounded): screenshot/Playwright-MCP agents accrue 60–80K tokens of stale accessibility-tree
5
+ * data over a session and start hallucinating selectors that no longer exist. The agent-facing cost
6
+ * is the MCP result it reads (not the internal WS payload), so computing the delta here — and
7
+ * returning only added/removed lines — directly cuts the tokens the model spends AND removes the
8
+ * stale full-tree that drives hallucination. Reuses the same normalize+diff the baseline layer uses,
9
+ * so "what changed" means the same thing everywhere.
10
+ *
11
+ * Pure decision (`snapshotDelta`) + a small route-invalidated cache (`SnapshotCache`). A route change
12
+ * invalidates the prior snapshot (a diff across pages would be meaningless), so the next snapshot
13
+ * returns full — never a misleading cross-page delta.
14
+ */
15
+ export declare const SnapshotDeltaMode: {
16
+ readonly FULL: "full";
17
+ readonly DELTA: "delta";
18
+ readonly UNCHANGED: "unchanged";
19
+ };
20
+ export type SnapshotDeltaMode = (typeof SnapshotDeltaMode)[keyof typeof SnapshotDeltaMode];
21
+ export interface SnapshotDelta {
22
+ added: string[];
23
+ removed: string[];
24
+ addedCount: number;
25
+ removedCount: number;
26
+ }
27
+ export type DeltaDecision = {
28
+ mode: typeof SnapshotDeltaMode.FULL;
29
+ } | {
30
+ mode: typeof SnapshotDeltaMode.UNCHANGED;
31
+ } | {
32
+ mode: typeof SnapshotDeltaMode.DELTA;
33
+ delta: SnapshotDelta;
34
+ };
35
+ /** Pure: decide full vs delta vs unchanged given the previous tree (same route) and the next tree. */
36
+ export declare function snapshotDelta(prevTree: string | undefined, nextTree: string): DeltaDecision;
37
+ /** Per-(session,scope,mode) last-snapshot cache. Route-aware: a route change invalidates the entry. */
38
+ export declare class SnapshotCache {
39
+ #private;
40
+ constructor(max?: number);
41
+ /** Last tree for this key IF the route still matches; undefined when absent or route changed. */
42
+ recall(key: string, route: string): string | undefined;
43
+ remember(key: string, route: string, tree: string): void;
44
+ }
45
+ export declare function snapshotCacheKey(sessionId: string, scope: string, mode: string): string;
46
+ export interface SnapshotDeltaOpts {
47
+ sessionId: string;
48
+ scope: string;
49
+ mode: string;
50
+ diff: boolean;
51
+ }
52
+ /**
53
+ * Shape a raw snapshot result for the agent: when `diff` is requested and a same-route prior
54
+ * snapshot exists, return only the delta (or `unchanged`) instead of the full tree. Always updates
55
+ * the cache. Non-object/errorless results pass through. The cache is the only state; the decision is
56
+ * the pure `snapshotDelta`.
57
+ */
58
+ export declare function applySnapshotDelta(raw: unknown, opts: SnapshotDeltaOpts, cache: SnapshotCache): unknown;
59
+ //# sourceMappingURL=snapshot-delta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-delta.d.ts","sourceRoot":"","sources":["../../src/tools/snapshot-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,iBAAiB,CAAC,SAAS,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAEnE,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAQ3F;AAID,uGAAuG;AACvG,qBAAa,aAAa;;gBAIZ,GAAG,GAAE,MAA4B;IAI7C,iGAAiG;IACjG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKtD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAOzD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,aAAa,GACnB,OAAO,CA0BT"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-delta.js","sourceRoot":"","sources":["../../src/tools/snapshot-delta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ToolDeps } from './tools.js';
2
+ /** Named error prefix when an invoker is asked for a tool that does not exist. No free strings. */
3
+ export declare const UNKNOWN_TOOL_ERROR = "unknown reticle tool";
4
+ /**
5
+ * Programmatic, MCP-free dispatch: (toolName, args) -> the same value the MCP handler returns.
6
+ * This is the seam @reticlehq/test calls instead of standing up a stdio MCP transport.
7
+ */
8
+ export type ToolInvoker = (toolName: string, args: Record<string, unknown>) => Promise<unknown>;
9
+ /**
10
+ * Build an invoker over the shipped TOOLS table, bound to one ToolDeps. No stdio, no transport.
11
+ * Unknown names reject with `${UNKNOWN_TOOL_ERROR}: <name>`; handler errors propagate unwrapped
12
+ * (the MCP `{ isError, content }` envelope is a transport concern this layer deliberately skips).
13
+ */
14
+ export declare function createToolInvoker(deps: ToolDeps): ToolInvoker;
15
+ //# sourceMappingURL=tool-invoker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-invoker.d.ts","sourceRoot":"","sources":["../../src/tools/tool-invoker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGlD,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhG;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,CAS7D"}
@@ -0,0 +1,20 @@
1
+ import { TOOLS } from './tools.js';
2
+ import { runTool } from './invoke-tool.js';
3
+ /** Named error prefix when an invoker is asked for a tool that does not exist. No free strings. */
4
+ export const UNKNOWN_TOOL_ERROR = 'unknown reticle tool';
5
+ /**
6
+ * Build an invoker over the shipped TOOLS table, bound to one ToolDeps. No stdio, no transport.
7
+ * Unknown names reject with `${UNKNOWN_TOOL_ERROR}: <name>`; handler errors propagate unwrapped
8
+ * (the MCP `{ isError, content }` envelope is a transport concern this layer deliberately skips).
9
+ */
10
+ export function createToolInvoker(deps) {
11
+ const byName = new Map(TOOLS.map((tool) => [tool.name, tool]));
12
+ return (toolName, args) => {
13
+ const tool = byName.get(toolName);
14
+ if (tool === undefined) {
15
+ return Promise.reject(new Error(`${UNKNOWN_TOOL_ERROR}: ${toolName}`));
16
+ }
17
+ return runTool(tool, deps, args);
18
+ };
19
+ }
20
+ //# sourceMappingURL=tool-invoker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-invoker.js","sourceRoot":"","sources":["../../src/tools/tool-invoker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAQzD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,kBAAkB,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shared kit for the MCP tool modules — the tool shape, the dependency bag, the common
3
+ * session-id arg, and the two helpers (commandOrThrow, snapshotTree) every tool group needs. Lives
4
+ * in its own leaf module (no dependency on any tool array) so the per-group tool files can import it
5
+ * without a circular import — `tools.ts` assembles the groups and re-exports `ToolDef`/`ToolDeps`.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { SessionManager } from '../session/session.js';
9
+ import type { RealInputProvider } from '../input/real-input.js';
10
+ import type { BaselineStore } from '../project/baselines.js';
11
+ import type { RecordingStore } from '../flows/recordings.js';
12
+ import type { FileSystemPort } from '../project/fs-port.js';
13
+ import type { FlowStore } from '../flows/flows.js';
14
+ import type { ProjectStore } from '../project/project-store.js';
15
+ import type { AnnotationStore } from '../flows/annotation-store.js';
16
+ import type { BrowserPool } from '../pool/browser-pool.js';
17
+ export interface ToolDeps {
18
+ sessions: SessionManager;
19
+ /** shared one-browser/N-context pool for headless leases. undefined ⇒ lease tools report unavailable. */
20
+ pool?: BrowserPool;
21
+ baselines: BaselineStore;
22
+ recordings: RecordingStore;
23
+ /** on-disk anchored-flow store (.reticle/flows/). */
24
+ flows: FlowStore;
25
+ /** structured annotations accumulating for the live recording. */
26
+ annotations: AnnotationStore;
27
+ /** cross-run outcome memory (.reticle/project.json). */
28
+ project: ProjectStore;
29
+ /** optional native-input provider. undefined ⇒ everything stays synthetic. */
30
+ realInput?: RealInputProvider;
31
+ /** injected filesystem seam (tests pass a fake/temp-dir adapter). */
32
+ fs: FileSystemPort;
33
+ /** absolute .reticle path (index.ts computes cwd()/.reticle). */
34
+ reticleRoot: string;
35
+ /** injected clock for the contract's generatedAt stamp. */
36
+ now: () => number;
37
+ }
38
+ export interface ToolDef {
39
+ name: string;
40
+ description: string;
41
+ inputSchema: z.ZodRawShape;
42
+ /**
43
+ * JSON Schema-compatible output schema for this tool. When present, the MCP server advertises it
44
+ * in the tools/list response so schema-aware clients (like @reticlehq/cli) can validate outputs and
45
+ * compose tool calls safely. Also drives TOON encoding for snapshot/query results.
46
+ */
47
+ outputSchema?: z.ZodRawShape;
48
+ handler: (deps: ToolDeps, args: Record<string, unknown>) => Promise<unknown>;
49
+ }
50
+ export declare const sessionIdShape: {
51
+ sessionId: z.ZodOptional<z.ZodString>;
52
+ };
53
+ /** Unwrap a browser command result or throw its error so the agent sees a clean failure. */
54
+ export declare function commandOrThrow(deps: ToolDeps, sessionId: string | undefined, name: string, args: Record<string, unknown>): Promise<unknown>;
55
+ /** Full DOM snapshot → normalized tree lines + route, for tools that diff or scan the page. */
56
+ export declare function snapshotTree(deps: ToolDeps, sessionId: string | undefined): Promise<{
57
+ lines: string[];
58
+ route: string;
59
+ }>;
60
+ //# sourceMappingURL=tool-kit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-kit.d.ts","sourceRoot":"","sources":["../../src/tools/tool-kit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,yGAAyG;IACzG,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,qDAAqD;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,WAAW,EAAE,eAAe,CAAC;IAC7B,wDAAwD;IACxD,OAAO,EAAE,YAAY,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,qEAAqE;IACrE,EAAE,EAAE,cAAc,CAAC;IACnB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E;AAED,eAAO,MAAM,cAAc;;CAO1B,CAAC;AAEF,4FAA4F;AAC5F,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAKlB;AAOD,+FAA+F;AAC/F,wBAAsB,YAAY,CAChC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAM7C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared kit for the MCP tool modules — the tool shape, the dependency bag, the common
3
+ * session-id arg, and the two helpers (commandOrThrow, snapshotTree) every tool group needs. Lives
4
+ * in its own leaf module (no dependency on any tool array) so the per-group tool files can import it
5
+ * without a circular import — `tools.ts` assembles the groups and re-exports `ToolDef`/`ToolDeps`.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ReticleCommand, SnapshotMode } from '@reticlehq/core';
9
+ import { normalizeLines } from '../project/baselines.js';
10
+ export const sessionIdShape = {
11
+ sessionId: z
12
+ .string()
13
+ .optional()
14
+ .describe('Active session ID from reticle_sessions. Omit when only one browser session is open — Reticle resolves it automatically.'),
15
+ };
16
+ /** Unwrap a browser command result or throw its error so the agent sees a clean failure. */
17
+ export async function commandOrThrow(deps, sessionId, name, args) {
18
+ const session = deps.sessions.resolve(sessionId);
19
+ const result = await session.command(name, args);
20
+ if (!result.ok)
21
+ throw new Error(result.error ?? `command '${name}' failed`);
22
+ return result.result;
23
+ }
24
+ /** Full DOM snapshot → normalized tree lines + route, for tools that diff or scan the page. */
25
+ export async function snapshotTree(deps, sessionId) {
26
+ const session = deps.sessions.resolve(sessionId);
27
+ const result = await session.command(ReticleCommand.SNAPSHOT, { mode: SnapshotMode.FULL });
28
+ if (!result.ok)
29
+ throw new Error(result.error ?? 'snapshot failed');
30
+ const snap = (result.result ?? {});
31
+ return { lines: normalizeLines(snap.tree ?? ''), route: snap.status?.route ?? '' };
32
+ }
33
+ //# sourceMappingURL=tool-kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-kit.js","sourceRoot":"","sources":["../../src/tools/tool-kit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA2CzD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0HAA0H,CAC3H;CACJ,CAAC;AAEF,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAc,EACd,SAA6B,EAC7B,IAAY,EACZ,IAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,IAAI,UAAU,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAOD,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAc,EACd,SAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAmB,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;AACrF,CAAC"}