@reticlehq/server 2.11.0 → 2.13.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 (513) hide show
  1. package/SKILL.md +93 -111
  2. package/dist/bridge/auth-failure-reason.d.ts +6 -2
  3. package/dist/bridge/auth-failure-reason.js +15 -8
  4. package/dist/bridge/bridge.d.ts +18 -14
  5. package/dist/bridge/bridge.js +248 -165
  6. package/dist/bridge/bridge.test-harness.d.ts +2 -0
  7. package/dist/bridge/bridge.test-harness.js +8 -1
  8. package/dist/bridge/pairing-token.d.ts +5 -0
  9. package/dist/bridge/pairing-token.js +28 -0
  10. package/dist/bridge/protocol-skew.d.ts +37 -0
  11. package/dist/bridge/protocol-skew.js +45 -0
  12. package/dist/capsule/capsule-store.d.ts +8 -7
  13. package/dist/capsule/capsule-store.js +1 -1
  14. package/dist/capsule/causal-summary.d.ts +2 -2
  15. package/dist/capsule/causal-summary.js +7 -2
  16. package/dist/chromium-launch-options.d.ts +28 -0
  17. package/dist/chromium-launch-options.js +29 -0
  18. package/dist/cli/cli-doctor.js +39 -1
  19. package/dist/cli/cli-flow-commands.d.ts +3 -1
  20. package/dist/cli/cli-flow-commands.js +34 -4
  21. package/dist/cli/cli-kill.d.ts +2 -1
  22. package/dist/cli/cli-launch.d.ts +11 -1
  23. package/dist/cli/cli-launch.js +59 -10
  24. package/dist/cli/cli-parse.d.ts +17 -1
  25. package/dist/cli/cli-parse.js +238 -12
  26. package/dist/cli/cli-update-commands.js +20 -1
  27. package/dist/cli/cli-verify.d.ts +2 -1
  28. package/dist/cli/cli-verify.js +5 -4
  29. package/dist/cli/cloud-cli.js +428 -253
  30. package/dist/cli/cloud-keystore.d.ts +37 -0
  31. package/dist/cli/cloud-keystore.js +97 -0
  32. package/dist/cli/cloud-kit.d.ts +37 -0
  33. package/dist/cli/cloud-kit.js +121 -0
  34. package/dist/cli/cloud-login.d.ts +17 -0
  35. package/dist/cli/cloud-login.js +183 -0
  36. package/dist/cli/cloud-session.d.ts +48 -0
  37. package/dist/cli/cloud-session.js +53 -0
  38. package/dist/cli/config-discovery.d.ts +2 -1
  39. package/dist/cli/config-discovery.js +1 -0
  40. package/dist/cli/daemon-start-options.d.ts +32 -0
  41. package/dist/cli/daemon-start-options.js +38 -0
  42. package/dist/cli/device-flow.d.ts +76 -0
  43. package/dist/cli/device-flow.js +56 -0
  44. package/dist/cli/doctor-rows.d.ts +12 -1
  45. package/dist/cli/doctor-rows.js +12 -1
  46. package/dist/cli/drive-attach.d.ts +13 -0
  47. package/dist/cli/drive-attach.js +18 -0
  48. package/dist/cli/drive-command.js +7 -3
  49. package/dist/cli/gate-exit.d.ts +21 -0
  50. package/dist/cli/gate-exit.js +21 -0
  51. package/dist/cli/gate-hook-message.d.ts +33 -0
  52. package/dist/cli/gate-hook-message.js +46 -0
  53. package/dist/cli/mcp-command.d.ts +25 -0
  54. package/dist/cli/mcp-command.js +174 -0
  55. package/dist/cli/project-name.d.ts +30 -0
  56. package/dist/cli/project-name.js +44 -0
  57. package/dist/cli/sibling-ports.d.ts +37 -0
  58. package/dist/cli/sibling-ports.js +56 -0
  59. package/dist/cli/status-next-action.d.ts +14 -0
  60. package/dist/cli/status-next-action.js +4 -4
  61. package/dist/cli.d.ts +1 -0
  62. package/dist/cli.js +167 -186
  63. package/dist/cloud/cloud-config.d.ts +24 -2
  64. package/dist/cloud/cloud-config.js +64 -5
  65. package/dist/cloud/cloud-sync.d.ts +16 -5
  66. package/dist/cloud/cloud-sync.js +64 -1
  67. package/dist/cloud/sync-cycle.d.ts +110 -0
  68. package/dist/cloud/sync-cycle.js +270 -0
  69. package/dist/cloud/sync-daemon.d.ts +69 -0
  70. package/dist/cloud/sync-daemon.js +260 -0
  71. package/dist/cloud/sync-disk.d.ts +9 -0
  72. package/dist/cloud/sync-disk.js +191 -0
  73. package/dist/cloud/sync-hash.d.ts +2 -0
  74. package/dist/cloud/sync-hash.js +35 -0
  75. package/dist/crawl/crawl-tools.js +5 -3
  76. package/dist/crawl/crawl.d.ts +12 -13
  77. package/dist/crawl/crawl.js +25 -3
  78. package/dist/daemon/daemon-resolve.d.ts +122 -0
  79. package/dist/daemon/daemon-resolve.js +187 -0
  80. package/dist/daemon/dev-servers.d.ts +15 -0
  81. package/dist/daemon/dev-servers.js +68 -0
  82. package/dist/daemon/free-port.d.ts +29 -0
  83. package/dist/daemon/free-port.js +55 -0
  84. package/dist/daemon/heartbeat.d.ts +0 -4
  85. package/dist/daemon/heartbeat.js +2 -2
  86. package/dist/daemon/wake-decision.d.ts +32 -0
  87. package/dist/daemon/wake-decision.js +38 -0
  88. package/dist/dev/stale-issue-guard.d.ts +0 -2
  89. package/dist/dev/stale-issue-guard.js +1 -1
  90. package/dist/domain/domain-tools.js +2 -2
  91. package/dist/events/contradictions.d.ts +59 -0
  92. package/dist/events/contradictions.js +253 -27
  93. package/dist/events/declared.d.ts +17 -0
  94. package/dist/events/declared.js +43 -1
  95. package/dist/events/echo-mismatch.js +65 -1
  96. package/dist/events/event-filters.d.ts +8 -0
  97. package/dist/events/event-filters.js +19 -2
  98. package/dist/events/observed-in-window.d.ts +12 -0
  99. package/dist/events/observed-in-window.js +17 -0
  100. package/dist/events/predicate-asks.d.ts +13 -0
  101. package/dist/events/predicate-asks.js +22 -0
  102. package/dist/events/predicate-eval.js +117 -27
  103. package/dist/events/predicate-parse.d.ts +0 -6
  104. package/dist/events/predicate-parse.js +43 -3
  105. package/dist/events/predicate-precheck.d.ts +8 -0
  106. package/dist/events/predicate-precheck.js +41 -0
  107. package/dist/events/predicate-route.d.ts +14 -0
  108. package/dist/events/predicate-route.js +36 -8
  109. package/dist/events/predicate-schema.d.ts +44 -0
  110. package/dist/events/predicate-schema.js +126 -23
  111. package/dist/events/predicate.d.ts +20 -0
  112. package/dist/events/predicate.js +77 -6
  113. package/dist/events/split-text-miss.d.ts +30 -0
  114. package/dist/events/split-text-miss.js +44 -0
  115. package/dist/flows/coverage.d.ts +0 -8
  116. package/dist/flows/coverage.js +1 -1
  117. package/dist/flows/decision.d.ts +5 -1
  118. package/dist/flows/decision.js +33 -7
  119. package/dist/flows/flake.d.ts +6 -8
  120. package/dist/flows/flake.js +1 -1
  121. package/dist/flows/flow-intent.d.ts +52 -0
  122. package/dist/flows/flow-intent.js +123 -0
  123. package/dist/flows/flow-memory-consult.d.ts +55 -0
  124. package/dist/flows/flow-memory-consult.js +38 -0
  125. package/dist/flows/flow-replay-run.d.ts +18 -7
  126. package/dist/flows/flow-replay-run.js +263 -23
  127. package/dist/flows/flow-replay.js +11 -2
  128. package/dist/flows/flow-step-runners.d.ts +8 -0
  129. package/dist/flows/flow-step-runners.js +8 -2
  130. package/dist/flows/flow-store-for-session.d.ts +31 -0
  131. package/dist/flows/flow-store-for-session.js +33 -0
  132. package/dist/flows/flow-success.js +15 -3
  133. package/dist/flows/flow-tools.js +87 -33
  134. package/dist/flows/flows.d.ts +14 -1
  135. package/dist/flows/flows.js +502 -24
  136. package/dist/flows/heal-run.js +5 -2
  137. package/dist/flows/predicate-to-expect.d.ts +17 -12
  138. package/dist/flows/predicate-to-expect.js +36 -15
  139. package/dist/flows/recordings.d.ts +13 -1
  140. package/dist/flows/recordings.js +17 -2
  141. package/dist/flows/replay.d.ts +22 -2
  142. package/dist/flows/replay.js +28 -2
  143. package/dist/flows/server-verify.js +16 -2
  144. package/dist/flows/verify-change-tools.js +9 -3
  145. package/dist/honesty/blind-spots.d.ts +51 -15
  146. package/dist/honesty/blind-spots.js +64 -4
  147. package/dist/honesty/feature-capture.d.ts +150 -0
  148. package/dist/honesty/feature-capture.js +233 -0
  149. package/dist/honesty/honesty.d.ts +24 -0
  150. package/dist/honesty/honesty.js +25 -1
  151. package/dist/honesty/instrumentation-gaps.d.ts +39 -6
  152. package/dist/honesty/instrumentation-gaps.js +88 -5
  153. package/dist/honesty/tool-hit-rate.d.ts +86 -0
  154. package/dist/honesty/tool-hit-rate.js +90 -0
  155. package/dist/honesty/undeclared-change.d.ts +51 -0
  156. package/dist/honesty/undeclared-change.js +56 -0
  157. package/dist/honesty/verified.d.ts +16 -0
  158. package/dist/honesty/verified.js +84 -5
  159. package/dist/http-server.d.ts +0 -1
  160. package/dist/http-server.js +13 -1
  161. package/dist/hunt/hunt-report.d.ts +0 -2
  162. package/dist/hunt/hunt-report.js +1 -1
  163. package/dist/impact/impact-recorder.d.ts +31 -8
  164. package/dist/impact/impact-recorder.js +104 -21
  165. package/dist/impact/impact-store.d.ts +13 -4
  166. package/dist/impact/impact-store.js +44 -3
  167. package/dist/index.d.ts +4 -1
  168. package/dist/index.js +113 -7
  169. package/dist/init/agent-rules.d.ts +30 -6
  170. package/dist/init/agent-rules.js +54 -13
  171. package/dist/init/astro-patch.d.ts +16 -0
  172. package/dist/init/astro-patch.js +28 -0
  173. package/dist/init/capabilities.d.ts +4 -3
  174. package/dist/init/capabilities.js +23 -3
  175. package/dist/init/closing-hint.d.ts +36 -0
  176. package/dist/init/closing-hint.js +120 -0
  177. package/dist/init/confirm.d.ts +27 -28
  178. package/dist/init/confirm.js +51 -11
  179. package/dist/init/cra.d.ts +34 -5
  180. package/dist/init/cra.js +96 -25
  181. package/dist/init/csp-check.js +17 -2
  182. package/dist/init/csp-doctor.d.ts +8 -1
  183. package/dist/init/csp-doctor.js +8 -3
  184. package/dist/init/dev-script.d.ts +50 -0
  185. package/dist/init/dev-script.js +66 -0
  186. package/dist/init/format-generated.d.ts +18 -0
  187. package/dist/init/format-generated.js +39 -0
  188. package/dist/init/install-hint.d.ts +9 -0
  189. package/dist/init/install-hint.js +29 -0
  190. package/dist/init/mcp-clients.d.ts +7 -0
  191. package/dist/init/mcp-clients.js +7 -0
  192. package/dist/init/mcp.d.ts +17 -6
  193. package/dist/init/mcp.js +27 -11
  194. package/dist/init/node-io.js +11 -1
  195. package/dist/init/plan-framework.d.ts +0 -5
  196. package/dist/init/plan-framework.js +147 -37
  197. package/dist/init/plan.d.ts +30 -37
  198. package/dist/init/plan.js +50 -60
  199. package/dist/init/preflight.d.ts +28 -0
  200. package/dist/init/preflight.js +38 -0
  201. package/dist/init/refresh-rules.d.ts +39 -0
  202. package/dist/init/refresh-rules.js +51 -0
  203. package/dist/init/run.d.ts +32 -35
  204. package/dist/init/run.js +151 -202
  205. package/dist/init/slash-command.d.ts +1 -1
  206. package/dist/init/snippets.js +90 -31
  207. package/dist/init/vite-config.d.ts +1 -1
  208. package/dist/init/vite-config.js +39 -25
  209. package/dist/init/workspace-apps.d.ts +17 -10
  210. package/dist/init/workspace-apps.js +110 -0
  211. package/dist/input/network-mock-tools.js +3 -6
  212. package/dist/input/real-input.d.ts +2 -0
  213. package/dist/input/real-input.js +28 -7
  214. package/dist/input/scroll-find.d.ts +7 -4
  215. package/dist/input/scroll-find.js +63 -25
  216. package/dist/input/scroll-tools.js +4 -6
  217. package/dist/input/viewport-tools.js +5 -4
  218. package/dist/intent/inline-intent.d.ts +37 -0
  219. package/dist/intent/inline-intent.js +193 -0
  220. package/dist/intent/intent-shard-store.d.ts +72 -0
  221. package/dist/intent/intent-shard-store.js +203 -0
  222. package/dist/intent/intent-shard.d.ts +411 -0
  223. package/dist/intent/intent-shard.js +176 -0
  224. package/dist/intent/intent-store.d.ts +49 -0
  225. package/dist/intent/intent-store.js +133 -0
  226. package/dist/intent/intent-subject.d.ts +45 -0
  227. package/dist/intent/intent-subject.js +177 -0
  228. package/dist/intent/intent-tools.d.ts +2 -0
  229. package/dist/intent/intent-tools.js +143 -0
  230. package/dist/intent/open-intents.d.ts +42 -0
  231. package/dist/intent/open-intents.js +40 -0
  232. package/dist/journal/envelope.d.ts +26 -26
  233. package/dist/journal/journal-recorder.d.ts +23 -0
  234. package/dist/journal/journal-recorder.js +35 -0
  235. package/dist/license/license-env.d.ts +29 -0
  236. package/dist/license/license-env.js +148 -0
  237. package/dist/loopback-agent.d.ts +31 -0
  238. package/dist/loopback-agent.js +57 -0
  239. package/dist/mcp/attach-memory.d.ts +83 -0
  240. package/dist/mcp/attach-memory.js +185 -0
  241. package/dist/mcp/client-identity.d.ts +31 -0
  242. package/dist/mcp/client-identity.js +51 -0
  243. package/dist/mcp/mcp-post-transport.d.ts +26 -0
  244. package/dist/mcp/mcp-post-transport.js +109 -0
  245. package/dist/mcp/mcp-proxy.d.ts +2 -8
  246. package/dist/mcp/mcp-proxy.js +64 -62
  247. package/dist/mcp/mcp.d.ts +2 -0
  248. package/dist/mcp/mcp.js +52 -24
  249. package/dist/mcp/proxy-backoff.d.ts +11 -0
  250. package/dist/mcp/proxy-backoff.js +13 -0
  251. package/dist/mcp/proxy-daemon-probe.d.ts +1 -0
  252. package/dist/mcp/proxy-daemon-probe.js +7 -1
  253. package/dist/mcp/proxy-handshake.d.ts +23 -0
  254. package/dist/mcp/proxy-handshake.js +31 -0
  255. package/dist/mcp/server-instructions.js +45 -3
  256. package/dist/mcp/tool-catalog-cache.d.ts +16 -0
  257. package/dist/mcp/tool-catalog-cache.js +22 -0
  258. package/dist/memory/memory-tools.d.ts +2 -0
  259. package/dist/memory/memory-tools.js +82 -0
  260. package/dist/memory/project-memory.d.ts +34 -0
  261. package/dist/memory/project-memory.js +96 -0
  262. package/dist/oracles/flow-instrument-gaps.d.ts +4 -4
  263. package/dist/oracles/flow-instrument-gaps.js +4 -5
  264. package/dist/oracles/propose-consequences.js +12 -3
  265. package/dist/oracles/self-instrument.d.ts +9 -9
  266. package/dist/oracles/self-instrument.js +19 -13
  267. package/dist/pool/browser-pool.d.ts +75 -5
  268. package/dist/pool/browser-pool.js +144 -5
  269. package/dist/pool/playwright-launcher.js +12 -1
  270. package/dist/project/fs-port.d.ts +3 -0
  271. package/dist/project/fs-port.js +3 -2
  272. package/dist/project/memory-fs.js +6 -1
  273. package/dist/project/project-tools.js +6 -35
  274. package/dist/project/reticle-dir.d.ts +17 -2
  275. package/dist/project/reticle-dir.js +22 -4
  276. package/dist/runs/context-tools.d.ts +2 -0
  277. package/dist/runs/context-tools.js +89 -0
  278. package/dist/runs/run-context.d.ts +40 -0
  279. package/dist/runs/run-context.js +158 -0
  280. package/dist/runs/run-diff.d.ts +2 -1
  281. package/dist/runs/run-store.d.ts +10 -0
  282. package/dist/runs/run-store.js +10 -0
  283. package/dist/runs/verification-sync.d.ts +0 -11
  284. package/dist/runs/verification-sync.js +24 -3
  285. package/dist/runs/verify-server.d.ts +8 -1
  286. package/dist/runs/verify-server.js +14 -2
  287. package/dist/session/command-timeout.d.ts +5 -2
  288. package/dist/session/command-timeout.js +5 -4
  289. package/dist/session/dev-server-probe.d.ts +0 -8
  290. package/dist/session/dev-server-probe.js +1 -1
  291. package/dist/session/last-act.d.ts +7 -1
  292. package/dist/session/last-act.js +2 -2
  293. package/dist/session/lease-visibility.d.ts +67 -0
  294. package/dist/session/lease-visibility.js +76 -0
  295. package/dist/session/live-control-tools.js +1 -42
  296. package/dist/session/no-session-diagnosis.d.ts +33 -0
  297. package/dist/session/no-session-diagnosis.js +82 -24
  298. package/dist/session/no-session-next-action.d.ts +12 -0
  299. package/dist/session/no-session-next-action.js +77 -6
  300. package/dist/session/no-session-watch.d.ts +18 -6
  301. package/dist/session/no-session-watch.js +125 -75
  302. package/dist/session/output-budget.js +4 -1
  303. package/dist/session/pending-commands.d.ts +11 -1
  304. package/dist/session/pending-commands.js +12 -2
  305. package/dist/session/resolve-within.d.ts +34 -0
  306. package/dist/session/resolve-within.js +53 -0
  307. package/dist/session/session-health.d.ts +9 -0
  308. package/dist/session/session-health.js +23 -0
  309. package/dist/session/session-info.d.ts +18 -0
  310. package/dist/session/session-info.js +11 -0
  311. package/dist/session/session-manager.d.ts +14 -0
  312. package/dist/session/session-manager.js +111 -4
  313. package/dist/session/session-mirror.d.ts +16 -0
  314. package/dist/session/session-mirror.js +22 -0
  315. package/dist/session/session-recommendation.d.ts +19 -5
  316. package/dist/session/session-recommendation.js +25 -9
  317. package/dist/session/session-successor.d.ts +37 -0
  318. package/dist/session/session-successor.js +113 -0
  319. package/dist/session/session-tools.js +2 -2
  320. package/dist/session/session.d.ts +53 -3
  321. package/dist/session/session.js +162 -9
  322. package/dist/session/wall-clock.d.ts +12 -0
  323. package/dist/session/wall-clock.js +14 -0
  324. package/dist/setup/agent-configs.d.ts +96 -0
  325. package/dist/setup/agent-configs.js +333 -0
  326. package/dist/setup/agent-io.d.ts +9 -0
  327. package/dist/setup/agent-io.js +16 -0
  328. package/dist/setup/agent-writer.d.ts +51 -0
  329. package/dist/setup/agent-writer.js +115 -0
  330. package/dist/setup/approval-migration.d.ts +47 -0
  331. package/dist/setup/approval-migration.js +68 -0
  332. package/dist/setup/auto-approve.d.ts +85 -0
  333. package/dist/setup/auto-approve.js +150 -0
  334. package/dist/setup/bridge-port.d.ts +15 -0
  335. package/dist/setup/bridge-port.js +24 -0
  336. package/dist/setup/desktop-shape.d.ts +57 -0
  337. package/dist/setup/desktop-shape.js +63 -0
  338. package/dist/setup/dev-server-wait.d.ts +60 -0
  339. package/dist/setup/dev-server-wait.js +65 -0
  340. package/dist/setup/drive-agent.d.ts +71 -0
  341. package/dist/setup/drive-agent.js +171 -0
  342. package/dist/setup/drive-plan.d.ts +68 -0
  343. package/dist/setup/drive-plan.js +130 -0
  344. package/dist/setup/ensure-daemon.d.ts +29 -0
  345. package/dist/setup/ensure-daemon.js +58 -0
  346. package/dist/setup/init-runtime.d.ts +47 -0
  347. package/dist/setup/init-runtime.js +160 -0
  348. package/dist/setup/interrupt.d.ts +25 -0
  349. package/dist/setup/interrupt.js +40 -0
  350. package/dist/setup/license-key.d.ts +39 -0
  351. package/dist/setup/license-key.js +72 -0
  352. package/dist/setup/listeners.d.ts +37 -0
  353. package/dist/setup/listeners.js +85 -0
  354. package/dist/setup/node-effects.d.ts +60 -0
  355. package/dist/setup/node-effects.js +210 -0
  356. package/dist/setup/page-probe.d.ts +39 -0
  357. package/dist/setup/page-probe.js +49 -0
  358. package/dist/setup/relaunch.d.ts +36 -0
  359. package/dist/setup/relaunch.js +57 -0
  360. package/dist/setup/remaining-steps.d.ts +19 -0
  361. package/dist/setup/remaining-steps.js +31 -0
  362. package/dist/setup/run-setup.d.ts +99 -0
  363. package/dist/setup/run-setup.js +187 -0
  364. package/dist/setup/session-pick.d.ts +47 -0
  365. package/dist/setup/session-pick.js +51 -0
  366. package/dist/setup/setup-command.d.ts +45 -0
  367. package/dist/setup/setup-command.js +199 -0
  368. package/dist/setup/setup-options.d.ts +74 -0
  369. package/dist/setup/setup-options.js +67 -0
  370. package/dist/setup/transcripts.d.ts +16 -0
  371. package/dist/setup/transcripts.js +43 -0
  372. package/dist/status-payload.d.ts +14 -1
  373. package/dist/status-payload.js +23 -1
  374. package/dist/telemetry/automation-hint.d.ts +2 -1
  375. package/dist/telemetry/daemon-telemetry.d.ts +8 -1
  376. package/dist/telemetry/daemon-telemetry.js +52 -5
  377. package/dist/telemetry/error-class.js +1 -1
  378. package/dist/telemetry/feedback-context.d.ts +9 -1
  379. package/dist/telemetry/feedback-context.js +60 -29
  380. package/dist/telemetry/feedback-local.d.ts +15 -0
  381. package/dist/telemetry/feedback-local.js +56 -0
  382. package/dist/telemetry/feedback-outbox.d.ts +2 -1
  383. package/dist/telemetry/feedback.d.ts +11 -0
  384. package/dist/telemetry/feedback.js +19 -6
  385. package/dist/telemetry/init-telemetry.d.ts +2 -0
  386. package/dist/telemetry/init-telemetry.js +2 -0
  387. package/dist/telemetry/install-source.d.ts +14 -0
  388. package/dist/telemetry/install-source.js +30 -0
  389. package/dist/telemetry/license-activation.d.ts +7 -1
  390. package/dist/telemetry/license-activation.js +9 -5
  391. package/dist/telemetry/mcp-connection.js +7 -0
  392. package/dist/telemetry/project-profile.d.ts +12 -9
  393. package/dist/telemetry/project-profile.js +12 -7
  394. package/dist/telemetry/proxy-telemetry.d.ts +3 -0
  395. package/dist/telemetry/proxy-telemetry.js +21 -0
  396. package/dist/telemetry/run-telemetry.d.ts +0 -2
  397. package/dist/telemetry/run-telemetry.js +1 -1
  398. package/dist/telemetry/session-metrics.d.ts +12 -0
  399. package/dist/telemetry/session-metrics.js +35 -1
  400. package/dist/telemetry/telemetry.js +17 -2
  401. package/dist/telemetry/tool-refused.d.ts +3 -1
  402. package/dist/telemetry/tool-refused.js +34 -2
  403. package/dist/telemetry/verification-of.js +2 -2
  404. package/dist/tools/act-capsule.d.ts +10 -0
  405. package/dist/tools/act-capsule.js +8 -2
  406. package/dist/tools/act-danger.d.ts +2 -1
  407. package/dist/tools/act-danger.js +11 -3
  408. package/dist/tools/act-observation.d.ts +41 -0
  409. package/dist/tools/act-observation.js +36 -0
  410. package/dist/tools/act-preflight.d.ts +20 -0
  411. package/dist/tools/act-preflight.js +98 -0
  412. package/dist/tools/act-sequence-retry.d.ts +45 -0
  413. package/dist/tools/act-sequence-retry.js +58 -0
  414. package/dist/tools/act-sequence-tool.d.ts +13 -0
  415. package/dist/tools/act-sequence-tool.js +135 -0
  416. package/dist/tools/act-target.d.ts +14 -0
  417. package/dist/tools/act-target.js +47 -0
  418. package/dist/tools/act-tools.d.ts +21 -1
  419. package/dist/tools/act-tools.js +196 -204
  420. package/dist/tools/assert-source.d.ts +22 -0
  421. package/dist/tools/assert-source.js +53 -0
  422. package/dist/tools/assert-verdict.d.ts +20 -3
  423. package/dist/tools/assert-verdict.js +58 -20
  424. package/dist/tools/browser-tools.js +6 -22
  425. package/dist/tools/complete-snapshot.d.ts +48 -0
  426. package/dist/tools/complete-snapshot.js +75 -0
  427. package/dist/tools/coverage-tools.d.ts +10 -1
  428. package/dist/tools/coverage-tools.js +123 -69
  429. package/dist/tools/dynamic-tools.js +53 -13
  430. package/dist/tools/error-recovery.d.ts +25 -14
  431. package/dist/tools/error-recovery.js +78 -9
  432. package/dist/tools/feedback-tools.d.ts +1 -1
  433. package/dist/tools/feedback-tools.js +2 -2
  434. package/dist/tools/invoke-tool.js +121 -11
  435. package/dist/tools/lease-hint.d.ts +10 -0
  436. package/dist/tools/lease-hint.js +53 -4
  437. package/dist/tools/lease-tools.d.ts +35 -5
  438. package/dist/tools/lease-tools.js +191 -13
  439. package/dist/tools/merged-name-redirect.d.ts +13 -0
  440. package/dist/tools/merged-name-redirect.js +22 -0
  441. package/dist/tools/navigate-arrival.d.ts +0 -2
  442. package/dist/tools/navigate-arrival.js +1 -1
  443. package/dist/tools/numeric-bounds.d.ts +100 -0
  444. package/dist/tools/numeric-bounds.js +125 -0
  445. package/dist/tools/observe-tools.js +109 -65
  446. package/dist/tools/read-tools.js +31 -8
  447. package/dist/tools/real-input-attempt.d.ts +32 -0
  448. package/dist/tools/real-input-attempt.js +212 -2
  449. package/dist/tools/reconcile-tools.js +22 -8
  450. package/dist/tools/resolve-target.d.ts +0 -7
  451. package/dist/tools/sdk-marker-probe.d.ts +29 -0
  452. package/dist/tools/sdk-marker-probe.js +57 -0
  453. package/dist/tools/snapshot-delta.d.ts +1 -1
  454. package/dist/tools/tool-kit.d.ts +24 -0
  455. package/dist/tools/tool-kit.js +21 -0
  456. package/dist/tools/tool-names.d.ts +5 -0
  457. package/dist/tools/tool-names.js +5 -0
  458. package/dist/tools/tool-surface.d.ts +85 -6
  459. package/dist/tools/tool-surface.js +122 -2
  460. package/dist/tools/tools-helpers.d.ts +19 -0
  461. package/dist/tools/tools-helpers.js +46 -0
  462. package/dist/tools/tools.d.ts +2 -0
  463. package/dist/tools/tools.js +78 -12
  464. package/dist/tools/unadvertised-help.js +4 -4
  465. package/dist/tools/verify-next-baton.d.ts +53 -0
  466. package/dist/tools/verify-next-baton.js +52 -0
  467. package/dist/update/reticle-deps.d.ts +9 -0
  468. package/dist/update/reticle-deps.js +27 -0
  469. package/dist/update/sdk-sync.d.ts +1 -2
  470. package/dist/update/sdk-sync.js +1 -21
  471. package/dist/update/update-nudge.d.ts +25 -10
  472. package/dist/update/update-nudge.js +32 -3
  473. package/dist/update/updater.d.ts +1 -1
  474. package/dist/version/peer-announce.js +4 -2
  475. package/dist/version/sdk-fix.d.ts +47 -0
  476. package/dist/version/sdk-fix.js +127 -0
  477. package/dist/version/version-nudge.d.ts +14 -0
  478. package/dist/version/version-nudge.js +21 -0
  479. package/dist/version/version-skew.d.ts +38 -3
  480. package/dist/version/version-skew.js +83 -7
  481. package/dist/visual/visual-store.d.ts +6 -6
  482. package/dist/visual/visual-store.js +18 -16
  483. package/dist/visual/visual-tools.js +57 -12
  484. package/docs/README.md +2 -1
  485. package/docs/cli/cloud.mdx +1 -1
  486. package/docs/cli/doctor.mdx +2 -0
  487. package/docs/cli/serve.mdx +4 -2
  488. package/docs/cli/verify.mdx +4 -5
  489. package/docs/cli.mdx +7 -3
  490. package/docs/desktop.mdx +1 -1
  491. package/docs/docs.json +2 -2
  492. package/docs/gates.md +1 -1
  493. package/docs/getting-started.md +19 -3
  494. package/docs/index.mdx +9 -6
  495. package/docs/install-agentic.mdx +38 -12
  496. package/docs/install-manual.mdx +1 -1
  497. package/docs/packages/browser.mdx +2 -2
  498. package/docs/packages/server.mdx +1 -1
  499. package/docs/packages.mdx +8 -6
  500. package/docs/platform-integration.md +17 -0
  501. package/docs/predicates.mdx +8 -0
  502. package/docs/reticle-manual.md +106 -0
  503. package/docs/skill-file.mdx +3 -3
  504. package/docs/telemetry-contract.md +108 -4
  505. package/docs/tools-act-sequence.mdx +16 -0
  506. package/docs/tools-tools-and-run.mdx +2 -4
  507. package/docs/troubleshooting.mdx +9 -0
  508. package/docs/usage.md +4 -3
  509. package/package.json +4 -3
  510. package/dist/init/cursor.d.ts +0 -24
  511. package/dist/init/cursor.js +0 -80
  512. package/dist/session/session-readiness.d.ts +0 -34
  513. package/dist/session/session-readiness.js +0 -36
