@reticlehq/server 3.5.0 → 3.7.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/README.md +1 -1
- package/SKILL.md +123 -116
- package/dist/chromium-launch-options.d.ts +3 -1
- package/dist/chromium-launch-options.js +2 -1
- package/dist/command/cli/adhoc-suite.d.ts +14 -0
- package/dist/command/cli/adhoc-suite.js +42 -7
- package/dist/command/cli/adhoc-verdict.d.ts +19 -2
- package/dist/command/cli/adhoc-verdict.js +76 -9
- package/dist/command/cli/answers/gate-exit.d.ts +23 -0
- package/dist/command/cli/answers/gate-exit.js +45 -0
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +3 -1
- package/dist/command/cli/answers/open-note.d.ts +2 -0
- package/dist/command/cli/answers/open-note.js +22 -0
- package/dist/command/cli/auth/device-flow.d.ts +13 -2
- package/dist/command/cli/auth/device-flow.js +17 -0
- package/dist/command/cli/cli-doctor.js +14 -0
- package/dist/command/cli/cli-flow-commands.d.ts +0 -11
- package/dist/command/cli/cli-flow-commands.js +31 -112
- package/dist/command/cli/cli-kill.js +3 -2
- package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
- package/dist/command/cli/cli-parse-grammar.js +75 -0
- package/dist/command/cli/cli-parse-verify.d.ts +2 -0
- package/dist/command/cli/cli-parse-verify.js +18 -0
- package/dist/command/cli/cli-parse.d.ts +19 -28
- package/dist/command/cli/cli-parse.js +82 -182
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +61 -9
- package/dist/command/cli/cli-usage.d.ts +33 -0
- package/dist/command/cli/cli-usage.js +287 -0
- package/dist/command/cli/cli-verify.d.ts +35 -5
- package/dist/command/cli/cli-verify.js +114 -35
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +192 -341
- package/dist/command/cli/cloud-kit.d.ts +12 -0
- package/dist/command/cli/cloud-kit.js +41 -2
- package/dist/command/cli/cloud-link.d.ts +57 -0
- package/dist/command/cli/cloud-link.js +308 -0
- package/dist/command/cli/cloud-login.d.ts +22 -0
- package/dist/command/cli/cloud-login.js +96 -8
- package/dist/command/cli/context-command.d.ts +1 -0
- package/dist/command/cli/context-command.js +33 -0
- package/dist/command/cli/daemon-start-options.d.ts +3 -0
- package/dist/command/cli/daemon-start-options.js +24 -3
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
- package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
- package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
- package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
- package/dist/command/cli/doctor/doctor-project-line.js +5 -4
- package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
- package/dist/command/cli/doctor/doctor-rows.js +6 -0
- package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
- package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
- package/dist/command/cli/drive/drive-attach.d.ts +27 -2
- package/dist/command/cli/drive/drive-attach.js +71 -4
- package/dist/command/cli/drive/drive-command.d.ts +2 -1
- package/dist/command/cli/drive/drive-command.js +13 -7
- package/dist/command/cli/known-regression.d.ts +13 -0
- package/dist/command/cli/known-regression.js +34 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
- package/dist/command/cli/launch/sdk-version-match.js +25 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
- package/dist/command/cli/mcp-command.d.ts +6 -0
- package/dist/command/cli/mcp-command.js +13 -5
- package/dist/command/cli/ports/port-holder.d.ts +10 -0
- package/dist/command/cli/ports/port-holder.js +25 -1
- package/dist/command/cli/project-name.d.ts +29 -1
- package/dist/command/cli/project-name.js +107 -2
- package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
- package/dist/command/cli/setup-mcp-cli.js +35 -12
- package/dist/command/cli/status/status-lines.d.ts +1 -0
- package/dist/command/cli/status/status-lines.js +47 -2
- package/dist/command/cli/status/workspace-links.d.ts +10 -0
- package/dist/command/cli/status/workspace-links.js +29 -0
- package/dist/command/cli/try-command.d.ts +96 -0
- package/dist/command/cli/try-command.js +362 -0
- package/dist/command/cli/tutorial.d.ts +0 -100
- package/dist/command/cli/tutorial.js +0 -181
- package/dist/command/cli/verify-results.d.ts +19 -0
- package/dist/command/cli/verify-results.js +29 -0
- package/dist/command/cli-onboarding.d.ts +0 -11
- package/dist/command/cli-onboarding.js +0 -15
- package/dist/command/cli.d.ts +20 -0
- package/dist/command/cli.js +130 -104
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +23 -1
- package/dist/command/daemon/daemon-resolve.js +79 -9
- package/dist/command/setup/agent-writer.d.ts +1 -1
- package/dist/command/setup/agent-writer.js +3 -2
- package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
- package/dist/command/setup/bringup/bridge-port.js +13 -3
- package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
- package/dist/command/setup/bringup/connect-lease.js +1 -0
- package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
- package/dist/command/setup/bringup/dev-server-wait.js +19 -0
- package/dist/command/setup/bringup/ensure-daemon.js +9 -2
- package/dist/command/setup/init/agent-restart.d.ts +23 -0
- package/dist/command/setup/init/agent-restart.js +28 -0
- package/dist/command/setup/init/init-port.d.ts +14 -1
- package/dist/command/setup/init/init-port.js +32 -2
- package/dist/command/setup/init/init-runtime.d.ts +22 -2
- package/dist/command/setup/init/init-runtime.js +114 -38
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +38 -9
- package/dist/command/setup/probe/existing-app.d.ts +12 -0
- package/dist/command/setup/probe/existing-app.js +14 -0
- package/dist/command/setup/remaining-steps.js +2 -1
- package/dist/command/setup/run-setup.d.ts +34 -9
- package/dist/command/setup/run-setup.js +65 -51
- package/dist/command/setup/setup-command.d.ts +25 -1
- package/dist/command/setup/setup-command.js +59 -4
- package/dist/command/setup/setup-mcp.js +25 -2
- package/dist/command/setup/tauri-signing.d.ts +19 -0
- package/dist/command/setup/tauri-signing.js +79 -0
- package/dist/command/setup/terminal/listeners.d.ts +10 -1
- package/dist/command/setup/terminal/listeners.js +37 -6
- package/dist/command/update/update-nudge.d.ts +9 -0
- package/dist/command/update/update-nudge.js +1 -1
- package/dist/command/update/updater.js +11 -15
- package/dist/command/version/version-nudge.js +3 -0
- package/dist/command/version/version-skew.d.ts +20 -1
- package/dist/command/version/version-skew.js +49 -4
- package/dist/features/crawl/crawl-tools.js +4 -0
- package/dist/features/crawl/crawl.d.ts +6 -0
- package/dist/features/crawl/crawl.js +23 -2
- package/dist/features/exhaust/ledger.d.ts +21 -14
- package/dist/features/exhaust/ledger.js +35 -9
- package/dist/features/harness/app-findings.d.ts +2 -0
- package/dist/features/harness/app-findings.js +52 -0
- package/dist/features/harness/drive-report.d.ts +61 -1
- package/dist/features/harness/drive-report.js +394 -26
- package/dist/features/harness/drive-runs.d.ts +120 -0
- package/dist/features/harness/drive-runs.js +289 -0
- package/dist/features/harness/drivers.d.ts +10 -14
- package/dist/features/harness/drivers.js +10 -14
- package/dist/features/harness/explore/console-pages.d.ts +15 -0
- package/dist/features/harness/explore/console-pages.js +146 -0
- package/dist/features/harness/explore/disparity.d.ts +19 -0
- package/dist/features/harness/explore/disparity.js +71 -0
- package/dist/features/harness/explore/fake-app.d.ts +16 -0
- package/dist/features/harness/explore/fake-app.js +49 -0
- package/dist/features/harness/explore/goal-search.d.ts +26 -0
- package/dist/features/harness/explore/goal-search.js +144 -0
- package/dist/features/harness/explore/page-tree.d.ts +49 -0
- package/dist/features/harness/explore/page-tree.js +148 -0
- package/dist/features/harness/explore/site-map.d.ts +34 -0
- package/dist/features/harness/explore/site-map.js +150 -0
- package/dist/features/harness/fill-values.d.ts +3 -73
- package/dist/features/harness/fill-values.js +3 -169
- package/dist/features/harness/goals.d.ts +82 -0
- package/dist/features/harness/goals.js +330 -0
- package/dist/features/harness/harness.d.ts +51 -1
- package/dist/features/harness/harness.js +207 -6
- package/dist/features/harness/platform/drive-target.d.ts +30 -0
- package/dist/features/harness/platform/drive-target.js +81 -0
- package/dist/features/harness/platform/local-apps.d.ts +127 -0
- package/dist/features/harness/platform/local-apps.js +280 -0
- package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
- package/dist/features/harness/platform/persona-credentials.js +69 -0
- package/dist/features/harness/platform/platform-drives.d.ts +61 -0
- package/dist/features/harness/platform/platform-drives.js +114 -0
- package/dist/features/harness/platform/refusal.d.ts +52 -0
- package/dist/features/harness/platform/refusal.js +71 -0
- package/dist/features/harness/platform/remote-drive.d.ts +186 -0
- package/dist/features/harness/platform/remote-drive.js +378 -0
- package/dist/features/harness/platform/script.d.ts +94 -0
- package/dist/features/harness/platform/script.js +260 -0
- package/dist/features/harness/platform/server-driver.d.ts +54 -0
- package/dist/features/harness/platform/server-driver.js +182 -0
- package/dist/features/harness/platform-config.d.ts +41 -1
- package/dist/features/harness/platform-config.js +106 -9
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/app-controls.d.ts +5 -0
- package/dist/features/harness/script/app-controls.js +40 -0
- package/dist/features/harness/script/lane-ids.d.ts +14 -0
- package/dist/features/harness/script/lane-ids.js +16 -0
- package/dist/features/harness/script/script-run.d.ts +70 -0
- package/dist/features/harness/script/script-run.js +606 -0
- package/dist/features/license/license.d.ts +2 -2
- package/dist/features/visual/step-shots.d.ts +31 -0
- package/dist/features/visual/step-shots.js +231 -0
- package/dist/features/visual/visual-tools.d.ts +10 -1
- package/dist/features/visual/visual-tools.js +62 -17
- package/dist/hooks/client-directory.d.ts +18 -0
- package/dist/hooks/client-directory.js +57 -0
- package/dist/hooks/coding-agents.d.ts +34 -0
- package/dist/hooks/coding-agents.js +117 -0
- package/dist/hooks/driven-by.d.ts +23 -0
- package/dist/hooks/driven-by.js +56 -0
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/hooks/hook-commands.js +15 -4
- package/dist/hooks/tool-log.d.ts +9 -0
- package/dist/hooks/tool-log.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +80 -243
- package/dist/judgement/capsule/capsule-store.d.ts +2 -2
- package/dist/judgement/capsule/causal-summary.d.ts +15 -1
- package/dist/judgement/capsule/causal-summary.js +33 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
- package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
- package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
- package/dist/judgement/runs/artifact/gap-summary.js +12 -3
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
- package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
- package/dist/judgement/runs/artifact/run-store.js +195 -3
- package/dist/judgement/runs/context-tools.js +59 -1
- package/dist/judgement/runs/default-run-id.d.ts +3 -0
- package/dist/judgement/runs/default-run-id.js +16 -0
- package/dist/judgement/runs/drive-run.d.ts +71 -1
- package/dist/judgement/runs/drive-run.js +317 -5
- package/dist/judgement/runs/repair-prompt.js +1 -1
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +13 -3
- package/dist/judgement/runs/runner-port.d.ts +5 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +5 -2
- package/dist/judgement/runs/verification-sync.js +40 -18
- package/dist/language/flows/change/gate.d.ts +10 -0
- package/dist/language/flows/change/gate.js +22 -0
- package/dist/language/flows/decision.js +36 -1
- package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
- package/dist/language/flows/fields/flow-secret-field.js +25 -2
- package/dist/language/flows/flow-anchor.d.ts +61 -10
- package/dist/language/flows/flow-anchor.js +98 -6
- package/dist/language/flows/flow-cross-step.d.ts +15 -0
- package/dist/language/flows/flow-cross-step.js +21 -0
- package/dist/language/flows/flow-intent.d.ts +1 -0
- package/dist/language/flows/flow-journey.d.ts +6 -0
- package/dist/language/flows/flow-journey.js +20 -0
- package/dist/language/flows/flow-learning.d.ts +4 -0
- package/dist/language/flows/flow-learning.js +45 -14
- package/dist/language/flows/flow-mutate-tools.js +5 -3
- package/dist/language/flows/flow-replay-run.d.ts +23 -9
- package/dist/language/flows/flow-replay-run.js +115 -110
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +40 -1
- package/dist/language/flows/flow-replay.js +110 -22
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-scope.js +5 -1
- package/dist/language/flows/flow-step-runners.d.ts +22 -2
- package/dist/language/flows/flow-step-runners.js +247 -47
- package/dist/language/flows/flow-store-for-session.d.ts +2 -2
- package/dist/language/flows/flow-store-for-session.js +7 -3
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +112 -89
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +74 -12
- package/dist/language/flows/heal-run.js +6 -4
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/flake.d.ts +2 -2
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
- package/dist/language/flows/recording/tape/recordings.js +95 -13
- package/dist/language/flows/replay-from-hud.d.ts +20 -0
- package/dist/language/flows/replay-from-hud.js +51 -0
- package/dist/language/flows/replay.d.ts +9 -5
- package/dist/language/flows/replay.js +56 -15
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/suite/suite-flakes.js +2 -0
- package/dist/language/flows/suite-selection.d.ts +2 -15
- package/dist/language/flows/suite-selection.js +4 -3
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +202 -191
- package/dist/launch-chromium.d.ts +27 -5
- package/dist/launch-chromium.js +38 -8
- package/dist/memory/cloud/cloud-config.d.ts +22 -1
- package/dist/memory/cloud/cloud-config.js +34 -5
- package/dist/memory/cloud/cloud-sync.d.ts +17 -14
- package/dist/memory/cloud/cloud-sync.js +15 -4
- package/dist/memory/cloud/harness-config.d.ts +75 -1
- package/dist/memory/cloud/harness-config.js +115 -24
- package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
- package/dist/memory/cloud/hud-notices-source.js +128 -0
- package/dist/memory/cloud/memory-scope.d.ts +161 -0
- package/dist/memory/cloud/memory-scope.js +227 -0
- package/dist/memory/cloud/sync-cycle.d.ts +44 -7
- package/dist/memory/cloud/sync-cycle.js +129 -15
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +121 -9
- package/dist/memory/cloud/sync-disk.d.ts +1 -1
- package/dist/memory/cloud/sync-disk.js +31 -10
- package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
- package/dist/memory/cloud/sync-screenshots.js +105 -0
- package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
- package/dist/memory/cloud/unsynced-roots.js +166 -0
- package/dist/memory/impact/account-watch.d.ts +34 -0
- package/dist/memory/impact/account-watch.js +59 -0
- package/dist/memory/impact/impact-recorder.d.ts +8 -0
- package/dist/memory/impact/impact-recorder.js +12 -2
- package/dist/memory/impact/impact-store.d.ts +17 -4
- package/dist/memory/impact/impact-store.js +169 -63
- package/dist/memory/intent/inline-intent.d.ts +1 -0
- package/dist/memory/intent/intent-shard-store.js +16 -4
- package/dist/memory/intent/intent-shard.d.ts +14 -2
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +122 -4
- package/dist/memory/intent/open-intents.d.ts +6 -0
- package/dist/memory/intent/open-intents.js +10 -1
- package/dist/memory/intent/settled-words.d.ts +24 -0
- package/dist/memory/intent/settled-words.js +130 -0
- package/dist/memory/journal/drive-flow.d.ts +16 -0
- package/dist/memory/journal/drive-flow.js +34 -2
- package/dist/memory/journal/drive-run-flush.d.ts +2 -0
- package/dist/memory/journal/drive-run-flush.js +20 -5
- package/dist/memory/journal/envelope.d.ts +8 -8
- package/dist/memory/journal/journal-recorder.js +52 -3
- package/dist/memory/journal/on-disk/retention.d.ts +8 -0
- package/dist/memory/journal/on-disk/retention.js +32 -2
- package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
- package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +42 -9
- package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
- package/dist/memory/project/artifact-root-resolver.js +125 -16
- package/dist/memory/project/artifact-root.d.ts +46 -8
- package/dist/memory/project/artifact-root.js +89 -10
- package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
- package/dist/memory/project/dir/reticle-dir.js +26 -3
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- package/dist/memory/project/project-tools.js +22 -3
- package/dist/memory/project/root-claims.d.ts +6 -0
- package/dist/memory/project/root-claims.js +39 -0
- package/dist/memory/project/session-root.d.ts +26 -1
- package/dist/memory/project/session-root.js +49 -5
- package/dist/memory/project/sync-status.d.ts +85 -0
- package/dist/memory/project/sync-status.js +224 -0
- package/dist/memory/recall/memory-tools.js +47 -2
- package/dist/memory/recall/platform-memory.d.ts +34 -0
- package/dist/memory/recall/platform-memory.js +139 -0
- package/dist/memory/recall/project-memory.d.ts +19 -0
- package/dist/memory/recall/project-memory.js +80 -13
- package/dist/portal/bridge/bridge.d.ts +9 -3
- package/dist/portal/bridge/bridge.js +82 -22
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -0
- package/dist/portal/bridge/pairing-token.d.ts +9 -0
- package/dist/portal/bridge/pairing-token.js +17 -0
- package/dist/portal/bridge/wrong-path.d.ts +17 -0
- package/dist/portal/bridge/wrong-path.js +35 -0
- package/dist/portal/input/network-mock-tools.js +11 -2
- package/dist/portal/input/real-input.d.ts +83 -10
- package/dist/portal/input/real-input.js +218 -30
- package/dist/portal/input/viewport-tools.js +3 -3
- package/dist/portal/pool/browser-pool.d.ts +70 -9
- package/dist/portal/pool/browser-pool.js +190 -37
- package/dist/portal/pool/context-permissions.d.ts +33 -0
- package/dist/portal/pool/context-permissions.js +33 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
- package/dist/portal/pool/lease-marker-stamp.js +49 -0
- package/dist/portal/pool/playwright-launcher.d.ts +35 -0
- package/dist/portal/pool/playwright-launcher.js +64 -3
- package/dist/portal/pool/pool-contract.d.ts +28 -5
- package/dist/portal/session/agent-link.d.ts +8 -0
- package/dist/portal/session/agent-link.js +17 -0
- package/dist/portal/session/command-payload.d.ts +8 -0
- package/dist/portal/session/command-payload.js +24 -0
- package/dist/portal/session/daemon-answers.d.ts +3 -3
- package/dist/portal/session/daemon-answers.js +4 -2
- package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
- package/dist/portal/session/dev-server/dev-command.js +87 -12
- package/dist/portal/session/facts/departure-note.d.ts +22 -0
- package/dist/portal/session/facts/departure-note.js +47 -0
- package/dist/portal/session/facts/observed-state.d.ts +16 -18
- package/dist/portal/session/facts/observed-state.js +46 -3
- package/dist/portal/session/facts/session-replaced.d.ts +5 -0
- package/dist/portal/session/facts/session-replaced.js +5 -0
- package/dist/portal/session/first-run-wiring.d.ts +42 -0
- package/dist/portal/session/first-run-wiring.js +132 -0
- package/dist/portal/session/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/human/notes-ledger.d.ts +20 -0
- package/dist/portal/session/human/notes-ledger.js +55 -0
- package/dist/portal/session/human/review-store.d.ts +12 -0
- package/dist/portal/session/human/review-store.js +18 -10
- package/dist/portal/session/live-control-tools.d.ts +0 -13
- package/dist/portal/session/live-control-tools.js +107 -13
- package/dist/portal/session/narration-args.d.ts +5 -0
- package/dist/portal/session/narration-args.js +17 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
- package/dist/portal/session/no-session-diagnosis.js +46 -9
- package/dist/portal/session/no-session-next-action.d.ts +31 -0
- package/dist/portal/session/no-session-next-action.js +159 -60
- package/dist/portal/session/no-session-watch.d.ts +14 -1
- package/dist/portal/session/no-session-watch.js +227 -17
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/presence/session-mirror.js +3 -0
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/serving-directory.d.ts +27 -0
- package/dist/portal/session/serving-directory.js +45 -0
- package/dist/portal/session/session-health.d.ts +18 -0
- package/dist/portal/session/session-health.js +9 -1
- package/dist/portal/session/session-info.d.ts +8 -1
- package/dist/portal/session/session-info.js +8 -1
- package/dist/portal/session/session-manager.d.ts +39 -0
- package/dist/portal/session/session-manager.js +98 -11
- package/dist/portal/session/session-reaper.js +4 -1
- package/dist/portal/session/session-successor.d.ts +13 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session-tools.js +26 -3
- package/dist/portal/session/session.d.ts +22 -30
- package/dist/portal/session/session.js +81 -79
- package/dist/portal/session/timing/command-timeout.js +25 -1
- package/dist/portal/session/timing/wall-clock.d.ts +1 -1
- package/dist/portal/session/timing/wall-clock.js +1 -1
- package/dist/portal/session/zero-install-first-call.d.ts +31 -0
- package/dist/portal/session/zero-install-first-call.js +88 -0
- package/dist/start-options.d.ts +12 -0
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +23 -1
- package/dist/status-payload.js +36 -1
- package/dist/surface/http-server.js +18 -2
- package/dist/surface/mcp/attach-memory.d.ts +1 -0
- package/dist/surface/mcp/attach-memory.js +12 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
- package/dist/surface/mcp/mcp-proxy.js +65 -13
- package/dist/surface/mcp/mcp.d.ts +34 -6
- package/dist/surface/mcp/mcp.js +61 -17
- package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
- package/dist/surface/mcp/proxy/drive-calls.js +27 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
- package/dist/surface/mcp/server-instructions.d.ts +4 -2
- package/dist/surface/mcp/server-instructions.js +32 -14
- package/dist/surface/mcp/shared-params.js +2 -2
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +1 -0
- package/dist/surface/tools/account-tool.d.ts +22 -0
- package/dist/surface/tools/account-tool.js +157 -0
- package/dist/surface/tools/act/act-danger.d.ts +11 -0
- package/dist/surface/tools/act/act-danger.js +38 -1
- package/dist/surface/tools/act/act-observation.d.ts +33 -0
- package/dist/surface/tools/act/act-observation.js +57 -0
- package/dist/surface/tools/act/act-preflight.js +25 -2
- package/dist/surface/tools/act/act-target.js +8 -3
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
- package/dist/surface/tools/act/resolve-target.d.ts +1 -1
- package/dist/surface/tools/act/resolve-target.js +18 -3
- package/dist/surface/tools/act/screen-request.d.ts +34 -0
- package/dist/surface/tools/act/screen-request.js +113 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
- package/dist/surface/tools/act/sequence-grade.js +13 -2
- package/dist/surface/tools/act/settle-in-flight.js +25 -3
- package/dist/surface/tools/act-sequence-tool.js +138 -29
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +71 -41
- package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
- package/dist/surface/tools/agent/app-notes-learning.js +80 -0
- package/dist/surface/tools/agent/app-notes.d.ts +4 -0
- package/dist/surface/tools/agent/app-notes.js +48 -0
- package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
- package/dist/surface/tools/agent/build-staleness.js +62 -0
- package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
- package/dist/surface/tools/agent/compact-envelope.js +374 -0
- package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
- package/dist/surface/tools/agent/for-the-agent.js +44 -0
- package/dist/surface/tools/agent/notices.d.ts +50 -0
- package/dist/surface/tools/agent/notices.js +152 -0
- package/dist/surface/tools/agent/reteach.d.ts +11 -0
- package/dist/surface/tools/agent/reteach.js +50 -0
- package/dist/surface/tools/args/alias-args.d.ts +5 -0
- package/dist/surface/tools/args/alias-args.js +10 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
- package/dist/surface/tools/assert/assert-source.d.ts +15 -0
- package/dist/surface/tools/assert/assert-source.js +40 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +42 -17
- package/dist/surface/tools/browser-tools.js +51 -2
- package/dist/surface/tools/chat-drives.d.ts +101 -0
- package/dist/surface/tools/chat-drives.js +409 -0
- package/dist/surface/tools/coverage-tools.d.ts +2 -10
- package/dist/surface/tools/coverage-tools.js +2 -53
- package/dist/surface/tools/dynamic-tools.js +29 -1
- package/dist/surface/tools/empty-session-list.d.ts +51 -0
- package/dist/surface/tools/empty-session-list.js +120 -0
- package/dist/surface/tools/error-recovery.d.ts +14 -0
- package/dist/surface/tools/error-recovery.js +105 -8
- package/dist/surface/tools/explore-tools.d.ts +31 -1
- package/dist/surface/tools/explore-tools.js +438 -66
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +18 -3
- package/dist/surface/tools/gap-novelty.d.ts +3 -1
- package/dist/surface/tools/gap-novelty.js +8 -1
- package/dist/surface/tools/harness-explore.d.ts +118 -57
- package/dist/surface/tools/harness-explore.js +344 -292
- package/dist/surface/tools/harness-gate.d.ts +88 -0
- package/dist/surface/tools/harness-gate.js +235 -0
- package/dist/surface/tools/harness-hunt.d.ts +43 -0
- package/dist/surface/tools/harness-hunt.js +215 -0
- package/dist/surface/tools/harness-plan.d.ts +17 -0
- package/dist/surface/tools/harness-plan.js +38 -0
- package/dist/surface/tools/harness-script.d.ts +30 -0
- package/dist/surface/tools/harness-script.js +560 -0
- package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
- package/dist/surface/tools/harness-tab-guard.js +27 -0
- package/dist/surface/tools/harness-toolset.d.ts +22 -1
- package/dist/surface/tools/harness-toolset.js +101 -7
- package/dist/surface/tools/human-notes.d.ts +16 -0
- package/dist/surface/tools/human-notes.js +27 -0
- package/dist/surface/tools/invoke-tool.d.ts +5 -2
- package/dist/surface/tools/invoke-tool.js +263 -85
- package/dist/surface/tools/lease-hint.js +26 -5
- package/dist/surface/tools/lease-permissions.d.ts +33 -0
- package/dist/surface/tools/lease-permissions.js +73 -0
- package/dist/surface/tools/lease-readiness.d.ts +38 -0
- package/dist/surface/tools/lease-readiness.js +57 -0
- package/dist/surface/tools/lease-seed.d.ts +49 -0
- package/dist/surface/tools/lease-seed.js +167 -0
- package/dist/surface/tools/lease-tools.d.ts +13 -24
- package/dist/surface/tools/lease-tools.js +146 -197
- package/dist/surface/tools/live-call-text.js +4 -4
- package/dist/surface/tools/merge-tools.js +42 -2
- package/dist/surface/tools/merged-name-redirect.js +4 -0
- package/dist/surface/tools/next-step.d.ts +29 -0
- package/dist/surface/tools/next-step.js +214 -0
- package/dist/surface/tools/observe-tools.js +45 -9
- package/dist/surface/tools/platform-moment.d.ts +72 -0
- package/dist/surface/tools/platform-moment.js +296 -0
- package/dist/surface/tools/query-hint-schema.d.ts +7 -0
- package/dist/surface/tools/query-hint-schema.js +10 -0
- package/dist/surface/tools/read-tools.js +71 -14
- package/dist/surface/tools/real-input-attempt.js +96 -13
- package/dist/surface/tools/reticle-result.d.ts +120 -0
- package/dist/surface/tools/reticle-result.js +364 -0
- package/dist/surface/tools/tool-kit.d.ts +83 -3
- package/dist/surface/tools/tool-kit.js +77 -7
- package/dist/surface/tools/tools.js +43 -59
- package/dist/telemetry/account-envelope.d.ts +7 -0
- package/dist/telemetry/account-envelope.js +61 -0
- package/dist/telemetry/agent-client.d.ts +15 -0
- package/dist/telemetry/agent-client.js +57 -0
- package/dist/telemetry/app-instrumented.js +9 -2
- package/dist/telemetry/argument-shape.d.ts +7 -0
- package/dist/telemetry/argument-shape.js +86 -1
- package/dist/telemetry/automation-hint.d.ts +2 -3
- package/dist/telemetry/automation-hint.js +33 -8
- package/dist/telemetry/cli-telemetry.js +7 -2
- package/dist/telemetry/daemon-telemetry.js +3 -0
- package/dist/telemetry/error-fingerprint.d.ts +10 -1
- package/dist/telemetry/error-fingerprint.js +61 -5
- package/dist/telemetry/feedback-cli.d.ts +0 -13
- package/dist/telemetry/feedback-cli.js +0 -77
- package/dist/telemetry/feedback.d.ts +13 -0
- package/dist/telemetry/feedback.js +183 -17
- package/dist/telemetry/harness-run.d.ts +18 -0
- package/dist/telemetry/harness-run.js +80 -0
- package/dist/telemetry/hud-events.d.ts +16 -0
- package/dist/telemetry/hud-events.js +27 -0
- package/dist/telemetry/hud-metrics.d.ts +29 -6
- package/dist/telemetry/hud-metrics.js +116 -25
- package/dist/telemetry/init-telemetry.js +2 -2
- package/dist/telemetry/install-source.d.ts +13 -25
- package/dist/telemetry/install-source.js +44 -3
- package/dist/telemetry/mcp-connection.d.ts +0 -14
- package/dist/telemetry/mcp-connection.js +5 -1
- package/dist/telemetry/onboarding-firsts.d.ts +32 -0
- package/dist/telemetry/onboarding-firsts.js +81 -6
- package/dist/telemetry/platform-linked.d.ts +5 -0
- package/dist/telemetry/platform-linked.js +32 -0
- package/dist/telemetry/project-profile.js +5 -3
- package/dist/telemetry/proxy-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +15 -4
- package/dist/telemetry/session-metrics.js +88 -52
- package/dist/telemetry/telemetry.d.ts +38 -2
- package/dist/telemetry/telemetry.js +144 -34
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +13 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +20 -6
- package/docs/README.md +3 -3
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +25 -28
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +33 -28
- package/docs/benchmarks.md +5 -5
- package/docs/best-practices.mdx +27 -9
- package/docs/capabilities.mdx +14 -16
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +54 -75
- package/docs/cli/doctor.mdx +14 -3
- package/docs/cli/drive.mdx +20 -14
- package/docs/cli/feedback.mdx +3 -3
- package/docs/cli/gate.mdx +7 -2
- package/docs/cli/help.mdx +50 -55
- package/docs/cli/init.mdx +43 -28
- package/docs/cli/license.mdx +12 -8
- package/docs/cli/mcp.mdx +4 -4
- package/docs/cli/open.mdx +3 -3
- package/docs/cli/report.mdx +4 -2
- package/docs/cli/restart.mdx +2 -2
- package/docs/cli/rollback.mdx +14 -8
- package/docs/cli/serve.mdx +4 -4
- package/docs/cli/setup.mdx +23 -0
- package/docs/cli/status.mdx +18 -5
- package/docs/cli/stop.mdx +67 -8
- package/docs/cli/try.mdx +62 -0
- package/docs/cli/update.mdx +4 -3
- package/docs/cli/verify.mdx +17 -6
- package/docs/cli/version.mdx +5 -4
- package/docs/cli.mdx +111 -42
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +9 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +7 -8
- package/docs/faq.mdx +3 -3
- package/docs/first-drive.md +5 -4
- package/docs/flows.md +35 -27
- package/docs/for-agents.md +4 -5
- package/docs/frameworks.mdx +32 -21
- package/docs/getting-started.md +65 -61
- package/docs/human-control.md +16 -16
- package/docs/index.mdx +15 -42
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +23 -13
- package/docs/instrumentation.mdx +5 -3
- package/docs/integration-patterns.md +7 -7
- package/docs/license-activation.mdx +1 -1
- package/docs/multi-agent-testing.md +24 -6
- package/docs/packages/babel-plugin.mdx +4 -2
- package/docs/packages/browser.mdx +16 -10
- package/docs/packages/core.mdx +12 -5
- package/docs/packages/electron.mdx +3 -2
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/eslint-plugin.mdx +18 -12
- package/docs/packages/next.mdx +8 -7
- package/docs/packages/open-verification.mdx +1 -1
- package/docs/packages/server.mdx +5 -5
- package/docs/packages/tauri.mdx +9 -9
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +32 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +69 -30
- package/docs/required-checks.md +8 -7
- package/docs/reticle-manual.md +15 -5
- package/docs/skill-file.mdx +17 -79
- package/docs/skill-setup.md +9 -9
- package/docs/skill.md +200 -0
- package/docs/system-map.md +7 -7
- package/docs/telemetry.md +23 -25
- package/docs/testing.md +4 -4
- package/docs/token-efficiency.md +12 -12
- package/docs/tools/act-and-wait.mdx +9 -2
- package/docs/tools/act-sequence.mdx +6 -7
- package/docs/tools/act.mdx +2 -2
- package/docs/tools/assert.mdx +18 -17
- package/docs/tools/console.mdx +9 -9
- package/docs/tools/inspect.mdx +16 -7
- package/docs/tools/look.mdx +24 -0
- package/docs/tools/navigate.mdx +5 -3
- package/docs/tools/network.mdx +2 -2
- package/docs/tools/observe.mdx +6 -6
- package/docs/tools/overview.mdx +34 -33
- package/docs/tools/query.mdx +5 -5
- package/docs/tools/session-and-feedback.mdx +22 -13
- package/docs/tools/sessions.mdx +8 -8
- package/docs/tools/snapshot.mdx +6 -5
- package/docs/tools/state.mdx +9 -9
- package/docs/tools/tools-and-run.mdx +26 -24
- package/docs/tools/verify.mdx +28 -0
- package/docs/tools/wait-for.mdx +8 -4
- package/docs/troubleshooting.mdx +21 -6
- package/docs/usage.md +55 -46
- package/docs/use-cases.mdx +3 -3
- package/docs/vs-chrome-devtools-mcp.mdx +9 -6
- package/docs/vs-playwright-mcp.mdx +3 -1
- package/docs/what-is-recorded.md +17 -5
- package/docs/what-is-reticle.mdx +5 -3
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -241
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- package/dist/features/harness/driver.d.ts +0 -50
- package/dist/features/harness/driver.js +0 -236
- package/dist/features/harness/jev-driver.d.ts +0 -188
- package/dist/features/harness/jev-driver.js +0 -678
- package/dist/features/harness/openai-driver.d.ts +0 -58
- package/dist/features/harness/openai-driver.js +0 -206
- package/dist/judgement/hunt/hunt-report.d.ts +0 -49
- package/dist/judgement/hunt/hunt-report.js +0 -84
- package/dist/language/flows/buddy-status.d.ts +0 -25
- package/dist/language/flows/buddy-status.js +0 -32
- package/dist/language/flows/change/watch-batcher.d.ts +0 -18
- package/dist/language/flows/change/watch-batcher.js +0 -19
- package/dist/memory/cloud/harness-offer.d.ts +0 -44
- package/dist/memory/cloud/harness-offer.js +0 -145
- package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
- package/dist/memory/project/dir/fill-value-store.js +0 -88
- package/dist/surface/tools/feature-capture.d.ts +0 -151
- package/dist/surface/tools/feature-capture.js +0 -235
- package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
- package/dist/surface/tools/tool-hit-rate.js +0 -90
- package/dist/telemetry/harness-drive.d.ts +0 -4
- package/dist/telemetry/harness-drive.js +0 -35
- package/dist/telemetry/identify.d.ts +0 -22
- package/dist/telemetry/identify.js +0 -73
- package/docs/cli/capsules.mdx +0 -70
- package/docs/cli/hunt.mdx +0 -73
- package/docs/cli/identify.mdx +0 -76
- package/docs/cli/kill.mdx +0 -91
- package/docs/cli/watch.mdx +0 -62
- package/docs/local-registry.md +0 -143
|
@@ -7,15 +7,17 @@
|
|
|
7
7
|
* or a step's events land in the wrong window depending on how it was addressed.
|
|
8
8
|
*/
|
|
9
9
|
import { expectedElementTestid } from '@reticlehq/core';
|
|
10
|
-
import { AnchorKind, DEGRADED_ANCHOR_ROLE, DriftReason, PredicateKind, QueryBy, ReticleCommand, } from '@reticlehq/core';
|
|
10
|
+
import { AnchorKind, DEGRADED_ANCHOR_ROLE, DriftReason, PredicateKind, QueryBy, ReplayStatus, ReticleCommand, } from '@reticlehq/core';
|
|
11
11
|
import { ReticleTool } from '@reticlehq/core';
|
|
12
12
|
import { replayActionArgs } from './replay.js';
|
|
13
13
|
import { isStaleRefError } from '../../surface/tools/act/act-sequence-retry.js';
|
|
14
14
|
import { waitForReaction } from '../../surface/tools/act/react-grace.js';
|
|
15
15
|
import { anchorFieldName } from './flows.js';
|
|
16
|
-
import { anchorLabel, componentLabel, componentQueryArgs, expectElementDrift, resolveQuery, testidDrift, } from './flow-anchor.js';
|
|
16
|
+
import { ambiguityDrift, refFor, anchorLabel, componentLabel, componentQueryArgs, expectElementDrift, reresolved, resolveQuery, testidDrift, } from './flow-anchor.js';
|
|
17
17
|
import { nearestRoleName } from './role-anchor-nearest.js';
|
|
18
18
|
import { roleDriftReason } from '../../judgement/outcome/role-drift-reason.js';
|
|
19
|
+
/** The live act_sequence tool gives each step this transport budget when none was supplied. */
|
|
20
|
+
export const DEFAULT_SEQUENCE_STEP_TIMEOUT_MS = 8_000;
|
|
19
21
|
/** Query args for a NAMED role anchor — the handle that identifies an instance, not a JSX site. */
|
|
20
22
|
function roleQueryArgs(anchor) {
|
|
21
23
|
return {
|
|
@@ -63,7 +65,25 @@ async function nearestRoleNameOnPage(session, anchor) {
|
|
|
63
65
|
export async function runRoleStep(session, step, index, anchor, confirmDangerous, sleep) {
|
|
64
66
|
const label = `${anchor.role} "${String(anchor.name)}"`;
|
|
65
67
|
const { refs } = await resolveQuery(session, roleQueryArgs(anchor), sleep);
|
|
66
|
-
|
|
68
|
+
/*
|
|
69
|
+
* More than one match is DRIFT, not a guess. This path took `refs[0]`, dispatched, and returned
|
|
70
|
+
* `ok: true`, so a flow recorded against "View result" on row 3 of a table replayed by clicking row
|
|
71
|
+
* 1 and PASSED whenever every row shared the consequence (the same GET returning 200). The verdict
|
|
72
|
+
* reads `drift` and `ok` and nothing else, so a green here is indistinguishable from a replay that
|
|
73
|
+
* did what it did before.
|
|
74
|
+
*
|
|
75
|
+
* A role+name anchor is MORE likely to land here than a testid is: `button "View result"` is
|
|
76
|
+
* user-visible text, and a table repeats it by nature, so several matches is the expected shape of
|
|
77
|
+
* a recorded row action rather than an accident.
|
|
78
|
+
*
|
|
79
|
+
* The check itself lives in `ambiguityDrift`, shared with the testid and component runners: written
|
|
80
|
+
* per-runner, this rule got applied to two anchor kinds and forgotten for the third.
|
|
81
|
+
*/
|
|
82
|
+
const ambiguous = ambiguityDrift(anchor, refs);
|
|
83
|
+
if (ambiguous !== null) {
|
|
84
|
+
return { step: index, tool: step.tool, anchor: label, ok: false, drift: ambiguous };
|
|
85
|
+
}
|
|
86
|
+
const ref = refFor(anchor, refs);
|
|
67
87
|
if (ref === undefined) {
|
|
68
88
|
// `nearest` used to be the literal null, so heal answered "no nearest match cleared the
|
|
69
89
|
// confidence floor" for EVERY role-anchored drift — a structural limit reported as a judgement
|
|
@@ -86,8 +106,15 @@ export async function runRoleStep(session, step, index, anchor, confirmDangerous
|
|
|
86
106
|
};
|
|
87
107
|
}
|
|
88
108
|
return await actOnResolvedRef(session, step, index, label, ref, confirmDangerous, anchorFieldName(anchor),
|
|
89
|
-
|
|
90
|
-
|
|
109
|
+
/*
|
|
110
|
+
* The retry's whole point: run the SAME locator against the DOM as it is now.
|
|
111
|
+
*
|
|
112
|
+
* It reports WHAT it found, not just a ref. A re-render can turn an unambiguous anchor into an
|
|
113
|
+
* ambiguous one between the two dispatches, and dispatching at the first of the new matches would
|
|
114
|
+
* re-make the guess the check above exists to refuse — one layer deeper, where the caller cannot
|
|
115
|
+
* see it. `reresolved` is the same rule as that check, so the two cannot disagree.
|
|
116
|
+
*/
|
|
117
|
+
async () => reresolved(anchor, (await resolveQuery(session, roleQueryArgs(anchor), sleep)).refs));
|
|
91
118
|
}
|
|
92
119
|
/**
|
|
93
120
|
* `assertActionAllowed`'s refusal — "potentially destructive action blocked; retry with
|
|
@@ -109,11 +136,8 @@ function replayDestructiveActionHint(rawError) {
|
|
|
109
136
|
return (`${rawError} — this is a flow REPLAY: a step's own args.confirmDangerous is stripped before ` +
|
|
110
137
|
'dispatch and never persists, so editing the flow file does nothing. Pass it at the call level ' +
|
|
111
138
|
`instead: ${ReticleTool.FLOW_REPLAY} { confirmDangerous: true } acknowledges every flagged step ` +
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
// that a flow with a flagged step currently has to be replayed on its own to pass it.
|
|
115
|
-
'for this run. The batch reticle_verify{action:"flows"} has no equivalent option yet, so a flow ' +
|
|
116
|
-
'with a flagged step has to be replayed on its own to acknowledge it.');
|
|
139
|
+
'for this run, as do reticle_verify{action:"flows", confirmDangerous: true} for a suite and ' +
|
|
140
|
+
'`reticle verify <url> --confirm-dangerous` from the command line.');
|
|
117
141
|
}
|
|
118
142
|
/**
|
|
119
143
|
* Dispatch one already-resolved step. Shared so every anchor kind runs the action the same way —
|
|
@@ -131,6 +155,9 @@ field,
|
|
|
131
155
|
* found, and the retry below is worthless without it: re-dispatching the SAME dead ref fails
|
|
132
156
|
* identically. What changed between the two attempts is the DOM, so the locator has to be run
|
|
133
157
|
* against it again.
|
|
158
|
+
*
|
|
159
|
+
* It reports WHAT it found, not just a ref: see `Reresolved`. A re-render that turns one match into
|
|
160
|
+
* three is a drift, and the caller is the only layer that can say so with the right anchor in hand.
|
|
134
161
|
*/
|
|
135
162
|
reresolve) {
|
|
136
163
|
const dispatch = async (at) => {
|
|
@@ -167,8 +194,24 @@ reresolve) {
|
|
|
167
194
|
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
168
195
|
});
|
|
169
196
|
const fresh = await reresolve();
|
|
197
|
+
/*
|
|
198
|
+
* The re-render turned one match into SEVERAL, so there is nothing to dispatch at and the answer
|
|
199
|
+
* is a drift — the same `anchor_ambiguous` the first resolution would have given, reported for the
|
|
200
|
+
* same reason.
|
|
201
|
+
*
|
|
202
|
+
* The staleness this retry exists to absorb is a different diagnosis with a different fix, and
|
|
203
|
+
* this used to be the only one reported: the step came back as `{ok: false, error: "ref 'e-orig'
|
|
204
|
+
* no longer resolves to an element"}` — a sentence about an element that is GONE, sent for an
|
|
205
|
+
* element that is now three. An agent reading it goes hunting for a rename, or re-records the
|
|
206
|
+
* flow, when the actual fix is a narrower anchor. Telling the two apart is what `Reresolved` is
|
|
207
|
+
* for, and the reason `ANCHOR_AMBIGUOUS` exists as its own kind rather than folding into "not
|
|
208
|
+
* found".
|
|
209
|
+
*/
|
|
210
|
+
if (fresh !== undefined && 'drift' in fresh) {
|
|
211
|
+
return { step: index, tool: step.tool, anchor: label, ok: false, drift: fresh.drift };
|
|
212
|
+
}
|
|
170
213
|
if (fresh !== undefined)
|
|
171
|
-
act = await dispatch(fresh);
|
|
214
|
+
act = await dispatch(fresh.ref);
|
|
172
215
|
}
|
|
173
216
|
const result = { step: index, tool: step.tool, anchor: label, ok: act.ok };
|
|
174
217
|
if (!act.ok)
|
|
@@ -195,10 +238,28 @@ export async function runComponentStep(session, step, index, anchor, confirmDang
|
|
|
195
238
|
},
|
|
196
239
|
};
|
|
197
240
|
}
|
|
241
|
+
/*
|
|
242
|
+
* Several matches is DRIFT here too, and this runner is where the rule was MISSING.
|
|
243
|
+
*
|
|
244
|
+
* The other two runners check it (through `ambiguityDrift`); this one took `refs[0]`, dispatched and
|
|
245
|
+
* returned `ok: true`. `by: QueryBy.COMPONENT` matches by component NAME, and a component rendered
|
|
246
|
+
* once per row — a table's action button, a card's menu — matches as many times as there are rows.
|
|
247
|
+
* So the guessed-green shape is not an edge case for this anchor kind, it is its ordinary one, and
|
|
248
|
+
* it is the exact defect #1227 describes: a click on the wrong element reported as a pass because
|
|
249
|
+
* the verdict reads `drift` and `ok` and never reads which element was hit.
|
|
250
|
+
*/
|
|
251
|
+
const ambiguous = ambiguityDrift(anchor, refs);
|
|
252
|
+
if (ambiguous !== null) {
|
|
253
|
+
return { step: index, tool: step.tool, anchor: label, ok: false, drift: ambiguous };
|
|
254
|
+
}
|
|
198
255
|
const ref = refs[0] ?? '';
|
|
199
256
|
// Shared with the role path so both get the same action window AND the same stale-ref retry —
|
|
200
257
|
// this used to dispatch inline, which is how one anchor kind could gain a fix the other lacked.
|
|
201
|
-
return await actOnResolvedRef(session, step, index, label, ref, confirmDangerous, anchorFieldName(anchor),
|
|
258
|
+
return await actOnResolvedRef(session, step, index, label, ref, confirmDangerous, anchorFieldName(anchor),
|
|
259
|
+
// Same rule one layer deeper, same helper: a re-render that turns one match into three must not
|
|
260
|
+
// be dispatched at either, and it must say so as a drift rather than as a dead ref. This callback
|
|
261
|
+
// used to return `refs[0]` unconditionally.
|
|
262
|
+
async () => reresolved(anchor, (await resolveQuery(session, componentQueryArgs(anchor), sleep)).refs));
|
|
202
263
|
}
|
|
203
264
|
/**
|
|
204
265
|
* DEGRADED_ANCHOR_ROLE is a MARKER ("no anchor could be determined"), never a locator.
|
|
@@ -268,6 +329,63 @@ export function anchorPrecondition(anchor) {
|
|
|
268
329
|
}
|
|
269
330
|
return undefined;
|
|
270
331
|
}
|
|
332
|
+
/** What is added to a stale-ref error when it cannot be traced to one sub-step of the sequence. */
|
|
333
|
+
const STALE_SUB_STEP_UNKNOWN = ' (which sub-step that was could not be told, so the ones before it may have run)';
|
|
334
|
+
/** Where a ref that stayed stale sat in the sequence, and that every sub-step before it ran. */
|
|
335
|
+
const staleSubStepPosition = (at, total) => ` (sub-step ${String(at)} of ${String(total)}; ${String(at)} before it ran)`;
|
|
336
|
+
/**
|
|
337
|
+
* Why a step whose target kept going stale is unverifiable, as the replay result tells a reader.
|
|
338
|
+
* `step` is the index of the step that could not be acted on.
|
|
339
|
+
*/
|
|
340
|
+
const staleTargetReason = (step) => `step ${String(step)} could not be acted on: its target kept going stale, because the ` +
|
|
341
|
+
`page re-rendered between finding the element and using it, and the replay looked it up ` +
|
|
342
|
+
`again for as long as that got it further. The steps before it are reported and nothing ` +
|
|
343
|
+
`after it ran. Nothing here says the app failed. If an earlier step makes the page ` +
|
|
344
|
+
`re-render, record that step's consequence with \`expect\` so the replay waits for the new ` +
|
|
345
|
+
`render before it moves on.`;
|
|
346
|
+
/**
|
|
347
|
+
* The sub-step, among live[from, to), whose ref the page said it could not find.
|
|
348
|
+
*
|
|
349
|
+
* The page echoes the ref in "ref 'x' no longer resolves to an element". A ref it shortened, or one
|
|
350
|
+
* that is not among these, gives no answer. Neither does a ref that two sub-steps share: the first of
|
|
351
|
+
* them may already have run, and may be what re-rendered the page, which makes the later one the stale
|
|
352
|
+
* one, and nothing in the message says so. The caller must not guess which actions already ran.
|
|
353
|
+
*/
|
|
354
|
+
function staleSubStep(error, live, from, to) {
|
|
355
|
+
const named = /ref '([^']*)'/.exec(error)?.[1];
|
|
356
|
+
if (named === undefined)
|
|
357
|
+
return undefined;
|
|
358
|
+
const sharing = live.flatMap((one, at) => at >= from && at < to && one.ref === named ? [at] : []);
|
|
359
|
+
const [only] = sharing;
|
|
360
|
+
return 1 === sharing.length ? only : undefined;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* The honest answer when a step's target kept going stale.
|
|
364
|
+
*
|
|
365
|
+
* Replay looks the element up again and goes on while that gets it further, so a step still stale
|
|
366
|
+
* after that is one the page re-rendered around faster than it could be targeted. Reporting it as
|
|
367
|
+
* `error` with the browser's own sentence says "your app broke", which is a claim nothing observed
|
|
368
|
+
* and sends a reader into product code that is fine. It is the same bucket as a document that went
|
|
369
|
+
* away: the steps before it are real and are attached, the step that could not be acted on is among
|
|
370
|
+
* them with its index, and nothing after it ran.
|
|
371
|
+
*
|
|
372
|
+
* Left alone, so the ordinary verdict stands, when anything else is in the run: a drifted anchor is
|
|
373
|
+
* drift whatever else happened, and a failure that is not staleness is a failure.
|
|
374
|
+
*/
|
|
375
|
+
export function staleTargetResult(name, steps) {
|
|
376
|
+
if (steps.some((step) => step.drift !== undefined))
|
|
377
|
+
return undefined;
|
|
378
|
+
const failed = steps.filter((step) => !step.ok);
|
|
379
|
+
const [only] = failed;
|
|
380
|
+
if (failed.length !== 1 || only === undefined || !isStaleRefError(only.error))
|
|
381
|
+
return undefined;
|
|
382
|
+
return {
|
|
383
|
+
name,
|
|
384
|
+
status: ReplayStatus.UNVERIFIABLE,
|
|
385
|
+
steps: [...steps],
|
|
386
|
+
unverifiable: { reason: staleTargetReason(only.step) },
|
|
387
|
+
};
|
|
388
|
+
}
|
|
271
389
|
/**
|
|
272
390
|
* Run an act_sequence step: resolve every sub-step's OWN anchor, then dispatch the whole thing as one
|
|
273
391
|
* ACT_SEQUENCE — the same shape `replayProgram` already uses, so a recorded sequence and a saved one
|
|
@@ -281,37 +399,62 @@ export function anchorPrecondition(anchor) {
|
|
|
281
399
|
export async function runSequenceStep(session, step, index, subs, confirmDangerous, sleep,
|
|
282
400
|
/** Testids whose presence is deliberately NOT asserted — the LLM-output case. */
|
|
283
401
|
dynamic = new Set()) {
|
|
284
|
-
|
|
285
|
-
|
|
402
|
+
/**
|
|
403
|
+
* Find one sub-step's element as the page is NOW. Either the live step to dispatch, or the step
|
|
404
|
+
* result that ends the run: a degraded anchor, or one that is no longer on the page.
|
|
405
|
+
*
|
|
406
|
+
* `afterRerender` is the second look, taken because the page re-rendered under a sub-step. An anchor
|
|
407
|
+
* that now matches several elements is drift there, as it is for a single step's retry: the first of
|
|
408
|
+
* the new matches may be an element the recording did not mean, and acting on it would report a pass
|
|
409
|
+
* for a click nobody can attribute. The first look keeps taking the first match.
|
|
410
|
+
*/
|
|
411
|
+
const resolveSub = async (sub, subIndex, afterRerender = false) => {
|
|
286
412
|
const label = `${anchorLabel(sub.anchor)} (sub-step ${String(subIndex)})`;
|
|
287
413
|
const queryArgs = anchorQueryArgs(sub.anchor);
|
|
288
414
|
if (null === queryArgs)
|
|
289
|
-
return degradedStepResult(step, index, label);
|
|
415
|
+
return { stop: degradedStepResult(step, index, label) };
|
|
290
416
|
const { refs, hint } = await resolveQuery(session, queryArgs, sleep);
|
|
291
|
-
const
|
|
417
|
+
const ambiguous = afterRerender ? ambiguityDrift(sub.anchor, refs) : null;
|
|
418
|
+
if (ambiguous !== null) {
|
|
419
|
+
return { stop: { step: index, tool: step.tool, anchor: label, ok: false, drift: ambiguous } };
|
|
420
|
+
}
|
|
421
|
+
const ref = afterRerender ? refFor(sub.anchor, refs) : refs[0];
|
|
292
422
|
if (ref === undefined) {
|
|
293
423
|
return {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
424
|
+
stop: {
|
|
425
|
+
step: index,
|
|
426
|
+
tool: step.tool,
|
|
427
|
+
anchor: label,
|
|
428
|
+
ok: false,
|
|
429
|
+
drift: sub.anchor.kind === AnchorKind.TESTID
|
|
430
|
+
? testidDrift(sub.anchor.value, hint)
|
|
431
|
+
: {
|
|
432
|
+
reasonKind: DriftReason.COMPONENT_NOT_FOUND,
|
|
433
|
+
reason: `anchor ${label} not found`,
|
|
434
|
+
anchor: label,
|
|
435
|
+
nearest: null,
|
|
436
|
+
},
|
|
437
|
+
},
|
|
306
438
|
};
|
|
307
439
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
440
|
+
return {
|
|
441
|
+
live: {
|
|
442
|
+
ref,
|
|
443
|
+
action: sub.action ?? '',
|
|
444
|
+
// Each sub-step carries its OWN anchor, so each gets its own field name. A sequence that ends
|
|
445
|
+
// in a login is the shape this was reported on, and the sub-step is where the fill lives.
|
|
446
|
+
args: replayActionArgs(sub.args, confirmDangerous, anchorFieldName(sub.anchor)),
|
|
447
|
+
},
|
|
448
|
+
};
|
|
449
|
+
};
|
|
450
|
+
// Every anchor is checked before anything runs, so a sub-step that has drifted away is reported as
|
|
451
|
+
// drift and not discovered half way through a sequence that has already acted.
|
|
452
|
+
const live = [];
|
|
453
|
+
for (const [subIndex, sub] of subs.entries()) {
|
|
454
|
+
const resolved = await resolveSub(sub, subIndex);
|
|
455
|
+
if ('stop' in resolved)
|
|
456
|
+
return resolved.stop;
|
|
457
|
+
live.push(resolved.live);
|
|
315
458
|
}
|
|
316
459
|
const result = {
|
|
317
460
|
step: index,
|
|
@@ -320,20 +463,78 @@ dynamic = new Set()) {
|
|
|
320
463
|
ok: true,
|
|
321
464
|
};
|
|
322
465
|
/** One dispatch through the SAME command either way, so batched and walked replay identically. */
|
|
323
|
-
const
|
|
466
|
+
const send = async (steps) => {
|
|
324
467
|
session.beginAction?.(ReticleTool.FLOW_REPLAY, { steps: steps.length });
|
|
325
|
-
let act;
|
|
326
468
|
try {
|
|
327
|
-
|
|
469
|
+
// A recorded zero means "do not wait for the element", not "abort the whole batch now".
|
|
470
|
+
// Keep the transport alive long enough for the sequence's default per-step budget, and give
|
|
471
|
+
// an omitted timeout the same aggregate budget as the live tool's independent step waits.
|
|
472
|
+
const perStepTimeout = undefined === step.timeoutMs || 0 === step.timeoutMs
|
|
473
|
+
? DEFAULT_SEQUENCE_STEP_TIMEOUT_MS
|
|
474
|
+
: step.timeoutMs;
|
|
475
|
+
const timeoutMs = perStepTimeout * steps.length;
|
|
476
|
+
return await session.command(ReticleCommand.ACT_SEQUENCE, { steps }, timeoutMs);
|
|
328
477
|
}
|
|
329
478
|
finally {
|
|
330
479
|
session.finishAction?.();
|
|
331
480
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Run sub-steps [from, to), and survive the page re-rendering under them.
|
|
484
|
+
*
|
|
485
|
+
* The refs were resolved before anything ran, and the first action of a sequence is allowed to
|
|
486
|
+
* re-render the page, so by the time a later sub-step is reached its ref may be dead. The same
|
|
487
|
+
* anchor is almost always still there under a new ref; what was missing is a second look.
|
|
488
|
+
*
|
|
489
|
+
* The page names the ref it could not find, which says WHICH sub-step failed and so which ones
|
|
490
|
+
* already ran, as long as no other sub-step holds the same ref. Only the rest is resolved again and
|
|
491
|
+
* sent, so nothing acts twice: starting over is what turns one click into two. A stale ref is the
|
|
492
|
+
* only failure retried, and the retry goes on only while it gets further. A sub-step that is stale
|
|
493
|
+
* again at the same point is a target that does not hold still, and the run says so, with how far
|
|
494
|
+
* it got.
|
|
495
|
+
*/
|
|
496
|
+
const dispatchFrom = async (from, to) => {
|
|
497
|
+
let start = from;
|
|
498
|
+
let staleBefore = -1;
|
|
499
|
+
for (;;) {
|
|
500
|
+
const act = await send(live.slice(start, to));
|
|
501
|
+
if (act.ok)
|
|
502
|
+
return true;
|
|
503
|
+
const error = act.error ?? 'command failed';
|
|
504
|
+
if (!isStaleRefError(error)) {
|
|
505
|
+
result.ok = false;
|
|
506
|
+
result.error = replayDestructiveActionHint(error);
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
const staleAt = staleSubStep(error, live, start, to);
|
|
510
|
+
if (staleAt === undefined) {
|
|
511
|
+
result.ok = false;
|
|
512
|
+
result.error = error + STALE_SUB_STEP_UNKNOWN;
|
|
513
|
+
return false;
|
|
514
|
+
}
|
|
515
|
+
if (staleAt <= staleBefore) {
|
|
516
|
+
result.ok = false;
|
|
517
|
+
result.error = error + staleSubStepPosition(staleAt, subs.length);
|
|
518
|
+
return false;
|
|
519
|
+
}
|
|
520
|
+
staleBefore = staleAt;
|
|
521
|
+
await waitForReaction(session, 0, STALE_REF_GRACE_MS, { sleep });
|
|
522
|
+
for (let at = staleAt; at < to; at += 1) {
|
|
523
|
+
const sub = subs[at];
|
|
524
|
+
if (sub === undefined)
|
|
525
|
+
continue;
|
|
526
|
+
const resolved = await resolveSub(sub, at, true);
|
|
527
|
+
if ('stop' in resolved) {
|
|
528
|
+
result.ok = false;
|
|
529
|
+
result.anchor = resolved.stop.anchor;
|
|
530
|
+
if (resolved.stop.drift !== undefined)
|
|
531
|
+
result.drift = resolved.stop.drift;
|
|
532
|
+
return false;
|
|
533
|
+
}
|
|
534
|
+
live[at] = resolved.live;
|
|
535
|
+
}
|
|
536
|
+
start = staleAt;
|
|
537
|
+
}
|
|
337
538
|
};
|
|
338
539
|
/** The sub-step's own expectation, unless its testid is deliberately unasserted. */
|
|
339
540
|
const declaredBy = (sub) => {
|
|
@@ -368,14 +569,13 @@ dynamic = new Set()) {
|
|
|
368
569
|
*/
|
|
369
570
|
const declaring = subs.some((sub) => declaredBy(sub) !== undefined);
|
|
370
571
|
if (!declaring) {
|
|
371
|
-
await
|
|
572
|
+
await dispatchFrom(0, live.length);
|
|
372
573
|
return result;
|
|
373
574
|
}
|
|
374
575
|
for (const [subIndex, sub] of subs.entries()) {
|
|
375
|
-
|
|
376
|
-
if (one === undefined)
|
|
576
|
+
if (live[subIndex] === undefined)
|
|
377
577
|
continue;
|
|
378
|
-
if (!(await
|
|
578
|
+
if (!(await dispatchFrom(subIndex, subIndex + 1)))
|
|
379
579
|
return result;
|
|
380
580
|
const testid = declaredBy(sub);
|
|
381
581
|
if (testid !== undefined && !(await assertDeclared(testid)))
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
* returned unchanged.
|
|
25
25
|
*/
|
|
26
26
|
import { FlowStore } from './flows.js';
|
|
27
|
-
import type {
|
|
27
|
+
import type { ProjectTarget } from '../../memory/project/session-root.js';
|
|
28
28
|
import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
29
|
-
export declare function flowsForSession(deps: ToolDeps,
|
|
29
|
+
export declare function flowsForSession(deps: ToolDeps, target: ProjectTarget): {
|
|
30
30
|
flows: FlowStore;
|
|
31
31
|
root: string;
|
|
32
32
|
};
|
|
@@ -24,10 +24,14 @@
|
|
|
24
24
|
* returned unchanged.
|
|
25
25
|
*/
|
|
26
26
|
import { FlowStore } from './flows.js';
|
|
27
|
-
export function flowsForSession(deps,
|
|
28
|
-
const resolved = deps.artifactRootFor?.(projectId);
|
|
27
|
+
export function flowsForSession(deps, target) {
|
|
28
|
+
const resolved = deps.artifactRootFor?.(target.projectId, target.origin);
|
|
29
29
|
if (resolved === undefined || resolved.root === deps.reticleRoot) {
|
|
30
30
|
return { flows: deps.flows, root: deps.reticleRoot };
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
const onWrote = deps.onRunPersisted;
|
|
33
|
+
return {
|
|
34
|
+
flows: new FlowStore(deps.fs, resolved.root, { now: deps.now }, onWrote === undefined ? {} : { onWrote }),
|
|
35
|
+
root: resolved.root,
|
|
36
|
+
};
|
|
33
37
|
}
|
|
@@ -10,6 +10,16 @@ export { replayNamedFlow } from './flow-replay-run.js';
|
|
|
10
10
|
* point; flows that need another page carry their own startPath.
|
|
11
11
|
*/
|
|
12
12
|
export declare function leasableAppUrl(deps: ToolDeps, sessionId: string | undefined): string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* The live session's own URL — what the fixture port must be looked up by.
|
|
15
|
+
*
|
|
16
|
+
* NOT `leasableAppUrl`. That returns an ORIGIN, and the input provider finds a page by comparing
|
|
17
|
+
* full URLs, so an origin matched no page: `suiteFixtureSeed` answered `undefined` on every run and
|
|
18
|
+
* every leased flow booted cold while the code read as if it were seeded. Silent, because every
|
|
19
|
+
* refusal on that path is deliberately silent — a fixture is an optimisation, and a suite must not
|
|
20
|
+
* die when one is unavailable.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sessionUrlOf(deps: ToolDeps, sessionId: string | undefined): string | undefined;
|
|
13
23
|
/** A flow whose leased context never came up is a suite ERROR, never a silent pass. */
|
|
14
24
|
export declare function leaseFailureReplay(name: string, error: string | undefined): FlowReplayResult;
|
|
15
25
|
export declare const FLOW_TOOLS: ToolDef[];
|