@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
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Edge cases for the explorer to drive: the inputs and the interaction orders where behavioural
3
+ * bugs live.
4
+ *
5
+ * The explorer types one ordinary value into each field and activates each control once, in the
6
+ * order the page lists them. That proves the happy path and nothing else. A form that accepts
7
+ * " " as a name, keeps 11 in a field whose maximum is 10, or creates two orders on a double click
8
+ * fails on a value or an order nobody tried. This module lists those values and sequences.
9
+ *
10
+ * Pure and deterministic: the same field, control and clock give the same list in the same order.
11
+ * Every list is bounded, and the most telling items come first, so a small budget still tries them.
12
+ * A sequence says nothing about what a correct result is; `invariants.ts` judges the pages it leaves.
13
+ */
14
+ // ── Edge-case values for one field ──────────────────────────────────────────────────────────────
15
+ /** What a field takes, as far as its type, input mode, role and name say. */
16
+ export const FieldKind = {
17
+ TEXT: 'text',
18
+ NUMBER: 'number',
19
+ EMAIL: 'email',
20
+ DATE: 'date',
21
+ TIME: 'time',
22
+ URL: 'url',
23
+ TEL: 'tel',
24
+ };
25
+ /** Why a value is an edge case. The report shows this beside the value. */
26
+ export const EdgeLabel = {
27
+ EMPTY: 'empty',
28
+ EMPTY_REQUIRED: 'empty in a required field',
29
+ WHITESPACE: 'whitespace only',
30
+ PADDED: 'leading and trailing spaces',
31
+ OVER_MAX_LENGTH: 'one character over maxlength',
32
+ UNDER_MIN_LENGTH: 'one character under minlength',
33
+ LONG_TEXT: 'long text, no maxlength set',
34
+ UNICODE: 'emoji and non-Latin script',
35
+ RTL: 'right-to-left text',
36
+ MARKUP: 'markup characters',
37
+ BREAKS_PATTERN: 'does not match the pattern',
38
+ DUPLICATE: 'duplicate of a value the app already holds',
39
+ ZERO: 'zero',
40
+ NEGATIVE: 'negative number',
41
+ BELOW_MIN: 'one below min',
42
+ ABOVE_MAX: 'one above max',
43
+ VERY_LARGE: 'very large number',
44
+ DECIMAL: 'decimal number',
45
+ WRONG_FORMAT: 'wrong format for the field type',
46
+ PAST_DATE: 'date in the past',
47
+ FUTURE_DATE: 'date far in the future',
48
+ IMPOSSIBLE_DATE: 'date that does not exist',
49
+ MIDNIGHT: 'midnight',
50
+ IMPOSSIBLE_TIME: 'time that does not exist',
51
+ };
52
+ /** The default bound. A field gets at most this many values. */
53
+ export const MAX_EDGE_VALUES = 16;
54
+ /** How many existing values are reused as duplicates. */
55
+ const MAX_DUPLICATES = 2;
56
+ /** Length of the long text for a field with no maxlength. */
57
+ const LONG_TEXT_LENGTH = 300;
58
+ const DAY_MS = 24 * 60 * 60 * 1000;
59
+ const FUTURE_YEARS = 100;
60
+ const SAMPLE = {
61
+ [FieldKind.TEXT]: 'a',
62
+ [FieldKind.NUMBER]: '1',
63
+ [FieldKind.EMAIL]: 'a@example.com',
64
+ [FieldKind.DATE]: '2026-01-01',
65
+ [FieldKind.TIME]: '12:00',
66
+ [FieldKind.URL]: 'https://example.com',
67
+ [FieldKind.TEL]: '5550100',
68
+ };
69
+ const WRONG_FORMAT = {
70
+ [FieldKind.NUMBER]: 'abc',
71
+ [FieldKind.EMAIL]: 'not-an-email',
72
+ [FieldKind.URL]: 'not a url',
73
+ [FieldKind.TEL]: 'abc',
74
+ [FieldKind.TIME]: 'noon',
75
+ };
76
+ const TYPE_KIND = {
77
+ number: FieldKind.NUMBER,
78
+ range: FieldKind.NUMBER,
79
+ email: FieldKind.EMAIL,
80
+ date: FieldKind.DATE,
81
+ 'datetime-local': FieldKind.DATE,
82
+ month: FieldKind.DATE,
83
+ time: FieldKind.TIME,
84
+ url: FieldKind.URL,
85
+ tel: FieldKind.TEL,
86
+ };
87
+ const INPUT_MODE_KIND = {
88
+ numeric: FieldKind.NUMBER,
89
+ decimal: FieldKind.NUMBER,
90
+ email: FieldKind.EMAIL,
91
+ url: FieldKind.URL,
92
+ tel: FieldKind.TEL,
93
+ };
94
+ /**
95
+ * Words in a field's name that say what it takes, for a field whose type the snapshot does not give.
96
+ * ponytail: English names only; a field in another language falls back to text, which still gets
97
+ * every generic edge value.
98
+ */
99
+ const NAME_KIND = [
100
+ [/\be-?mail\b/i, FieldKind.EMAIL],
101
+ [/\b(?:date|birthday|dob)\b/i, FieldKind.DATE],
102
+ [/\btime\b/i, FieldKind.TIME],
103
+ [/\b(?:url|website|link)\b/i, FieldKind.URL],
104
+ [/\b(?:phone|tel|mobile)\b/i, FieldKind.TEL],
105
+ [/\b(?:amount|quantity|qty|price|age|count|number)\b/i, FieldKind.NUMBER],
106
+ ];
107
+ export function fieldKindOf(spec) {
108
+ const byType = TYPE_KIND[spec.type ?? ''];
109
+ if (byType !== undefined) {
110
+ return byType;
111
+ }
112
+ const byMode = INPUT_MODE_KIND[spec.inputMode ?? ''];
113
+ if (byMode !== undefined) {
114
+ return byMode;
115
+ }
116
+ if (spec.role.startsWith('spinbutton') || spec.role.startsWith('slider')) {
117
+ return FieldKind.NUMBER;
118
+ }
119
+ const byName = NAME_KIND.find(([words]) => words.test(spec.name ?? ''));
120
+ return byName === undefined ? FieldKind.TEXT : byName[1];
121
+ }
122
+ const isoDay = (ms) => new Date(ms).toISOString().slice(0, 10);
123
+ function numberValues(spec) {
124
+ const out = [];
125
+ const min = Number(spec.min);
126
+ const max = Number(spec.max);
127
+ if (spec.min !== undefined && Number.isFinite(min)) {
128
+ out.push({ value: String(min - 1), label: EdgeLabel.BELOW_MIN });
129
+ }
130
+ if (spec.max !== undefined && Number.isFinite(max)) {
131
+ out.push({ value: String(max + 1), label: EdgeLabel.ABOVE_MAX });
132
+ }
133
+ out.push({ value: '0', label: EdgeLabel.ZERO }, { value: '-1', label: EdgeLabel.NEGATIVE }, { value: '999999999999999999999', label: EdgeLabel.VERY_LARGE }, { value: '0.1', label: EdgeLabel.DECIMAL });
134
+ return out;
135
+ }
136
+ function dateValues(now) {
137
+ const today = new Date(now);
138
+ const future = new Date(now);
139
+ future.setUTCFullYear(today.getUTCFullYear() + FUTURE_YEARS);
140
+ const [year = '', month = '', day = ''] = isoDay(now).split('-');
141
+ return [
142
+ { value: isoDay(now - DAY_MS), label: EdgeLabel.PAST_DATE },
143
+ { value: isoDay(future.getTime()), label: EdgeLabel.FUTURE_DATE },
144
+ { value: `${year}-02-30`, label: EdgeLabel.IMPOSSIBLE_DATE },
145
+ { value: `${day}/${month}/${year}`, label: EdgeLabel.WRONG_FORMAT },
146
+ ];
147
+ }
148
+ const TIME_VALUES = [
149
+ { value: '00:00', label: EdgeLabel.MIDNIGHT },
150
+ { value: '25:61', label: EdgeLabel.IMPOSSIBLE_TIME },
151
+ ];
152
+ /** A value that the pattern refuses, or none when the pattern is invalid or accepts it. */
153
+ function breaksPattern(pattern) {
154
+ if (pattern === undefined) {
155
+ return [];
156
+ }
157
+ const candidate = '!!!';
158
+ try {
159
+ return new RegExp(`^(?:${pattern})$`, 'v').test(candidate)
160
+ ? []
161
+ : [{ value: candidate, label: EdgeLabel.BREAKS_PATTERN }];
162
+ }
163
+ catch {
164
+ return [];
165
+ }
166
+ }
167
+ function lengthValues(spec, kind) {
168
+ const out = [];
169
+ if (spec.maxLength !== undefined && spec.maxLength >= 0) {
170
+ out.push({ value: 'x'.repeat(spec.maxLength + 1), label: EdgeLabel.OVER_MAX_LENGTH });
171
+ }
172
+ else if (FieldKind.TEXT === kind) {
173
+ out.push({ value: 'x'.repeat(LONG_TEXT_LENGTH), label: EdgeLabel.LONG_TEXT });
174
+ }
175
+ if (spec.minLength !== undefined && spec.minLength > 1) {
176
+ out.push({ value: 'x'.repeat(spec.minLength - 1), label: EdgeLabel.UNDER_MIN_LENGTH });
177
+ }
178
+ return out;
179
+ }
180
+ /** Values for any field that holds text: script, direction and markup. */
181
+ const TEXT_VALUES = [
182
+ { value: 'Zoë 李 😀', label: EdgeLabel.UNICODE },
183
+ { value: 'مرحبا بالعالم', label: EdgeLabel.RTL },
184
+ { value: '<b>&amp;</b>', label: EdgeLabel.MARKUP },
185
+ ];
186
+ function kindValues(spec, kind, now) {
187
+ const wrong = WRONG_FORMAT[kind];
188
+ const wrongValue = wrong === undefined ? [] : [{ value: wrong, label: EdgeLabel.WRONG_FORMAT }];
189
+ if (FieldKind.NUMBER === kind) {
190
+ return [...numberValues(spec), ...wrongValue];
191
+ }
192
+ if (FieldKind.DATE === kind) {
193
+ return dateValues(now);
194
+ }
195
+ if (FieldKind.TIME === kind) {
196
+ return [...TIME_VALUES, ...wrongValue];
197
+ }
198
+ if (FieldKind.TEXT === kind) {
199
+ return [...TEXT_VALUES];
200
+ }
201
+ return wrongValue;
202
+ }
203
+ /**
204
+ * The edge-case values for a field, most telling first, with no value twice, at most `max`.
205
+ * `now` is the injected clock: past and future dates are relative to it.
206
+ */
207
+ export function edgeInputs(spec, opts) {
208
+ const kind = fieldKindOf(spec);
209
+ const base = spec.value !== undefined && spec.value.trim().length > 0 ? spec.value : SAMPLE[kind];
210
+ const candidates = [
211
+ { value: '', label: true === spec.required ? EdgeLabel.EMPTY_REQUIRED : EdgeLabel.EMPTY },
212
+ { value: ' ', label: EdgeLabel.WHITESPACE },
213
+ ...kindValues(spec, kind, opts.now()),
214
+ ...lengthValues(spec, kind),
215
+ ...breaksPattern(spec.pattern),
216
+ ...(spec.existing ?? [])
217
+ .slice(0, MAX_DUPLICATES)
218
+ .map((value) => ({ value, label: EdgeLabel.DUPLICATE })),
219
+ { value: ` ${base} `, label: EdgeLabel.PADDED },
220
+ ];
221
+ const seen = new Set();
222
+ const out = [];
223
+ for (const candidate of candidates) {
224
+ if (!seen.has(candidate.value)) {
225
+ seen.add(candidate.value);
226
+ out.push(candidate);
227
+ }
228
+ }
229
+ return out.slice(0, opts.max ?? MAX_EDGE_VALUES);
230
+ }
231
+ // ── Interaction edge cases for one control ─────────────────────────────────────────────────────
232
+ /** The actions a sequence uses. `click` and `fill` are the explorer's own; the rest are new. */
233
+ export const EdgeAction = {
234
+ CLICK: 'click',
235
+ FILL: 'fill',
236
+ /** The browser's back. */
237
+ BACK: 'back',
238
+ /** A full reload of the current page. */
239
+ RELOAD: 'reload',
240
+ /** Wait until the page settles. Two steps with no settle between them run back to back. */
241
+ SETTLE: 'settle',
242
+ };
243
+ export const EdgeInteraction = {
244
+ DOUBLE_ACTIVATION: 'double-activation',
245
+ RAPID_REPEAT: 'rapid-repeat',
246
+ ACT_THEN_BACK: 'act-then-back',
247
+ ACT_THEN_RELOAD: 'act-then-reload',
248
+ SUBMIT_TWICE: 'submit-twice',
249
+ SUBMIT_BEFORE_FILL: 'submit-before-fill',
250
+ OUT_OF_ORDER: 'out-of-order',
251
+ };
252
+ /** How many activations a rapid repeat sends back to back. */
253
+ export const RAPID_REPEAT = 5;
254
+ /** The default bound on sequences for one control. */
255
+ export const MAX_EDGE_SEQUENCES = 8;
256
+ /**
257
+ * A control that sends a form or commits a change, by its name.
258
+ * ponytail: English names only. A submit the name does not show still gets double activation and
259
+ * rapid repeat, which drive the same clicks without the fills.
260
+ */
261
+ const SUBMIT_NAME = /^button\s+"[^"]*\b(?:submit|save|send|create|add|pay|confirm|place order|sign (?:in|up)|log ?in|register|apply|update|post|checkout|continue)\b/i;
262
+ export function looksLikeSubmit(control) {
263
+ return SUBMIT_NAME.test(control);
264
+ }
265
+ const click = (key) => ({ action: EdgeAction.CLICK, key });
266
+ /** A step in words, for the action sequence on a finding. */
267
+ export function describeStep(step) {
268
+ if ('key' in step) {
269
+ return step.action === EdgeAction.FILL
270
+ ? `fill ${step.key} with ${JSON.stringify(step.value ?? '')}`
271
+ : `click ${step.key}`;
272
+ }
273
+ return step.action;
274
+ }
275
+ /**
276
+ * The edge sequences for `control`. `order` is the page's controls in document order; `fills` are
277
+ * the steps that fill the form the control belongs to, when it has one.
278
+ */
279
+ export function edgeInteractions(input, opts = {}) {
280
+ const { control } = input;
281
+ const fills = [...(input.fills ?? [])];
282
+ const at = (kind, steps) => ({
283
+ kind,
284
+ target: control,
285
+ steps,
286
+ });
287
+ const out = [
288
+ at(EdgeInteraction.DOUBLE_ACTIVATION, [click(control), click(control)]),
289
+ at(EdgeInteraction.RAPID_REPEAT, Array.from({ length: RAPID_REPEAT }, () => click(control))),
290
+ at(EdgeInteraction.ACT_THEN_BACK, [click(control), { action: EdgeAction.BACK }]),
291
+ at(EdgeInteraction.ACT_THEN_RELOAD, [click(control), { action: EdgeAction.RELOAD }]),
292
+ ];
293
+ if (looksLikeSubmit(control)) {
294
+ out.push(at(EdgeInteraction.SUBMIT_TWICE, [
295
+ ...fills,
296
+ click(control),
297
+ { action: EdgeAction.SETTLE },
298
+ click(control),
299
+ ]));
300
+ if (fills.length > 0) {
301
+ out.push(at(EdgeInteraction.SUBMIT_BEFORE_FILL, [click(control), ...fills, click(control)]));
302
+ }
303
+ }
304
+ const index = input.order.indexOf(control);
305
+ const before = index > 0 ? input.order[index - 1] : undefined;
306
+ if (before !== undefined && before !== control) {
307
+ out.push(at(EdgeInteraction.OUT_OF_ORDER, [click(control), click(before)]));
308
+ }
309
+ return out.slice(0, opts.max ?? MAX_EDGE_SEQUENCES);
310
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Edge cases, driven: the inputs and the interaction orders the plain explorer never tries, run on
3
+ * the states it found, and judged by the checks in `invariants.ts`.
4
+ *
5
+ * The order is the order defects are found in. Controls whose click sent a write come first: a
6
+ * submit pressed twice and a double click on them, then a reload after their write. Edge-case
7
+ * values for each field come next, one round across every field before the next value of any field.
8
+ * Controls that only read come after, then the rest of the sequences, then cancel controls.
9
+ *
10
+ * Each probe replays its state from a fresh start page, so the budget buys whole probes in that
11
+ * order and the caller keeps it apart from exploration's. Deterministic: the same states, port and
12
+ * clock give the same probes in the same order.
13
+ */
14
+ import { type FieldSpec } from '../edge-cases.js';
15
+ import { type ExploredSurface, type ExplorePort } from '../explorer.js';
16
+ import type { BehaviourFinding } from '../ledger.js';
17
+ /** Edge-case values per field. `edgeInputs` puts the most telling first. */
18
+ export declare const VALUES_PER_FIELD = 6;
19
+ export interface EdgeReport {
20
+ /** Controls whose edge cases were driven. */
21
+ probed: string[];
22
+ /** Each finding, with the control it is about. */
23
+ found: {
24
+ control: string;
25
+ finding: BehaviourFinding;
26
+ }[];
27
+ actions: number;
28
+ /** True when the budget ran out before every probe was driven. */
29
+ budgetExhausted: boolean;
30
+ /** Probes stopped by an error from the page. They drove nothing that is reported. */
31
+ failed: number;
32
+ }
33
+ export interface EdgeOptions {
34
+ maxActions: number;
35
+ now: () => number;
36
+ wait?: () => Promise<void>;
37
+ /** Faults the explorer already reported, as `control\nkind`. An edge case does not report them again. */
38
+ known?: Iterable<string>;
39
+ }
40
+ /** A field's spec from its control key and the attributes the page gave. */
41
+ export declare function specOf(control: string, attrs?: Record<string, string>): FieldSpec;
42
+ export declare function driveEdges(port: ExplorePort, surfaces: readonly ExploredSurface[], opts: EdgeOptions): Promise<EdgeReport>;