@@ -1,8 +1,10 @@
1
1
  import { asFlowName } from '@reticlehq/core';
2
- import { AnchorKind, DEGRADED_ANCHOR_ROLE, FLOW_FILE_VERSION, FlowErrorCode, FlowFileSchema, QueryBy, } from '@reticlehq/core';
2
+ import { AnchorKind, DEGRADED_ANCHOR_ROLE, FLOW_FILE_VERSION, FlowErrorCode, FlowFileSchema, QueryBy, defaultIsSensitiveKey, } from '@reticlehq/core';
3
3
  import { ReticleTool } from '../tools/tool-names.js';
4
4
  import { asString, asRecord } from '../tools/tools-helpers.js';
5
5
  import { applyHealChanges } from './heal.js';
6
+ import { flowIntentGap, linkFlowIntent } from './flow-intent.js';
7
+ import { IntentStore } from '../intent/intent-store.js';
6
8
  import { flowDir, flowPath, reticleDirPaths, isValidFlowName } from '../project/reticle-dir.js';
7
9
  /**
8
10
  * A projectId only scopes storage when it's a safe single path segment (it's stamped from the
@@ -92,8 +94,464 @@ function subStepToFlowStep(raw) {
92
94
  const { anchor, degraded } = anchorForStep(sub);
93
95
  return buildStep(ReticleTool.ACT, anchor, action, args, degraded);
94
96
  }
97
+ /**
98
+ * What a redacted fill value is replaced WITH.
99
+ *
100
+ * Replaced, never dropped. Replay still needs a step there, and a flow that silently loses its
101
+ * password step drifts at sign-in forever with no explanation of why. The placeholder also tells a
102
+ * reader what to do: the value belongs in the environment, not in a file they are about to commit.
103
+ */
104
+ export const REDACTED_FILL = '<redacted: supply at replay>';
105
+ /**
106
+ * Strip credentials from what gets written to disk.
107
+ *
108
+ * is the GIT-CHECKED flow store — that is its whole purpose, and this file's own
109
+ * header already insists a volatile ref must never "leak into a git-checked file". A password did:
110
+ * recording a sign-in captures the fill VALUE verbatim, so the first flow anybody records on an
111
+ * authenticated app writes their password into a file they then commit. Found by driving a fresh
112
+ * workspace, where .claude/scheduled_tasks.lock
113
+ .claude/skills/reticle-ui/SKILL.md
114
+ .env.example
115
+ .gcloudignore
116
+ .gitattributes
117
+ .github/workflows/ci.yml
118
+ .gitignore
119
+ .prettierignore
120
+ .prettierrc
121
+ .reticle/flows/console-4734c2f0/sign-in.json
122
+ .reticle/flows/console-4734c2f0/triage-filter-link.json
123
+ .reticle/flows/console-4734c2f0/triage-queue.json
124
+ CLAUDE.md
125
+ LICENSE
126
+ README.md
127
+ apps/api/.env.example
128
+ apps/api/.gitignore
129
+ apps/api/.prettierrc.json
130
+ apps/api/certs/supabase-prod-ca.crt
131
+ apps/api/eslint.config.mjs
132
+ apps/api/package.json
133
+ apps/api/pnpm-lock.yaml
134
+ apps/api/scripts/gen-license-keypair.mjs
135
+ apps/api/scripts/purge-test-user.mjs
136
+ apps/api/scripts/setup-razorpay-plans.mjs
137
+ apps/api/src/constants/auth.constants.ts
138
+ apps/api/src/constants/billing.constants.ts
139
+ apps/api/src/constants/corpus.constants.ts
140
+ apps/api/src/constants/http.constants.ts
141
+ apps/api/src/constants/identity.constants.ts
142
+ apps/api/src/constants/issues.constants.ts
143
+ apps/api/src/constants/overview.constants.ts
144
+ apps/api/src/constants/project.constants.ts
145
+ apps/api/src/constants/review.constants.ts
146
+ apps/api/src/constants/runs.constants.ts
147
+ apps/api/src/constants/verification.constants.ts
148
+ apps/api/src/domain/admin/admin-gate.test.ts
149
+ apps/api/src/domain/admin/admin.routes.test.ts
150
+ apps/api/src/domain/admin/admin.routes.ts
151
+ apps/api/src/domain/admin/admin.service.ts
152
+ apps/api/src/domain/billing/billing.routes.ts
153
+ apps/api/src/domain/billing/coupon.routes.test.ts
154
+ apps/api/src/domain/billing/coupons.service.ts
155
+ apps/api/src/domain/billing/entitlements.test.ts
156
+ apps/api/src/domain/billing/entitlements.ts
157
+ apps/api/src/domain/billing/plans.routes.test.ts
158
+ apps/api/src/domain/billing/subscription.routes.test.ts
159
+ apps/api/src/domain/corpus/corpus.service.test.ts
160
+ apps/api/src/domain/corpus/corpus.service.ts
161
+ apps/api/src/domain/flows/flows.routes.ts
162
+ apps/api/src/domain/flows/flows.service.test.ts
163
+ apps/api/src/domain/flows/flows.service.ts
164
+ apps/api/src/domain/identity/access-control.routes.test.ts
165
+ apps/api/src/domain/identity/api-key.test.ts
166
+ apps/api/src/domain/identity/api-key.ts
167
+ apps/api/src/domain/identity/auth-audit.service.ts
168
+ apps/api/src/domain/identity/create-org.routes.test.ts
169
+ apps/api/src/domain/identity/device-auth.service.ts
170
+ apps/api/src/domain/identity/identity.routes.ts
171
+ apps/api/src/domain/identity/identity.service.test.ts
172
+ apps/api/src/domain/identity/identity.service.ts
173
+ apps/api/src/domain/identity/identity.types.test.ts
174
+ apps/api/src/domain/identity/identity.types.ts
175
+ apps/api/src/domain/identity/invites.test.ts
176
+ apps/api/src/domain/identity/join-workspace.test.ts
177
+ apps/api/src/domain/identity/login-code.ts
178
+ apps/api/src/domain/identity/members.routes.test.ts
179
+ apps/api/src/domain/identity/members.routes.ts
180
+ apps/api/src/domain/identity/oauth.routes.test.ts
181
+ apps/api/src/domain/identity/oauth.routes.ts
182
+ apps/api/src/domain/identity/password-auth.test.ts
183
+ apps/api/src/domain/identity/password-routes.test.ts
184
+ apps/api/src/domain/identity/password.test.ts
185
+ apps/api/src/domain/identity/password.ts
186
+ apps/api/src/domain/identity/permissions.test.ts
187
+ apps/api/src/domain/identity/permissions.ts
188
+ apps/api/src/domain/identity/project-scope.routes.test.ts
189
+ apps/api/src/domain/identity/team-scenarios.test.ts
190
+ apps/api/src/domain/ingest/agent-attribution.test.ts
191
+ apps/api/src/domain/ingest/ingest.service.ts
192
+ apps/api/src/domain/insights/insights.routes.test.ts
193
+ apps/api/src/domain/insights/insights.routes.ts
194
+ apps/api/src/domain/insights/insights.service.ts
195
+ apps/api/src/domain/issues/attribution-filter.test.ts
196
+ apps/api/src/domain/issues/issue-extract.test.ts
197
+ apps/api/src/domain/issues/issue-extract.ts
198
+ apps/api/src/domain/issues/issue-owner.test.ts
199
+ apps/api/src/domain/issues/issue-repair.test.ts
200
+ apps/api/src/domain/issues/issues.routes.test.ts
201
+ apps/api/src/domain/issues/issues.routes.ts
202
+ apps/api/src/domain/issues/issues.service.test.ts
203
+ apps/api/src/domain/issues/issues.service.ts
204
+ apps/api/src/domain/licensing/licensing.service.test.ts
205
+ apps/api/src/domain/licensing/licensing.service.ts
206
+ apps/api/src/domain/licensing/subscription.service.test.ts
207
+ apps/api/src/domain/licensing/subscription.service.ts
208
+ apps/api/src/domain/memory/memory-constants.ts
209
+ apps/api/src/domain/memory/memory-from-intent.test.ts
210
+ apps/api/src/domain/memory/memory-from-intent.ts
211
+ apps/api/src/domain/memory/memory-merge.test.ts
212
+ apps/api/src/domain/memory/memory-merge.ts
213
+ apps/api/src/domain/memory/memory.routes.test.ts
214
+ apps/api/src/domain/memory/memory.routes.ts
215
+ apps/api/src/domain/memory/memory.service.ts
216
+ apps/api/src/domain/overview/honesty.test.ts
217
+ apps/api/src/domain/overview/overview.routes.ts
218
+ apps/api/src/domain/overview/overview.service.test.ts
219
+ apps/api/src/domain/overview/overview.service.ts
220
+ apps/api/src/domain/project/project-access.routes.ts
221
+ apps/api/src/domain/project/project-access.test.ts
222
+ apps/api/src/domain/project/project-cascade.test.ts
223
+ apps/api/src/domain/project/project-name.test.ts
224
+ apps/api/src/domain/project/project.routes.ts
225
+ apps/api/src/domain/project/project.service.test.ts
226
+ apps/api/src/domain/project/project.service.ts
227
+ apps/api/src/domain/reviews/review.service.test.ts
228
+ apps/api/src/domain/reviews/review.service.ts
229
+ apps/api/src/domain/runs/regrade-backfill.test.ts
230
+ apps/api/src/domain/runs/regrade-backfill.ts
231
+ apps/api/src/domain/runs/run-grade.test.ts
232
+ apps/api/src/domain/runs/run-grade.ts
233
+ apps/api/src/domain/runs/runs.routes.ts
234
+ apps/api/src/domain/runs/runs.service.test.ts
235
+ apps/api/src/domain/runs/runs.service.ts
236
+ apps/api/src/domain/sync/permutations.test.ts
237
+ apps/api/src/domain/sync/sync.routes.test.ts
238
+ apps/api/src/domain/sync/sync.routes.ts
239
+ apps/api/src/domain/sync/sync.service.ts
240
+ apps/api/src/domain/verifications/verifications.routes.ts
241
+ apps/api/src/domain/verifications/verifications.service.test.ts
242
+ apps/api/src/domain/verifications/verifications.service.ts
243
+ apps/api/src/http/app-context.ts
244
+ apps/api/src/http/app.test.ts
245
+ apps/api/src/http/app.ts
246
+ apps/api/src/http/cookies.ts
247
+ apps/api/src/http/guards.ts
248
+ apps/api/src/http/http-kit.ts
249
+ apps/api/src/http/malformed-body.test.ts
250
+ apps/api/src/http/server.ts
251
+ apps/api/src/http/spa.test.ts
252
+ apps/api/src/platform/auth/session.test.ts
253
+ apps/api/src/platform/auth/session.ts
254
+ apps/api/src/platform/clock.ts
255
+ apps/api/src/platform/config.test.ts
256
+ apps/api/src/platform/config.ts
257
+ apps/api/src/platform/db/database.test.ts
258
+ apps/api/src/platform/db/database.ts
259
+ apps/api/src/platform/db/schema.ts
260
+ apps/api/src/platform/google-id-token.test.ts
261
+ apps/api/src/platform/google-id-token.ts
262
+ apps/api/src/platform/id.ts
263
+ apps/api/src/platform/license-signer.ts
264
+ apps/api/src/platform/mailer.test.ts
265
+ apps/api/src/platform/mailer.ts
266
+ apps/api/src/platform/oauth.test.ts
267
+ apps/api/src/platform/oauth.ts
268
+ apps/api/src/platform/payment.ts
269
+ apps/api/src/platform/rate-limit.test.ts
270
+ apps/api/src/platform/rate-limit.ts
271
+ apps/api/src/platform/razorpay.test.ts
272
+ apps/api/src/platform/razorpay.ts
273
+ apps/api/src/platform/reticle-runner.test.ts
274
+ apps/api/src/platform/reticle-runner.ts
275
+ apps/api/src/platform/runner.ts
276
+ apps/api/src/platform/verification-worker.ts
277
+ apps/api/src/test-support/flow-fixture.ts
278
+ apps/api/src/test-support/run-fixture.ts
279
+ apps/api/src/types/brand.ts
280
+ apps/api/src/types/fastify.d.ts
281
+ apps/api/tsconfig.json
282
+ apps/api/vitest.config.ts
283
+ apps/console/.env.example
284
+ apps/console/.gitignore
285
+ apps/console/.prettierrc.json
286
+ apps/console/.reticle/cloud.json
287
+ apps/console/components.json
288
+ apps/console/eslint.config.mjs
289
+ apps/console/index.html
290
+ apps/console/package.json
291
+ apps/console/pnpm-lock.yaml
292
+ apps/console/scripts/selfcheck.mjs
293
+ apps/console/src/App.tsx
294
+ apps/console/src/api/client.ts
295
+ apps/console/src/api/endpoints.ts
296
+ apps/console/src/api/types.ts
297
+ apps/console/src/app/app-shell.tsx
298
+ apps/console/src/app/auth-context.tsx
299
+ apps/console/src/app/live.ts
300
+ apps/console/src/app/new-workspace.tsx
301
+ apps/console/src/app/org-switcher.tsx
302
+ apps/console/src/app/project-context.test.tsx
303
+ apps/console/src/app/project-context.tsx
304
+ apps/console/src/app/project-switcher.tsx
305
+ apps/console/src/app/scope-notice.tsx
306
+ apps/console/src/app/theme.ts
307
+ apps/console/src/app/toast.tsx
308
+ apps/console/src/components/ui.tsx
309
+ apps/console/src/constants/api.constants.ts
310
+ apps/console/src/design/tailwind.css
311
+ apps/console/src/design/theme.css
312
+ apps/console/src/design/tokens.ts
313
+ apps/console/src/features/auth/device-view.tsx
314
+ apps/console/src/features/auth/login-view.tsx
315
+ apps/console/src/features/billing/billing-view.tsx
316
+ apps/console/src/features/billing/redeem-panel.tsx
317
+ apps/console/src/features/connect/connect-view.test.tsx
318
+ apps/console/src/features/connect/connect-view.tsx
319
+ apps/console/src/features/connect/copy-button.tsx
320
+ apps/console/src/features/issues/assignee.tsx
321
+ apps/console/src/features/issues/expected-actual.tsx
322
+ apps/console/src/features/issues/fix-prompt.tsx
323
+ apps/console/src/features/issues/issues-view.test.tsx
324
+ apps/console/src/features/issues/issues-view.tsx
325
+ apps/console/src/features/issues/source-link.tsx
326
+ apps/console/src/features/keys/keys-view.test.tsx
327
+ apps/console/src/features/keys/keys-view.tsx
328
+ apps/console/src/features/memory/memory-view.tsx
329
+ apps/console/src/features/overview/getting-started.test.tsx
330
+ apps/console/src/features/overview/getting-started.tsx
331
+ apps/console/src/features/overview/impact-board.test.tsx
332
+ apps/console/src/features/overview/impact-board.tsx
333
+ apps/console/src/features/overview/impact-format.ts
334
+ apps/console/src/features/overview/overview-view.test.tsx
335
+ apps/console/src/features/overview/overview-view.tsx
336
+ apps/console/src/features/overview/people-panel.tsx
337
+ apps/console/src/features/overview/trust-panels.test.tsx
338
+ apps/console/src/features/overview/trust-panels.tsx
339
+ apps/console/src/features/runs/runs-view.tsx
340
+ apps/console/src/features/settings/members-panel.test.tsx
341
+ apps/console/src/features/settings/members-panel.tsx
342
+ apps/console/src/features/settings/plan-panel.tsx
343
+ apps/console/src/features/settings/project-access-panel.test.tsx
344
+ apps/console/src/features/settings/project-access-panel.tsx
345
+ apps/console/src/features/settings/settings-view.test.tsx
346
+ apps/console/src/features/settings/settings-view.tsx
347
+ apps/console/src/lib/utils.ts
348
+ apps/console/src/main.tsx
349
+ apps/console/src/test-setup.ts
350
+ apps/console/src/test-support.ts
351
+ apps/console/src/ui/alert-dialog.tsx
352
+ apps/console/src/ui/avatar.tsx
353
+ apps/console/src/ui/badge.tsx
354
+ apps/console/src/ui/button.tsx
355
+ apps/console/src/ui/card.tsx
356
+ apps/console/src/ui/checkbox.tsx
357
+ apps/console/src/ui/command.tsx
358
+ apps/console/src/ui/dialog.tsx
359
+ apps/console/src/ui/dropdown-menu.tsx
360
+ apps/console/src/ui/index.ts
361
+ apps/console/src/ui/input.tsx
362
+ apps/console/src/ui/label.tsx
363
+ apps/console/src/ui/popover.tsx
364
+ apps/console/src/ui/scroll-area.tsx
365
+ apps/console/src/ui/select.tsx
366
+ apps/console/src/ui/separator.tsx
367
+ apps/console/src/ui/sheet.tsx
368
+ apps/console/src/ui/skeleton.tsx
369
+ apps/console/src/ui/sonner.tsx
370
+ apps/console/src/ui/switch.tsx
371
+ apps/console/src/ui/table.tsx
372
+ apps/console/src/ui/tabs.tsx
373
+ apps/console/src/ui/textarea.tsx
374
+ apps/console/src/ui/tooltip.tsx
375
+ apps/console/tsconfig.json
376
+ apps/console/vite.config.ts
377
+ apps/console/vitest.config.ts
378
+ apps/verifier/package.json
379
+ apps/verifier/src/anthropic-driver.test.ts
380
+ apps/verifier/src/anthropic-driver.ts
381
+ apps/verifier/src/bench.ts
382
+ apps/verifier/src/best-effort.ts
383
+ apps/verifier/src/call-tool.test.ts
384
+ apps/verifier/src/call-tool.ts
385
+ apps/verifier/src/capability.ts
386
+ apps/verifier/src/cli.ts
387
+ apps/verifier/src/coverage.test.ts
388
+ apps/verifier/src/coverage.ts
389
+ apps/verifier/src/differential.test.ts
390
+ apps/verifier/src/differential.ts
391
+ apps/verifier/src/explore/routes-memory.test.ts
392
+ apps/verifier/src/explore/routes.test.ts
393
+ apps/verifier/src/explore/routes.ts
394
+ apps/verifier/src/explore/scope.test.ts
395
+ apps/verifier/src/explore/scope.ts
396
+ apps/verifier/src/explore/verify-routes-live.test.ts
397
+ apps/verifier/src/explore/verify-routes.test.ts
398
+ apps/verifier/src/explore/verify-routes.ts
399
+ apps/verifier/src/gateway-live.test.ts
400
+ apps/verifier/src/gateway.test.ts
401
+ apps/verifier/src/gateway.ts
402
+ apps/verifier/src/grade-reconcile.test.ts
403
+ apps/verifier/src/grade.ts
404
+ apps/verifier/src/harness.test.ts
405
+ apps/verifier/src/harness.ts
406
+ apps/verifier/src/index.ts
407
+ apps/verifier/src/inject/inject-live.test.ts
408
+ apps/verifier/src/inject/inject-run.test.ts
409
+ apps/verifier/src/inject/injecting-launcher.test.ts
410
+ apps/verifier/src/inject/injecting-launcher.ts
411
+ apps/verifier/src/inject/origin-bridges.test.ts
412
+ apps/verifier/src/inject/origin-bridges.ts
413
+ apps/verifier/src/inject/sdk-bundle.test.ts
414
+ apps/verifier/src/inject/sdk-bundle.ts
415
+ apps/verifier/src/memory/knowledge-store.test.ts
416
+ apps/verifier/src/memory/knowledge-store.ts
417
+ apps/verifier/src/model/app-model-starting-route.test.ts
418
+ apps/verifier/src/model/app-model.test.ts
419
+ apps/verifier/src/model/app-model.ts
420
+ apps/verifier/src/oracles/crawl-artifact.test.ts
421
+ apps/verifier/src/oracles/crawl-artifact.ts
422
+ apps/verifier/src/oracles/finding.ts
423
+ apps/verifier/src/oracles/history.test.ts
424
+ apps/verifier/src/oracles/history.ts
425
+ apps/verifier/src/oracles/index.ts
426
+ apps/verifier/src/oracles/metamorphic.test.ts
427
+ apps/verifier/src/oracles/metamorphic.ts
428
+ apps/verifier/src/oracles/state-write-drift.test.ts
429
+ apps/verifier/src/oracles/state-write-drift.ts
430
+ apps/verifier/src/parallel/fanout.test.ts
431
+ apps/verifier/src/parallel/fanout.ts
432
+ apps/verifier/src/path-segment.test.ts
433
+ apps/verifier/src/path-segment.ts
434
+ apps/verifier/src/precision.test.ts
435
+ apps/verifier/src/precision.ts
436
+ apps/verifier/src/preview/readiness-run.test.ts
437
+ apps/verifier/src/preview/readiness.test.ts
438
+ apps/verifier/src/preview/readiness.ts
439
+ apps/verifier/src/promote.test.ts
440
+ apps/verifier/src/promote.ts
441
+ apps/verifier/src/regression.test.ts
442
+ apps/verifier/src/regression.ts
443
+ apps/verifier/src/report-gaps.test.ts
444
+ apps/verifier/src/report-routes.test.ts
445
+ apps/verifier/src/report.test.ts
446
+ apps/verifier/src/report.ts
447
+ apps/verifier/src/reticle-toolset.test.ts
448
+ apps/verifier/src/reticle-toolset.ts
449
+ apps/verifier/src/runner.test.ts
450
+ apps/verifier/src/runner.ts
451
+ apps/verifier/src/serve.ts
452
+ apps/verifier/src/store-fs.test.ts
453
+ apps/verifier/src/store-fs.ts
454
+ apps/verifier/src/suite/derive-expect.test.ts
455
+ apps/verifier/src/suite/derive-expect.ts
456
+ apps/verifier/src/suite/domains.test.ts
457
+ apps/verifier/src/suite/domains.ts
458
+ apps/verifier/src/suite/flow-health.test.ts
459
+ apps/verifier/src/suite/flow-health.ts
460
+ apps/verifier/src/suite/flow-identity.test.ts
461
+ apps/verifier/src/suite/flow-identity.ts
462
+ apps/verifier/src/suite/replay-live.test.ts
463
+ apps/verifier/src/suite/replay.test.ts
464
+ apps/verifier/src/suite/replay.ts
465
+ apps/verifier/src/suite/route-set.test.ts
466
+ apps/verifier/src/suite/route-set.ts
467
+ apps/verifier/src/suite/route-tagging.test.ts
468
+ apps/verifier/src/suite/segment.test.ts
469
+ apps/verifier/src/suite/segment.ts
470
+ apps/verifier/src/suite/suite-store.test.ts
471
+ apps/verifier/src/suite/suite-store.ts
472
+ apps/verifier/src/suite/unproven.test.ts
473
+ apps/verifier/src/suite/unproven.ts
474
+ apps/verifier/src/suite/write-set.ts
475
+ apps/verifier/src/tool-contract.test.ts
476
+ apps/verifier/src/transport.test.ts
477
+ apps/verifier/src/transport.ts
478
+ apps/verifier/src/with-timeout.test.ts
479
+ apps/verifier/src/with-timeout.ts
480
+ apps/verifier/tsconfig.json
481
+ deploy/README.md
482
+ deploy/api.Dockerfile
483
+ deploy/deploy.sh
484
+ deploy/secrets.env.example
485
+ deploy/verifier.Dockerfile
486
+ docs/fixtures.md
487
+ docs/gates.md
488
+ docs/persona.md
489
+ docs/service-api.md
490
+ eslint.config.mjs
491
+ eval/fixtures/index.html
492
+ eval/fixtures/package.json
493
+ eval/fixtures/src/main.ts
494
+ eval/fixtures/src/manifest.ts
495
+ eval/fixtures/src/scenario.ts
496
+ eval/fixtures/src/scenarios/canvas.ts
497
+ eval/fixtures/src/scenarios/checkout.ts
498
+ eval/fixtures/src/scenarios/dashboard.ts
499
+ eval/fixtures/src/scenarios/game.ts
500
+ eval/fixtures/src/scenarios/index.ts
501
+ eval/fixtures/src/scenarios/landing.ts
502
+ eval/fixtures/src/scenarios/realtime.ts
503
+ eval/fixtures/src/scenarios/trading.ts
504
+ eval/fixtures/src/scenarios/video.ts
505
+ eval/fixtures/src/scenarios/workspace.ts
506
+ eval/fixtures/src/styles.css
507
+ eval/fixtures/tsconfig.json
508
+ eval/fixtures/vite.config.ts
509
+ package.json
510
+ pnpm-lock.yaml
511
+ pnpm-workspace.yaml
512
+ pre-commit.sh
513
+ scripts/capacity.mjs
514
+ scripts/eval-env.sh
515
+ scripts/token-cost.mjs
516
+ tsconfig.base.json
517
+ tsconfig.json
518
+ turbo.json confirmed a tracked flow holding a plaintext password.
519
+ *
520
+ * The decision keys off the ANCHOR, not the value. The anchor names the field — ,
521
+ * — so a credential is recognised by WHERE it was typed rather than by guessing whether
522
+ * the characters look secret, which is the guess that both over-redacts a search box and misses a
523
+ * password that happens to be a dictionary word.
524
+ *
525
+ * is the same rule the network channel already redacts by. One rule, so a
526
+ * field considered sensitive on the wire cannot be considered safe on disk.
527
+ */
528
+ function redactSecretFill(anchor, args) {
529
+ if (typeof args['value'] !== 'string')
530
+ return args;
531
+ const field = anchorFieldName(anchor);
532
+ if (field === undefined || !defaultIsSensitiveKey(field))
533
+ return args;
534
+ return { ...args, value: REDACTED_FILL };
535
+ }
536
+ /**
537
+ * What the anchor CALLS the field it points at.
538
+ *
539
+ * Every anchor kind names its target differently and all of them can name a password: a testid
540
+ * (auth-password), an accessible name (role=textbox, name="Password"), a signal. Checking only the
541
+ * testid variant would redact the app that uses test ids and quietly leak the one that does not —
542
+ * and an app without test ids is exactly the app whose flows were recorded by role.
543
+ */
544
+ function anchorFieldName(anchor) {
545
+ if (AnchorKind.TESTID === anchor.kind)
546
+ return anchor.value;
547
+ if (AnchorKind.ROLE === anchor.kind)
548
+ return anchor.name;
549
+ if (AnchorKind.SIGNAL === anchor.kind)
550
+ return anchor.name;
551
+ return undefined;
552
+ }
95
553
  function buildStep(tool, anchor, action, args, degraded) {
96
- const step = { tool, anchor, args };
554
+ const step = { tool, anchor, args: redactSecretFill(anchor, args) };
97
555
  if (action !== undefined)
98
556
  step.action = action;
99
557
  if (degraded)
@@ -168,6 +626,34 @@ export class FlowStore {
168
626
  #serialize(flow) {
169
627
  return `${JSON.stringify(flow, null, JSON_INDENT)}\n`;
170
628
  }
629
+ /**
630
+ * Register the flow's business goal in the intent ledger and stamp the row's id onto the flow.
631
+ *
632
+ * Both save paths route through here — the compiled-recording one and the in-page recorder one —
633
+ * because a flow's goal must land in the ledger whichever way the flow arrived. A flow with no
634
+ * goal is returned untouched and nothing is written, so an older flow keeps its exact bytes.
635
+ */
636
+ #linkIntent(flow) {
637
+ return linkFlowIntent(new IntentStore(this.#fs, this.#root, this.#clock), flow);
638
+ }
639
+ /**
640
+ * What a caller is told about a flow that just landed on disk.
641
+ *
642
+ * Both save paths build it here rather than each assembling their own object, because the two used
643
+ * to be duplicates and the intent nudge is exactly the kind of field that gets added to one of a
644
+ * pair. A flow saved by the recorder and a flow saved from a compiled recording are the same
645
+ * regression test, and must not report differently for having arrived by a different door.
646
+ */
647
+ #summary(flow) {
648
+ const gap = flowIntentGap(flow);
649
+ return {
650
+ name: flow.name,
651
+ stepCount: flow.steps.length,
652
+ degraded: flow.steps.filter((s) => true === s.degraded).length,
653
+ empty: 0 === flow.steps.length,
654
+ ...(gap === undefined ? {} : { intentGap: gap }),
655
+ };
656
+ }
171
657
  /**
172
658
  * Convert a CompiledProgram (testid-normalized) into an anchored, on-disk flow + write it.
173
659
  * Optionally fold structured annotations (per-step expect, dynamic[], success) onto
@@ -185,20 +671,21 @@ export class FlowStore {
185
671
  ...(pid === undefined ? {} : { projectId: pid }),
186
672
  createdAt: this.#clock.now(),
187
673
  steps,
674
+ /*
675
+ * The route the journey started on, when the recording captured one.
676
+ *
677
+ * The in-page recorder has always written this; the agent's recording had nowhere to put it,
678
+ * so a flow an agent recorded replayed from wherever the tab happened to be. A first step
679
+ * whose whole consequence is "this navigation fetches" fetches nothing when replay already
680
+ * sits on the destination, and the flow then drifts for a reason that has nothing to do with
681
+ * the app. Observed doing exactly that.
682
+ */
683
+ ...(program.startPath === undefined ? {} : { startPath: program.startPath }),
188
684
  };
