@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":"license.d.ts","sourceRoot":"","sources":["../../src/license/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAuD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0CAA0C;AAC1C,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,gHAAgH;AAChH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;EAKxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAC/D;IAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAKnE,wHAAwH;AACxH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,GAAG,MAAM,CAIrF;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,GACV,YAAY,CAqCd;AAED,wFAAwF;AACxF,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ5C;AAED,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAaD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAaxE;AAED,2GAA2G;AAC3G,eAAO,MAAM,eAAe,wBAAwB,CAAC;AACrD,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,GAAE,MAAoC,GAC1C,MAAM,GAAG,SAAS,CAIpB;AAED,6GAA6G;AAC7G,UAAU,aAAa;IACrB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,MAAoC,GAC1C,aAAa,CAqCf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,MAAoC,GAC1C,IAAI,CASN"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/license/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAuD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0CAA0C;AAC1C,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,gHAAgH;AAChH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;EAKxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAC/D;IAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAKnE,wHAAwH;AACxH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,GAAG,MAAM,CAIrF;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,GACV,YAAY,CAqCd;AAED,wFAAwF;AACxF,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ5C;AAED,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAaD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAaxE;AAED,2GAA2G;AAC3G,eAAO,MAAM,eAAe,wBAAwB,CAAC;AACrD,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,GAAE,MAAoC,GAC1C,MAAM,GAAG,SAAS,CAIpB;AAED,6GAA6G;AAC7G,UAAU,aAAa;IACrB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,MAAoC,GAC1C,aAAa,CA6Cf;AAQD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,MAAoC,GAC1C,IAAI,CAeN"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Enterprise license-key verification + the assertEnterprise gate. ENTERPRISE CODE (Reticle Enterprise
3
- * License — see ./LICENSE), not the FSL that covers the rest of the server.
3
+ * License — see./LICENSE), not the FSL that covers the rest of the server.
4
4
  *
5
5
  * Offline + no phone-home (preserves the no-telemetry brand): a key is a signed payload Reticle issues
6
6
  * with its private key; this verifies it against the issuer's PUBLIC key with Ed25519. Dev/eval is a
