@reticlehq/server 3.8.2 → 3.10.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 (477) hide show
  1. package/LICENSE +201 -104
  2. package/NOTICE +5 -0
  3. package/README.md +1 -1
  4. package/SKILL.md +13 -12
  5. package/bin/launch.js +13 -0
  6. package/bin/package.json +3 -0
  7. package/bin/reticle.js +66 -8
  8. package/dist/chromium-launch-options.d.ts +25 -0
  9. package/dist/chromium-launch-options.js +21 -1
  10. package/dist/command/cli/adhoc-suite.js +2 -0
  11. package/dist/command/cli/adhoc-verdict.d.ts +2 -43
  12. package/dist/command/cli/adhoc-verdict.js +50 -160
  13. package/dist/command/cli/answers/gate-exit.d.ts +6 -2
  14. package/dist/command/cli/answers/gate-exit.js +12 -2
  15. package/dist/command/cli/answers/mcp-connection-hint.d.ts +2 -0
  16. package/dist/command/cli/answers/mcp-connection-hint.js +6 -0
  17. package/dist/command/cli/ci-hint.d.ts +44 -0
  18. package/dist/command/cli/ci-hint.js +72 -0
  19. package/dist/command/cli/cli-doctor.d.ts +6 -1
  20. package/dist/command/cli/cli-doctor.js +46 -5
  21. package/dist/command/cli/cli-flow-commands.d.ts +7 -1
  22. package/dist/command/cli/cli-flow-commands.js +39 -24
  23. package/dist/command/cli/cli-kill.d.ts +21 -0
  24. package/dist/command/cli/cli-kill.js +47 -4
  25. package/dist/command/cli/cli-parse-compare.d.ts +22 -0
  26. package/dist/command/cli/cli-parse-compare.js +75 -0
  27. package/dist/command/cli/cli-parse-grade.d.ts +36 -0
  28. package/dist/command/cli/cli-parse-grade.js +75 -0
  29. package/dist/command/cli/cli-parse-grammar.d.ts +2 -0
  30. package/dist/command/cli/cli-parse-grammar.js +18 -20
  31. package/dist/command/cli/cli-parse-verify.d.ts +10 -0
  32. package/dist/command/cli/cli-parse-verify.js +63 -14
  33. package/dist/command/cli/cli-parse.d.ts +22 -17
  34. package/dist/command/cli/cli-parse.js +54 -32
  35. package/dist/command/cli/cli-update-commands.d.ts +1 -1
  36. package/dist/command/cli/cli-update-commands.js +29 -20
  37. package/dist/command/cli/cli-usage.js +61 -31
  38. package/dist/command/cli/cli-verify.d.ts +17 -3
  39. package/dist/command/cli/cli-verify.js +59 -21
  40. package/dist/command/cli/cloud-cli.js +2 -119
  41. package/dist/command/cli/daemon-link/daemon-client.d.ts +45 -0
  42. package/dist/command/cli/daemon-link/daemon-client.js +205 -0
  43. package/dist/command/cli/doctor/browser/chromium-hint.d.ts +6 -1
  44. package/dist/command/cli/doctor/browser/chromium-hint.js +11 -5
  45. package/dist/command/cli/doctor/doctor-daemon-line.js +6 -3
  46. package/dist/command/cli/doctor/doctor-fix.d.ts +44 -0
  47. package/dist/command/cli/doctor/doctor-fix.js +89 -0
  48. package/dist/command/cli/doctor/doctor-launcher-line.d.ts +23 -0
  49. package/dist/command/cli/doctor/doctor-launcher-line.js +60 -0
  50. package/dist/command/cli/doctor/doctor-rows.d.ts +4 -0
  51. package/dist/command/cli/doctor/doctor-rows.js +4 -0
  52. package/dist/command/cli/doctor-repairs.d.ts +64 -0
  53. package/dist/command/cli/doctor-repairs.js +214 -0
  54. package/dist/command/cli/drive/drive-command.js +3 -7
  55. package/dist/command/cli/ensure-daemon.d.ts +26 -0
  56. package/dist/command/cli/ensure-daemon.js +57 -0
  57. package/dist/command/cli/finished-run/grade-command.d.ts +23 -0
  58. package/dist/command/cli/finished-run/grade-command.js +180 -0
  59. package/dist/command/cli/first-use-checks.d.ts +41 -0
  60. package/dist/command/cli/first-use-checks.js +127 -0
  61. package/dist/command/cli/first-verdict-node.d.ts +3 -0
  62. package/dist/command/cli/first-verdict-node.js +189 -0
  63. package/dist/command/cli/first-verdict.d.ts +126 -0
  64. package/dist/command/cli/first-verdict.js +267 -0
  65. package/dist/command/cli/launch/sdk-version-match.d.ts +3 -2
  66. package/dist/command/cli/launch/sdk-version-match.js +3 -2
  67. package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +1 -1
  68. package/dist/command/cli/lifecycle/daemon-lifecycle.js +7 -6
  69. package/dist/command/cli/mcp-command.js +13 -4
  70. package/dist/command/cli/ports/port-holder.d.ts +11 -0
  71. package/dist/command/cli/ports/port-holder.js +36 -4
  72. package/dist/command/cli/setup-mcp-cli.d.ts +27 -1
  73. package/dist/command/cli/setup-mcp-cli.js +98 -23
  74. package/dist/command/cli/status/status-lines.d.ts +2 -0
  75. package/dist/command/cli/status/status-lines.js +72 -17
  76. package/dist/command/cli/status-fields.d.ts +5 -1
  77. package/dist/command/cli/status-fields.js +24 -6
  78. package/dist/command/cli/try-command.d.ts +7 -0
  79. package/dist/command/cli/try-command.js +11 -3
  80. package/dist/command/cli/two-builds/compare-command.d.ts +48 -0
  81. package/dist/command/cli/two-builds/compare-command.js +314 -0
  82. package/dist/command/cli/verify-against.d.ts +61 -0
  83. package/dist/command/cli/verify-against.js +187 -0
  84. package/dist/command/cli/verify-no-session.d.ts +2 -0
  85. package/dist/command/cli/verify-no-session.js +13 -0
  86. package/dist/command/cli/verify-results.d.ts +35 -2
  87. package/dist/command/cli/verify-results.js +76 -10
  88. package/dist/command/cli.js +112 -70
  89. package/dist/command/daemon/binding/daemon-status-probe.d.ts +3 -1
  90. package/dist/command/daemon/binding/daemon-status-probe.js +4 -2
  91. package/dist/command/daemon/daemon-argv.d.ts +9 -0
  92. package/dist/command/daemon/daemon-argv.js +11 -0
  93. package/dist/command/daemon/daemon-resolve.d.ts +8 -1
  94. package/dist/command/daemon/daemon-resolve.js +27 -1
  95. package/dist/command/daemon/daemon.d.ts +22 -4
  96. package/dist/command/daemon/daemon.js +52 -10
  97. package/dist/command/daemon/lifetime/daemon-exit.d.ts +24 -0
  98. package/dist/command/daemon/lifetime/daemon-exit.js +39 -0
  99. package/dist/command/daemon/lifetime/death-cause.d.ts +15 -0
  100. package/dist/command/daemon/lifetime/death-cause.js +149 -0
  101. package/dist/command/daemon/lifetime/heartbeat.d.ts +7 -15
  102. package/dist/command/daemon/lifetime/heartbeat.js +11 -15
  103. package/dist/command/daemon/lifetime/startup-failure.d.ts +29 -0
  104. package/dist/command/daemon/lifetime/startup-failure.js +62 -0
  105. package/dist/command/daemon/port-state.d.ts +14 -0
  106. package/dist/command/daemon/port-state.js +31 -0
  107. package/dist/command/setup/agent-configs.d.ts +2 -0
  108. package/dist/command/setup/agent-configs.js +42 -15
  109. package/dist/command/setup/agent-next-steps.d.ts +77 -0
  110. package/dist/command/setup/agent-next-steps.js +284 -0
  111. package/dist/command/setup/agent-writer.js +11 -6
  112. package/dist/command/setup/bringup/dev-server-files.d.ts +9 -0
  113. package/dist/command/setup/bringup/dev-server-files.js +17 -0
  114. package/dist/command/setup/bringup/static-page-server.d.ts +14 -2
  115. package/dist/command/setup/bringup/static-page-server.js +43 -9
  116. package/dist/command/setup/init/init-host.js +2 -0
  117. package/dist/command/setup/init/init-runtime.d.ts +6 -1
  118. package/dist/command/setup/init/init-runtime.js +63 -21
  119. package/dist/command/setup/mcp-launcher.d.ts +3 -0
  120. package/dist/command/setup/mcp-launcher.js +11 -0
  121. package/dist/command/setup/node-effects.d.ts +3 -2
  122. package/dist/command/setup/node-effects.js +9 -3
  123. package/dist/command/setup/remaining-steps.d.ts +8 -0
  124. package/dist/command/setup/remaining-steps.js +10 -0
  125. package/dist/command/setup/run-setup.d.ts +2 -0
  126. package/dist/command/setup/run-setup.js +9 -1
  127. package/dist/command/setup/setup-command.js +36 -15
  128. package/dist/command/setup/setup-mcp.d.ts +8 -0
  129. package/dist/command/setup/setup-mcp.js +47 -20
  130. package/dist/command/setup/start-dev-server.d.ts +8 -0
  131. package/dist/command/setup/start-dev-server.js +43 -0
  132. package/dist/command/update/updater.js +6 -0
  133. package/dist/command/version/identity/server-version.d.ts +2 -0
  134. package/dist/command/version/identity/server-version.js +2 -0
  135. package/dist/command/version/version-skew.d.ts +7 -0
  136. package/dist/command/version/version-skew.js +14 -3
  137. package/dist/features/compare/action-plan.d.ts +260 -0
  138. package/dist/features/compare/action-plan.js +543 -0
  139. package/dist/features/compare/behaviour-compare.d.ts +24 -0
  140. package/dist/features/compare/behaviour-compare.js +85 -0
  141. package/dist/features/compare/behaviour-diff.d.ts +97 -0
  142. package/dist/features/compare/behaviour-diff.js +202 -0
  143. package/dist/features/compare/behaviour-report.d.ts +40 -0
  144. package/dist/features/compare/behaviour-report.js +128 -0
  145. package/dist/features/compare/build-readings.d.ts +106 -0
  146. package/dist/features/compare/build-readings.js +250 -0
  147. package/dist/features/compare/compare-diff.d.ts +62 -0
  148. package/dist/features/compare/compare-diff.js +177 -0
  149. package/dist/features/compare/compare-report-html.d.ts +6 -0
  150. package/dist/features/compare/compare-report-html.js +102 -0
  151. package/dist/features/compare/compare-report.d.ts +15 -0
  152. package/dist/features/compare/compare-report.js +73 -0
  153. package/dist/features/compare/compare-run.d.ts +60 -0
  154. package/dist/features/compare/compare-run.js +123 -0
  155. package/dist/features/compare/outside/effect-lines.d.ts +26 -0
  156. package/dist/features/compare/outside/effect-lines.js +103 -0
  157. package/dist/features/compare/outside/state-sources.d.ts +76 -0
  158. package/dist/features/compare/outside/state-sources.js +164 -0
  159. package/dist/features/compare/outside/value-dictionary.d.ts +51 -0
  160. package/dist/features/compare/outside/value-dictionary.js +227 -0
  161. package/dist/features/compare/visible-content.d.ts +20 -0
  162. package/dist/features/compare/visible-content.js +125 -0
  163. package/dist/features/crawl/crawl-empty.js +2 -1
  164. package/dist/features/crawl/crawl-exhaustive.d.ts +55 -0
  165. package/dist/features/crawl/crawl-exhaustive.js +138 -0
  166. package/dist/features/crawl/crawl-tools.d.ts +9 -2
  167. package/dist/features/crawl/crawl-tools.js +28 -12
  168. package/dist/features/crawl/crawl.d.ts +8 -9
  169. package/dist/features/crawl/crawl.js +61 -65
  170. package/dist/features/exhaust/app-coverage.d.ts +5 -1
  171. package/dist/features/exhaust/app-coverage.js +3 -1
  172. package/dist/features/exhaust/code-coverage.js +8 -4
  173. package/dist/features/exhaust/edge-cases.d.ts +133 -0
  174. package/dist/features/exhaust/edge-cases.js +310 -0
  175. package/dist/features/exhaust/edges/edge-drive.d.ts +42 -0
  176. package/dist/features/exhaust/edges/edge-drive.js +364 -0
  177. package/dist/features/exhaust/edges/edge-run.d.ts +59 -0
  178. package/dist/features/exhaust/edges/edge-run.js +169 -0
  179. package/dist/features/exhaust/explorer.d.ts +87 -14
  180. package/dist/features/exhaust/explorer.js +159 -25
  181. package/dist/features/exhaust/failure-branches.d.ts +5 -0
  182. package/dist/features/exhaust/failure-branches.js +29 -11
  183. package/dist/features/exhaust/invariants.d.ts +112 -0
  184. package/dist/features/exhaust/invariants.js +188 -0
  185. package/dist/features/exhaust/ledger.d.ts +68 -0
  186. package/dist/features/exhaust/ledger.js +121 -13
  187. package/dist/features/exhaust/session-fold.d.ts +10 -0
  188. package/dist/features/exhaust/session-fold.js +46 -3
  189. package/dist/features/exhaust/session-port.d.ts +3 -1
  190. package/dist/features/exhaust/session-port.js +97 -28
  191. package/dist/features/grade/grade-answer.d.ts +99 -0
  192. package/dist/features/grade/grade-answer.js +112 -0
  193. package/dist/features/grade/grade-noise.d.ts +27 -0
  194. package/dist/features/grade/grade-noise.js +55 -0
  195. package/dist/features/grade/grade-renumber.d.ts +12 -0
  196. package/dist/features/grade/grade-renumber.js +86 -0
  197. package/dist/features/grade/grade-state.d.ts +50 -0
  198. package/dist/features/grade/grade-state.js +93 -0
  199. package/dist/features/grade/grade-suggest.d.ts +33 -0
  200. package/dist/features/grade/grade-suggest.js +98 -0
  201. package/dist/features/license/license.d.ts +11 -71
  202. package/dist/features/license/license.js +43 -136
  203. package/dist/features/visual/desktop-capture.d.ts +33 -0
  204. package/dist/features/visual/desktop-capture.js +94 -0
  205. package/dist/features/visual/step-shots.js +139 -35
  206. package/dist/features/visual/visual-tools.d.ts +0 -18
  207. package/dist/features/visual/visual-tools.js +67 -99
  208. package/dist/import-graph.js +5 -6
  209. package/dist/index.d.ts +3 -1
  210. package/dist/index.js +19 -7
  211. package/dist/judgement/capsule/causal-summary.js +9 -2
  212. package/dist/judgement/runs/artifact/replay-mapping.d.ts +13 -1
  213. package/dist/judgement/runs/artifact/replay-mapping.js +1 -1
  214. package/dist/judgement/runs/reticle-runner.js +16 -2
  215. package/dist/judgement/runs/run-ledger.d.ts +7 -5
  216. package/dist/judgement/runs/run-ledger.js +98 -69
  217. package/dist/judgement/runs/runner-port.d.ts +2 -0
  218. package/dist/judgement/runs/runner-port.js +23 -5
  219. package/dist/judgement/runs/verification-sync.d.ts +6 -3
  220. package/dist/judgement/runs/verification-sync.js +21 -10
  221. package/dist/language/flows/affected-tools.d.ts +1 -1
  222. package/dist/language/flows/affected-tools.js +49 -30
  223. package/dist/language/flows/change/git-changed.d.ts +2 -1
  224. package/dist/language/flows/change/git-changed.js +19 -2
  225. package/dist/language/flows/fields/flow-secret-field.d.ts +1 -13
  226. package/dist/language/flows/fields/flow-secret-field.js +77 -21
  227. package/dist/language/flows/flow-anchor.d.ts +60 -2
  228. package/dist/language/flows/flow-anchor.js +125 -20
  229. package/dist/language/flows/flow-classify.d.ts +20 -0
  230. package/dist/language/flows/flow-classify.js +90 -12
  231. package/dist/language/flows/flow-cross-step.d.ts +7 -1
  232. package/dist/language/flows/flow-cross-step.js +25 -1
  233. package/dist/language/flows/flow-journey.d.ts +38 -4
  234. package/dist/language/flows/flow-journey.js +138 -8
  235. package/dist/language/flows/flow-replay-run.d.ts +0 -16
  236. package/dist/language/flows/flow-replay-run.js +76 -14
  237. package/dist/language/flows/flow-replay-types.d.ts +4 -2
  238. package/dist/language/flows/flow-replay.d.ts +19 -1
  239. package/dist/language/flows/flow-replay.js +169 -52
  240. package/dist/language/flows/flow-replayable.js +7 -1
  241. package/dist/language/flows/flow-start-path.d.ts +34 -5
  242. package/dist/language/flows/flow-start-path.js +202 -15
  243. package/dist/language/flows/flow-step-runners.d.ts +14 -13
  244. package/dist/language/flows/flow-step-runners.js +184 -109
  245. package/dist/language/flows/flow-store-for-session.d.ts +26 -25
  246. package/dist/language/flows/flow-store-for-session.js +51 -5
  247. package/dist/language/flows/flow-tools.js +46 -33
  248. package/dist/language/flows/flows.js +176 -76
  249. package/dist/language/flows/recording/tape/recordings.d.ts +21 -16
  250. package/dist/language/flows/recording/tape/recordings.js +112 -49
  251. package/dist/language/flows/replay.d.ts +36 -12
  252. package/dist/language/flows/replay.js +193 -50
  253. package/dist/language/flows/steps/page-steps.d.ts +68 -0
  254. package/dist/language/flows/steps/page-steps.js +198 -0
  255. package/dist/language/flows/suite/sequential-run.d.ts +68 -0
  256. package/dist/language/flows/suite/sequential-run.js +96 -0
  257. package/dist/language/flows/verify-change-tools.js +26 -15
  258. package/dist/launch-chromium.d.ts +1 -0
  259. package/dist/launch-chromium.js +49 -12
  260. package/dist/memory/cloud/background-sync.d.ts +13 -0
  261. package/dist/memory/cloud/background-sync.js +24 -3
  262. package/dist/memory/cloud/sync-daemon.js +26 -27
  263. package/dist/memory/cloud/sync-screenshots.js +6 -1
  264. package/dist/memory/journal/attach-journal.js +2 -1
  265. package/dist/memory/journal/drive-flow.d.ts +7 -0
  266. package/dist/memory/journal/drive-flow.js +44 -13
  267. package/dist/memory/journal/journal-recorder.d.ts +4 -2
  268. package/dist/memory/journal/session-journal.d.ts +7 -0
  269. package/dist/memory/journal/session-journal.js +58 -10
  270. package/dist/memory/project/root-claims.d.ts +9 -0
  271. package/dist/memory/project/root-claims.js +9 -4
  272. package/dist/portal/bridge/bridge.d.ts +13 -4
  273. package/dist/portal/bridge/bridge.js +10 -9
  274. package/dist/portal/input/download-capture.d.ts +7 -0
  275. package/dist/portal/input/download-capture.js +92 -0
  276. package/dist/portal/input/network-detail.d.ts +6 -0
  277. package/dist/portal/input/network-detail.js +12 -1
  278. package/dist/portal/input/network-mock-tools.js +49 -13
  279. package/dist/portal/input/network-mock.d.ts +8 -0
  280. package/dist/portal/input/network-mock.js +30 -10
  281. package/dist/portal/input/page-capture.d.ts +24 -0
  282. package/dist/portal/input/page-capture.js +33 -0
  283. package/dist/portal/input/real-input.d.ts +35 -18
  284. package/dist/portal/input/real-input.js +99 -33
  285. package/dist/portal/input/viewport-tools.d.ts +8 -0
  286. package/dist/portal/input/viewport-tools.js +81 -21
  287. package/dist/portal/pool/browser-pool.d.ts +16 -30
  288. package/dist/portal/pool/browser-pool.js +64 -52
  289. package/dist/portal/pool/context-permissions.d.ts +34 -17
  290. package/dist/portal/pool/context-permissions.js +94 -1
  291. package/dist/portal/pool/csp-widen.d.ts +62 -0
  292. package/dist/portal/pool/csp-widen.js +132 -0
  293. package/dist/portal/pool/determinism.d.ts +52 -0
  294. package/dist/portal/pool/determinism.js +259 -0
  295. package/dist/portal/pool/lease-emulation.d.ts +34 -1
  296. package/dist/portal/pool/lease-emulation.js +18 -0
  297. package/dist/portal/pool/lease-marker-stamp.d.ts +6 -0
  298. package/dist/portal/pool/lease-marker-stamp.js +15 -1
  299. package/dist/portal/pool/lease-page-error.d.ts +56 -0
  300. package/dist/portal/pool/lease-page-error.js +160 -0
  301. package/dist/portal/pool/page-error-journal.d.ts +63 -0
  302. package/dist/portal/pool/page-error-journal.js +208 -0
  303. package/dist/portal/pool/playwright-launcher.js +71 -15
  304. package/dist/portal/pool/pool-contract.d.ts +49 -1
  305. package/dist/portal/pool/pool-lease.d.ts +70 -2
  306. package/dist/portal/pool/pool-lease.js +23 -0
  307. package/dist/portal/pool/zero-install.d.ts +8 -0
  308. package/dist/portal/pool/zero-install.js +91 -1
  309. package/dist/portal/session/dev-server/dev-command.d.ts +11 -2
  310. package/dist/portal/session/dev-server/dev-command.js +110 -16
  311. package/dist/portal/session/dev-server/dev-server-probe.d.ts +7 -0
  312. package/dist/portal/session/dev-server/dev-server-probe.js +9 -0
  313. package/dist/portal/session/dev-server/project-ports.d.ts +21 -0
  314. package/dist/portal/session/dev-server/project-ports.js +62 -0
  315. package/dist/portal/session/facts/departed-network.d.ts +66 -0
  316. package/dist/portal/session/facts/departed-network.js +142 -0
  317. package/dist/portal/session/no-session-diagnosis.d.ts +9 -0
  318. package/dist/portal/session/no-session-diagnosis.js +76 -27
  319. package/dist/portal/session/no-session-next-action.d.ts +14 -0
  320. package/dist/portal/session/no-session-next-action.js +56 -7
  321. package/dist/portal/session/no-session-watch.d.ts +6 -0
  322. package/dist/portal/session/no-session-watch.js +41 -4
  323. package/dist/portal/session/page-commands/undeclared-command.d.ts +9 -3
  324. package/dist/portal/session/page-commands/undeclared-command.js +16 -7
  325. package/dist/portal/session/recorded-gaps.d.ts +1 -1
  326. package/dist/portal/session/recorded-gaps.js +5 -2
  327. package/dist/portal/session/serving-directory.d.ts +10 -0
  328. package/dist/portal/session/serving-directory.js +39 -8
  329. package/dist/portal/session/session-manager.d.ts +10 -0
  330. package/dist/portal/session/session-manager.js +211 -81
  331. package/dist/portal/session/session.js +4 -3
  332. package/dist/portal/session/zero-install-first-call.d.ts +20 -1
  333. package/dist/portal/session/zero-install-first-call.js +34 -2
  334. package/dist/start-wiring.d.ts +30 -2
  335. package/dist/start-wiring.js +74 -9
  336. package/dist/surface/mcp/mcp-proxy.js +10 -2
  337. package/dist/surface/mcp/mcp.js +8 -5
  338. package/dist/surface/mcp/peer/agents-connected.d.ts +6 -0
  339. package/dist/surface/mcp/peer/agents-connected.js +58 -0
  340. package/dist/surface/mcp/proxy/proxy-daemon-probe.js +17 -5
  341. package/dist/surface/mcp/shared-params.d.ts +2 -0
  342. package/dist/surface/mcp/shared-params.js +31 -0
  343. package/dist/surface/tools/act/act-observation.d.ts +40 -2
  344. package/dist/surface/tools/act/act-observation.js +118 -12
  345. package/dist/surface/tools/act/act-preflight.js +38 -18
  346. package/dist/surface/tools/act/act-sequence-retry.d.ts +23 -2
  347. package/dist/surface/tools/act/act-sequence-retry.js +61 -5
  348. package/dist/surface/tools/act/act-target.js +3 -1
  349. package/dist/surface/tools/act/after-match.d.ts +10 -0
  350. package/dist/surface/tools/act/after-match.js +40 -0
  351. package/dist/surface/tools/act/already-true.js +1 -1
  352. package/dist/surface/tools/act/navigation/reload-result.d.ts +12 -1
  353. package/dist/surface/tools/act/navigation/reload-result.js +25 -2
  354. package/dist/surface/tools/act/resolve-target.d.ts +17 -1
  355. package/dist/surface/tools/act/resolve-target.js +59 -9
  356. package/dist/surface/tools/act/sequence-grade.d.ts +15 -1
  357. package/dist/surface/tools/act/sequence-grade.js +45 -27
  358. package/dist/surface/tools/act/settle-in-flight.js +27 -15
  359. package/dist/surface/tools/act-command.d.ts +23 -0
  360. package/dist/surface/tools/act-command.js +50 -0
  361. package/dist/surface/tools/act-sequence-tool.js +81 -50
  362. package/dist/surface/tools/act-tools.d.ts +1 -13
  363. package/dist/surface/tools/act-tools.js +83 -95
  364. package/dist/surface/tools/agent/build-staleness.d.ts +1 -1
  365. package/dist/surface/tools/agent/build-staleness.js +1 -1
  366. package/dist/surface/tools/assert/assert-verdict.js +18 -12
  367. package/dist/surface/tools/browser-tools.js +87 -13
  368. package/dist/surface/tools/compare-tools.d.ts +11 -0
  369. package/dist/surface/tools/compare-tools.js +94 -0
  370. package/dist/surface/tools/coverage-tools.js +1 -1
  371. package/dist/surface/tools/dynamic-tools.js +11 -3
  372. package/dist/surface/tools/empty-session-list.d.ts +2 -0
  373. package/dist/surface/tools/empty-session-list.js +4 -2
  374. package/dist/surface/tools/error-recovery.d.ts +12 -1
  375. package/dist/surface/tools/error-recovery.js +131 -40
  376. package/dist/surface/tools/explore-tools.js +1 -1
  377. package/dist/surface/tools/invoke-tool.js +29 -21
  378. package/dist/surface/tools/lease-coverage-tools.d.ts +49 -0
  379. package/dist/surface/tools/lease-coverage-tools.js +128 -0
  380. package/dist/surface/tools/lease-hint.d.ts +42 -1
  381. package/dist/surface/tools/lease-hint.js +52 -3
  382. package/dist/surface/tools/lease-readiness.d.ts +47 -0
  383. package/dist/surface/tools/lease-readiness.js +126 -0
  384. package/dist/surface/tools/lease-seed.d.ts +16 -1
  385. package/dist/surface/tools/lease-seed.js +37 -4
  386. package/dist/surface/tools/lease-tools.d.ts +3 -41
  387. package/dist/surface/tools/lease-tools.js +104 -124
  388. package/dist/surface/tools/lease-url-identity.d.ts +46 -0
  389. package/dist/surface/tools/lease-url-identity.js +97 -0
  390. package/dist/surface/tools/merge-tools.js +99 -2
  391. package/dist/surface/tools/merged-name-redirect.js +5 -1
  392. package/dist/surface/tools/observe-tools.js +15 -9
  393. package/dist/surface/tools/read/console-pre-attach.d.ts +19 -0
  394. package/dist/surface/tools/read/console-pre-attach.js +23 -0
  395. package/dist/surface/tools/read-tools.js +33 -30
  396. package/dist/surface/tools/real-input-attempt.d.ts +0 -8
  397. package/dist/surface/tools/real-input-attempt.js +143 -28
  398. package/dist/surface/tools/repeat-hint.d.ts +40 -0
  399. package/dist/surface/tools/repeat-hint.js +171 -0
  400. package/dist/surface/tools/run-report.d.ts +2 -2
  401. package/dist/surface/tools/run-report.js +27 -15
  402. package/dist/surface/tools/session-ports.d.ts +14 -0
  403. package/dist/surface/tools/session-ports.js +53 -0
  404. package/dist/surface/tools/tool-kit.d.ts +18 -0
  405. package/dist/surface/tools/tool-kit.js +9 -3
  406. package/dist/surface/tools/tool-surface.js +0 -1
  407. package/dist/surface/tools/tools.js +54 -18
  408. package/dist/surface/tools/type-spelling.d.ts +13 -0
  409. package/dist/surface/tools/type-spelling.js +36 -0
  410. package/dist/telemetry/agent-client.d.ts +6 -0
  411. package/dist/telemetry/agent-client.js +10 -0
  412. package/dist/telemetry/argument-shape.js +17 -7
  413. package/dist/telemetry/cli-telemetry.d.ts +10 -1
  414. package/dist/telemetry/cli-telemetry.js +15 -0
  415. package/dist/telemetry/init-telemetry.d.ts +2 -1
  416. package/dist/telemetry/init-telemetry.js +47 -2
  417. package/dist/telemetry/install-trace.js +23 -4
  418. package/dist/telemetry/onboarding-funnel.d.ts +19 -2
  419. package/dist/telemetry/onboarding-funnel.js +25 -3
  420. package/dist/telemetry/proxy-telemetry.d.ts +2 -1
  421. package/dist/telemetry/proxy-telemetry.js +2 -2
  422. package/dist/telemetry/session-metrics.d.ts +1 -1
  423. package/dist/telemetry/session-metrics.js +67 -27
  424. package/dist/telemetry/telemetry.d.ts +3 -1
  425. package/dist/telemetry/telemetry.js +60 -28
  426. package/dist/telemetry/tool-refused.d.ts +6 -3
  427. package/dist/telemetry/tool-refused.js +15 -3
  428. package/docs/actions.mdx +3 -3
  429. package/docs/agent-cheatsheet.md +1 -1
  430. package/docs/architecture.md +3 -6
  431. package/docs/capabilities.mdx +61 -1
  432. package/docs/cli/affected.mdx +9 -7
  433. package/docs/cli/cloud.mdx +3 -3
  434. package/docs/cli/compare.mdx +94 -0
  435. package/docs/cli/doctor.mdx +41 -2
  436. package/docs/cli/grade.mdx +97 -0
  437. package/docs/cli/help.mdx +4 -2
  438. package/docs/cli/license.mdx +13 -12
  439. package/docs/cli/restart.mdx +7 -5
  440. package/docs/cli/rollback.mdx +5 -5
  441. package/docs/cli/setup.mdx +13 -2
  442. package/docs/cli/status.mdx +4 -0
  443. package/docs/cli/stop.mdx +3 -3
  444. package/docs/cli/update.mdx +2 -2
  445. package/docs/cli/verify.mdx +23 -1
  446. package/docs/cli.mdx +34 -24
  447. package/docs/deploy-checks.md +25 -0
  448. package/docs/desktop.mdx +1 -1
  449. package/docs/enterprise.md +17 -22
  450. package/docs/environment.mdx +1 -0
  451. package/docs/first-drive.md +1 -1
  452. package/docs/flows.md +11 -1
  453. package/docs/frameworks.mdx +9 -9
  454. package/docs/getting-started.md +1 -1
  455. package/docs/install-manual.mdx +16 -1
  456. package/docs/license-activation.mdx +3 -3
  457. package/docs/packages/engine.mdx +1 -1
  458. package/docs/packages/server.mdx +1 -1
  459. package/docs/packages/tauri.mdx +1 -1
  460. package/docs/packages/test.mdx +1 -1
  461. package/docs/packages.mdx +1 -1
  462. package/docs/platform-integration.md +1 -1
  463. package/docs/predicates.mdx +1 -1
  464. package/docs/quickstart.mdx +68 -49
  465. package/docs/skill-setup.md +1 -1
  466. package/docs/skill.md +14 -13
  467. package/docs/telemetry.md +6 -4
  468. package/docs/tools/navigate.mdx +1 -1
  469. package/docs/tools/verify.mdx +4 -1
  470. package/docs/troubleshooting.mdx +1 -1
  471. package/docs/usage.md +17 -14
  472. package/package.json +18 -14
  473. package/LICENSE-ENTERPRISE +0 -37
  474. package/dist/features/ee/audit-log.d.ts +0 -14
  475. package/dist/features/ee/audit-log.js +0 -11
  476. package/dist/features/exhaust/exhaust-run.d.ts +0 -33
  477. package/dist/features/exhaust/exhaust-run.js +0 -82
