@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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { formatStepAddress } from 'open-verification';
|
|
2
2
|
import { assertsState, expectLabel, expectedElementTestid, withoutClauses } from '@reticlehq/core';
|
|
3
3
|
import { span } from '../../trace.js';
|
|
4
|
-
import { anchorLabel, expectElementDrift, resolveTestid, testidDrift,
|
|
4
|
+
import { ambiguityDrift, anchorLabel, expectElementDrift, reresolved, resolveTestid, testidDrift, } from './flow-anchor.js';
|
|
5
5
|
export { nearestIsAmbiguous, nearestTestid, resolveQuery } from './flow-anchor.js';
|
|
6
6
|
import { routeOfEvent, routeOfUrl } from '@reticlehq/engine/question/predicate/predicate-route.js';
|
|
7
|
+
import { evalConsole } from '@reticlehq/engine/question/predicate/predicate-console.js';
|
|
7
8
|
import { stepEffect } from '@reticlehq/engine/evidence/step-effect.js';
|
|
8
|
-
import { AnchorKind, DriftReason, EventType, FlowStepTool, StepEffect, PredicateKind, } from '@reticlehq/core';
|
|
9
|
-
import { asString, isConsequenceDrift } from '@reticlehq/core';
|
|
9
|
+
import { AnchorKind, DriftReason, EventType, FlowStepTool, StepEffect, PredicateKind, ReplayStatus, } from '@reticlehq/core';
|
|
10
|
+
import { asString, invokedFlowMissing, isConsequenceDrift } from '@reticlehq/core';
|
|
10
11
|
import { anchorFieldName } from './fields/flow-secret-field.js';
|
|
11
12
|
import { degradedStepResult, isDegradedAnchor, runComponentStep, runRoleStep, runSequenceStep, } from './flow-step-runners.js';
|
|
12
13
|
import { inFlightRequestLabels } from '../../surface/tools/act/settle-in-flight.js';
|
|
@@ -100,11 +101,48 @@ function summarizeConsequence(events) {
|
|
|
100
101
|
const status = 'number' === typeof data['status'] ? ` ${data['status']}` : '';
|
|
101
102
|
parts.push(`${method} ${path}${status}`.trim());
|
|
102
103
|
}
|
|
103
|
-
const errors = events.filter(
|
|
104
|
+
const errors = events.filter(isConsoleError).length;
|
|
104
105
|
if (errors > 0)
|
|
105
106
|
parts.push(`${errors} console error${errors > 1 ? 's' : ''}`);
|
|
106
107
|
return parts.length > 0 ? parts.join('; ') : undefined;
|
|
107
108
|
}
|
|
109
|
+
const isConsoleError = (e) => e.type === EventType.CONSOLE_ERROR || e.type === EventType.ERROR_UNCAUGHT;
|
|
110
|
+
/** At most this many console errors travel on one step; its `digest` still counts them all. */
|
|
111
|
+
const CONSOLE_ERRORS_PER_STEP = 5;
|
|
112
|
+
/** The console errors a step's window saw, for the run artifact's evidence. See FlowStepResult. */
|
|
113
|
+
function consoleErrorsIn(events) {
|
|
114
|
+
const errors = events
|
|
115
|
+
.filter(isConsoleError)
|
|
116
|
+
.slice(0, CONSOLE_ERRORS_PER_STEP)
|
|
117
|
+
.map((e) => ({ level: e.type, message: asString(e.data['message']) ?? '', at: e.t }));
|
|
118
|
+
return errors.length > 0 ? errors : undefined;
|
|
119
|
+
}
|
|
120
|
+
/** The console-absent clauses an expect cannot pass without: itself, or any `allOf` member. */
|
|
121
|
+
function requiredConsoleAbsences(expect) {
|
|
122
|
+
if (PredicateKind.ALL_OF === expect.kind)
|
|
123
|
+
return expect.predicates.flatMap(requiredConsoleAbsences);
|
|
124
|
+
return PredicateKind.CONSOLE === expect.kind && true === expect.absent ? [expect] : [];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A console-absent expect, read again over the step's WHOLE window.
|
|
128
|
+
*
|
|
129
|
+
* The wait that graded the expect ends before the window does, so an error landing between the two
|
|
130
|
+
* was counted by the step's consequence and missed by its verdict (#1344). The window wins.
|
|
131
|
+
*/
|
|
132
|
+
function lateConsoleDrift(expect, events) {
|
|
133
|
+
for (const clause of requiredConsoleAbsences(expect)) {
|
|
134
|
+
const read = evalConsole(events, clause);
|
|
135
|
+
if (read.pass)
|
|
136
|
+
continue;
|
|
137
|
+
return {
|
|
138
|
+
reasonKind: DriftReason.SIGNAL_NOT_OBSERVED,
|
|
139
|
+
reason: read.failureReason ?? "the step's declared consequence did not hold",
|
|
140
|
+
anchor: expectLabel(expect),
|
|
141
|
+
nearest: null,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
108
146
|
/** Run one testid-anchored step: re-resolve via QUERY, then ACT on the live ref, else drift. */
|
|
109
147
|
export async function runTestidStep(session, step, index, value, dynamic, confirmDangerous, sleep) {
|
|
110
148
|
const { refs, hint } = await resolveTestid(session, value, sleep);
|
|
@@ -124,17 +162,13 @@ export async function runTestidStep(session, step, index, value, dynamic, confir
|
|
|
124
162
|
* reads `drift` and `ok` and never reads a note, so "we guessed which element you meant" was
|
|
125
163
|
* indistinguishable from "it did what it did before" -- the one claim a replay makes.
|
|
126
164
|
*
|
|
127
|
-
* The
|
|
128
|
-
*
|
|
165
|
+
* The record itself comes from `ambiguityDrift`, shared with the role and component runners: this
|
|
166
|
+
* anchor kind was the first to get the rule, and writing it inline is how the other two came to
|
|
167
|
+
* answer the same question differently.
|
|
129
168
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
tool: step.tool,
|
|
134
|
-
anchor: value,
|
|
135
|
-
ok: false,
|
|
136
|
-
drift: ambiguousAnchorDrift(value, refs.length),
|
|
137
|
-
};
|
|
169
|
+
const ambiguous = ambiguityDrift(step.anchor, refs);
|
|
170
|
+
if (ambiguous !== null) {
|
|
171
|
+
return { step: index, tool: step.tool, anchor: value, ok: false, drift: ambiguous };
|
|
138
172
|
}
|
|
139
173
|
const ref = refs[0] ?? '';
|
|
140
174
|
/*
|
|
@@ -146,15 +180,12 @@ export async function runTestidStep(session, step, index, value, dynamic, confir
|
|
|
146
180
|
* so the kind most likely to appear in a real flow was the kind without the cure.
|
|
147
181
|
*
|
|
148
182
|
* The re-resolve keeps the ambiguity rule above: more than one match is drift, never a guess, so
|
|
149
|
-
* it
|
|
183
|
+
* it reports an `anchor_ambiguous` drift rather than handing back the first of the new matches.
|
|
150
184
|
*/
|
|
151
185
|
const result = await actOnResolvedRef(session, step, index, value, ref, confirmDangerous,
|
|
152
186
|
// The field this step types into — from the anchor, so a redacted fill can be supplied from
|
|
153
187
|
// RETICLE_SECRET_<FIELD> without the flow carrying the secret.
|
|
154
|
-
anchorFieldName(step.anchor), async () =>
|
|
155
|
-
const again = await resolveTestid(session, value, sleep);
|
|
156
|
-
return 1 === again.refs.length ? again.refs[0] : undefined;
|
|
157
|
-
});
|
|
188
|
+
anchorFieldName(step.anchor), async () => reresolved(step.anchor, (await resolveTestid(session, value, sleep)).refs));
|
|
158
189
|
if (!result.ok)
|
|
159
190
|
return result;
|
|
160
191
|
// assert the step's expect.element testid is present AFTER the action —
|
|
@@ -251,11 +282,22 @@ export async function assertStepExpect(session, expect, waitForSignal, timeoutMs
|
|
|
251
282
|
: DriftReason.SIGNAL_NOT_OBSERVED,
|
|
252
283
|
reason: namedInFlight
|
|
253
284
|
? `${IN_FLIGHT_AT_BUDGET_END} (${openRequests.join(', ')})`
|
|
254
|
-
: (verdict.failureReason ?? "the step's declared consequence did not hold"),
|
|
285
|
+
: withCaseOnly(verdict.failureReason ?? "the step's declared consequence did not hold", verdict),
|
|
255
286
|
anchor: expectLabel(expect),
|
|
256
287
|
nearest: null,
|
|
257
288
|
};
|
|
258
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* A text check that missed only on case says so, with what would hold. Text checks match case
|
|
292
|
+
* exactly now, so a flow saved when they did not goes red on capitalisation alone; the person
|
|
293
|
+
* reading its replay needs the fix (`ignoreCase: true`, or re-record), not a bare "did not hold".
|
|
294
|
+
*/
|
|
295
|
+
export function withCaseOnly(reason, verdict) {
|
|
296
|
+
if (true !== verdict.caseOnlyMiss)
|
|
297
|
+
return reason;
|
|
298
|
+
const shown = verdict.wouldHold === undefined ? '' : ` ("${verdict.wouldHold}")`;
|
|
299
|
+
return `${reason} — the page shows it in another case${shown}. Text checks match case exactly: if any case is meant, add ignoreCase: true to this check, or re-record the flow.`;
|
|
300
|
+
}
|
|
259
301
|
/** Run one signal-anchored step: wait for the signal predicate, else drift (no nearest for signals). */
|
|
260
302
|
async function runSignalStep(session, step, index, name, waitForSignal, signalTimeoutMs, since) {
|
|
261
303
|
// Scope to THIS replay's floor, not the whole buffer.
|
|
@@ -297,6 +339,22 @@ export function resumeIndex(from, steps) {
|
|
|
297
339
|
return undefined;
|
|
298
340
|
return steps.slice(0, at).some((step) => StepEffect.COMMITS === step.effect) ? 0 : at;
|
|
299
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* How far a replay drives: `to` stops before a step (positive), `at` picks up at one on the page as
|
|
344
|
+
* it is. `at: 0` is the whole flow continuing the page the flow before it left, with no reload.
|
|
345
|
+
*/
|
|
346
|
+
export function replayWindow(args) {
|
|
347
|
+
const index = (raw, least) => 'number' === typeof raw && Number.isInteger(raw) && least <= raw ? raw : undefined;
|
|
348
|
+
const to = index(args['to'], 1);
|
|
349
|
+
const at = index(args['at'], 0);
|
|
350
|
+
return { ...(to === undefined ? {} : { to }), ...(at === undefined ? {} : { at }) };
|
|
351
|
+
}
|
|
352
|
+
/** A part-way replay's status, from the steps it drove. */
|
|
353
|
+
export function partialStatus(steps) {
|
|
354
|
+
if (steps.some((step) => step.drift !== undefined))
|
|
355
|
+
return ReplayStatus.DRIFT;
|
|
356
|
+
return steps.every((step) => step.ok) ? ReplayStatus.OK : ReplayStatus.ERROR;
|
|
357
|
+
}
|
|
300
358
|
/** The `from` argument, narrowed: a step index or a step id. */
|
|
301
359
|
export function resumeArg(raw) {
|
|
302
360
|
return 'number' === typeof raw || ('string' === typeof raw && raw.length > 0) ? raw : undefined;
|
|
@@ -337,12 +395,13 @@ async function runInvokeStep(session, flow, step, index, waitForSignal, signalTi
|
|
|
337
395
|
return {
|
|
338
396
|
...base,
|
|
339
397
|
ok: false,
|
|
340
|
-
error:
|
|
398
|
+
error: invokedFlowMissing(name),
|
|
341
399
|
};
|
|
342
400
|
}
|
|
343
401
|
// `from` is an offset into the CALLER's steps. A sub-journey invoked from the setup prefix runs
|
|
344
402
|
// whole and unchecked (from = its length); one invoked at or after the resume point runs normally.
|
|
345
|
-
|
|
403
|
+
// Nor the progress callback: a sub-flow's steps are one step of the flow the chip is drawing.
|
|
404
|
+
const { from: _outer, onStep: _progress, to: _to, at: _at, ...rest } = options;
|
|
346
405
|
const carried = setup ? { ...rest, from: sub.steps.length } : rest;
|
|
347
406
|
const nested = await replayFlow(session, sub, waitForSignal, signalTimeoutMs, confirmDangerous, sleep, {
|
|
348
407
|
...carried,
|
|
@@ -377,13 +436,28 @@ export async function replayFlow(session, flow, waitForSignal, signalTimeoutMs,
|
|
|
377
436
|
// wait for the slowest step would trade a false red for a slow suite. See FlowStep.timeoutMs.
|
|
378
437
|
const waitFor = (step) => step.timeoutMs ?? flow.signalTimeoutMs ?? signalTimeoutMs;
|
|
379
438
|
let index = 0;
|
|
439
|
+
const tell = (result) => {
|
|
440
|
+
try {
|
|
441
|
+
options.onStep?.(index + 1, flow.steps.length, true === result?.ok && result.drift === undefined);
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
/* progress is a picture of the replay, never a reason to stop it */
|
|
445
|
+
}
|
|
446
|
+
};
|
|
380
447
|
try {
|
|
381
448
|
for (const step of flow.steps) {
|
|
449
|
+
if (options.to !== undefined && index >= options.to)
|
|
450
|
+
break;
|
|
451
|
+
if (options.at !== undefined && index < options.at) {
|
|
452
|
+
index += 1;
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
382
455
|
if (step.invoke !== undefined) {
|
|
383
456
|
results.push(await runInvokeStep(session, flow, step, index, waitForSignal, signalTimeoutMs, confirmDangerous, sleep, options, index < from));
|
|
384
457
|
const last = results[results.length - 1];
|
|
385
458
|
if (last !== undefined && index < from && last.ok)
|
|
386
459
|
results.pop();
|
|
460
|
+
tell(last);
|
|
387
461
|
if (last !== undefined && false === last.ok)
|
|
388
462
|
break;
|
|
389
463
|
index += 1;
|
|
@@ -459,6 +533,18 @@ export async function replayFlow(session, flow, waitForSignal, signalTimeoutMs,
|
|
|
459
533
|
const consequence = summarizeConsequence(windowEvents);
|
|
460
534
|
if (consequence !== undefined)
|
|
461
535
|
result.consequence = consequence;
|
|
536
|
+
const consoleErrors = consoleErrorsIn(windowEvents);
|
|
537
|
+
if (consoleErrors !== undefined)
|
|
538
|
+
result.consoleErrors = consoleErrors;
|
|
539
|
+
for (const expectation of checked) {
|
|
540
|
+
if (!result.ok || result.drift !== undefined)
|
|
541
|
+
break;
|
|
542
|
+
const late = lateConsoleDrift(expectation, windowEvents);
|
|
543
|
+
if (late !== undefined) {
|
|
544
|
+
result.ok = false;
|
|
545
|
+
result.drift = late;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
462
548
|
// Per-step wall time is NOT shipped: it is `window.until - window.since`, computed from two numbers
|
|
463
549
|
// the next line already puts in the same object, under the same emission condition. A step used to
|
|
464
550
|
// carry the subtraction AND both operands, on every step of every replay.
|
|
@@ -483,7 +569,9 @@ export async function replayFlow(session, flow, waitForSignal, signalTimeoutMs,
|
|
|
483
569
|
}
|
|
484
570
|
if (index < from)
|
|
485
571
|
result.note = `setup step for resuming at step ${String(from)} failed`;
|
|
572
|
+
await options.onStepResult?.(result, flow.name).catch(() => undefined);
|
|
486
573
|
results.push(result);
|
|
574
|
+
tell(result);
|
|
487
575
|
// Under `sweep`, a failure whose action still RAN does not stop the run — the page is where the
|
|
488
576
|
// step left it, so the next step is as meaningful as it was going to be. Anything else halts.
|
|
489
577
|
const sweepPast = true === options.sweep &&
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FlowErrorCode } from '@reticlehq/core';
|
|
1
|
+
import { FlowErrorCode, ReplayStatus, Verified } from '@reticlehq/core';
|
|
2
2
|
import { type ProjectId } from '@reticlehq/core';
|
|
3
3
|
/** Discriminated result so callers never branch on free strings. */
|
|
4
4
|
export type FlowResult<T> = {
|
|
@@ -35,3 +35,24 @@ export type FlowResult<T> = {
|
|
|
35
35
|
export declare const safeProjectId: (projectId?: ProjectId) => ProjectId | undefined;
|
|
36
36
|
/** Map a structured FlowErrorCode to a legible one-line message for the agent. */
|
|
37
37
|
export declare function flowErrorMessage(code: FlowErrorCode, detail?: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* A replay as one check of the session that ran it: held when it replayed clean, failed when a step
|
|
40
|
+
* failed, undecided when it drifted or its flow asserts nothing. A session whose only work was a
|
|
41
|
+
* failing replay ended "nothing was checked" beside the replay's own failure.
|
|
42
|
+
*/
|
|
43
|
+
export declare function replayVerdictEffect(name: string, status: ReplayStatus, assertsNothing: boolean): {
|
|
44
|
+
claim: string;
|
|
45
|
+
verified: Verified;
|
|
46
|
+
declaredBeforeActing: true;
|
|
47
|
+
grade: string;
|
|
48
|
+
};
|
|
49
|
+
/** Record a replay as one check of the session that ran it. A session double without a journal is skipped. */
|
|
50
|
+
export declare function noteReplayCheck(session: {
|
|
51
|
+
recordAction?: (tool: string, args: Record<string, unknown>, effect?: unknown) => string;
|
|
52
|
+
}, name: string, status: ReplayStatus, assertsNothing: boolean): void;
|
|
53
|
+
/**
|
|
54
|
+
* The active recording a refused `reticle_flow_save` was most likely about: the one it named, or
|
|
55
|
+
* the only one running when it named none and nothing is stopped yet.
|
|
56
|
+
*/
|
|
57
|
+
export declare function stillRecording(active: readonly string[], name: string, explicitName: string | undefined, held: readonly string[]): string | undefined;
|
|
58
|
+
export declare function stillRecordingMessage(recording: string): string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { FlowErrorCode } from '@reticlehq/core';
|
|
1
|
+
import { FlowErrorCode, NO_SUCH_FLOW, ReplayStatus, ReticleTool, Verified } from '@reticlehq/core';
|
|
2
2
|
import { SAFE_SEGMENT_PATTERN } from '@reticlehq/core';
|
|
3
3
|
import { FlowParseNote } from './flow-expect-grammar.js';
|
|
4
|
+
import { isAmbient } from './recording/tape/recordings.js';
|
|
4
5
|
/**
|
|
5
6
|
* A project id that is safe to put in a path, or nothing.
|
|
6
7
|
*
|
|
@@ -36,7 +37,7 @@ export function flowErrorMessage(code, detail) {
|
|
|
36
37
|
case FlowErrorCode.INVALID_NAME:
|
|
37
38
|
return 'invalid flow name — use a single safe segment (letters/digits/-/_), no path separators';
|
|
38
39
|
case FlowErrorCode.NOT_FOUND:
|
|
39
|
-
return
|
|
40
|
+
return `${NO_SUCH_FLOW} — run reticle_flow{action:"list"} to see saved flows`;
|
|
40
41
|
case FlowErrorCode.PARSE_FAILED:
|
|
41
42
|
return FlowParseNote.MALFORMED;
|
|
42
43
|
case FlowErrorCode.NO_RECORDING:
|
|
@@ -49,3 +50,47 @@ export function flowErrorMessage(code, detail) {
|
|
|
49
50
|
return (detail ?? 'the step to resume at is not in this flow — pass a 0-based index or a step id');
|
|
50
51
|
}
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* A replay as one check of the session that ran it: held when it replayed clean, failed when a step
|
|
55
|
+
* failed, undecided when it drifted or its flow asserts nothing. A session whose only work was a
|
|
56
|
+
* failing replay ended "nothing was checked" beside the replay's own failure.
|
|
57
|
+
*/
|
|
58
|
+
export function replayVerdictEffect(name, status, assertsNothing) {
|
|
59
|
+
const verified = ReplayStatus.OK === status && !assertsNothing
|
|
60
|
+
? Verified.YES
|
|
61
|
+
: ReplayStatus.ERROR === status
|
|
62
|
+
? Verified.NO
|
|
63
|
+
: Verified.UNKNOWN;
|
|
64
|
+
return {
|
|
65
|
+
claim: `the flow "${name}" replays and its checks hold`,
|
|
66
|
+
verified,
|
|
67
|
+
declaredBeforeActing: true,
|
|
68
|
+
grade: REPLAY_GRADE,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** The grade a replay's check is recorded with. */
|
|
72
|
+
const REPLAY_GRADE = 'flow';
|
|
73
|
+
/** Record a replay as one check of the session that ran it. A session double without a journal is skipped. */
|
|
74
|
+
export function noteReplayCheck(session, name, status, assertsNothing) {
|
|
75
|
+
session.recordAction?.(ReticleTool.FLOW_REPLAY, { flowName: name }, replayVerdictEffect(name, status, assertsNothing));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The active recording a refused `reticle_flow_save` was most likely about: the one it named, or
|
|
79
|
+
* the only one running when it named none and nothing is stopped yet.
|
|
80
|
+
*/
|
|
81
|
+
// A running recording has no compiled program yet, so a save refusal names it (#1551).
|
|
82
|
+
export function stillRecording(active, name, explicitName, held) {
|
|
83
|
+
if (active.includes(name) && !isAmbient(name))
|
|
84
|
+
return name;
|
|
85
|
+
// The ambient tape is the daemon's own, never one the agent started, so it is neither named nor
|
|
86
|
+
// counted: with a named recording beside it, that one is still the only candidate.
|
|
87
|
+
const opened = active.filter((recording) => !isAmbient(recording));
|
|
88
|
+
if ((explicitName === undefined || 0 === explicitName.length) && 0 === held.length) {
|
|
89
|
+
return 1 === opened.length ? opened[0] : undefined;
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
export function stillRecordingMessage(recording) {
|
|
94
|
+
return (`'${recording}' is still recording, and flow_save only saves a stopped recording. ` +
|
|
95
|
+
`Stop it first with reticle_record{action:"stop", recordingName:"${recording}"}, then save again.`);
|
|
96
|
+
}
|
|
@@ -27,7 +27,11 @@ export function buildFlowChips(flows, sessionProjectId) {
|
|
|
27
27
|
const start = first !== undefined && first.anchor.kind === AnchorKind.TESTID
|
|
28
28
|
? first.anchor.value
|
|
29
29
|
: undefined;
|
|
30
|
-
chips.push(
|
|
30
|
+
chips.push({
|
|
31
|
+
name: flow.name,
|
|
32
|
+
createdAt: flow.createdAt,
|
|
33
|
+
...(start === undefined ? {} : { start }),
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
return chips;
|
|
33
37
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { AnchorKind, type FlowAnchor, type FlowStep, type FlowStepResult, type Predicate } from '@reticlehq/core';
|
|
1
|
+
import { AnchorKind, type FlowAnchor, type FlowReplayResult, type FlowStep, type FlowStepResult, type Predicate } from '@reticlehq/core';
|
|
2
2
|
import type { FlowReplaySession, Sleep } from './flow-replay-types.js';
|
|
3
|
+
import { type Reresolved } from './flow-anchor.js';
|
|
4
|
+
/** The live act_sequence tool gives each step this transport budget when none was supplied. */
|
|
5
|
+
export declare const DEFAULT_SEQUENCE_STEP_TIMEOUT_MS = 8000;
|
|
3
6
|
export declare function runRoleStep(session: FlowReplaySession, step: FlowStep, index: number, anchor: Extract<FlowAnchor, {
|
|
4
7
|
kind: typeof AnchorKind.ROLE;
|
|
5
8
|
}>, confirmDangerous: boolean, sleep: Sleep): Promise<FlowStepResult>;
|
|
@@ -19,8 +22,11 @@ field?: string,
|
|
|
19
22
|
* found, and the retry below is worthless without it: re-dispatching the SAME dead ref fails
|
|
20
23
|
* identically. What changed between the two attempts is the DOM, so the locator has to be run
|
|
21
24
|
* against it again.
|
|
25
|
+
*
|
|
26
|
+
* It reports WHAT it found, not just a ref: see `Reresolved`. A re-render that turns one match into
|
|
27
|
+
* three is a drift, and the caller is the only layer that can say so with the right anchor in hand.
|
|
22
28
|
*/
|
|
23
|
-
reresolve?: () => Promise<
|
|
29
|
+
reresolve?: () => Promise<Reresolved | undefined>): Promise<FlowStepResult>;
|
|
24
30
|
/** Run one component-anchored step: re-resolve via QUERY by:'component', ACT on the live ref, else drift. */
|
|
25
31
|
export declare function runComponentStep(session: FlowReplaySession, step: FlowStep, index: number, anchor: Extract<FlowAnchor, {
|
|
26
32
|
kind: typeof AnchorKind.COMPONENT;
|
|
@@ -55,6 +61,20 @@ export declare function anchorQueryArgs(anchor: FlowAnchor): Record<string, unkn
|
|
|
55
61
|
* flow's own `requires` holds. No tool writes `requires`, so the reset's hint hands over this line.
|
|
56
62
|
*/
|
|
57
63
|
export declare function anchorPrecondition(anchor: FlowAnchor): Predicate | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* The honest answer when a step's target kept going stale.
|
|
66
|
+
*
|
|
67
|
+
* Replay looks the element up again and goes on while that gets it further, so a step still stale
|
|
68
|
+
* after that is one the page re-rendered around faster than it could be targeted. Reporting it as
|
|
69
|
+
* `error` with the browser's own sentence says "your app broke", which is a claim nothing observed
|
|
70
|
+
* and sends a reader into product code that is fine. It is the same bucket as a document that went
|
|
71
|
+
* away: the steps before it are real and are attached, the step that could not be acted on is among
|
|
72
|
+
* them with its index, and nothing after it ran.
|
|
73
|
+
*
|
|
74
|
+
* Left alone, so the ordinary verdict stands, when anything else is in the run: a drifted anchor is
|
|
75
|
+
* drift whatever else happened, and a failure that is not staleness is a failure.
|
|
76
|
+
*/
|
|
77
|
+
export declare function staleTargetResult(name: string, steps: readonly FlowStepResult[]): FlowReplayResult | undefined;
|
|
58
78
|
/**
|
|
59
79
|
* Run an act_sequence step: resolve every sub-step's OWN anchor, then dispatch the whole thing as one
|
|
60
80
|
* ACT_SEQUENCE — the same shape `replayProgram` already uses, so a recorded sequence and a saved one
|