@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.
- package/LICENSE +201 -104
- package/NOTICE +5 -0
- package/README.md +1 -1
- package/SKILL.md +13 -12
- package/bin/launch.js +13 -0
- package/bin/package.json +3 -0
- package/bin/reticle.js +66 -8
- package/dist/chromium-launch-options.d.ts +25 -0
- package/dist/chromium-launch-options.js +21 -1
- package/dist/command/cli/adhoc-suite.js +2 -0
- package/dist/command/cli/adhoc-verdict.d.ts +2 -43
- package/dist/command/cli/adhoc-verdict.js +50 -160
- package/dist/command/cli/answers/gate-exit.d.ts +6 -2
- package/dist/command/cli/answers/gate-exit.js +12 -2
- package/dist/command/cli/answers/mcp-connection-hint.d.ts +2 -0
- package/dist/command/cli/answers/mcp-connection-hint.js +6 -0
- package/dist/command/cli/ci-hint.d.ts +44 -0
- package/dist/command/cli/ci-hint.js +72 -0
- package/dist/command/cli/cli-doctor.d.ts +6 -1
- package/dist/command/cli/cli-doctor.js +46 -5
- package/dist/command/cli/cli-flow-commands.d.ts +7 -1
- package/dist/command/cli/cli-flow-commands.js +39 -24
- package/dist/command/cli/cli-kill.d.ts +21 -0
- package/dist/command/cli/cli-kill.js +47 -4
- package/dist/command/cli/cli-parse-compare.d.ts +22 -0
- package/dist/command/cli/cli-parse-compare.js +75 -0
- package/dist/command/cli/cli-parse-grade.d.ts +36 -0
- package/dist/command/cli/cli-parse-grade.js +75 -0
- package/dist/command/cli/cli-parse-grammar.d.ts +2 -0
- package/dist/command/cli/cli-parse-grammar.js +18 -20
- package/dist/command/cli/cli-parse-verify.d.ts +10 -0
- package/dist/command/cli/cli-parse-verify.js +63 -14
- package/dist/command/cli/cli-parse.d.ts +22 -17
- package/dist/command/cli/cli-parse.js +54 -32
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +29 -20
- package/dist/command/cli/cli-usage.js +61 -31
- package/dist/command/cli/cli-verify.d.ts +17 -3
- package/dist/command/cli/cli-verify.js +59 -21
- package/dist/command/cli/cloud-cli.js +2 -119
- package/dist/command/cli/daemon-link/daemon-client.d.ts +45 -0
- package/dist/command/cli/daemon-link/daemon-client.js +205 -0
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +6 -1
- package/dist/command/cli/doctor/browser/chromium-hint.js +11 -5
- package/dist/command/cli/doctor/doctor-daemon-line.js +6 -3
- package/dist/command/cli/doctor/doctor-fix.d.ts +44 -0
- package/dist/command/cli/doctor/doctor-fix.js +89 -0
- package/dist/command/cli/doctor/doctor-launcher-line.d.ts +23 -0
- package/dist/command/cli/doctor/doctor-launcher-line.js +60 -0
- package/dist/command/cli/doctor/doctor-rows.d.ts +4 -0
- package/dist/command/cli/doctor/doctor-rows.js +4 -0
- package/dist/command/cli/doctor-repairs.d.ts +64 -0
- package/dist/command/cli/doctor-repairs.js +214 -0
- package/dist/command/cli/drive/drive-command.js +3 -7
- package/dist/command/cli/ensure-daemon.d.ts +26 -0
- package/dist/command/cli/ensure-daemon.js +57 -0
- package/dist/command/cli/finished-run/grade-command.d.ts +23 -0
- package/dist/command/cli/finished-run/grade-command.js +180 -0
- package/dist/command/cli/first-use-checks.d.ts +41 -0
- package/dist/command/cli/first-use-checks.js +127 -0
- package/dist/command/cli/first-verdict-node.d.ts +3 -0
- package/dist/command/cli/first-verdict-node.js +189 -0
- package/dist/command/cli/first-verdict.d.ts +126 -0
- package/dist/command/cli/first-verdict.js +267 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +3 -2
- package/dist/command/cli/launch/sdk-version-match.js +3 -2
- package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +1 -1
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +7 -6
- package/dist/command/cli/mcp-command.js +13 -4
- package/dist/command/cli/ports/port-holder.d.ts +11 -0
- package/dist/command/cli/ports/port-holder.js +36 -4
- package/dist/command/cli/setup-mcp-cli.d.ts +27 -1
- package/dist/command/cli/setup-mcp-cli.js +98 -23
- package/dist/command/cli/status/status-lines.d.ts +2 -0
- package/dist/command/cli/status/status-lines.js +72 -17
- package/dist/command/cli/status-fields.d.ts +5 -1
- package/dist/command/cli/status-fields.js +24 -6
- package/dist/command/cli/try-command.d.ts +7 -0
- package/dist/command/cli/try-command.js +11 -3
- package/dist/command/cli/two-builds/compare-command.d.ts +48 -0
- package/dist/command/cli/two-builds/compare-command.js +314 -0
- package/dist/command/cli/verify-against.d.ts +61 -0
- package/dist/command/cli/verify-against.js +187 -0
- package/dist/command/cli/verify-no-session.d.ts +2 -0
- package/dist/command/cli/verify-no-session.js +13 -0
- package/dist/command/cli/verify-results.d.ts +35 -2
- package/dist/command/cli/verify-results.js +76 -10
- package/dist/command/cli.js +112 -70
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +3 -1
- package/dist/command/daemon/binding/daemon-status-probe.js +4 -2
- package/dist/command/daemon/daemon-argv.d.ts +9 -0
- package/dist/command/daemon/daemon-argv.js +11 -0
- package/dist/command/daemon/daemon-resolve.d.ts +8 -1
- package/dist/command/daemon/daemon-resolve.js +27 -1
- package/dist/command/daemon/daemon.d.ts +22 -4
- package/dist/command/daemon/daemon.js +52 -10
- package/dist/command/daemon/lifetime/daemon-exit.d.ts +24 -0
- package/dist/command/daemon/lifetime/daemon-exit.js +39 -0
- package/dist/command/daemon/lifetime/death-cause.d.ts +15 -0
- package/dist/command/daemon/lifetime/death-cause.js +149 -0
- package/dist/command/daemon/lifetime/heartbeat.d.ts +7 -15
- package/dist/command/daemon/lifetime/heartbeat.js +11 -15
- package/dist/command/daemon/lifetime/startup-failure.d.ts +29 -0
- package/dist/command/daemon/lifetime/startup-failure.js +62 -0
- package/dist/command/daemon/port-state.d.ts +14 -0
- package/dist/command/daemon/port-state.js +31 -0
- package/dist/command/setup/agent-configs.d.ts +2 -0
- package/dist/command/setup/agent-configs.js +42 -15
- package/dist/command/setup/agent-next-steps.d.ts +77 -0
- package/dist/command/setup/agent-next-steps.js +284 -0
- package/dist/command/setup/agent-writer.js +11 -6
- package/dist/command/setup/bringup/dev-server-files.d.ts +9 -0
- package/dist/command/setup/bringup/dev-server-files.js +17 -0
- package/dist/command/setup/bringup/static-page-server.d.ts +14 -2
- package/dist/command/setup/bringup/static-page-server.js +43 -9
- package/dist/command/setup/init/init-host.js +2 -0
- package/dist/command/setup/init/init-runtime.d.ts +6 -1
- package/dist/command/setup/init/init-runtime.js +63 -21
- package/dist/command/setup/mcp-launcher.d.ts +3 -0
- package/dist/command/setup/mcp-launcher.js +11 -0
- package/dist/command/setup/node-effects.d.ts +3 -2
- package/dist/command/setup/node-effects.js +9 -3
- package/dist/command/setup/remaining-steps.d.ts +8 -0
- package/dist/command/setup/remaining-steps.js +10 -0
- package/dist/command/setup/run-setup.d.ts +2 -0
- package/dist/command/setup/run-setup.js +9 -1
- package/dist/command/setup/setup-command.js +36 -15
- package/dist/command/setup/setup-mcp.d.ts +8 -0
- package/dist/command/setup/setup-mcp.js +47 -20
- package/dist/command/setup/start-dev-server.d.ts +8 -0
- package/dist/command/setup/start-dev-server.js +43 -0
- package/dist/command/update/updater.js +6 -0
- package/dist/command/version/identity/server-version.d.ts +2 -0
- package/dist/command/version/identity/server-version.js +2 -0
- package/dist/command/version/version-skew.d.ts +7 -0
- package/dist/command/version/version-skew.js +14 -3
- package/dist/features/compare/action-plan.d.ts +260 -0
- package/dist/features/compare/action-plan.js +543 -0
- package/dist/features/compare/behaviour-compare.d.ts +24 -0
- package/dist/features/compare/behaviour-compare.js +85 -0
- package/dist/features/compare/behaviour-diff.d.ts +97 -0
- package/dist/features/compare/behaviour-diff.js +202 -0
- package/dist/features/compare/behaviour-report.d.ts +40 -0
- package/dist/features/compare/behaviour-report.js +128 -0
- package/dist/features/compare/build-readings.d.ts +106 -0
- package/dist/features/compare/build-readings.js +250 -0
- package/dist/features/compare/compare-diff.d.ts +62 -0
- package/dist/features/compare/compare-diff.js +177 -0
- package/dist/features/compare/compare-report-html.d.ts +6 -0
- package/dist/features/compare/compare-report-html.js +102 -0
- package/dist/features/compare/compare-report.d.ts +15 -0
- package/dist/features/compare/compare-report.js +73 -0
- package/dist/features/compare/compare-run.d.ts +60 -0
- package/dist/features/compare/compare-run.js +123 -0
- package/dist/features/compare/outside/effect-lines.d.ts +26 -0
- package/dist/features/compare/outside/effect-lines.js +103 -0
- package/dist/features/compare/outside/state-sources.d.ts +76 -0
- package/dist/features/compare/outside/state-sources.js +164 -0
- package/dist/features/compare/outside/value-dictionary.d.ts +51 -0
- package/dist/features/compare/outside/value-dictionary.js +227 -0
- package/dist/features/compare/visible-content.d.ts +20 -0
- package/dist/features/compare/visible-content.js +125 -0
- package/dist/features/crawl/crawl-empty.js +2 -1
- package/dist/features/crawl/crawl-exhaustive.d.ts +55 -0
- package/dist/features/crawl/crawl-exhaustive.js +138 -0
- package/dist/features/crawl/crawl-tools.d.ts +9 -2
- package/dist/features/crawl/crawl-tools.js +28 -12
- package/dist/features/crawl/crawl.d.ts +8 -9
- package/dist/features/crawl/crawl.js +61 -65
- package/dist/features/exhaust/app-coverage.d.ts +5 -1
- package/dist/features/exhaust/app-coverage.js +3 -1
- package/dist/features/exhaust/code-coverage.js +8 -4
- package/dist/features/exhaust/edge-cases.d.ts +133 -0
- package/dist/features/exhaust/edge-cases.js +310 -0
- package/dist/features/exhaust/edges/edge-drive.d.ts +42 -0
- package/dist/features/exhaust/edges/edge-drive.js +364 -0
- package/dist/features/exhaust/edges/edge-run.d.ts +59 -0
- package/dist/features/exhaust/edges/edge-run.js +169 -0
- package/dist/features/exhaust/explorer.d.ts +87 -14
- package/dist/features/exhaust/explorer.js +159 -25
- package/dist/features/exhaust/failure-branches.d.ts +5 -0
- package/dist/features/exhaust/failure-branches.js +29 -11
- package/dist/features/exhaust/invariants.d.ts +112 -0
- package/dist/features/exhaust/invariants.js +188 -0
- package/dist/features/exhaust/ledger.d.ts +68 -0
- package/dist/features/exhaust/ledger.js +121 -13
- package/dist/features/exhaust/session-fold.d.ts +10 -0
- package/dist/features/exhaust/session-fold.js +46 -3
- package/dist/features/exhaust/session-port.d.ts +3 -1
- package/dist/features/exhaust/session-port.js +97 -28
- package/dist/features/grade/grade-answer.d.ts +99 -0
- package/dist/features/grade/grade-answer.js +112 -0
- package/dist/features/grade/grade-noise.d.ts +27 -0
- package/dist/features/grade/grade-noise.js +55 -0
- package/dist/features/grade/grade-renumber.d.ts +12 -0
- package/dist/features/grade/grade-renumber.js +86 -0
- package/dist/features/grade/grade-state.d.ts +50 -0
- package/dist/features/grade/grade-state.js +93 -0
- package/dist/features/grade/grade-suggest.d.ts +33 -0
- package/dist/features/grade/grade-suggest.js +98 -0
- package/dist/features/license/license.d.ts +11 -71
- package/dist/features/license/license.js +43 -136
- package/dist/features/visual/desktop-capture.d.ts +33 -0
- package/dist/features/visual/desktop-capture.js +94 -0
- package/dist/features/visual/step-shots.js +139 -35
- package/dist/features/visual/visual-tools.d.ts +0 -18
- package/dist/features/visual/visual-tools.js +67 -99
- package/dist/import-graph.js +5 -6
- package/dist/index.d.ts +3 -1
- package/dist/index.js +19 -7
- package/dist/judgement/capsule/causal-summary.js +9 -2
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +13 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +1 -1
- package/dist/judgement/runs/reticle-runner.js +16 -2
- package/dist/judgement/runs/run-ledger.d.ts +7 -5
- package/dist/judgement/runs/run-ledger.js +98 -69
- package/dist/judgement/runs/runner-port.d.ts +2 -0
- package/dist/judgement/runs/runner-port.js +23 -5
- package/dist/judgement/runs/verification-sync.d.ts +6 -3
- package/dist/judgement/runs/verification-sync.js +21 -10
- package/dist/language/flows/affected-tools.d.ts +1 -1
- package/dist/language/flows/affected-tools.js +49 -30
- package/dist/language/flows/change/git-changed.d.ts +2 -1
- package/dist/language/flows/change/git-changed.js +19 -2
- package/dist/language/flows/fields/flow-secret-field.d.ts +1 -13
- package/dist/language/flows/fields/flow-secret-field.js +77 -21
- package/dist/language/flows/flow-anchor.d.ts +60 -2
- package/dist/language/flows/flow-anchor.js +125 -20
- package/dist/language/flows/flow-classify.d.ts +20 -0
- package/dist/language/flows/flow-classify.js +90 -12
- package/dist/language/flows/flow-cross-step.d.ts +7 -1
- package/dist/language/flows/flow-cross-step.js +25 -1
- package/dist/language/flows/flow-journey.d.ts +38 -4
- package/dist/language/flows/flow-journey.js +138 -8
- package/dist/language/flows/flow-replay-run.d.ts +0 -16
- package/dist/language/flows/flow-replay-run.js +76 -14
- package/dist/language/flows/flow-replay-types.d.ts +4 -2
- package/dist/language/flows/flow-replay.d.ts +19 -1
- package/dist/language/flows/flow-replay.js +169 -52
- package/dist/language/flows/flow-replayable.js +7 -1
- package/dist/language/flows/flow-start-path.d.ts +34 -5
- package/dist/language/flows/flow-start-path.js +202 -15
- package/dist/language/flows/flow-step-runners.d.ts +14 -13
- package/dist/language/flows/flow-step-runners.js +184 -109
- package/dist/language/flows/flow-store-for-session.d.ts +26 -25
- package/dist/language/flows/flow-store-for-session.js +51 -5
- package/dist/language/flows/flow-tools.js +46 -33
- package/dist/language/flows/flows.js +176 -76
- package/dist/language/flows/recording/tape/recordings.d.ts +21 -16
- package/dist/language/flows/recording/tape/recordings.js +112 -49
- package/dist/language/flows/replay.d.ts +36 -12
- package/dist/language/flows/replay.js +193 -50
- package/dist/language/flows/steps/page-steps.d.ts +68 -0
- package/dist/language/flows/steps/page-steps.js +198 -0
- package/dist/language/flows/suite/sequential-run.d.ts +68 -0
- package/dist/language/flows/suite/sequential-run.js +96 -0
- package/dist/language/flows/verify-change-tools.js +26 -15
- package/dist/launch-chromium.d.ts +1 -0
- package/dist/launch-chromium.js +49 -12
- package/dist/memory/cloud/background-sync.d.ts +13 -0
- package/dist/memory/cloud/background-sync.js +24 -3
- package/dist/memory/cloud/sync-daemon.js +26 -27
- package/dist/memory/cloud/sync-screenshots.js +6 -1
- package/dist/memory/journal/attach-journal.js +2 -1
- package/dist/memory/journal/drive-flow.d.ts +7 -0
- package/dist/memory/journal/drive-flow.js +44 -13
- package/dist/memory/journal/journal-recorder.d.ts +4 -2
- package/dist/memory/journal/session-journal.d.ts +7 -0
- package/dist/memory/journal/session-journal.js +58 -10
- package/dist/memory/project/root-claims.d.ts +9 -0
- package/dist/memory/project/root-claims.js +9 -4
- package/dist/portal/bridge/bridge.d.ts +13 -4
- package/dist/portal/bridge/bridge.js +10 -9
- package/dist/portal/input/download-capture.d.ts +7 -0
- package/dist/portal/input/download-capture.js +92 -0
- package/dist/portal/input/network-detail.d.ts +6 -0
- package/dist/portal/input/network-detail.js +12 -1
- package/dist/portal/input/network-mock-tools.js +49 -13
- package/dist/portal/input/network-mock.d.ts +8 -0
- package/dist/portal/input/network-mock.js +30 -10
- package/dist/portal/input/page-capture.d.ts +24 -0
- package/dist/portal/input/page-capture.js +33 -0
- package/dist/portal/input/real-input.d.ts +35 -18
- package/dist/portal/input/real-input.js +99 -33
- package/dist/portal/input/viewport-tools.d.ts +8 -0
- package/dist/portal/input/viewport-tools.js +81 -21
- package/dist/portal/pool/browser-pool.d.ts +16 -30
- package/dist/portal/pool/browser-pool.js +64 -52
- package/dist/portal/pool/context-permissions.d.ts +34 -17
- package/dist/portal/pool/context-permissions.js +94 -1
- package/dist/portal/pool/csp-widen.d.ts +62 -0
- package/dist/portal/pool/csp-widen.js +132 -0
- package/dist/portal/pool/determinism.d.ts +52 -0
- package/dist/portal/pool/determinism.js +259 -0
- package/dist/portal/pool/lease-emulation.d.ts +34 -1
- package/dist/portal/pool/lease-emulation.js +18 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +6 -0
- package/dist/portal/pool/lease-marker-stamp.js +15 -1
- package/dist/portal/pool/lease-page-error.d.ts +56 -0
- package/dist/portal/pool/lease-page-error.js +160 -0
- package/dist/portal/pool/page-error-journal.d.ts +63 -0
- package/dist/portal/pool/page-error-journal.js +208 -0
- package/dist/portal/pool/playwright-launcher.js +71 -15
- package/dist/portal/pool/pool-contract.d.ts +49 -1
- package/dist/portal/pool/pool-lease.d.ts +70 -2
- package/dist/portal/pool/pool-lease.js +23 -0
- package/dist/portal/pool/zero-install.d.ts +8 -0
- package/dist/portal/pool/zero-install.js +91 -1
- package/dist/portal/session/dev-server/dev-command.d.ts +11 -2
- package/dist/portal/session/dev-server/dev-command.js +110 -16
- package/dist/portal/session/dev-server/dev-server-probe.d.ts +7 -0
- package/dist/portal/session/dev-server/dev-server-probe.js +9 -0
- package/dist/portal/session/dev-server/project-ports.d.ts +21 -0
- package/dist/portal/session/dev-server/project-ports.js +62 -0
- package/dist/portal/session/facts/departed-network.d.ts +66 -0
- package/dist/portal/session/facts/departed-network.js +142 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +9 -0
- package/dist/portal/session/no-session-diagnosis.js +76 -27
- package/dist/portal/session/no-session-next-action.d.ts +14 -0
- package/dist/portal/session/no-session-next-action.js +56 -7
- package/dist/portal/session/no-session-watch.d.ts +6 -0
- package/dist/portal/session/no-session-watch.js +41 -4
- package/dist/portal/session/page-commands/undeclared-command.d.ts +9 -3
- package/dist/portal/session/page-commands/undeclared-command.js +16 -7
- package/dist/portal/session/recorded-gaps.d.ts +1 -1
- package/dist/portal/session/recorded-gaps.js +5 -2
- package/dist/portal/session/serving-directory.d.ts +10 -0
- package/dist/portal/session/serving-directory.js +39 -8
- package/dist/portal/session/session-manager.d.ts +10 -0
- package/dist/portal/session/session-manager.js +211 -81
- package/dist/portal/session/session.js +4 -3
- package/dist/portal/session/zero-install-first-call.d.ts +20 -1
- package/dist/portal/session/zero-install-first-call.js +34 -2
- package/dist/start-wiring.d.ts +30 -2
- package/dist/start-wiring.js +74 -9
- package/dist/surface/mcp/mcp-proxy.js +10 -2
- package/dist/surface/mcp/mcp.js +8 -5
- package/dist/surface/mcp/peer/agents-connected.d.ts +6 -0
- package/dist/surface/mcp/peer/agents-connected.js +58 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +17 -5
- package/dist/surface/mcp/shared-params.d.ts +2 -0
- package/dist/surface/mcp/shared-params.js +31 -0
- package/dist/surface/tools/act/act-observation.d.ts +40 -2
- package/dist/surface/tools/act/act-observation.js +118 -12
- package/dist/surface/tools/act/act-preflight.js +38 -18
- package/dist/surface/tools/act/act-sequence-retry.d.ts +23 -2
- package/dist/surface/tools/act/act-sequence-retry.js +61 -5
- package/dist/surface/tools/act/act-target.js +3 -1
- package/dist/surface/tools/act/after-match.d.ts +10 -0
- package/dist/surface/tools/act/after-match.js +40 -0
- package/dist/surface/tools/act/already-true.js +1 -1
- package/dist/surface/tools/act/navigation/reload-result.d.ts +12 -1
- package/dist/surface/tools/act/navigation/reload-result.js +25 -2
- package/dist/surface/tools/act/resolve-target.d.ts +17 -1
- package/dist/surface/tools/act/resolve-target.js +59 -9
- package/dist/surface/tools/act/sequence-grade.d.ts +15 -1
- package/dist/surface/tools/act/sequence-grade.js +45 -27
- package/dist/surface/tools/act/settle-in-flight.js +27 -15
- package/dist/surface/tools/act-command.d.ts +23 -0
- package/dist/surface/tools/act-command.js +50 -0
- package/dist/surface/tools/act-sequence-tool.js +81 -50
- package/dist/surface/tools/act-tools.d.ts +1 -13
- package/dist/surface/tools/act-tools.js +83 -95
- package/dist/surface/tools/agent/build-staleness.d.ts +1 -1
- package/dist/surface/tools/agent/build-staleness.js +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +18 -12
- package/dist/surface/tools/browser-tools.js +87 -13
- package/dist/surface/tools/compare-tools.d.ts +11 -0
- package/dist/surface/tools/compare-tools.js +94 -0
- package/dist/surface/tools/coverage-tools.js +1 -1
- package/dist/surface/tools/dynamic-tools.js +11 -3
- package/dist/surface/tools/empty-session-list.d.ts +2 -0
- package/dist/surface/tools/empty-session-list.js +4 -2
- package/dist/surface/tools/error-recovery.d.ts +12 -1
- package/dist/surface/tools/error-recovery.js +131 -40
- package/dist/surface/tools/explore-tools.js +1 -1
- package/dist/surface/tools/invoke-tool.js +29 -21
- package/dist/surface/tools/lease-coverage-tools.d.ts +49 -0
- package/dist/surface/tools/lease-coverage-tools.js +128 -0
- package/dist/surface/tools/lease-hint.d.ts +42 -1
- package/dist/surface/tools/lease-hint.js +52 -3
- package/dist/surface/tools/lease-readiness.d.ts +47 -0
- package/dist/surface/tools/lease-readiness.js +126 -0
- package/dist/surface/tools/lease-seed.d.ts +16 -1
- package/dist/surface/tools/lease-seed.js +37 -4
- package/dist/surface/tools/lease-tools.d.ts +3 -41
- package/dist/surface/tools/lease-tools.js +104 -124
- package/dist/surface/tools/lease-url-identity.d.ts +46 -0
- package/dist/surface/tools/lease-url-identity.js +97 -0
- package/dist/surface/tools/merge-tools.js +99 -2
- package/dist/surface/tools/merged-name-redirect.js +5 -1
- package/dist/surface/tools/observe-tools.js +15 -9
- package/dist/surface/tools/read/console-pre-attach.d.ts +19 -0
- package/dist/surface/tools/read/console-pre-attach.js +23 -0
- package/dist/surface/tools/read-tools.js +33 -30
- package/dist/surface/tools/real-input-attempt.d.ts +0 -8
- package/dist/surface/tools/real-input-attempt.js +143 -28
- package/dist/surface/tools/repeat-hint.d.ts +40 -0
- package/dist/surface/tools/repeat-hint.js +171 -0
- package/dist/surface/tools/run-report.d.ts +2 -2
- package/dist/surface/tools/run-report.js +27 -15
- package/dist/surface/tools/session-ports.d.ts +14 -0
- package/dist/surface/tools/session-ports.js +53 -0
- package/dist/surface/tools/tool-kit.d.ts +18 -0
- package/dist/surface/tools/tool-kit.js +9 -3
- package/dist/surface/tools/tool-surface.js +0 -1
- package/dist/surface/tools/tools.js +54 -18
- package/dist/surface/tools/type-spelling.d.ts +13 -0
- package/dist/surface/tools/type-spelling.js +36 -0
- package/dist/telemetry/agent-client.d.ts +6 -0
- package/dist/telemetry/agent-client.js +10 -0
- package/dist/telemetry/argument-shape.js +17 -7
- package/dist/telemetry/cli-telemetry.d.ts +10 -1
- package/dist/telemetry/cli-telemetry.js +15 -0
- package/dist/telemetry/init-telemetry.d.ts +2 -1
- package/dist/telemetry/init-telemetry.js +47 -2
- package/dist/telemetry/install-trace.js +23 -4
- package/dist/telemetry/onboarding-funnel.d.ts +19 -2
- package/dist/telemetry/onboarding-funnel.js +25 -3
- package/dist/telemetry/proxy-telemetry.d.ts +2 -1
- package/dist/telemetry/proxy-telemetry.js +2 -2
- package/dist/telemetry/session-metrics.d.ts +1 -1
- package/dist/telemetry/session-metrics.js +67 -27
- package/dist/telemetry/telemetry.d.ts +3 -1
- package/dist/telemetry/telemetry.js +60 -28
- package/dist/telemetry/tool-refused.d.ts +6 -3
- package/dist/telemetry/tool-refused.js +15 -3
- package/docs/actions.mdx +3 -3
- package/docs/agent-cheatsheet.md +1 -1
- package/docs/architecture.md +3 -6
- package/docs/capabilities.mdx +61 -1
- package/docs/cli/affected.mdx +9 -7
- package/docs/cli/cloud.mdx +3 -3
- package/docs/cli/compare.mdx +94 -0
- package/docs/cli/doctor.mdx +41 -2
- package/docs/cli/grade.mdx +97 -0
- package/docs/cli/help.mdx +4 -2
- package/docs/cli/license.mdx +13 -12
- package/docs/cli/restart.mdx +7 -5
- package/docs/cli/rollback.mdx +5 -5
- package/docs/cli/setup.mdx +13 -2
- package/docs/cli/status.mdx +4 -0
- package/docs/cli/stop.mdx +3 -3
- package/docs/cli/update.mdx +2 -2
- package/docs/cli/verify.mdx +23 -1
- package/docs/cli.mdx +34 -24
- package/docs/deploy-checks.md +25 -0
- package/docs/desktop.mdx +1 -1
- package/docs/enterprise.md +17 -22
- package/docs/environment.mdx +1 -0
- package/docs/first-drive.md +1 -1
- package/docs/flows.md +11 -1
- package/docs/frameworks.mdx +9 -9
- package/docs/getting-started.md +1 -1
- package/docs/install-manual.mdx +16 -1
- package/docs/license-activation.mdx +3 -3
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/server.mdx +1 -1
- package/docs/packages/tauri.mdx +1 -1
- package/docs/packages/test.mdx +1 -1
- package/docs/packages.mdx +1 -1
- package/docs/platform-integration.md +1 -1
- package/docs/predicates.mdx +1 -1
- package/docs/quickstart.mdx +68 -49
- package/docs/skill-setup.md +1 -1
- package/docs/skill.md +14 -13
- package/docs/telemetry.md +6 -4
- package/docs/tools/navigate.mdx +1 -1
- package/docs/tools/verify.mdx +4 -1
- package/docs/troubleshooting.mdx +1 -1
- package/docs/usage.md +17 -14
- package/package.json +18 -14
- package/LICENSE-ENTERPRISE +0 -37
- package/dist/features/ee/audit-log.d.ts +0 -14
- package/dist/features/ee/audit-log.js +0 -11
- package/dist/features/exhaust/exhaust-run.d.ts +0 -33
- 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
|
-
/**
|
|
50
|
-
|
|
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
|
-
|
|
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
|
|
107
|
-
*
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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
|
-
*
|
|
35
|
-
* a
|
|
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
|
|
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
|
|
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
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
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,
|
|
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 {};
|