@reticlehq/server 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/LICENSE-ENTERPRISE +37 -0
  2. package/README.md +5 -1
  3. package/dist/bridge-security.d.ts +1 -1
  4. package/dist/bridge-security.js +1 -1
  5. package/dist/bridge.d.ts +7 -0
  6. package/dist/bridge.d.ts.map +1 -1
  7. package/dist/bridge.js +62 -6
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/bridge.test-harness.d.ts +5 -0
  10. package/dist/bridge.test-harness.d.ts.map +1 -1
  11. package/dist/bridge.test-harness.js +4 -0
  12. package/dist/bridge.test-harness.js.map +1 -1
  13. package/dist/capsule/capsule-store.d.ts +66 -0
  14. package/dist/capsule/capsule-store.d.ts.map +1 -0
  15. package/dist/capsule/capsule-store.js +110 -0
  16. package/dist/capsule/capsule-store.js.map +1 -0
  17. package/dist/capsule/capsule.d.ts +19 -0
  18. package/dist/capsule/capsule.d.ts.map +1 -0
  19. package/dist/capsule/capsule.js +36 -0
  20. package/dist/capsule/capsule.js.map +1 -0
  21. package/dist/capsule/causal-summary.d.ts +36 -0
  22. package/dist/capsule/causal-summary.d.ts.map +1 -0
  23. package/dist/capsule/causal-summary.js +111 -0
  24. package/dist/capsule/causal-summary.js.map +1 -0
  25. package/dist/capsule/divergence.d.ts +31 -0
  26. package/dist/capsule/divergence.d.ts.map +1 -0
  27. package/dist/capsule/divergence.js +41 -0
  28. package/dist/capsule/divergence.js.map +1 -0
  29. package/dist/capsule/minimize.d.ts +13 -0
  30. package/dist/capsule/minimize.d.ts.map +1 -0
  31. package/dist/capsule/minimize.js +23 -0
  32. package/dist/capsule/minimize.js.map +1 -0
  33. package/dist/capsule/predicate-to-links.d.ts +9 -0
  34. package/dist/capsule/predicate-to-links.d.ts.map +1 -0
  35. package/dist/capsule/predicate-to-links.js +31 -0
  36. package/dist/capsule/predicate-to-links.js.map +1 -0
  37. package/dist/cli-flow-commands.d.ts +31 -0
  38. package/dist/cli-flow-commands.d.ts.map +1 -0
  39. package/dist/cli-flow-commands.js +207 -0
  40. package/dist/cli-flow-commands.js.map +1 -0
  41. package/dist/cli-launch.d.ts.map +1 -1
  42. package/dist/cli-launch.js +1 -2
  43. package/dist/cli-launch.js.map +1 -1
  44. package/dist/cli-parse.d.ts +18 -2
  45. package/dist/cli-parse.d.ts.map +1 -1
  46. package/dist/cli-parse.js +57 -0
  47. package/dist/cli-parse.js.map +1 -1
  48. package/dist/cli-port.d.ts +10 -4
  49. package/dist/cli-port.d.ts.map +1 -1
  50. package/dist/cli-port.js +32 -6
  51. package/dist/cli-port.js.map +1 -1
  52. package/dist/cli-verify.d.ts.map +1 -1
  53. package/dist/cli-verify.js +29 -10
  54. package/dist/cli-verify.js.map +1 -1
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +83 -13
  57. package/dist/cli.js.map +1 -1
  58. package/dist/crawl/crawl-tools.d.ts.map +1 -1
  59. package/dist/crawl/crawl-tools.js +12 -0
  60. package/dist/crawl/crawl-tools.js.map +1 -1
  61. package/dist/crawl/crawl.d.ts +23 -1
  62. package/dist/crawl/crawl.d.ts.map +1 -1
  63. package/dist/crawl/crawl.js +42 -12
  64. package/dist/crawl/crawl.js.map +1 -1
  65. package/dist/daemon-resilience.d.ts +5 -5
  66. package/dist/daemon-resilience.js +5 -5
  67. package/dist/daemon.d.ts +9 -3
  68. package/dist/daemon.d.ts.map +1 -1
  69. package/dist/daemon.js +41 -8
  70. package/dist/daemon.js.map +1 -1
  71. package/dist/domain/domain-tools.d.ts.map +1 -1
  72. package/dist/domain/domain-tools.js +11 -1
  73. package/dist/domain/domain-tools.js.map +1 -1
  74. package/dist/domain/flow-risk.d.ts +4 -4
  75. package/dist/domain/flow-risk.js +4 -4
  76. package/dist/ee/audit-log.d.ts +2 -2
  77. package/dist/ee/audit-log.js +2 -2
  78. package/dist/events/event-filters.d.ts +35 -1
  79. package/dist/events/event-filters.d.ts.map +1 -1
  80. package/dist/events/event-filters.js +93 -6
  81. package/dist/events/event-filters.js.map +1 -1
  82. package/dist/events/predicate-eval.d.ts +15 -0
  83. package/dist/events/predicate-eval.d.ts.map +1 -1
  84. package/dist/events/predicate-eval.js +130 -9
  85. package/dist/events/predicate-eval.js.map +1 -1
  86. package/dist/events/predicate.d.ts +22 -1
  87. package/dist/events/predicate.d.ts.map +1 -1
  88. package/dist/events/predicate.js +169 -15
  89. package/dist/events/predicate.js.map +1 -1
  90. package/dist/events/ring-buffer.d.ts +10 -8
  91. package/dist/events/ring-buffer.d.ts.map +1 -1
  92. package/dist/events/ring-buffer.js +84 -25
  93. package/dist/events/ring-buffer.js.map +1 -1
  94. package/dist/flows/affected.d.ts +25 -0
  95. package/dist/flows/affected.d.ts.map +1 -0
  96. package/dist/flows/affected.js +36 -0
  97. package/dist/flows/affected.js.map +1 -0
  98. package/dist/flows/annotate.d.ts +4 -4
  99. package/dist/flows/annotate.js +4 -4
  100. package/dist/flows/assertion-integrity.d.ts +24 -0
  101. package/dist/flows/assertion-integrity.d.ts.map +1 -0
  102. package/dist/flows/assertion-integrity.js +27 -0
  103. package/dist/flows/assertion-integrity.js.map +1 -0
  104. package/dist/flows/assertion-tiers-store.d.ts +80 -0
  105. package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
  106. package/dist/flows/assertion-tiers-store.js +99 -0
  107. package/dist/flows/assertion-tiers-store.js.map +1 -0
  108. package/dist/flows/buddy-status.d.ts +25 -0
  109. package/dist/flows/buddy-status.d.ts.map +1 -0
  110. package/dist/flows/buddy-status.js +33 -0
  111. package/dist/flows/buddy-status.js.map +1 -0
  112. package/dist/flows/coverage.d.ts +28 -0
  113. package/dist/flows/coverage.d.ts.map +1 -0
  114. package/dist/flows/coverage.js +22 -0
  115. package/dist/flows/coverage.js.map +1 -0
  116. package/dist/flows/decision.d.ts.map +1 -1
  117. package/dist/flows/decision.js +18 -9
  118. package/dist/flows/decision.js.map +1 -1
  119. package/dist/flows/flake-store.d.ts +20 -0
  120. package/dist/flows/flake-store.d.ts.map +1 -0
  121. package/dist/flows/flake-store.js +59 -0
  122. package/dist/flows/flake-store.js.map +1 -0
  123. package/dist/flows/flake.d.ts +58 -0
  124. package/dist/flows/flake.d.ts.map +1 -0
  125. package/dist/flows/flake.js +36 -0
  126. package/dist/flows/flake.js.map +1 -0
  127. package/dist/flows/flow-classify.d.ts +8 -8
  128. package/dist/flows/flow-classify.d.ts.map +1 -1
  129. package/dist/flows/flow-classify.js +12 -20
  130. package/dist/flows/flow-classify.js.map +1 -1
  131. package/dist/flows/flow-replay-run.d.ts +6 -0
  132. package/dist/flows/flow-replay-run.d.ts.map +1 -1
  133. package/dist/flows/flow-replay-run.js +49 -0
  134. package/dist/flows/flow-replay-run.js.map +1 -1
  135. package/dist/flows/flow-replay.d.ts +9 -0
  136. package/dist/flows/flow-replay.d.ts.map +1 -1
  137. package/dist/flows/flow-replay.js +52 -18
  138. package/dist/flows/flow-replay.js.map +1 -1
  139. package/dist/flows/flow-report.d.ts +4 -4
  140. package/dist/flows/flow-report.d.ts.map +1 -1
  141. package/dist/flows/flow-report.js +2 -1
  142. package/dist/flows/flow-report.js.map +1 -1
  143. package/dist/flows/flow-sources.d.ts +20 -0
  144. package/dist/flows/flow-sources.d.ts.map +1 -0
  145. package/dist/flows/flow-sources.js +33 -0
  146. package/dist/flows/flow-sources.js.map +1 -0
  147. package/dist/flows/flow-tools.d.ts +13 -1
  148. package/dist/flows/flow-tools.d.ts.map +1 -1
  149. package/dist/flows/flow-tools.js +97 -152
  150. package/dist/flows/flow-tools.js.map +1 -1
  151. package/dist/flows/flows.d.ts +9 -4
  152. package/dist/flows/flows.d.ts.map +1 -1
  153. package/dist/flows/flows.js +39 -27
  154. package/dist/flows/flows.js.map +1 -1
  155. package/dist/flows/gate.d.ts +39 -0
  156. package/dist/flows/gate.d.ts.map +1 -0
  157. package/dist/flows/gate.js +34 -0
  158. package/dist/flows/gate.js.map +1 -0
  159. package/dist/flows/git-changed.d.ts +9 -0
  160. package/dist/flows/git-changed.d.ts.map +1 -0
  161. package/dist/flows/git-changed.js +25 -0
  162. package/dist/flows/git-changed.js.map +1 -0
  163. package/dist/flows/heal-run.d.ts +19 -0
  164. package/dist/flows/heal-run.d.ts.map +1 -0
  165. package/dist/flows/heal-run.js +137 -0
  166. package/dist/flows/heal-run.js.map +1 -0
  167. package/dist/flows/parallel-suite.d.ts +27 -0
  168. package/dist/flows/parallel-suite.d.ts.map +1 -0
  169. package/dist/flows/parallel-suite.js +51 -0
  170. package/dist/flows/parallel-suite.js.map +1 -0
  171. package/dist/flows/replay.d.ts +13 -0
  172. package/dist/flows/replay.d.ts.map +1 -1
  173. package/dist/flows/replay.js +56 -23
  174. package/dist/flows/replay.js.map +1 -1
  175. package/dist/flows/watch-batcher.d.ts +18 -0
  176. package/dist/flows/watch-batcher.d.ts.map +1 -0
  177. package/dist/flows/watch-batcher.js +20 -0
  178. package/dist/flows/watch-batcher.js.map +1 -0
  179. package/dist/honesty/blind-spots.d.ts +37 -0
  180. package/dist/honesty/blind-spots.d.ts.map +1 -0
  181. package/dist/honesty/blind-spots.js +57 -0
  182. package/dist/honesty/blind-spots.js.map +1 -0
  183. package/dist/honesty/honesty.d.ts +57 -0
  184. package/dist/honesty/honesty.d.ts.map +1 -0
  185. package/dist/honesty/honesty.js +63 -0
  186. package/dist/honesty/honesty.js.map +1 -0
  187. package/dist/http-server.d.ts +5 -9
  188. package/dist/http-server.d.ts.map +1 -1
  189. package/dist/http-server.js +5 -9
  190. package/dist/http-server.js.map +1 -1
  191. package/dist/idle-shutdown.d.ts +2 -2
  192. package/dist/idle-shutdown.js +2 -2
  193. package/dist/index.d.ts +3 -3
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +131 -73
  196. package/dist/index.js.map +1 -1
  197. package/dist/init/agent-rules.d.ts +38 -0
  198. package/dist/init/agent-rules.d.ts.map +1 -0
  199. package/dist/init/agent-rules.js +65 -0
  200. package/dist/init/agent-rules.js.map +1 -0
  201. package/dist/init/mcp.d.ts.map +1 -1
  202. package/dist/init/mcp.js +4 -3
  203. package/dist/init/mcp.js.map +1 -1
  204. package/dist/init/plan.d.ts +6 -0
  205. package/dist/init/plan.d.ts.map +1 -1
  206. package/dist/init/plan.js +79 -3
  207. package/dist/init/plan.js.map +1 -1
  208. package/dist/init/run.d.ts.map +1 -1
  209. package/dist/init/run.js +4 -0
  210. package/dist/init/run.js.map +1 -1
  211. package/dist/init/snippets.js +1 -1
  212. package/dist/init/vite-config.d.ts +1 -1
  213. package/dist/init/vite-config.js +2 -2
  214. package/dist/init/vite-config.js.map +1 -1
  215. package/dist/input/network-detail.d.ts +74 -0
  216. package/dist/input/network-detail.d.ts.map +1 -0
  217. package/dist/input/network-detail.js +160 -0
  218. package/dist/input/network-detail.js.map +1 -0
  219. package/dist/input/network-mock-tools.d.ts.map +1 -1
  220. package/dist/input/network-mock-tools.js +1 -6
  221. package/dist/input/network-mock-tools.js.map +1 -1
  222. package/dist/input/network-mock.d.ts +4 -4
  223. package/dist/input/real-input.d.ts +44 -11
  224. package/dist/input/real-input.d.ts.map +1 -1
  225. package/dist/input/real-input.js +57 -9
  226. package/dist/input/real-input.js.map +1 -1
  227. package/dist/input/viewport-tools.d.ts.map +1 -1
  228. package/dist/input/viewport-tools.js +1 -6
  229. package/dist/input/viewport-tools.js.map +1 -1
  230. package/dist/journal/ambient-store.d.ts +16 -0
  231. package/dist/journal/ambient-store.d.ts.map +1 -0
  232. package/dist/journal/ambient-store.js +46 -0
  233. package/dist/journal/ambient-store.js.map +1 -0
  234. package/dist/journal/ambient.d.ts +48 -0
  235. package/dist/journal/ambient.d.ts.map +1 -0
  236. package/dist/journal/ambient.js +48 -0
  237. package/dist/journal/ambient.js.map +1 -0
  238. package/dist/journal/attach-journal.d.ts +22 -0
  239. package/dist/journal/attach-journal.d.ts.map +1 -0
  240. package/dist/journal/attach-journal.js +20 -0
  241. package/dist/journal/attach-journal.js.map +1 -0
  242. package/dist/journal/deviation-report.d.ts +28 -0
  243. package/dist/journal/deviation-report.d.ts.map +1 -0
  244. package/dist/journal/deviation-report.js +54 -0
  245. package/dist/journal/deviation-report.js.map +1 -0
  246. package/dist/journal/deviation-service.d.ts +12 -0
  247. package/dist/journal/deviation-service.d.ts.map +1 -0
  248. package/dist/journal/deviation-service.js +32 -0
  249. package/dist/journal/deviation-service.js.map +1 -0
  250. package/dist/journal/envelope-store.d.ts +19 -0
  251. package/dist/journal/envelope-store.d.ts.map +1 -0
  252. package/dist/journal/envelope-store.js +62 -0
  253. package/dist/journal/envelope-store.js.map +1 -0
  254. package/dist/journal/envelope.d.ts +232 -0
  255. package/dist/journal/envelope.d.ts.map +1 -0
  256. package/dist/journal/envelope.js +94 -0
  257. package/dist/journal/envelope.js.map +1 -0
  258. package/dist/journal/journal-query.d.ts +20 -0
  259. package/dist/journal/journal-query.d.ts.map +1 -0
  260. package/dist/journal/journal-query.js +28 -0
  261. package/dist/journal/journal-query.js.map +1 -0
  262. package/dist/journal/journal-recorder.d.ts +38 -0
  263. package/dist/journal/journal-recorder.d.ts.map +1 -0
  264. package/dist/journal/journal-recorder.js +81 -0
  265. package/dist/journal/journal-recorder.js.map +1 -0
  266. package/dist/journal/retention.d.ts +21 -0
  267. package/dist/journal/retention.d.ts.map +1 -0
  268. package/dist/journal/retention.js +50 -0
  269. package/dist/journal/retention.js.map +1 -0
  270. package/dist/journal/rollups.d.ts +49 -0
  271. package/dist/journal/rollups.d.ts.map +1 -0
  272. package/dist/journal/rollups.js +83 -0
  273. package/dist/journal/rollups.js.map +1 -0
  274. package/dist/journal/session-end.d.ts +32 -0
  275. package/dist/journal/session-end.d.ts.map +1 -0
  276. package/dist/journal/session-end.js +52 -0
  277. package/dist/journal/session-end.js.map +1 -0
  278. package/dist/journal/session-journal.d.ts +25 -0
  279. package/dist/journal/session-journal.d.ts.map +1 -0
  280. package/dist/journal/session-journal.js +168 -0
  281. package/dist/journal/session-journal.js.map +1 -0
  282. package/dist/license/license.d.ts +8 -3
  283. package/dist/license/license.d.ts.map +1 -1
  284. package/dist/license/license.js +34 -11
  285. package/dist/license/license.js.map +1 -1
  286. package/dist/mcp-proxy.d.ts +20 -0
  287. package/dist/mcp-proxy.d.ts.map +1 -1
  288. package/dist/mcp-proxy.js +52 -29
  289. package/dist/mcp-proxy.js.map +1 -1
  290. package/dist/mcp.d.ts +22 -0
  291. package/dist/mcp.d.ts.map +1 -1
  292. package/dist/mcp.js +93 -10
  293. package/dist/mcp.js.map +1 -1
  294. package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
  295. package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
  296. package/dist/oracles/flow-instrument-gaps.js +45 -0
  297. package/dist/oracles/flow-instrument-gaps.js.map +1 -0
  298. package/dist/oracles/propose-consequences.d.ts +22 -0
  299. package/dist/oracles/propose-consequences.d.ts.map +1 -0
  300. package/dist/oracles/propose-consequences.js +93 -0
  301. package/dist/oracles/propose-consequences.js.map +1 -0
  302. package/dist/oracles/self-instrument.d.ts +32 -0
  303. package/dist/oracles/self-instrument.d.ts.map +1 -0
  304. package/dist/oracles/self-instrument.js +44 -0
  305. package/dist/oracles/self-instrument.js.map +1 -0
  306. package/dist/pairing-token.d.ts +1 -1
  307. package/dist/phenomena/phenomena.d.ts +27 -0
  308. package/dist/phenomena/phenomena.d.ts.map +1 -0
  309. package/dist/phenomena/phenomena.js +102 -0
  310. package/dist/phenomena/phenomena.js.map +1 -0
  311. package/dist/pool/browser-pool.d.ts +5 -3
  312. package/dist/pool/browser-pool.d.ts.map +1 -1
  313. package/dist/pool/browser-pool.js +21 -3
  314. package/dist/pool/browser-pool.js.map +1 -1
  315. package/dist/pool/playwright-launcher.d.ts +2 -2
  316. package/dist/pool/playwright-launcher.d.ts.map +1 -1
  317. package/dist/pool/playwright-launcher.js +20 -6
  318. package/dist/pool/playwright-launcher.js.map +1 -1
  319. package/dist/project/file-lock.d.ts +2 -0
  320. package/dist/project/file-lock.d.ts.map +1 -0
  321. package/dist/project/file-lock.js +24 -0
  322. package/dist/project/file-lock.js.map +1 -0
  323. package/dist/project/fs-port.d.ts +18 -0
  324. package/dist/project/fs-port.d.ts.map +1 -1
  325. package/dist/project/fs-port.js +24 -2
  326. package/dist/project/fs-port.js.map +1 -1
  327. package/dist/project/project-store.d.ts.map +1 -1
  328. package/dist/project/project-store.js +13 -7
  329. package/dist/project/project-store.js.map +1 -1
  330. package/dist/project/project-tools.d.ts +0 -6
  331. package/dist/project/project-tools.d.ts.map +1 -1
  332. package/dist/project/project-tools.js +25 -7
  333. package/dist/project/project-tools.js.map +1 -1
  334. package/dist/project/reticle-dir.d.ts +39 -14
  335. package/dist/project/reticle-dir.d.ts.map +1 -1
  336. package/dist/project/reticle-dir.js +30 -4
  337. package/dist/project/reticle-dir.js.map +1 -1
  338. package/dist/runs/build-verification-run.d.ts +1 -1
  339. package/dist/runs/build-verification-run.js +1 -1
  340. package/dist/runs/repair-prompt.d.ts +2 -0
  341. package/dist/runs/repair-prompt.d.ts.map +1 -1
  342. package/dist/runs/repair-prompt.js +14 -1
  343. package/dist/runs/repair-prompt.js.map +1 -1
  344. package/dist/runs/reticle-runner.d.ts +1 -1
  345. package/dist/runs/reticle-runner.d.ts.map +1 -1
  346. package/dist/runs/run-diff.d.ts +34 -0
  347. package/dist/runs/run-diff.d.ts.map +1 -0
  348. package/dist/runs/run-diff.js +71 -0
  349. package/dist/runs/run-diff.js.map +1 -0
  350. package/dist/runs/run-store.d.ts +6 -1
  351. package/dist/runs/run-store.d.ts.map +1 -1
  352. package/dist/runs/run-store.js +22 -2
  353. package/dist/runs/run-store.js.map +1 -1
  354. package/dist/runs/run-tools.d.ts.map +1 -1
  355. package/dist/runs/run-tools.js +16 -3
  356. package/dist/runs/run-tools.js.map +1 -1
  357. package/dist/runs/verify-server.js +1 -1
  358. package/dist/runs/verify-server.js.map +1 -1
  359. package/dist/server-version.d.ts +5 -0
  360. package/dist/server-version.d.ts.map +1 -1
  361. package/dist/server-version.js +5 -0
  362. package/dist/server-version.js.map +1 -1
  363. package/dist/session/control-envelope.d.ts +9 -1
  364. package/dist/session/control-envelope.d.ts.map +1 -1
  365. package/dist/session/control-envelope.js +13 -1
  366. package/dist/session/control-envelope.js.map +1 -1
  367. package/dist/session/live-control-tools.d.ts +1 -1
  368. package/dist/session/live-control-tools.d.ts.map +1 -1
  369. package/dist/session/live-control-tools.js +2 -7
  370. package/dist/session/live-control-tools.js.map +1 -1
  371. package/dist/session/live-control.d.ts +38 -0
  372. package/dist/session/live-control.d.ts.map +1 -0
  373. package/dist/session/live-control.js +64 -0
  374. package/dist/session/live-control.js.map +1 -0
  375. package/dist/session/observed-state.d.ts +46 -0
  376. package/dist/session/observed-state.d.ts.map +1 -0
  377. package/dist/session/observed-state.js +76 -0
  378. package/dist/session/observed-state.js.map +1 -0
  379. package/dist/session/output-budget.d.ts +9 -0
  380. package/dist/session/output-budget.d.ts.map +1 -1
  381. package/dist/session/output-budget.js +12 -1
  382. package/dist/session/output-budget.js.map +1 -1
  383. package/dist/session/review-store.d.ts +1 -1
  384. package/dist/session/review-store.d.ts.map +1 -1
  385. package/dist/session/review-store.js +2 -2
  386. package/dist/session/review-store.js.map +1 -1
  387. package/dist/session/session-manager.d.ts +9 -7
  388. package/dist/session/session-manager.d.ts.map +1 -1
  389. package/dist/session/session-manager.js +8 -8
  390. package/dist/session/session-manager.js.map +1 -1
  391. package/dist/session/session-readiness.js +1 -1
  392. package/dist/session/session-readiness.js.map +1 -1
  393. package/dist/session/session-reaper.d.ts +1 -1
  394. package/dist/session/session-reaper.js +1 -1
  395. package/dist/session/session-recommendation.d.ts +1 -1
  396. package/dist/session/session-recommendation.js +1 -1
  397. package/dist/session/session-tools.js +1 -1
  398. package/dist/session/session-tools.js.map +1 -1
  399. package/dist/session/session.d.ts +44 -12
  400. package/dist/session/session.d.ts.map +1 -1
  401. package/dist/session/session.js +116 -47
  402. package/dist/session/session.js.map +1 -1
  403. package/dist/tools/act-tools.d.ts.map +1 -1
  404. package/dist/tools/act-tools.js +257 -70
  405. package/dist/tools/act-tools.js.map +1 -1
  406. package/dist/tools/act-view.d.ts +4 -4
  407. package/dist/tools/act-view.js +4 -4
  408. package/dist/tools/assert-grade.d.ts.map +1 -1
  409. package/dist/tools/assert-grade.js +15 -26
  410. package/dist/tools/assert-grade.js.map +1 -1
  411. package/dist/tools/browser-tools.d.ts.map +1 -1
  412. package/dist/tools/browser-tools.js +32 -8
  413. package/dist/tools/browser-tools.js.map +1 -1
  414. package/dist/tools/contract-tools.d.ts.map +1 -1
  415. package/dist/tools/contract-tools.js +5 -0
  416. package/dist/tools/contract-tools.js.map +1 -1
  417. package/dist/tools/dynamic-tools.d.ts.map +1 -1
  418. package/dist/tools/dynamic-tools.js +7 -6
  419. package/dist/tools/dynamic-tools.js.map +1 -1
  420. package/dist/tools/invoke-tool.d.ts.map +1 -1
  421. package/dist/tools/invoke-tool.js +41 -30
  422. package/dist/tools/invoke-tool.js.map +1 -1
  423. package/dist/tools/lease-tools.d.ts +16 -0
  424. package/dist/tools/lease-tools.d.ts.map +1 -1
  425. package/dist/tools/lease-tools.js +11 -0
  426. package/dist/tools/lease-tools.js.map +1 -1
  427. package/dist/tools/merge-tools.d.ts +43 -0
  428. package/dist/tools/merge-tools.d.ts.map +1 -0
  429. package/dist/tools/merge-tools.js +66 -0
  430. package/dist/tools/merge-tools.js.map +1 -0
  431. package/dist/tools/observe-tools.d.ts.map +1 -1
  432. package/dist/tools/observe-tools.js +172 -29
  433. package/dist/tools/observe-tools.js.map +1 -1
  434. package/dist/tools/profiles.d.ts +18 -13
  435. package/dist/tools/profiles.d.ts.map +1 -1
  436. package/dist/tools/profiles.js +39 -33
  437. package/dist/tools/profiles.js.map +1 -1
  438. package/dist/tools/query-paginate.d.ts +9 -2
  439. package/dist/tools/query-paginate.d.ts.map +1 -1
  440. package/dist/tools/query-paginate.js +21 -4
  441. package/dist/tools/query-paginate.js.map +1 -1
  442. package/dist/tools/read-tools.d.ts.map +1 -1
  443. package/dist/tools/read-tools.js +95 -2
  444. package/dist/tools/read-tools.js.map +1 -1
  445. package/dist/tools/snapshot-delta.d.ts +2 -0
  446. package/dist/tools/snapshot-delta.d.ts.map +1 -1
  447. package/dist/tools/snapshot-delta.js +0 -0
  448. package/dist/tools/snapshot-delta.js.map +1 -1
  449. package/dist/tools/tool-kit.d.ts +11 -2
  450. package/dist/tools/tool-kit.d.ts.map +1 -1
  451. package/dist/tools/tool-kit.js +24 -1
  452. package/dist/tools/tool-kit.js.map +1 -1
  453. package/dist/tools/tool-names.d.ts +19 -10
  454. package/dist/tools/tool-names.d.ts.map +1 -1
  455. package/dist/tools/tool-names.js +23 -13
  456. package/dist/tools/tool-names.js.map +1 -1
  457. package/dist/tools/tools-helpers.d.ts +12 -0
  458. package/dist/tools/tools-helpers.d.ts.map +1 -1
  459. package/dist/tools/tools-helpers.js +20 -0
  460. package/dist/tools/tools-helpers.js.map +1 -1
  461. package/dist/tools/tools.d.ts.map +1 -1
  462. package/dist/tools/tools.js +162 -12
  463. package/dist/tools/tools.js.map +1 -1
  464. package/dist/update/update-checker.d.ts +14 -1
  465. package/dist/update/update-checker.d.ts.map +1 -1
  466. package/dist/update/update-checker.js +9 -5
  467. package/dist/update/update-checker.js.map +1 -1
  468. package/dist/update/updater.d.ts +20 -2
  469. package/dist/update/updater.d.ts.map +1 -1
  470. package/dist/update/updater.js +48 -14
  471. package/dist/update/updater.js.map +1 -1
  472. package/dist/visual/visual-tools.d.ts.map +1 -1
  473. package/dist/visual/visual-tools.js +1 -6
  474. package/dist/visual/visual-tools.js.map +1 -1
  475. package/package.json +8 -3
  476. package/dist/update/update-tools.d.ts +0 -3
  477. package/dist/update/update-tools.d.ts.map +0 -1
  478. package/dist/update/update-tools.js +0 -94
  479. package/dist/update/update-tools.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tools-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAShE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