@@ -76,7 +76,7 @@ export class EnterpriseLicenseError extends Error {
76
76
  feature;
77
77
  reason;
78
78
  constructor(feature, reason) {
79
- super(`Reticle Enterprise feature "${feature}" requires a valid license (${reason}). Contact hey@reticle.ai.`);
79
+ super(`Reticle Enterprise feature "${feature}" requires a valid license (${reason}). Contact hey@reticle.sh.`);
80
80
  this.name = 'EnterpriseLicenseError';
81
81
  this.feature = feature;
82
82
  this.reason = reason;
@@ -84,7 +84,7 @@ export class EnterpriseLicenseError extends Error {
84
84
  }
85
85
  /** The issuer public key from the environment (set at release / by the operator); undefined if unset. */
86
86
  function issuerPublicKey() {
87
- const pem = process.env['RETICLE_LICENSE_PUBLIC_KEY'];
87
+ const pem = process.env[LICENSE_PUBLIC_KEY_ENV];
88
88
  if (pem === undefined || pem.length === 0)
89
89
  return undefined;
90
90
  try {
@@ -152,10 +152,17 @@ function loadPublicKey(pem) {
152
152
  export function describeLicense(now, env = process.env, baked = BAKED_ISSUER_PUBLIC_KEY_PEM) {
153
153
  const pem = resolveIssuerPublicKeyPem(env, baked);
154
154
  if (pem === undefined || pem.length === 0) {
155
- return {
156
- status: 'eval',
157
- detail: 'evaluation mode — enterprise features run free (no issuer key configured)',
158
- };
155
+ // In a production runtime this is NOT a benign eval session — it is a mis-built release whose gate
156
+ // is off, and assertEnterpriseFromEnv now denies rather than unlocking. Say so loudly here too.
157
+ return isProductionEnv(env)
158
+ ? {
159
+ status: 'invalid',
160
+ detail: 'MISCONFIGURED — running in production with no issuer key baked; enterprise features are DENIED (rebuild with BAKED_ISSUER_PUBLIC_KEY_PEM stamped in)',
161
+ }
162
+ : {
163
+ status: 'eval',
164
+ detail: 'evaluation mode — enterprise features run free (no issuer key configured)',
165
+ };
159
166
  }
160
167
  const publicKey = loadPublicKey(pem);
161
168
  if (publicKey === undefined)
@@ -186,18 +193,34 @@ export function describeLicense(now, env = process.env, baked = BAKED_ISSUER_PUB
186
193
  }
187
194
  return { status: 'invalid', detail: `license key rejected (${check.status})` };
188
195
  }
196
+ /** True in a production runtime (NODE_ENV=production) — where a missing issuer key is a mis-built
197
+ * release, not an eval session, so the gate must fail CLOSED rather than run features free. */
198
+ function isProductionEnv(env) {
199
+ return env['NODE_ENV'] === 'production';
200
+ }
189
201
  /**
190
- * Gate an enterprise feature using env-resolved activation. Enforcement is ON only when the issuer
191
- * public key is configured (i.e. a real release); without it (dev/repo) features run free in eval mode.
202
+ * Gate an enterprise feature using env-resolved activation. Enforcement is ON when the issuer public key
203
+ * is configured (a real release). Without it, behaviour splits on runtime:
204
+ * - dev/eval (NODE_ENV ≠ production): features run FREE — never blocks a contributor or CI.
205
+ * - production (NODE_ENV = production): FAIL CLOSED — a release that reaches production with no
206
+ * resolvable issuer key was mis-built (the baked key wasn't stamped in, BAKED_ISSUER_PUBLIC_KEY_PEM
207
+ * is still ''), and silently unlocking every ee feature with no key and no warning is the worst
208
+ * outcome. Deny instead, with a distinct reason so the misconfiguration is obvious.
192
209
  */
193
210
  export function assertEnterpriseFromEnv(feature, now, env = process.env, baked = BAKED_ISSUER_PUBLIC_KEY_PEM) {
194
211
  const publicKey = loadPublicKey(resolveIssuerPublicKeyPem(env, baked));
212
+ if (publicKey === undefined) {
213
+ if (isProductionEnv(env)) {
214
+ throw new EnterpriseLicenseError(feature, 'enterprise-gate-unconfigured');
215
+ }
216
+ return; // dev/eval — free
217
+ }
195
218
  const key = env[LICENSE_KEY_ENV];
196
219
  assertEnterprise(feature, {
197
- requireLicense: publicKey !== undefined,
220
+ requireLicense: true,
198
221
  now: () => now,
199
222
  ...(key !== undefined ? { key } : {}),
200
- ...(publicKey !== undefined ? { publicKey } : {}),
223
+ publicKey,
201
224
  });
202
225
  }
203
226
  //# sourceMappingURL=license.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/license/license.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/license/license.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,22 @@
1
+ /** One parsed Server-Sent-Events frame: the event name (defaulted to "message") and its data. */
2
+ export interface SseFrame {
3
+ event: string;
4
+ data: string;
5
+ }
6
+ /**
7
+ * Incremental SSE frame parser for the MCP front door.
8
+ *
9
+ * A single SSE field can split across TCP reads (`da` in one chunk, `ta: {...}` in the next), and a
10
+ * server may send CRLF or bare CR line endings — so the framing is stateful and edge-case-prone, yet it
11
+ * carried every MCP message the agent sends and was only ever exercised end-to-end. Pulled out of the
12
+ * socket handler as a pure, chunk-fed parser so those boundaries are unit-testable: feed raw chunks,
13
+ * get back each complete frame (a blank line terminates a frame; `event:` names it, `data:` lines
14
+ * accumulate newline-joined; `id:`/`retry:`/comments are ignored — not needed for the bridge).
15
+ */
16
+ export declare class SseFrameParser {
17
+ #private;
18
+ push(chunk: string): SseFrame[];
19
+ }
1
20
  /**
2
21
  * Returns true if something is already listening on the reticle port.
3
22
  * Uses a plain TCP probe so we don't create a side-effectful SSE session
@@ -6,6 +25,7 @@
6
25
  export declare function probeDaemon(port: number): Promise<boolean>;
7
26
  /** Poll until the daemon's HTTP port accepts connections or the deadline is reached. */
8
27
  export declare function waitForDaemon(port: number): Promise<void>;
28
+ export declare function buildSessionUrl(rawData: string, port: number): string;
9
29
  /**
10
30
  * Bridge stdio ↔ SSE: connects to the running daemon's MCP endpoint and forwards
11
31
  * Claude Code's stdin/stdout JSON-RPC through it. Never resolves — runs until
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-proxy.d.ts","sourceRoot":"","sources":["../src/mcp-proxy.ts"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAe1D;AAED,wFAAwF;AACxF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D;AAiCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAuF1D"}
1
+ {"version":3,"file":"mcp-proxy.d.ts","sourceRoot":"","sources":["../src/mcp-proxy.ts"],"names":[],"mappings":"AAsBA,iGAAiG;AACjG,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;;IAKzB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;CAwBhC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAe1D;AAED,wFAAwF;AACxF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D;AAmCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CA+D1D"}
package/dist/mcp-proxy.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as http from 'node:http';
2
2
  import * as net from 'node:net';
3
- import { LOOPBACK_HOST } from '@reticlehq/core';
4
- import { MCP_SSE_PATH } from './http-server.js';
3
+ import { LOOPBACK_HOST, MCP_SSE_PATH } from '@reticlehq/core';
5
4
  import { log } from './log.js';
6
5
  const DEFAULT_DAEMON_READY_TIMEOUT_MS = 10_000;
7
6
  /**
@@ -17,6 +16,47 @@ const DAEMON_POLL_INTERVAL_MS = 100;
17
16
  function delay(ms) {
18
17
  return new Promise((resolve) => setTimeout(resolve, ms));
19
18
  }
19
+ /**
20
+ * Incremental SSE frame parser for the MCP front door.
21
+ *
22
+ * A single SSE field can split across TCP reads (`da` in one chunk, `ta: {...}` in the next), and a
23
+ * server may send CRLF or bare CR line endings — so the framing is stateful and edge-case-prone, yet it
24
+ * carried every MCP message the agent sends and was only ever exercised end-to-end. Pulled out of the
25
+ * socket handler as a pure, chunk-fed parser so those boundaries are unit-testable: feed raw chunks,
26
+ * get back each complete frame (a blank line terminates a frame; `event:` names it, `data:` lines
27
+ * accumulate newline-joined; `id:`/`retry:`/comments are ignored — not needed for the bridge).
28
+ */
29
+ export class SseFrameParser {
30
+ #buffer = '';
31
+ #event = '';
32
+ #data = '';
33
+ push(chunk) {
34
+ this.#buffer += chunk;
35
+ // Normalise CRLF/CR so the splitter only handles \n, then hold the trailing partial line for the
36
+ // next chunk (it may complete later).
37
+ const normalised = this.#buffer.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
38
+ const lines = normalised.split('\n');
39
+ this.#buffer = lines.pop() ?? '';
40
+ const frames = [];
41
+ for (const line of lines) {
42
+ if (line === '') {
43
+ if (this.#data !== '') {
44
+ frames.push({ event: this.#event !== '' ? this.#event : 'message', data: this.#data });
45
+ }
46
+ this.#event = '';
47
+ this.#data = '';
48
+ }
49
+ else if (line.startsWith('event:')) {
50
+ this.#event = line.slice(6).trim();
51
+ }
52
+ else if (line.startsWith('data:')) {
53
+ const val = line.slice(5).trim();
54
+ this.#data = this.#data !== '' ? `${this.#data}\n${val}` : val;
55
+ }
56
+ }
57
+ return frames;
58
+ }
59
+ }
20
60
  /**
21
61
  * Returns true if something is already listening on the reticle port.
22
62
  * Uses a plain TCP probe so we don't create a side-effectful SSE session
@@ -64,6 +104,12 @@ function postToSession(url, body) {
64
104
  },
65
105
  };
66
106
  const req = http.request(options, (res) => {
107
+ const status = res.statusCode ?? 0;
108
+ if (status < 200 || status >= 300) {
109
+ // A non-2xx from the daemon MCP endpoint used to be swallowed, hanging the JSON-RPC call
110
+ // client-side with no diagnostic. Surface it (the forward is still fire-and-forget).
111
+ log('reticle_mcp_proxy_post_non2xx', { status, path: options.path });
112
+ }
67
113
  res.resume(); // drain so the socket is reused
68
114
  resolve();
69
115
  });
@@ -75,7 +121,7 @@ function postToSession(url, body) {
75
121
  req.end();
76
122
  });
77
123
  }
78
- function buildSessionUrl(rawData, port) {
124
+ export function buildSessionUrl(rawData, port) {
79
125
  return rawData.startsWith('/') ? `http://${LOOPBACK_HOST}:${port}${rawData}` : rawData;
80
126
  }
81
127
  /**
@@ -91,33 +137,10 @@ export function startMcpProxy(port) {
91
137
  // ── SSE reader ──────────────────────────────────────────────────────────
92
138
  const req = http.get({ host: LOOPBACK_HOST, port, path: MCP_SSE_PATH }, (res) => {
93
139
  res.setEncoding('utf8');
94
- let sseBuffer = '';
95
- let currentEvent = '';
96
- let currentData = '';
140
+ const sse = new SseFrameParser();
97
141
  res.on('data', (chunk) => {
98
- sseBuffer += chunk;
99
- // Normalise CRLF/CR so the line splitter only needs to handle \n
100
- const normalised = sseBuffer.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
101
- const lines = normalised.split('\n');
102
- sseBuffer = lines.pop() ?? '';
103
- for (const line of lines) {
104
- if (line === '') {
105
- // Blank line → dispatch accumulated event
106
- if (currentData !== '') {
107
- onSseEvent(currentEvent !== '' ? currentEvent : 'message', currentData, port);
108
- }
109
- currentEvent = '';
110
- currentData = '';
111
- }
112
- else if (line.startsWith('event:')) {
113
- currentEvent = line.slice(6).trim();
114
- }
115
- else if (line.startsWith('data:')) {
116
- const val = line.slice(5).trim();
117
- currentData = currentData !== '' ? `${currentData}\n${val}` : val;
118
- }
119
- // id:/retry:/comment lines are ignored — not needed for the MCP bridge
120
- }
142
+ for (const frame of sse.push(chunk))
143
+ onSseEvent(frame.event, frame.data, port);
121
144
  });
122
145
  res.on('end', () => {
123
146
  log('reticle_mcp_proxy_sse_ended', { port });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-proxy.js","sourceRoot":"","sources":["../src/mcp-proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-proxy.js","sourceRoot":"","sources":["../src/mcp-proxy.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts CHANGED
@@ -1,6 +1,15 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
2
3
  import { type ToolDeps } from './tools/tools.js';
4
+ import type { ToolDef } from './tools/tools.js';
3
5
  import { type ToolProfile } from './tools/profiles.js';
6
+ /**
7
+ * Merge the runtime-spliced envelope (health/lease/age/control) into a session-bound tool's declared
8
+ * outputSchema so structuredContent validation keeps those fields instead of dropping them. The tool's
9
+ * own keys win over the permissive envelope defaults (e.g. ACT keeps its typed `session` shape).
10
+ * Non-session-bound tools (and tools with no outputSchema) are returned unchanged.
11
+ */
12
+ export declare function withSessionEnvelope(name: string, outputSchema: z.ZodRawShape | undefined): z.ZodRawShape | undefined;
4
13
  /**
5
14
  * Serialize a tool result to the MCP `text` content block. The agent consumes this text — the
6
15
  * typed contract travels separately as `structuredContent`, unchanged by encoding — so the text
@@ -10,5 +19,18 @@ import { type ToolProfile } from './tools/profiles.js';
10
19
  * form with `RETICLE_ENCODING=pretty`; `RETICLE_ENCODING=toon` is the even-denser tabular encoding.
11
20
  */
12
21
  export declare function encodeResult(result: unknown, encoding: string): string;
22
+ /**
23
+ * The tools a profile advertises directly.
24
+ *
25
+ * Exported so it can be TESTED. A previous guard re-implemented this decision in the test and was
26
+ * therefore insensitive to it — every profile appeared to reach every tool, so reverting the fix here
27
+ * left the suite green. Exercise the real function or the guard is theatre.
28
+ *
29
+ * Every TRIMMED profile keeps the meta-tools, so a tool that is not advertised is still reachable via
30
+ * reticle_run. Without them a trim is not a trim but a hard removal: under `standard`, 11 tools were
31
+ * uncallable — including reticle_annotate, which reticle_flow_save's own description tells the agent to
32
+ * call. `full` advertises everything and needs no hatch.
33
+ */
34
+ export declare function advertisedTools(profile: ToolProfile): ToolDef[];
13
35
  export declare function createMcpServer(deps: ToolDeps, profile?: ToolProfile): McpServer;
14
36
  //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAwClF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtE;AAuBD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,WAAiC,GACzC,SAAS,CAgDX"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASlF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,CAAC,CAAC,WAAW,GAAG,SAAS,GACtC,CAAC,CAAC,WAAW,GAAG,SAAS,CAG3B;AAkED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtE;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,CAK/D;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,WAAiC,GACzC,SAAS,CAqEX"}
package/dist/mcp.js CHANGED
@@ -4,11 +4,24 @@ import { isToonable, resultToToon } from '@reticlehq/core';
4
4
  import { TOOLS } from './tools/tools.js';
5
5
  import { filterTools, TOOL_PROFILE } from './tools/profiles.js';
6
6
  import { buildDynamicTools } from './tools/dynamic-tools.js';
7
- import { runTool } from './tools/invoke-tool.js';
7
+ import { runTool, SESSION_BOUND_TOOLS } from './tools/invoke-tool.js';
8
+ import { sessionEnvelopeShape } from './tools/tool-kit.js';
8
9
  import { buildErrorPayload } from './tools/error-recovery.js';
9
10
  import { log } from './log.js';
10
11
  import { SERVER_VERSION } from './server-version.js';
11
- const SERVER_INFO = { name: 'reticle', version: SERVER_VERSION };
12
+ import { MCP_SERVER_NAME } from './init/mcp.js';
13
+ /**
14
+ * Merge the runtime-spliced envelope (health/lease/age/control) into a session-bound tool's declared
15
+ * outputSchema so structuredContent validation keeps those fields instead of dropping them. The tool's
16
+ * own keys win over the permissive envelope defaults (e.g. ACT keeps its typed `session` shape).
17
+ * Non-session-bound tools (and tools with no outputSchema) are returned unchanged.
18
+ */
19
+ export function withSessionEnvelope(name, outputSchema) {
20
+ if (outputSchema === undefined || !SESSION_BOUND_TOOLS.has(name))
21
+ return outputSchema;
22
+ return { ...sessionEnvelopeShape, ...outputSchema };
23
+ }
24
+ const SERVER_INFO = { name: MCP_SERVER_NAME, version: SERVER_VERSION };
12
25
  /** First sentence of a description (purpose only) for lean profiles — keeps per-turn def cost
13
26
  * down. Cuts at the first sentence-ending period or newline; falls back to a 160-char cap. The
14
27
  * first clause retains the essentials (enum hints like "role | text | label" live there). */
@@ -19,16 +32,44 @@ function firstSentence(description) {
19
32
  const sentence = dot >= 0 ? base.slice(0, dot + 1) : base;
20
33
  return sentence.length > 160 ? `${sentence.slice(0, 159)}…` : sentence;
21
34
  }
35
+ /**
36
+ * Parameters carrying the recursive predicate grammar. Advertised compactly in lean profiles.
37
+ *
38
+ * `PredicateSchema` is a 12-variant discriminated union whose `allOf`/`anyOf`/`not` members embed the
39
+ * union again. Zod's JSON-Schema emitter inlines that recursion rather than emitting one `$ref`, so a
40
+ * single tool ships the word "kind" 48 times and `reticle_wait_for` alone costs 6,571 characters.
41
+ * Across the three tools that take a predicate that is 72% of the entire advertised input schema — a
42
+ * cost re-sent on every request, forever, to describe a grammar most calls use one variant of.
43
+ */
44
+ const PREDICATE_PARAMS = new Set(['predicate', 'until']);
45
+ /**
46
+ * What a lean profile advertises in place of the full predicate union.
47
+ *
48
+ * Safe to loosen because it is NOT the validation boundary: every handler taking a predicate calls
49
+ * `PredicateSchema.parse()` itself (observe-tools.ts:203, :279, act-tools.ts:442), so a malformed
50
+ * predicate still fails strictly and structurally — the agent gets a zod error naming the bad field
51
+ * rather than a silently accepted one. What changes is only how many bytes we spend describing the
52
+ * grammar up front versus letting the agent fetch it from `reticle_tools` when it needs a variant it
53
+ * has not used before.
54
+ */
55
+ const COMPACT_PREDICATE_DESCRIPTION = 'Predicate object: { kind, ...fields }. kind is one of element | text | net | route | console | ' +
56
+ 'animation | signal | state | settled | allOf | anyOf | not. Call reticle_tools for the full ' +
57
+ 'field grammar of a kind.';
22
58
  /**
23
59
  * Lean copy of a tool's zod input shape for lean profiles: each parameter's description is
24
- * truncated to its first sentence via zod's own `.describe()` (which returns a new schema, so the
60
+ * truncated to its first sentence via zod's own `.describe` (which returns a new schema, so the
25
61
  * shared shape is never mutated). The per-parameter prose is the bulk of the re-sent-every-turn
26
62
  * schema cost; the first clause keeps each param's purpose and any enum hints. Params without a
27
- * description pass through unchanged.
63
+ * description pass through unchanged. Predicate params are replaced wholesale — see above.
28
64
  */
29
65
  function leanZodShape(shape) {
30
66
  const out = {};
31
67
  for (const [key, schema] of Object.entries(shape)) {
68
+ if (PREDICATE_PARAMS.has(key)) {
69
+ const compact = z.record(z.unknown()).describe(COMPACT_PREDICATE_DESCRIPTION);
70
+ out[key] = schema.isOptional() ? compact.optional() : compact;
71
+ continue;
72
+ }
32
73
  const desc = schema.description;
33
74
  out[key] = typeof desc === 'string' ? schema.describe(firstSentence(desc)) : schema;
34
75
  }
@@ -51,6 +92,26 @@ export function encodeResult(result, encoding) {
51
92
  }
52
93
  return encoding === PRETTY_VALUE ? JSON.stringify(result, null, 2) : JSON.stringify(result);
53
94
  }
95
+ /**
96
+ * The tools a profile advertises directly.
97
+ *
98
+ * Exported so it can be TESTED. A previous guard re-implemented this decision in the test and was
99
+ * therefore insensitive to it — every profile appeared to reach every tool, so reverting the fix here
100
+ * left the suite green. Exercise the real function or the guard is theatre.
101
+ *
102
+ * Every TRIMMED profile keeps the meta-tools, so a tool that is not advertised is still reachable via
103
+ * reticle_run. Without them a trim is not a trim but a hard removal: under `standard`, 11 tools were
104
+ * uncallable — including reticle_annotate, which reticle_flow_save's own description tells the agent to
105
+ * call. `full` advertises everything and needs no hatch.
106
+ */
107
+ export function advertisedTools(profile) {
108
+ if (profile === TOOL_PROFILE.DYNAMIC)
109
+ return buildDynamicTools(TOOLS);
110
+ if (profile === TOOL_PROFILE.FULL)
111
+ return TOOLS;
112
+ const base = filterTools(TOOLS, profile === TOOL_PROFILE.HYBRID ? TOOL_PROFILE.CORE : profile);
113
+ return [...base, ...buildDynamicTools(TOOLS)];
114
+ }
54
115
  export function createMcpServer(deps, profile = TOOL_PROFILE.HYBRID) {
55
116
  const encoding = (process.env[ENCODING_ENV] ?? '').toLowerCase();
56
117
  const server = new McpServer(SERVER_INFO);
@@ -59,19 +120,41 @@ export function createMcpServer(deps, profile = TOOL_PROFILE.HYBRID) {
59
120
  // `dynamic` advertises only the 2 meta-tools (reticle_tools + reticle_run); real tools load on demand.
60
121
  // core/standard advertise the filtered set with terse descriptions (first sentence + trimmed
61
122
  // param prose) — the full prose is re-sent every turn, and the first clause carries the purpose.
62
- const advertised = profile === TOOL_PROFILE.DYNAMIC
63
- ? buildDynamicTools(TOOLS)
64
- : profile === TOOL_PROFILE.HYBRID
65
- ? [...filterTools(TOOLS, TOOL_PROFILE.CORE), ...buildDynamicTools(TOOLS)]
66
- : filterTools(TOOLS, profile);
123
+ // Every TRIMMED profile keeps the meta-tools, so a tool that is not advertised is still reachable
124
+ // through reticle_run. Without them a trim is not a trim, it is a hard removal: under `standard`,
125
+ // 11 tools were unreachable with no escape hatch — including reticle_annotate, which
126
+ // reticle_flow_save's own description instructs the agent to call. `full` advertises everything
127
+ // directly and needs no hatch.
128
+ const advertised = advertisedTools(profile);
67
129
  const terse = profile === TOOL_PROFILE.CORE ||
68
130
  profile === TOOL_PROFILE.STANDARD ||
69
131
  profile === TOOL_PROFILE.HYBRID;
70
132
  for (const tool of advertised) {
133
+ // Output schemas are now the largest slice of the per-request tax (55.6% of the hybrid payload
134
+ // after the predicate fix) and we are the only one of the three MCP servers that sends them.
135
+ //
136
+ // Trimming their prose was tried and MEASURED ZERO: the field descriptions were already written
137
+ // as single sentences, so first-sentence truncation had nothing to remove. Recorded here so the
138
+ // next person does not spend the same hour. The remaining cost is structural — the shapes
139
+ // themselves — and dropping them is NOT the answer: the type contract is what makes
140
+ // `structuredContent` verifiable, and it has already caught a real defect (a broad reticle_query
141
+ // failing output validation outright instead of returning a degraded result).
142
+ //
143
+ // Lean profiles therefore DROP the advertised outputSchema entirely, and that is safe — verified
144
+ // against the SDK, not assumed. A tool registered with NO outputSchema still returns its
145
+ // `structuredContent` unchanged (the SDK does not require a declared schema to carry it), so a
146
+ // client that wants the typed object still gets it; only client-side VALIDATION of that object is
147
+ // lost, which the MCP spec makes optional and which the agent, reading the text block, never did.
148
+ // If anything the object is MORE complete without a schema — with one, the SDK drops fields the
149
+ // schema does not list, which is the very reason the session envelope had to be spliced in. The
150
+ // handler below is unchanged, so `full`/`dynamic` (non-terse) keep the schema for validating
151
+ // clients. This removes the single largest remaining slice of the per-request tax (~36% of the
152
+ // hybrid payload) with no loss the agent can observe.
153
+ const outputSchema = terse ? undefined : withSessionEnvelope(tool.name, tool.outputSchema);
71
154
  const config = {
72
155
  description: terse ? firstSentence(tool.description) : tool.description,
73
156
  inputSchema: terse ? leanZodShape(tool.inputSchema) : tool.inputSchema,
74
- ...(tool.outputSchema !== undefined ? { outputSchema: tool.outputSchema } : {}),
157
+ ...(outputSchema !== undefined ? { outputSchema } : {}),
75
158
  };
76
159
  registerTool(tool.name, config, async (args) => {
77
160
  try {
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAiB,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAEjE;;6FAE6F;AAC7F,SAAS,aAAa,CAAC,WAAmB;IACxC,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAoB;IACxC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAgB;IAC5D,IAAI,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,MAAiC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9F,CAAC;AAuBD,MAAM,UAAU,eAAe,CAC7B,IAAc,EACd,UAAuB,YAAY,CAAC,MAAM;IAE1C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,mFAAmF;IACnF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAmC,CAAC;IAExF,uGAAuG;IACvG,6FAA6F;IAC7F,iGAAiG;IACjG,MAAM,UAAU,GACd,OAAO,KAAK,YAAY,CAAC,OAAO;QAC9B,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC1B,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,MAAM;YAC/B,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GACT,OAAO,KAAK,YAAY,CAAC,IAAI;QAC7B,OAAO,KAAK,YAAY,CAAC,QAAQ;QACjC,OAAO,KAAK,YAAY,CAAC,MAAM,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YACvE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YACtE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;QACF,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACpC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;wBAC1C,iBAAiB,EAAE,MAAiC;qBACrD,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACvD,gFAAgF;gBAChF,OAAO;oBACL,OAAO,EAAE,IAAa;oBACtB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;iBACvF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAiB,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,YAAuC;IAEvC,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IACtF,OAAO,EAAE,GAAG,oBAAoB,EAAE,GAAG,YAAY,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAEvE;;6FAE6F;AAC7F,SAAS,aAAa,CAAC,WAAmB;IACxC,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,6BAA6B,GACjC,iGAAiG;IACjG,8FAA8F;IAC9F,0BAA0B,CAAC;AAE7B;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAoB;IACxC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YAC9E,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9D,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAgB;IAC5D,IAAI,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,MAAiC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9F,CAAC;AAuBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,OAAoB;IAClD,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,OAAO,KAAK,YAAY,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAc,EACd,UAAuB,YAAY,CAAC,MAAM;IAE1C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,mFAAmF;IACnF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAmC,CAAC;IAExF,uGAAuG;IACvG,6FAA6F;IAC7F,iGAAiG;IACjG,kGAAkG;IAClG,kGAAkG;IAClG,qFAAqF;IACrF,gGAAgG;IAChG,+BAA+B;IAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,KAAK,GACT,OAAO,KAAK,YAAY,CAAC,IAAI;QAC7B,OAAO,KAAK,YAAY,CAAC,QAAQ;QACjC,OAAO,KAAK,YAAY,CAAC,MAAM,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,+FAA+F;QAC/F,6FAA6F;QAC7F,EAAE;QACF,gGAAgG;QAChG,gGAAgG;QAChG,0FAA0F;QAC1F,oFAAoF;QACpF,iGAAiG;QACjG,8EAA8E;QAC9E,EAAE;QACF,iGAAiG;QACjG,yFAAyF;QACzF,+FAA+F;QAC/F,kGAAkG;QAClG,kGAAkG;QAClG,gGAAgG;QAChG,gGAAgG;QAChG,6FAA6F;QAC7F,+FAA+F;QAC/F,sDAAsD;QACtD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YACvE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YACtE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACpC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;wBAC1C,iBAAiB,EAAE,MAAiC;qBACrD,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACvD,gFAAgF;gBAChF,OAAO;oBACL,OAAO,EAAE,IAAa;oBACtB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;iBACvF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type FlowStep } from '@reticlehq/core';
2
+ import { type InstrumentationGap } from './self-instrument.js';
3
+ /**
4
+ * Bridge domain gaps → LOCATED instrumentation gaps. A flow that asserts no consequence should emit one —
5
+ * and the flow's own step anchors carry the source file:line the babel/next plugin stamped, so we know
6
+ * WHERE to add it. This is the plumbing that turns "flow X asserts nothing" into "add reticle.signal at
7
+ * Checkout.tsx:114". Pure; feeds proposeInstrumentation.
8
+ */
9
+ /** The last COMPONENT-anchor source in a flow — where a post-action consequence signal belongs. */
10
+ export declare function lastSource(steps: readonly FlowStep[]): {
11
+ file: string;
12
+ line: number;
13
+ } | undefined;
14
+ /**
15
+ * Turn unasserted flows into missing-signal gaps at each flow's source location. Flows with no stamped
16
+ * source are skipped (no location to propose). The suggested signal name is `<flow>:done`.
17
+ */
18
+ export declare function instrumentationGapsForFlows(unassertedFlows: readonly string[], flowStepsByName: ReadonlyMap<string, readonly FlowStep[]>): InstrumentationGap[];
19
+ //# sourceMappingURL=flow-instrument-gaps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-instrument-gaps.d.ts","sourceRoot":"","sources":["../../src/oracles/flow-instrument-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;;;GAKG;AAEH,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAYjG;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC,GACxD,kBAAkB,EAAE,CAetB"}
@@ -0,0 +1,45 @@
1
+ import { AnchorKind } from '@reticlehq/core';
2
+ import { InstrumentationGapKind } from './self-instrument.js';
3
+ /**
4
+ * Bridge domain gaps → LOCATED instrumentation gaps. A flow that asserts no consequence should emit one —
5
+ * and the flow's own step anchors carry the source file:line the babel/next plugin stamped, so we know
6
+ * WHERE to add it. This is the plumbing that turns "flow X asserts nothing" into "add reticle.signal at
7
+ * Checkout.tsx:114". Pure; feeds proposeInstrumentation.
8
+ */
9
+ /** The last COMPONENT-anchor source in a flow — where a post-action consequence signal belongs. */
10
+ export function lastSource(steps) {
11
+ let found;
12
+ const walk = (list) => {
13
+ for (const step of list) {
14
+ if (step.anchor.kind === AnchorKind.COMPONENT && step.anchor.source !== undefined) {
15
+ found = { file: step.anchor.source.file, line: step.anchor.source.line };
16
+ }
17
+ if (step.steps !== undefined)
18
+ walk(step.steps);
19
+ }
20
+ };
21
+ walk(steps);
22
+ return found;
23
+ }
24
+ /**
25
+ * Turn unasserted flows into missing-signal gaps at each flow's source location. Flows with no stamped
26
+ * source are skipped (no location to propose). The suggested signal name is `<flow>:done`.
27
+ */
28
+ export function instrumentationGapsForFlows(unassertedFlows, flowStepsByName) {
29
+ const gaps = [];
30
+ for (const name of unassertedFlows) {
31
+ const steps = flowStepsByName.get(name);
32
+ const source = steps === undefined ? undefined : lastSource(steps);
33
+ if (source === undefined)
34
+ continue;
35
+ gaps.push({
36
+ kind: InstrumentationGapKind.MISSING_SIGNAL,
37
+ file: source.file,
38
+ line: source.line,
39
+ name: `${name}:done`,
40
+ context: `flow "${name}" asserts no consequence`,
41
+ });
42
+ }
43
+ return gaps;
44
+ }
45
+ //# sourceMappingURL=flow-instrument-gaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-instrument-gaps.js","sourceRoot":"","sources":["../../src/oracles/flow-instrument-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAA2B,MAAM,sBAAsB,CAAC;AAEvF;;;;;GAKG;AAEH,mGAAmG;AACnG,MAAM,UAAU,UAAU,CAAC,KAA0B;IACnD,IAAI,KAAiD,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAQ,EAAE;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClF,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3E,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,eAAkC,EAClC,eAAyD;IAEzD,MAAM,IAAI,GAAyB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,sBAAsB,CAAC,cAAc;YAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,GAAG,IAAI,OAAO;YACpB,OAAO,EAAE,SAAS,IAAI,0BAA0B;SACjD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}