@@ -28,6 +28,16 @@ export const AMBIENT_RECORDING = '__ambient__';
28
28
  export const ambientRecordingOf = (session) => session === undefined ? AMBIENT_RECORDING : `${AMBIENT_RECORDING}:${session}`;
29
29
  /** Whether a recording is an ambient tape: the daemon's own, never one somebody opened. */
30
30
  export const isAmbient = (name) => AMBIENT_RECORDING === name || name.startsWith(`${AMBIENT_RECORDING}:`);
31
+ /**
32
+ * Whether a step, or one of its sub-steps, declared a consequence.
33
+ * ponytail: the same test as `carriesAnAssertion` in memory/journal/drive-flow.ts, which this
34
+ * directory may not import. Move both into core if a third caller needs it.
35
+ */
36
+ const isChecked = (step) => {
37
+ const subs = Array.isArray(step.args['steps']) ? step.args['steps'] : [];
38
+ return (step.expect !== undefined ||
39
+ subs.some((sub) => 'object' === typeof sub && null !== sub && 'expect' in sub));
40
+ };
31
41
  /**
32
42
  * How long a journey the ambient tape will hold.
33
43
  *
@@ -36,24 +46,49 @@ export const isAmbient = (name) => AMBIENT_RECORDING === name || name.startsWith
36
46
  * 400-step regression test: the longest saved flow in the corpus is a small fraction of this.
37
47
  */