1
+ {"version":3,"file":"tools-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAShE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,OAAO,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS7D"}
@@ -19,4 +19,24 @@ export function asNumber(value) {
19
19
  export function asRecord(value) {
20
20
  return typeof value === 'object' && value !== null ? value : {};
21
21
  }
22
+ /**
23
+ * A `{ file, line }` source location off an untrusted result payload, or undefined.
24
+ *
25
+ * The browser sends this alongside an act's anchor so a failure can name the file to open. Validated
26
+ * rather than cast: it crosses the wire, and a half-formed location rendered as "undefined:NaN" is
27
+ * worse than no location at all — it looks like an answer.
28
+ */
29
+ export function sourceOf(value) {
30
+ if (value === null || typeof value !== 'object')
31
+ return undefined;
32
+ const record = value;
33
+ const file = record['file'];
34
+ const line = record['line'];
35
+ if (typeof file !== 'string' || file.length === 0 || typeof line !== 'number')
36
+ return undefined;
37
+ const out = { file, line };
38
+ if (typeof record['column'] === 'number')
39
+ out.column = record['column'];
40
+ return out;
41
+ }
22
42
  //# sourceMappingURL=tools-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools-helpers.js","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAO1D,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC"}
1
+ {"version":3,"file":"tools-helpers.js","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAO1D,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAc;IAEd,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChG,MAAM,GAAG,GAAoD,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5E,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,eAAe,CAAC;AAO7E,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKvD,eAAO,MAAM,KAAK,EAAE,OAAO,EAsR1B,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,eAAe,CAAC;AAQ7E,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA+cvD,eAAO,MAAM,KAAK,EAAE,OAAO,EAA8D,CAAC"}
@@ -19,15 +19,15 @@ import { VIEWPORT_TOOLS } from '../input/viewport-tools.js';
19
19
  import { SESSION_TOOLS } from '../session/session-tools.js';
20
20
  import { ANNOTATE_TOOLS } from '../flows/annotate-tools.js';
21
21
  import { LIVE_CONTROL_TOOLS } from '../session/live-control-tools.js';
22
- import { UPDATE_TOOLS } from '../update/update-tools.js';
23
22
  import { sessionIdShape, commandOrThrow } from './tool-kit.js';
23
+ import { applyMerges } from './merge-tools.js';
24
24
  import { ACT_TOOLS } from './act-tools.js';
25
25
  import { OBSERVE_TOOLS } from './observe-tools.js';
26
26
  import { READ_TOOLS } from './read-tools.js';
27
27
  import { LEASE_TOOLS } from './lease-tools.js';
28
28
  /** Per-server last-snapshot cache backing reticle_snapshot's diff:true delta mode (route-invalidated). */
29
29
  const SNAPSHOT_CACHE = new SnapshotCache();
30
- export const TOOLS = [
30
+ const RAW_TOOLS = [
31
31
  {
32
32
  name: ReticleTool.SESSIONS,
33
33
  description: 'List connected browser sessions (tab url/title, sessionId, last-seen, health: hidden/focused/throttled, and `realInputAvailable` — true when native CDP/launched real input is driving this tab), plus a `recommendation` pointing to `reticle drive` when a tab is hidden/throttled and may be un-scriptable from here.',
@@ -110,15 +110,39 @@ export const TOOLS = [
110
110
  .object({ bytes: z.number(), tokens: z.number() })
111
111
  .optional()
112
112
  .describe('Estimated size of this result — re-scope if large.'),
113
+ // buildSnapshot has always returned these; leaving them undeclared stripped them from
114
+ // structuredContent, so a schema-aware client saw a tree that ended abruptly with no way to
115
+ // tell a small page from a capped one. Every "that element isn't rendered" conclusion drawn
116
+ // from a capped tree inherits the omission.
117
+ nodes: z.number().optional().describe('How many nodes this tree actually contains.'),
118
+ truncated: z
119
+ .boolean()
120
+ .optional()
121
+ .describe('True when the page exceeded the snapshot cap. The tree is then a document-order PREFIX: an element being absent from it does NOT mean it is absent from the page.'),
122
+ note: z
123
+ .string()
124
+ .optional()
125
+ .describe('Present when a diff was computed over a capped tree — "unchanged" is then partial.'),
126
+ scopeMissing: z
127
+ .boolean()
128
+ .optional()
129
+ .describe('True when a scope was given but resolved to nothing — the tree is EMPTY on purpose, not because the page is empty. Do not read an absent element as absent from the page; re-check the scope.'),
113
130
  },
114
- handler: (deps, args) => {
115
- const sessionId = asString(args['sessionId']);
131
+ // async so a synchronous resolve() failure (no session connected) surfaces as a REJECTED promise —
132
+ // the handler contract every caller relies on — not a throw that escapes a direct invocation.
133
+ handler: async (deps, args) => {
134
+ // Resolve ONCE and key the diff cache on the RESOLVED session id. Keying on `sessionId ?? 'default'`
135
+ // meant two different auto-selected sessions (agent omits sessionId) shared the 'default' slot, so
136
+ // diff:true computed a delta against the WRONG session's prior snapshot — a cross-session false
137
+ // change. Pass the resolved id to the command too, so the cache key and the snapshotted session
138
+ // can't drift apart via a second auto-selection.
139
+ const resolved = deps.sessions.resolve(asString(args['sessionId']));
116
140
  const mode = asString(args['mode']) ?? SnapshotMode.FULL;
117
- return commandOrThrow(deps, sessionId, ReticleCommand.SNAPSHOT, {
141
+ return commandOrThrow(deps, resolved.id, ReticleCommand.SNAPSHOT, {
118
142
  scope: args['scope'],
119
143
  mode,
120
144
  }).then((raw) => withSizeCost(applySnapshotDelta(raw, {
121
- sessionId: sessionId ?? 'default',
145
+ sessionId: resolved.id,
122
146
  scope: asString(args['scope']) ?? '',
123
147
  mode,
124
148
  diff: args['diff'] === true,
@@ -127,7 +151,7 @@ export const TOOLS = [
127
151
  },
128
152
  {
129
153
  name: ReticleTool.QUERY,
130
- description: 'Find elements by Testing-Library semantics. Pass `by` (role|text|label|placeholder|testid|alt) and `value` (the query string). Returns matching refs + descriptors + visibility. Pass `limit` to cap descriptors (broad role queries can be large) or `count_only:true` for just the match count — both cut tokens. On zero matches, also returns hint:{ route, presentTestids[], knownEmptyState } so you can distinguish an empty state from a missing element WITHOUT taking a snapshot.',
154
+ description: 'Find elements by Testing-Library semantics, INCLUDING inside open shadow roots. Pass `by` (role|text|label|placeholder|testid|alt) and `value` (the query string). Returns matching refs + descriptors + visibility. Pass `attrs:["href"]` to project attributes (link/image URLs) onto each match. Pass `limit` to cap descriptors (broad role queries can be large) or `count_only:true` for just the match count — both cut tokens. On zero matches, also returns hint:{ route, presentRegions[], knownEmptyState } so you can distinguish an empty state from a missing element WITHOUT taking a snapshot.',
131
155
  inputSchema: {
132
156
  by: z.string().describe('Query strategy: role | text | label | placeholder | testid | alt'),
133
157
  value: z
@@ -141,6 +165,10 @@ export const TOOLS = [
141
165
  .string()
142
166
  .optional()
143
167
  .describe('CSS selector or element ref to restrict the search to a subtree.'),
168
+ attrs: z
169
+ .array(z.string())
170
+ .optional()
171
+ .describe("Attribute names to return per match, e.g. ['href'] to inventory links or ['src'] for images. Absent attributes are omitted; credential-bearing names are redacted."),
144
172
  limit: z
145
173
  .number()
146
174
  .optional()
@@ -160,9 +188,29 @@ export const TOOLS = [
160
188
  value: z.string().optional(),
161
189
  states: z.array(z.string()),
162
190
  visible: z.boolean(),
191
+ attrs: z
192
+ .record(z.string())
193
+ .optional()
194
+ .describe('Present only for attributes requested via `attrs` and found on the element.'),
195
+ source: z
196
+ .string()
197
+ .optional()
198
+ .describe('Where this element is written, as `file:line` — open this to change it. Present when the app is built with the Reticle plugin in dev; absent in production builds.'),
199
+ chart: z
200
+ .array(z.object({
201
+ kind: z.string(),
202
+ tag: z.string(),
203
+ attr: z.string(),
204
+ sample: z.string(),
205
+ }))
206
+ .optional()
207
+ .describe('Chart geometry faults, present ONLY when the element is a broken chart. kind is non-finite-coordinates | empty-geometry | degenerate-geometry. A healthy chart omits this. Declared here so structuredContent carries it on validating profiles rather than dropping it.'),
163
208
  }))
164
209
  .optional(),
165
- count: z.number().optional().describe('Match count — present when count_only is set.'),
210
+ count: z
211
+ .number()
212
+ .optional()
213
+ .describe('How many elements MATCHED — always exact, even when the returned list was capped. Never derive a count from elements.length.'),
166
214
  total: z
167
215
  .number()
168
216
  .optional()
@@ -171,7 +219,23 @@ export const TOOLS = [
171
219
  hint: z
172
220
  .object({
173
221
  route: z.string(),
174
- presentTestids: z.array(z.string()),
222
+ // The browser emits presentRegions and it was NOT declared here, so zod stripped it from
223
+ // structuredContent on every zero-match result — the successor field was invisible while its
224
+ // deprecated predecessor was the only thing an agent could see. An undeclared field is a
225
+ // silent data loss, which is exactly what this schema exists to prevent.
226
+ presentRegions: z
227
+ .array(z.object({
228
+ role: z.string(),
229
+ name: z.string().optional(),
230
+ childCount: z.number(),
231
+ // `sample` is the orientation payload an agent actually reads ("there is a list with
232
+ // 847 rows, first three are …"). It was omitted from the first version of this
233
+ // declaration, which repeated the original sin one level down.
234
+ sample: z.array(z.string()),
235
+ }))
236
+ .optional()
237
+ .describe('Structural clusters on the page — what IS here, to diagnose the miss.'),
238
+ presentTestids: z.array(z.string()).optional(),
175
239
  knownEmptyState: z.boolean(),
176
240
  })
177
241
  .optional()
@@ -180,12 +244,20 @@ export const TOOLS = [
180
244
  .object({ bytes: z.number(), tokens: z.number() })
181
245
  .optional()
182
246
  .describe('Estimated size of this result — narrow with `name`/`scope`/`limit` if large.'),
247
+ scopeMissing: z
248
+ .boolean()
249
+ .optional()
250
+ .describe('True when a `scope` was given but resolved to nothing — zero matches then means the scope is gone, NOT that the element is absent. The search did not widen to the whole page. Re-check the scope before concluding anything.'),
183
251
  },
184
252
  handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.QUERY, {
185
253
  by: args['by'],
186
254
  value: args['value'],
187
255
  name: args['name'],
188
256
  scope: args['scope'],
257
+ // The handler forwards an explicit allowlist, so a new input is silently dropped unless it is
258
+ // added here — the browser saw no `attrs` and returned undefined while the unit tests, which
259
+ // call matchQuery directly, passed. Schema plus implementation is not the whole wire.
260
+ attrs: args['attrs'],
189
261
  }).then((result) => withSizeCost(paginateQueryResult(result, asNumber(args['limit']), args['count_only'] === true))),
190
262
  },
191
263
  {
@@ -225,8 +297,27 @@ export const TOOLS = [
225
297
  // large inspect payload's fields to strings, which a strict shape would reject; the full object
226
298
  // is always present in the text content the agent reads.
227
299
  theme: z.unknown().optional(),
300
+ /**
301
+ * Where this element is written, as `file:line`. Present when the app is built with the
302
+ * Reticle build plugin in dev; absent in production builds.
303
+ */
304
+ source: z.string().optional(),
305
+ /**
306
+ * Component identity from the framework adapter (@reticlehq/react).
307
+ *
308
+ * Declared to match what the handler actually returns. It previously declared
309
+ * `{ name, sourceFile }` while the runtime returned `{ componentStack, source }` — the SDK
310
+ * passes structured content through, so the real shape won and the declaration was simply
311
+ * wrong. An agent reads this schema to decide what to ask for, which makes a wrong schema worse
312
+ * than a missing one.
313
+ */
228
314
  component: z
229
- .object({ name: z.string().optional(), sourceFile: z.string().optional() })
315
+ .object({
316
+ componentStack: z.array(z.string()).optional(),
317
+ source: z
318
+ .object({ file: z.string(), line: z.number(), column: z.number().optional() })
319
+ .optional(),
320
+ })
230
321
  .optional(),
231
322
  },
232
323
  handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.INSPECT, {
@@ -258,11 +349,70 @@ export const TOOLS = [
258
349
  ...LIVE_CONTROL_TOOLS,
259
350
  // reticle_navigate / reticle_refresh — browser navigation tools. See browser-tools.ts.
260
351
  ...BROWSER_TOOLS,
261
- // reticle_version_info / reticle_apply_update / reticle_rollback — update lifecycle tools.
262
- ...UPDATE_TOOLS,
263
352
  ...ACT_TOOLS,
264
353
  ...OBSERVE_TOOLS,
265
354
  ...READ_TOOLS,
266
355
  ...LEASE_TOOLS,
267
356
  ];
357
+ /**
358
+ * surface consolidation. Tool defs are re-sent EVERY turn, so the advertised count is a per-turn
359
+ * tax multiplied by loop length. Sibling families collapse into one action-dispatched tool; the member
360
+ * handlers stay defined above and are simply no longer advertised separately.
361
+ *
362
+ * Guardrail (from the plan): the 12-tool core hot-set keeps its EXACT names and shapes and is never
363
+ * merged — sessions/navigate/snapshot/query/act/act_and_wait/observe/network/console/wait_for/assert/state.
364
+ */
365
+ const MERGE_PLANS = [
366
+ {
367
+ name: ReticleTool.BASELINE,
368
+ description: 'Semantic-state baselines: { action: "save" } snapshots the current state under a name, "list" returns saved names, "diff" compares the live page against a saved baseline (REMOVED/ADDED elements + console-error count).',
369
+ members: {
370
+ save: ReticleTool.BASELINE_SAVE,
371
+ list: ReticleTool.BASELINE_LIST,
372
+ diff: ReticleTool.DIFF,
373
+ },
374
+ },
375
+ {
376
+ name: ReticleTool.RECORD,
377
+ description: 'Timeline recording: { action: "start" } begins recording under a name, "stop" ends it and returns the reaction report plus a compiled replayable program.',
378
+ members: { start: ReticleTool.RECORD_START, stop: ReticleTool.RECORD_STOP },
379
+ },
380
+ {
381
+ name: ReticleTool.FLOW,
382
+ description: 'Saved-flow management: { action: "list" } names every saved flow, "load" reads+validates one by flowName, "delete" removes one. The hot verbs (flow_save, flow_replay, flow_verify, flow_heal) stay separate.',
383
+ members: {
384
+ list: ReticleTool.FLOW_LIST,
385
+ load: ReticleTool.FLOW_LOAD,
386
+ delete: ReticleTool.FLOW_DELETE,
387
+ },
388
+ },
389
+ {
390
+ name: ReticleTool.SESSION,
391
+ description: 'Session lifecycle and the human channel, by action: "tune" adjusts the presenter session (e.g. idle-end window); "yield" hands control back to the human between turns (mode: waiting|ask) and is MANDATORY before you stop driving; "end" terminates the session for good; "resume" clears a human pause; "messages" drains the human→agent inbox; "review" lists/resolves the mistakes a human pinned to elements; "narrate" states your intent on the presenter HUD.',
392
+ members: {
393
+ tune: ReticleTool.SESSION_TUNE,
394
+ yield: ReticleTool.YIELD,
395
+ end: ReticleTool.END_SESSION,
396
+ resume: ReticleTool.RESUME,
397
+ messages: ReticleTool.MESSAGES,
398
+ review: ReticleTool.REVIEW,
399
+ narrate: ReticleTool.NARRATE,
400
+ },
401
+ },
402
+ {
403
+ name: ReticleTool.LEASE,
404
+ description: 'Isolated headless contexts from the shared pool: { action: "acquire" } leases one and navigates it to the app URL, "release" closes it and frees the slot.',
405
+ members: { acquire: ReticleTool.LEASE_ACQUIRE, release: ReticleTool.LEASE_RELEASE },
406
+ },
407
+ ];
408
+ /**
409
+ * Retired from the MCP surface entirely (capability preserved elsewhere, per the plan):
410
+ * - run_record: auto-recording on flow_replay already persists run outcomes.
411
+ */
412
+ const RETIRED_FROM_SURFACE = [
413
+ ReticleTool.RUN_RECORD, // auto-recording on flow_replay already persists run outcomes
414
+ ReticleTool.REFRESH, // absorbed into reticle_navigate { reload: true }
415
+ ReticleTool.WAIT_READY, // server-internal: the first live call already blocks for the session
416
+ ];
417
+ export const TOOLS = applyMerges(RAW_TOOLS, MERGE_PLANS, RETIRED_FROM_SURFACE);
268
418
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
@@ -8,13 +8,26 @@ interface UpdateManifest {
8
8
  /** The version that was running before the last update — used for rollback. */
9
9
  previousVersion?: string;
10
10
  }
11
+ interface NpmPackageInfo {
12
+ version: string;
13
+ reticle?: {
14
+ changelog?: string;
15
+ breakingChanges?: string[];
16
+ };
17
+ }
11
18
  export declare function loadManifest(): UpdateManifest | null;
12
19
  export declare function saveManifest(manifest: UpdateManifest): void;
20
+ /** Injectable IO for checkForUpdate so the network + manifest cache are testable (default = real). */
21
+ export interface UpdateCheckPorts {
22
+ fetchInfo: () => Promise<NpmPackageInfo>;
23
+ loadManifest: () => UpdateManifest | null;
24
+ saveManifest: (manifest: UpdateManifest) => void;
25
+ }
13
26
  /**
14
27
  * Returns the current update manifest, refreshing from the npm registry when the cache
15
28
  * is older than UpdateCheckIntervalMs. Never throws — falls back to the cached manifest
16
29
  * (or a safe "no update" default) when the registry is unreachable.
17
30
  */
18
- export declare function checkForUpdate(currentVersion: string, now: () => number): Promise<UpdateManifest>;
31
+ export declare function checkForUpdate(currentVersion: string, now: () => number, ports?: UpdateCheckPorts): Promise<UpdateManifest>;
19
32
  export {};
20
33
  //# sourceMappingURL=update-checker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/update/update-checker.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAUD,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAQpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAG3D;AAgCD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
1
+ {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/update/update-checker.ts"],"names":[],"mappings":"AAcA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;CACH;AAED,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAQpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAG3D;AAgCD,sGAAsG;AACtG,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAClD;AAID;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,MAAM,EACjB,KAAK,GAAE,gBAA+B,GACrC,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
@@ -3,10 +3,13 @@ import * as https from 'node:https';
3
3
  import { join } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import { UpdateCheckIntervalMs } from '@reticlehq/core';
6
+ import { RETICLE_NPM_PACKAGE } from '../server-version.js';
6
7
  import { log } from '../log.js';
7
8
  const RETICLE_HOME = join(homedir(), '.reticle');
8
9
  const MANIFEST_PATH = join(RETICLE_HOME, 'update-manifest.json');
9
- const NPM_REGISTRY = 'https://registry.npmjs.org/@reticlehq/core/latest';
10
+ // Poll the package that carries the bin (@reticlehq/server), so the version we compare against and
11
+ // the version we install are the same package — not @reticlehq/core, which only tracks it by luck.
12
+ const NPM_REGISTRY = `https://registry.npmjs.org/${RETICLE_NPM_PACKAGE}/latest`;
10
13
  export function loadManifest() {
11
14
  if (!fs.existsSync(MANIFEST_PATH))
12
15
  return null;
@@ -51,18 +54,19 @@ function fetchNpmInfo() {
51
54
  req.on('error', reject);
52
55
  });
53
56
  }
57
+ const defaultPorts = { fetchInfo: fetchNpmInfo, loadManifest, saveManifest };
54
58
  /**
55
59
  * Returns the current update manifest, refreshing from the npm registry when the cache
56
60
  * is older than UpdateCheckIntervalMs. Never throws — falls back to the cached manifest
57
61
  * (or a safe "no update" default) when the registry is unreachable.
58
62
  */
59
- export async function checkForUpdate(currentVersion, now) {
60
- const cached = loadManifest();
63
+ export async function checkForUpdate(currentVersion, now, ports = defaultPorts) {
64
+ const cached = ports.loadManifest();
61
65
  if (cached !== null && cached.currentVersion === currentVersion && isCacheFresh(cached, now)) {
62
66
  return cached;
63
67
  }
64
68
  try {
65
- const info = await fetchNpmInfo();
69
+ const info = await ports.fetchInfo();
66
70
  const updateAvailable = info.version !== currentVersion;
67
71
  const manifest = {
68
72
  currentVersion,
@@ -75,7 +79,7 @@ export async function checkForUpdate(currentVersion, now) {
75
79
  : {}),
76
80
  ...(cached?.previousVersion !== undefined ? { previousVersion: cached.previousVersion } : {}),
77
81
  };
78
- saveManifest(manifest);
82
+ ports.saveManifest(manifest);
79
83
  return manifest;
80
84
  }
81
85
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/update/update-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/update/update-checker.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /** How this reticle process was launched — determines which npm strategy to use for updates. */
2
2
  declare const ExecutionKind: {
3
- /** Launched via `npx @reticlehq/core` — npm re-resolves the package on restart. */
3
+ /** Launched via `npx @reticlehq/server` — npm re-resolves the package on restart. */
4
4
  readonly NPX: "npx";
5
5
  /** Installed globally via `npm install -g`. */
6
6
  readonly GLOBAL: "global";
@@ -16,10 +16,28 @@ type ExecutionKind = (typeof ExecutionKind)[keyof typeof ExecutionKind];
16
16
  * `node_modules` directory. Everything else is treated as a global install.
17
17
  */
18
18
  export declare function detectExecutionKind(): ExecutionKind;
19
+ /**
20
+ * Classify a launch from the entry script path. Pure so it's testable. Global installs ALSO live under
21
+ * a `node_modules`, but under the npm global prefix — a `lib/node_modules` (unix: /usr/local, Homebrew,
22
+ * nvm) or AppData\npm (Windows). Match those FIRST, otherwise a global install is misread as local and
23
+ * `apply_update` npm-installs into the user's own project (polluting their package.json).
24
+ */
25
+ export declare function classifyExecutionKind(script: string): ExecutionKind;
26
+ interface NpmInstall {
27
+ args: string[];
28
+ cwd?: string;
29
+ }
30
+ /**
31
+ * The npm argv (and optional cwd) that installs `version` for the given launch kind, or null for
32
+ * npx (which re-resolves the package on the next restart — no install needed). Installs
33
+ * `@reticlehq/server` — the package that actually carries the `reticle` bin — never
34
+ * `@reticlehq/core`, which is schema-only and has no executable.
35
+ */
36
+ export declare function installArgs(version: string, kind: ExecutionKind, localRoot: string | null): NpmInstall | null;
19
37
  /**
20
38
  * Install targetVersion using the appropriate strategy for the detected execution kind,
21
39
  * then exit so Claude Code restarts with the new binary. Saves the current version
22
- * first so rollback() can restore it.
40
+ * first so rollback can restore it.
23
41
  */
24
42
  export declare function applyUpdate(targetVersion: string): Promise<void>;
25
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/update/updater.ts"],"names":[],"mappings":"AAUA,gGAAgG;AAChG,QAAA,MAAM,aAAa;IACjB,mFAAmF;;IAEnF,+CAA+C;;IAE/C,+CAA+C;;CAEvC,CAAC;AACX,KAAK,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAOnD;AAoED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWtE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAW9C"}
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/update/updater.ts"],"names":[],"mappings":"AAWA,gGAAgG;AAChG,QAAA,MAAM,aAAa;IACjB,qFAAqF;;IAErF,+CAA+C;;IAE/C,+CAA+C;;CAEvC,CAAC;AACX,KAAK,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAenE;AAoCD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,UAAU,GAAG,IAAI,CAOnB;AA8BD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWtE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAc9C"}
@@ -3,12 +3,13 @@ import { existsSync } from 'node:fs';
3
3
  import { platform } from 'node:os';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { loadManifest, saveManifest } from './update-checker.js';
6
+ import { RETICLE_NPM_PACKAGE } from '../server-version.js';
6
7
  import { log } from '../log.js';
7
8
  const NPM_BIN = platform() === 'win32' ? 'npm.cmd' : 'npm';
8
9
  const NPM_TIMEOUT_MS = 120_000;
9
10
  /** How this reticle process was launched — determines which npm strategy to use for updates. */
10
11
  const ExecutionKind = {
11
- /** Launched via `npx @reticlehq/core` — npm re-resolves the package on restart. */
12
+ /** Launched via `npx @reticlehq/server` — npm re-resolves the package on restart. */
12
13
  NPX: 'npx',
13
14
  /** Installed globally via `npm install -g`. */
14
15
  GLOBAL: 'global',
@@ -23,9 +24,27 @@ const ExecutionKind = {
23
24
  * `node_modules` directory. Everything else is treated as a global install.
24
25
  */
25
26
  export function detectExecutionKind() {
26
- const script = process.argv[1] ?? '';
27
+ return classifyExecutionKind(process.argv[1] ?? '');
28
+ }
29
+ /**
30
+ * Classify a launch from the entry script path. Pure so it's testable. Global installs ALSO live under
31
+ * a `node_modules`, but under the npm global prefix — a `lib/node_modules` (unix: /usr/local, Homebrew,
32
+ * nvm) or AppData\npm (Windows). Match those FIRST, otherwise a global install is misread as local and
33
+ * `apply_update` npm-installs into the user's own project (polluting their package.json).
34
+ */
35
+ export function classifyExecutionKind(script) {
27
36
  if (script.includes('/_npx/') || script.includes('\\_npx\\'))
28
37
  return ExecutionKind.NPX;
38
+ const globalSignals = [
39
+ '/lib/node_modules/',
40
+ '\\npm\\node_modules\\',
41
+ '/.nvm/',
42
+ '/homebrew/',
43
+ '/usr/local/',
44
+ '/usr/lib/',
45
+ ];
46
+ if (globalSignals.some((s) => script.includes(s)))
47
+ return ExecutionKind.GLOBAL;
29
48
  if (script.includes('/node_modules/') || script.includes('\\node_modules\\')) {
30
49
  return ExecutionKind.LOCAL;
31
50
  }
@@ -55,9 +74,25 @@ function runNpm(args, opts = {}) {
55
74
  });
56
75
  });
57
76
  }
77
+ /**
78
+ * The npm argv (and optional cwd) that installs `version` for the given launch kind, or null for
79
+ * npx (which re-resolves the package on the next restart — no install needed). Installs
80
+ * `@reticlehq/server` — the package that actually carries the `reticle` bin — never
81
+ * `@reticlehq/core`, which is schema-only and has no executable.
82
+ */
83
+ export function installArgs(version, kind, localRoot) {
84
+ if (kind === ExecutionKind.NPX)
85
+ return null;
86
+ const pkg = `${RETICLE_NPM_PACKAGE}@${version}`;
87
+ if (kind === ExecutionKind.LOCAL && localRoot !== null) {
88
+ return { args: ['install', pkg], cwd: localRoot };
89
+ }
90
+ return { args: ['install', '-g', pkg] };
91
+ }
58
92
  async function installVersion(version, kind) {
59
- const pkg = `@reticlehq/core@${version}`;
60
- if (kind === ExecutionKind.NPX) {
93
+ const localRoot = kind === ExecutionKind.LOCAL ? findLocalProjectRoot() : null;
94
+ const plan = installArgs(version, kind, localRoot);
95
+ if (plan === null) {
61
96
  // npx re-resolves the package from npm on the next Claude Code restart — no npm
62
97
  // install needed. The restart itself is what triggers the update.
63
98
  log('reticle_update_npx_strategy', {
@@ -65,16 +100,11 @@ async function installVersion(version, kind) {
65
100
  });
66
101
  return;
67
102
  }
68
- if (kind === ExecutionKind.LOCAL) {
69
- const root = findLocalProjectRoot();
70
- if (root !== null) {
71
- await runNpm(['install', pkg], { cwd: root });
72
- return;
73
- }
74
- // Could not find a project root — fall through to global install as a safe default
103
+ if (kind === ExecutionKind.LOCAL && localRoot === null) {
104
+ // Could not find a project root — fell back to a global install as a safe default.
75
105
  log('reticle_update_local_no_root', { fallback: 'global' });
76
106
  }
77
- await runNpm(['install', '-g', pkg]);
107
+ await runNpm(plan.args, plan.cwd !== undefined ? { cwd: plan.cwd } : {});
78
108
  }
79
109
  async function installVersionRollback(version, kind) {
80
110
  if (kind === ExecutionKind.NPX) {
@@ -88,7 +118,7 @@ async function installVersionRollback(version, kind) {
88
118
  /**
89
119
  * Install targetVersion using the appropriate strategy for the detected execution kind,
90
120
  * then exit so Claude Code restarts with the new binary. Saves the current version
91
- * first so rollback() can restore it.
121
+ * first so rollback can restore it.
92
122
  */
93
123
  export async function applyUpdate(targetVersion) {
94
124
  const manifest = loadManifest();
@@ -115,6 +145,10 @@ export async function rollback() {
115
145
  log('reticle_rollback_applying', { version: prev, executionKind: kind });
116
146
  await installVersionRollback(prev, kind);
117
147
  log('reticle_rollback_applied', { version: prev, executionKind: kind });
118
- process.exit(0);
148
+ // For npx, exiting would let the next restart re-resolve @latest — rolling FORWARD, the opposite
149
+ // of rollback. installVersionRollback already told the user to pin the version in.mcp.json, so
150
+ // stay running rather than trigger that. Other kinds installed the old version and must restart.
151
+ if (kind !== ExecutionKind.NPX)
152
+ process.exit(0);
119
153
  }
120
154
  //# sourceMappingURL=updater.js.map