189
- const flow = withAnnotations(base, annotations);
685
+ const flow = await this.#linkIntent(withAnnotations(base, annotations));
190
686
  await this.#fs.mkdir(flowDir(this.#root, pid));
191
687
  await this.#fs.writeFile(flowPath(this.#root, program.name, pid), this.#serialize(flow));
192
- const degraded = flow.steps.filter((s) => true === s.degraded).length;
193
- return {
194
- ok: true,
195
- value: {
196
- name: program.name,
197
- stepCount: flow.steps.length,
198
- degraded,
199
- empty: 0 === flow.steps.length,
200
- },
201
- };
688
+ return { ok: true, value: this.#summary(flow) };
202
689
  }
203
690
  /**
204
691
  * Persist an already-anchored FlowFile captured in-page (no recompilation). The
@@ -215,19 +702,10 @@ export class FlowStore {
215
702
  const parsed = FlowFileSchema.safeParse(stamped);
216
703
  if (!parsed.success)
217
704
  return { ok: false, code: FlowErrorCode.PARSE_FAILED };
218
- const valid = parsed.data;
705
+ const valid = await this.#linkIntent(parsed.data);
219
706
  await this.#fs.mkdir(flowDir(this.#root, pid));
220
707
  await this.#fs.writeFile(flowPath(this.#root, asFlowName(valid.name), pid), this.#serialize(valid));
221
- const degraded = valid.steps.filter((s) => true === s.degraded).length;
222
- return {
223
- ok: true,
224
- value: {
225
- name: valid.name,
226
- stepCount: valid.steps.length,
227
- degraded,
228
- empty: 0 === valid.steps.length,
229
- },
230
- };
708
+ return { ok: true, value: this.#summary(valid) };
231
709
  }
232
710
  /**
233
711
  * Apply confident testid rebinds to an on-disk flow (the reticle_flow_heal
@@ -12,6 +12,7 @@ import { replayFlow } from './flow-replay.js';
12
12
  import { applyHealChanges, collectProposals } from './heal.js';
13
13
  import { assertSuccess, dynamicTestids, successLabel } from './flow-success.js';
14
14
  import { flowErrorMessage, sessionProjectId } from './flow-replay-run.js';
15
+ import { flowsForSession } from './flow-store-for-session.js';
15
16
  const HEAL_MESSAGES = {
16
17
  NOTHING: 'nothing to heal — every anchor resolved on replay',
17
18
  HEALED: "rewrote drifted testid anchors to their nearest surviving match and re-verified the flow's success consequence still fires",
@@ -27,7 +28,7 @@ export async function healFlow(deps, args) {
27
28
  const name = asString(args['flowName']) ?? '';
28
29
  const apply = true === args['apply'];
29
30
  const projectId = sessionProjectId(deps, asString(args['sessionId']));
30
- const loaded = await deps.flows.load(name, projectId);
31
+ const loaded = await flowsForSession(deps, projectId).flows.load(name, projectId);
31
32
  if (!loaded.ok) {
32
33
  return {
33
34
  name,
@@ -113,7 +114,9 @@ export async function healFlow(deps, args) {
113
114
  };
114
115
  }
115
116
  }
116
- const written = await deps.flows.heal(name, proposals.map(toChange), projectId);
117
+ // Healing WRITES, so it must land where the load came from — a heal that read the app's flow and
118
+ // wrote the daemon's copy would silently fork the two.
119
+ const written = await flowsForSession(deps, projectId).flows.heal(name, proposals.map(toChange), projectId);
117
120
  if (!written.ok) {
118
121
  return {
119
122
  name,
@@ -19,20 +19,25 @@ import type { FlowExpect } from '@reticlehq/core';
19
19
  import type { Predicate } from '../events/predicate.js';
20
20
  export declare function predicateToExpect(predicate: Predicate): FlowExpect | undefined;
21
21
  /**
22
- * The subset a REPLAY actually enforces today.
22
+ * The subset a REPLAY actually enforces.
23
23
  *
24
- * `flow-replay` checks exactly two things per step: `expect.element.testid` is present after the
25
- * action, and `expect.state` holds. A recorded `net` or `signal` expect is graded as a consequence
26
- * assertion by `classifyFlowAssertions` and then never evaluated — so writing one into a flow file
27
- * would make it report `grade: "asserted"` while nothing checks it.
24
+ * The rule has never changed: never write an assertion into a flow file that nothing evaluates. A
25
+ * flow reporting `grade: "asserted"` while its assertion is read by no one is a false green, in the
26
+ * feature whose entire purpose is preventing them.
28
27
  *
29
- * That is a false green, in the feature whose entire purpose is preventing them, produced by the
30
- * change that was meant to strengthen it. So only the enforced kinds are recorded: a flow that says
31
- * it asserts something must actually go red when that thing breaks.
28
+ * What changed is the SET. This kept only `element.testid` and `state`, because for a long time
29
+ * those were the only kinds replay checked — and the note here said lifting it "requires replay to
30
+ * evaluate them per step". Replay now does exactly that: `assertStepExpect` compiles every
31
+ * remaining kind through `successToPredicate` and waits on it. The condition was met and the filter
32
+ * was not updated, so the two drifted.
32
33
  *
33
- * Lifting this is worth doing — net and signal are the assertions agents most often make, and the
34
- * conversion above already handles them — but it requires replay to evaluate them per step (the
35
- * machinery exists: successToPredicate + the predicate engine). Until then, recording them would
36
- * trade a weak flow for a lying one.
34
+ * That drift had a cost, and it fell on the agent. `reticle_act_and_wait { until }` IS the agent
35
+ * saying what success means, and `net` is overwhelmingly what it says. Every one of those was
36
+ * discarded at capture, so an agent-recorded flow reached disk assertion-free BY CONSTRUCTION and
37
+ * `reticle_verify` then correctly called it `unverifiable` — the record → save → verify path
38
+ * completing all the way to a run that could never be a pass. Found by driving it.
39
+ *
40
+ * The list below is exactly what `successToPredicate` reads, plus the testid the step runner
41
+ * asserts directly against the DOM. Anything it cannot compile is still dropped.
37
42
  */
38
43
  export declare function enforcedOnReplay(expect: FlowExpect | undefined): FlowExpect | undefined;