38
48
  const AMBIENT_STEP_CAP = 400;
49
+ /** How many ended pages keep their unchecked steps for a successor. See takeAmbient. */
50
+ const CARRY_CAP = 32;
39
51
  export class RecordingStore {
40
52
  byHarness;
53
+ successorOf;
41
54
  #active = new Map();
42
55
  #compiled = new Map();
43
- /** The ambient tape the last step went on: the one a refuted claim is taken off. */
44
- #lastAmbient;
45
56
  /** A navigation came after the last captured step — see markNavigated. */
46
57
  #navigatedSinceStep = false;
47
58
  /** Tabs with network mocks installed now, keyed by session ('' for none named). See markMocked. */
48
59
  #mocked = new Set();
49
- /** `byHarness`: whether the step being captured was driven by the Harness, which tapes its own. */
50
- constructor(byHarness = () => false) {
60
+ /**
61
+ * Steps a tab took after its last check, kept when the APP loaded a new page, by the session that
62
+ * ended. The page that loaded takes them when its own tape opens. See takeAmbient.
63
+ */
64
+ #carried = new Map();
65
+ /**
66
+ * `byHarness`: whether the step being captured was driven by the Harness, which tapes its own.
67
+ * `successorOf`: the session that the same tab connected as after a page load, if any.
68
+ */
69
+ constructor(byHarness = () => false, successorOf = () => undefined) {
51
70
  this.byHarness = byHarness;
71
+ this.successorOf = successorOf;
72
+ }
73
+ /** The carried steps that this session continues, taken. */
74
+ #takeCarried(session) {
75
+ if (session === undefined) {
76
+ return [];
77
+ }
78
+ for (const [ended, steps] of this.#carried) {
79
+ // A leased tab comes back from a page load with its own id; any other tab with a new one.
80
+ if (ended === session || this.successorOf(ended) === session) {
81
+ this.#carried.delete(ended);
82
+ return steps;
83
+ }
84
+ }
85
+ return [];
52
86
  }
53
87
  start(name, cursor, startPath, session, document) {
54
88
  const openedOver = new Map();
55
- for (const [outer, rec] of this.#targets(session))
89
+ for (const [outer, rec] of this.#targets(session)) {
56
90
  openedOver.set(outer, rec.steps.length);
91
+ }
57
92
  this.#active.set(name, {
58
93
  cursor,
59
94
  steps: [],
@@ -96,15 +131,17 @@ export class RecordingStore {
96
131
  * they are, so the journey it belongs to is not auto-saved as a flow (#1459).
97
132
  */
98
133
  markMocked(session, active) {
99
- if (active)
134
+ if (active) {
100
135
  this.#mocked.add(session ?? '');
101
- else
136
+ }
137
+ else {
102
138
  this.#mocked.delete(session ?? '');
139
+ }
103
140
  }
104
141
  /**
105
142
  * `forAmbient` is the step as the ambient tape keeps it, when that differs: a journey's refuted
106
- * claims come off the ambient tape (see `unassertLast`), and a recording somebody opened keeps
107
- * every claim they declared, held or not.
143
+ * claims stay off the ambient tape, and a recording somebody opened keeps every claim they
144
+ * declared, held or not. See captureVerdictedAct.
108
145
  */
109
146
  capture(step, route, session, forAmbient) {
110
147
  this.#navigatedSinceStep = false;
@@ -113,28 +150,30 @@ export class RecordingStore {
113
150
  if (!this.#active.has(ambient)) {
114
151
  this.#active.set(ambient, {
115
152
  cursor: 0,
116
- steps: [],
153
+ steps: this.#takeCarried(session),
117
154
  openedOver: new Map(),
118
155
  ...(session === undefined ? {} : { session }),
119
156
  });
120
157
  }
121
- this.#lastAmbient = ambient;
122
158
  for (const [name, rec] of this.#targets(session)) {
123
159
  // Another tab's tape is that tab's journey, whatever else this step belongs to.
124
- if (isAmbient(name) && name !== ambient)
160
+ if (isAmbient(name) && name !== ambient) {
125
161
  continue;
162
+ }
126
163
  // The ambient tape is opened by the system and closed by nobody, so it is the one recording
127
164
  // with no human deciding when it has seen enough. Bounded here rather than left to grow for
128
165
  // the length of a daemon's life. Appending STOPS at the cap instead of dropping the oldest: a
129
166
  // flow replays from its FIRST step, so a tape missing its beginning is not a shorter journey,
130
167
  // it is a different one that starts in a state nothing established. A recording somebody
131
168
  // opened on purpose is not capped — they said when it starts and they say when it stops.
132
- if (isAmbient(name) && rec.steps.length >= AMBIENT_STEP_CAP)
169
+ if (isAmbient(name) && rec.steps.length >= AMBIENT_STEP_CAP) {
133
170
  continue;
171
+ }
134
172
  // The Harness saves its own recordings. Taping its steps too saved every drive twice: once as
135
173
  // the Harness's flow and again, at session end, as a `drive-*` copy with a guessed name.
136
- if (isAmbient(name) && this.byHarness())
174
+ if (isAmbient(name) && this.byHarness()) {
137
175
  continue;
176
+ }
138
177
  // A step nobody marked ended where the next one began.
139
178
  const previous = rec.steps.at(-1);
140
179
  if (previous !== undefined && previous.endPage === undefined && step.page !== undefined) {
@@ -161,26 +200,33 @@ export class RecordingStore {
161
200
  * the proof. What the step already declared is kept; the new check joins it under `allOf`.
162
201
  */
163
202
  attachExpect(expect, session) {
164
- if (this.#navigatedSinceStep)
203
+ if (this.#navigatedSinceStep) {
165
204
  return;
205
+ }
166
206
  const mocked = this.#mocked.has(session ?? '');
167
207
  for (const [name, rec] of this.#targets(session)) {
168
- if (isAmbient(name) && name !== ambientRecordingOf(session))
208
+ if (isAmbient(name) && name !== ambientRecordingOf(session)) {
169
209
  continue;
210
+ }
170
211
  const last = rec.steps.at(-1);
171
- if (last === undefined)
212
+ if (last === undefined) {
172
213
  continue;
214
+ }
173
215
  // A proof read while mocks are active rests on mocked responses even when the act before it
174
216
  // ran unmocked, so the ambient step it joins is marked too (#1459).
175
- if (mocked && isAmbient(name))
217
+ if (mocked && isAmbient(name)) {
176
218
  last.mocked = true;
219
+ }
177
220
  const held = last.expect;
178
- last.expect =
179
- held === undefined
180
- ? expect
181
- : PredicateKind.ALL_OF === held.kind
182
- ? { ...held, predicates: [...held.predicates, expect] }
183
- : { kind: PredicateKind.ALL_OF, predicates: [held, expect] };
221
+ if (held === undefined) {
222
+ last.expect = expect;
223
+ }
224
+ else if (PredicateKind.ALL_OF === held.kind) {
225
+ last.expect = { ...held, predicates: [...held.predicates, expect] };
226
+ }
227
+ else {
228
+ last.expect = { kind: PredicateKind.ALL_OF, predicates: [held, expect] };
229
+ }
184
230
  }
185
231
  }
186
232
  /**
@@ -191,24 +237,6 @@ export class RecordingStore {
191
237
  markNavigated() {
192
238
  this.#navigatedSinceStep = true;
193
239
  }
194
- /**
195
- * Take the expectation off the ambient tape's last step, because the verdict on it came back no.
196
- *
197
- * A step is captured at dispatch, before anything is judged, so a claim that turned out false is
198
- * already on the tape as that step's `expect`. Cut into a journey it becomes a flow that is red for
199
- * ever, on an expectation nobody but the agent's wrong guess made. The failure is not lost: it is
200
- * filed as a capsule, the artifact built for "this should hold and does not". The ACTION stays,
201
- * since the steps after it ran on the page it produced. A recording somebody opened deliberately
202
- * is left as they drove it.
203
- */
204
- unassertLast() {
205
- const tape = this.#lastAmbient === undefined ? undefined : this.#active.get(this.#lastAmbient);
206
- const last = tape?.steps.at(-1);
207
- if (tape === undefined || last === undefined || last.expect === undefined)
208
- return;
209
- const { expect: _dropped, ...kept } = last;
210
- tape.steps[tape.steps.length - 1] = kept;
211
- }
212
240
  /**
213
241
  * The page the step just captured ended on, once its action settled.
214
242
  *
@@ -216,14 +244,17 @@ export class RecordingStore {
216
244
  * previous step's own answer alone.
217
245
  */
218
246
  markEnded(page, session) {
219
- if (page === undefined)
247
+ if (page === undefined) {
220
248
  return;
249
+ }
221
250
  for (const [name, rec] of this.#targets(session)) {
222
- if (isAmbient(name) && name !== ambientRecordingOf(session))
251
+ if (isAmbient(name) && name !== ambientRecordingOf(session)) {
223
252
  continue;
253
+ }
224
254
  const last = rec.steps.at(-1);
225
- if (last !== undefined && last.endPage === undefined)
255
+ if (last !== undefined && last.endPage === undefined) {
226
256
  last.endPage = page;
257
+ }
227
258
  }
228
259
  }
229
260
  /**
@@ -241,14 +272,16 @@ export class RecordingStore {
241
272
  stop(name) {
242
273
  const rec = this.#active.get(name);
243
274
  this.#active.delete(name);
244
- if (rec === undefined)
275
+ if (rec === undefined) {
245
276
  return undefined;
277
+ }
246
278
  for (const [outer, mark] of rec.openedOver) {
247
279
  const parent = this.#active.get(outer);
248
280
  // Gone already, or somehow shorter than when we started: leave it exactly as it is rather
249
281
  // than splice a range that no longer means what it meant.
250
- if (parent === undefined || parent.steps.length < mark)
282
+ if (parent === undefined || parent.steps.length < mark) {
251
283
  continue;
284
+ }
252
285
  parent.steps.splice(mark, parent.steps.length - mark, {
253
286
  tool: INVOKE_TOOL,
254
287
  args: { flow: name },
@@ -268,9 +301,39 @@ export class RecordingStore {
268
301
  // One tab's tape is that tab's: the list names what somebody opened, and the plain tape as before.
269
302
  return [...this.#active.keys()].filter((name) => !name.startsWith(`${AMBIENT_RECORDING}:`));
270
303
  }
271
- /** The ambient tape of one tab (or of steps no tab named), taken: what its session end saves. */
304
+ /**
305
+ * The ambient tape of one tab (or of steps no tab named), taken: what its session end saves.
306
+ *
307
+ * A session also ends when the app itself loads a page (a form post on a server-rendered app), and
308
+ * the journey goes on in the page that loaded. A tape with no check is not saved, so the next
309
+ * page's tape starts with a copy of it: a fill and the submit that proves it are then one flow, not
310
+ * a fill that is dropped and a submit on an empty form. When Reticle navigated away, the agent
311
+ * started a new journey, and nothing is carried.
312
+ * ponytail: only a tape with NO check is carried; unchecked steps after a check stay behind.
313
+ * ponytail: kept for the last CARRY_CAP ended pages; a tab that never loads a successor drops them.
314
+ */
272
315
  takeAmbient(session) {
273
- return this.stop(ambientRecordingOf(session));
316
+ const tape = this.stop(ambientRecordingOf(session));
317
+ const unchecked = tape !== undefined && !tape.steps.some(isChecked);
318
+ if (tape === undefined || session === undefined || this.#navigatedSinceStep || !unchecked) {
319
+ return tape;
320
+ }
321
+ // The next page may already have a tape: its step was recorded before this session ended.
322
+ const next = this.successorOf(session);
323
+ const nextTape = next === undefined ? undefined : this.#active.get(ambientRecordingOf(next));
324
+ if (nextTape !== undefined) {
325
+ nextTape.steps.unshift(...tape.steps);
326
+ return tape;
327
+ }
328
+ this.#carried.set(session, [...tape.steps]);
329
+ while (this.#carried.size > CARRY_CAP) {
330
+ const oldest = this.#carried.keys().next().value;
331
+ if (oldest === undefined) {
332
+ break;
333
+ }
334
+ this.#carried.delete(oldest);
335
+ }
336
+ return tape;
274
337
  }
275
338
  /**
276
339
  * Names of recordings that have been STOPPED and compiled.
@@ -1,4 +1,4 @@
1
- import { pathOf, type Predicate, type ReticleEvent } from '@reticlehq/core';
1
+ import { type Predicate, type ReticleEvent } from '@reticlehq/core';
2
2
  import { type CommandResult } from '@reticlehq/core';
3
3
  import type { RecordedStep, CompiledProgram } from './recording/tape/recordings.js';
4
4
  import type { Session } from '../../portal/session/session.js';
@@ -13,6 +13,15 @@ export declare function ambiguousTestidNote(value: string): string;
13
13
  * replay engines (replayProgram + flow-replay's step runner) so element extraction — the core of anchor
14
14
  * resolution — can't drift between them.
15
15
  */
16
+ /**
17
+ * The refs of a role query's matches that have NO accessible name, in page order.
18
+ *
19
+ * A role query without a name returns every control of the role, named ones included. A nameless
20
+ * anchor's recorded position (`nth` of `of`) counts only the nameless ones — an icon-only edit
21
+ * button is the 2nd nameless button of its row, not the 5th button — so the named ones are dropped
22
+ * before the position is read.
23
+ */
24
+ export declare function namelessRefs(result: CommandResult): string[];
16
25
  export declare function queryRefs(result: CommandResult): string[];
17
26
  /**
18
27
  * A destructive-action confirmation is one-shot and must never persist into a recording.
@@ -29,12 +38,16 @@ export declare function queryRefs(result: CommandResult): string[];
29
38
  */
30
39
  export declare function replayActionArgs(value: unknown, confirmDangerous?: boolean, field?: string): Record<string, unknown>;
31
40
  /**
32
- * The pathname of a session's live url, or undefined when it has none yet.
41
+ * The page a session's live url is on, as a NAVIGABLE path: pathname + query + hash, with
42
+ * Reticle's own params dropped. Undefined when the session has no url yet.
33
43
  *
34
- * Pathname rather than the whole url, because that is what `startPath` is compared against and what
35
- * a hash-routed app makes meaningless in the document location — see routeOfEvent.
44
+ * Every recorded page comes from here: a step's page, the route a tape is cut on, and the
45
+ * `startPath` and route `requires` of a saved flow. The pathname alone dropped the query, so a
46
+ * journey leased on `/?showModal=login` saved `startPath: "/"`, and its replay asserted "the modal
47
+ * is absent" on a page where the modal never opens. Under a hash router it dropped the hash too,
48
+ * which made every page `/` (#1411).
36
49
  */
37
- export { pathOf };
50
+ export declare function pageOf(url: string | undefined): string | undefined;
38
51
  /**
39
52
  * Did the app send a write request in this window? A step that did is saved `writes: true`, so a
40
53
  * replay does not repeat it unasked. The dev server's own traffic is not the app's.
@@ -55,21 +68,31 @@ export declare const UNKEPT_EXPECT: string;
55
68
  */
56
69
  export declare function captureAct(recordings: {
57
70
  active: () => string[];
58
- capture: (step: RecordedStep, route?: string, session?: string) => void;
71
+ capture: (step: RecordedStep, route?: string, session?: string, forAmbient?: RecordedStep) => void;
59
72
  }, args: Record<string, unknown>, res: unknown,
60
73
  /** Where this step ran, so the ambient tape can be cut into journeys. See RecordedStep.route. */
61
74
  route?: string,
62
75
  /** The session that acted: only recordings it started take the step. */
63
76
  session?: string,
64
77
  /** The act's window sent a write request; see `wroteIn`. */
65
- wrote?: boolean): void;
78
+ wrote?: boolean,
79
+ /** The act as the ambient tape keeps it, when that differs. See RecordingStore.capture. */
80
+ ambientArgs?: Record<string, unknown>): void;
66
81
  /**
67
- * Capture an act_and_wait once its verdict is known, keeping `until` as the step's expectation only
68
- * on a yes. Recorded before the verdict, a step kept an `until` that came back `no` or `no-fault` —
69
- * a regression test asserting something never once observed to hold because of the action. The
70
- * action itself is always recorded: it happened, and replay needs it to reach the next step.
82
+ * Capture an act_and_wait once its verdict is known.
83
+ *
84
+ * The rule act_sequence keeps (#988). A recording somebody opened keeps every claim the agent
85
+ * declared, held or not: dropping a refuted one saved a flow that replayed green on the defect it
86
+ * had caught. The ambient tape keeps a claim only if the action made it hold (`held`), so a flow cut
87
+ * from it never replays a claim that was never once true because of the action. The action is
88
+ * always recorded: replay needs it to reach the next step.
89
+ *
90
+ * Keyed on `held`, not on `verified: yes`. A claim the action made hold under an `unknown` or a
91
+ * contradicted verdict is still what the agent proved about the page, and dropping it left the
92
+ * replay with no check at all. One function decides both tapes: a second rule that took the claim off the tape
93
+ * after the fact ran before this capture, so it took the PREVIOUS step's claim, which had passed.
71
94
  */
72
- export declare function captureVerdictedAct(recordings: Parameters<typeof captureAct>[0], args: Record<string, unknown>, res: unknown, route: string | undefined, verified: string | undefined, session?: string,
95
+ export declare function captureVerdictedAct(recordings: Parameters<typeof captureAct>[0], args: Record<string, unknown>, res: unknown, route: string | undefined, held: boolean, session?: string,
73
96
  /** The act's window sent a write request; see `wroteIn`. */
74
97
  wrote?: boolean): void;
75
98
  /** Fold a PASSING standalone assertion into the step it proved. See RecordingStore.attachExpect. */
@@ -124,3 +147,4 @@ via?: readonly {
124
147
  flow: string;
125
148
  step: number;
126
149
  }[]): Promise<ReplayStepResult[]>;
150
+ export {};