@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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReticleCommand } from '@reticlehq/core';
|
|
2
|
+
import type { FlowReplayResult } from '@reticlehq/core';
|
|
3
|
+
import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
4
|
+
/** The session a HUD replay reports to. Resolved per message: a replay usually reloads the page. */
|
|
5
|
+
interface ProgressTarget {
|
|
6
|
+
pushNarration(text: string): void;
|
|
7
|
+
pushView(name: typeof ReticleCommand.FLOW_PROGRESS, args: object): void;
|
|
8
|
+
}
|
|
9
|
+
/** A human-facing one-liner for a panel replay verdict — ✓ passed / ⚠ drifted / ✗ errored / ? unverifiable. */
|
|
10
|
+
export declare function replayVerdictLine(result: FlowReplayResult): string;
|
|
11
|
+
/**
|
|
12
|
+
* Replay a saved flow because a person pressed ▶ in the HUD, with no agent involved.
|
|
13
|
+
*
|
|
14
|
+
* The chip they pressed shows the replay as it runs: a progress push after every step, and the
|
|
15
|
+
* verdict at the end, sent to whichever session holds the tab at that moment (a replay reloads the
|
|
16
|
+
* page, and the session object from before the reload no longer has a socket). The verdict also
|
|
17
|
+
* lands in the Agent Log as a line, where the "See the logs" link on the chip leads.
|
|
18
|
+
*/
|
|
19
|
+
export declare function replayFromHud(deps: ToolDeps, resolve: (sessionId: string) => ProgressTarget | undefined, sessionId: string, flowName: string): Promise<void>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FlowProgressStatus, ReplayStatus, ReticleCommand } from '@reticlehq/core';
|
|
2
|
+
import { replayAndLearn } from './flow-learning.js';
|
|
3
|
+
/** A human-facing one-liner for a panel replay verdict — ✓ passed / ⚠ drifted / ✗ errored / ? unverifiable. */
|
|
4
|
+
export function replayVerdictLine(result) {
|
|
5
|
+
if (result.status === ReplayStatus.OK)
|
|
6
|
+
return `✓ "${result.name}" passed`;
|
|
7
|
+
if (result.status === ReplayStatus.DRIFT)
|
|
8
|
+
return `⚠ "${result.name}" drifted — a step no longer matches`;
|
|
9
|
+
if (result.status === ReplayStatus.UNVERIFIABLE)
|
|
10
|
+
return `? "${result.name}" unverifiable — ${result.unverifiable?.reason ?? 'could not be graded'}`;
|
|
11
|
+
return `✗ "${result.name}" failed — ${result.error?.message ?? 'could not replay'}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Replay a saved flow because a person pressed ▶ in the HUD, with no agent involved.
|
|
15
|
+
*
|
|
16
|
+
* The chip they pressed shows the replay as it runs: a progress push after every step, and the
|
|
17
|
+
* verdict at the end, sent to whichever session holds the tab at that moment (a replay reloads the
|
|
18
|
+
* page, and the session object from before the reload no longer has a socket). The verdict also
|
|
19
|
+
* lands in the Agent Log as a line, where the "See the logs" link on the chip leads.
|
|
20
|
+
*/
|
|
21
|
+
export async function replayFromHud(deps, resolve, sessionId, flowName) {
|
|
22
|
+
const progress = (done, total, status) => resolve(sessionId)?.pushView(ReticleCommand.FLOW_PROGRESS, {
|
|
23
|
+
name: flowName,
|
|
24
|
+
done,
|
|
25
|
+
total,
|
|
26
|
+
status,
|
|
27
|
+
});
|
|
28
|
+
resolve(sessionId)?.pushNarration(`▶ Replaying "${flowName}"…`);
|
|
29
|
+
progress(0, 0, FlowProgressStatus.PLAYING);
|
|
30
|
+
let total = 0;
|
|
31
|
+
let done = 0;
|
|
32
|
+
try {
|
|
33
|
+
const result = await replayAndLearn(deps, {
|
|
34
|
+
flowName,
|
|
35
|
+
sessionId,
|
|
36
|
+
onStep: (stepsDone, stepsTotal) => {
|
|
37
|
+
done = stepsDone;
|
|
38
|
+
total = stepsTotal;
|
|
39
|
+
progress(done, total, FlowProgressStatus.PLAYING);
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const passed = ReplayStatus.OK === result.status;
|
|
43
|
+
progress(passed ? total : done, total, passed ? FlowProgressStatus.PASSED : FlowProgressStatus.FAILED);
|
|
44
|
+
resolve(sessionId)?.pushNarration(replayVerdictLine(result));
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
48
|
+
progress(done, total, FlowProgressStatus.FAILED);
|
|
49
|
+
resolve(sessionId)?.pushNarration(`✗ Replay "${flowName}" failed — ${message}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -35,6 +35,8 @@ export declare function replayActionArgs(value: unknown, confirmDangerous?: bool
|
|
|
35
35
|
* a hash-routed app makes meaningless in the document location — see routeOfEvent.
|
|
36
36
|
*/
|
|
37
37
|
export declare function pathOf(url: string | undefined): string | undefined;
|
|
38
|
+
/** What a saved flow could not keep, and the fix. See RecordedStep.unkeptExpect. */
|
|
39
|
+
export declare const UNKEPT_EXPECT: string;
|
|
38
40
|
/**
|
|
39
41
|
* Capture an act into every in-flight recording, or do nothing when none is running.
|
|
40
42
|
*
|
|
@@ -44,21 +46,23 @@ export declare function pathOf(url: string | undefined): string | undefined;
|
|
|
44
46
|
*/
|
|
45
47
|
export declare function captureAct(recordings: {
|
|
46
48
|
active: () => string[];
|
|
47
|
-
capture: (step: RecordedStep, route?: string) => void;
|
|
49
|
+
capture: (step: RecordedStep, route?: string, session?: string) => void;
|
|
48
50
|
}, args: Record<string, unknown>, res: unknown,
|
|
49
51
|
/** Where this step ran, so the ambient tape can be cut into journeys. See RecordedStep.route. */
|
|
50
|
-
route?: string
|
|
52
|
+
route?: string,
|
|
53
|
+
/** The session that acted: only recordings it started take the step. */
|
|
54
|
+
session?: string): void;
|
|
51
55
|
/**
|
|
52
56
|
* Capture an act_and_wait once its verdict is known, keeping `until` as the step's expectation only
|
|
53
57
|
* on a yes. Recorded before the verdict, a step kept an `until` that came back `no` or `no-fault` —
|
|
54
58
|
* a regression test asserting something never once observed to hold because of the action. The
|
|
55
59
|
* action itself is always recorded: it happened, and replay needs it to reach the next step.
|
|
56
60
|
*/
|
|
57
|
-
export declare function captureVerdictedAct(recordings: Parameters<typeof captureAct>[0], args: Record<string, unknown>, res: unknown, route: string | undefined, verified: string | undefined): void;
|
|
61
|
+
export declare function captureVerdictedAct(recordings: Parameters<typeof captureAct>[0], args: Record<string, unknown>, res: unknown, route: string | undefined, verified: string | undefined, session?: string): void;
|
|
58
62
|
/** Fold a PASSING standalone assertion into the step it proved. See RecordingStore.attachExpect. */
|
|
59
63
|
export declare function captureAssertion(recordings: {
|
|
60
|
-
attachExpect: (expect: Predicate) => void;
|
|
61
|
-
}, raw: unknown): void;
|
|
64
|
+
attachExpect: (expect: Predicate, session?: string) => void;
|
|
65
|
+
}, raw: unknown, session?: string): void;
|
|
62
66
|
/**
|
|
63
67
|
* Compile a single reticle_act invocation into a normalized RecordedStep using the action result. Anchor
|
|
64
68
|
* priority mirrors synthesizeAnchor: a data-testid is the gold standard; failing that, the element's
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { REDACTED_FILL, secretEnvKey } from './fields/flow-secret-field.js';
|
|
1
|
+
import { REDACTED_FILL, SECRET_NAME_ARG, secretEnvKey, secretValue, } from './fields/flow-secret-field.js';
|
|
2
2
|
import { FlowPredicateSchema, Verified } from '@reticlehq/core';
|
|
3
3
|
import { DANGEROUS_ACTION_CONFIRM_ARG, ReticleCommand, QueryBy, } from '@reticlehq/core';
|
|
4
|
-
import { ReticleTool } from '@reticlehq/core';
|
|
4
|
+
import { ReticleTool, invokedFlowMissing } from '@reticlehq/core';
|
|
5
5
|
import { formatStepAddress } from 'open-verification';
|
|
6
|
+
import { refFor } from './flow-anchor.js';
|
|
6
7
|
import { asRecord, asString } from '@reticlehq/core';
|
|
7
8
|
/**
|
|
8
9
|
* The note attached when a testid resolves to multiple live elements (the first match is used).
|
|
@@ -12,6 +13,9 @@ import { asRecord, asString } from '@reticlehq/core';
|
|
|
12
13
|
export function ambiguousTestidNote(value) {
|
|
13
14
|
return `ambiguous testid '${value}', used first match`;
|
|
14
15
|
}
|
|
16
|
+
function ambiguousRoleNote(role, name) {
|
|
17
|
+
return `ambiguous ${role} named '${name}', used first match`;
|
|
18
|
+
}
|
|
15
19
|
/**
|
|
16
20
|
* The live element refs a QUERY resolved to (empty when it failed or matched nothing). Shared by BOTH
|
|
17
21
|
* replay engines (replayProgram + flow-replay's step runner) so element extraction — the core of anchor
|
|
@@ -40,10 +44,11 @@ export function queryRefs(result) {
|
|
|
40
44
|
export function replayActionArgs(value, confirmDangerous = false, field) {
|
|
41
45
|
const args = { ...asRecord(value) };
|
|
42
46
|
delete args[DANGEROUS_ACTION_CONFIRM_ARG];
|
|
47
|
+
delete args[SECRET_NAME_ARG];
|
|
43
48
|
if (confirmDangerous)
|
|
44
49
|
args[DANGEROUS_ACTION_CONFIRM_ARG] = true;
|
|
45
50
|
if (REDACTED_FILL === args['value'] && field !== undefined) {
|
|
46
|
-
const supplied =
|
|
51
|
+
const supplied = secretValue(secretEnvKey(field), process.env);
|
|
47
52
|
if (supplied !== undefined && supplied.length > 0)
|
|
48
53
|
args['value'] = supplied;
|
|
49
54
|
}
|
|
@@ -87,6 +92,9 @@ export function pathOf(url) {
|
|
|
87
92
|
return undefined;
|
|
88
93
|
}
|
|
89
94
|
}
|
|
95
|
+
/** What a saved flow could not keep, and the fix. See RecordedStep.unkeptExpect. */
|
|
96
|
+
export const UNKEPT_EXPECT = 'its proved `until` names something a saved flow cannot replay (a session ref such as e12): ' +
|
|
97
|
+
'name the element by testid, role and name, or text, and the check is kept';
|
|
90
98
|
/**
|
|
91
99
|
* Capture an act into every in-flight recording, or do nothing when none is running.
|
|
92
100
|
*
|
|
@@ -96,7 +104,9 @@ export function pathOf(url) {
|
|
|
96
104
|
*/
|
|
97
105
|
export function captureAct(recordings, args, res,
|
|
98
106
|
/** Where this step ran, so the ambient tape can be cut into journeys. See RecordedStep.route. */
|
|
99
|
-
route
|
|
107
|
+
route,
|
|
108
|
+
/** The session that acted: only recordings it started take the step. */
|
|
109
|
+
session) {
|
|
100
110
|
// NO `active()` gate. `RecordingStore.capture` opens the AMBIENT tape on its first step, and that
|
|
101
111
|
// branch was unreachable from here: this returned early whenever nothing was open, and the only
|
|
102
112
|
// thing that opened anything was `reticle_record { action: "start" }`. So the comment on `capture`
|
|
@@ -111,15 +121,18 @@ route) {
|
|
|
111
121
|
// success means — the large majority of calls carry one — and dropping it produced a flow graded
|
|
112
122
|
// "assertion-free: it will pass even if the feature is broken", which is the regression-suite
|
|
113
123
|
// story failing at its last step. See enforceableExpect below.
|
|
114
|
-
const
|
|
124
|
+
const declared = args['until'] ?? args['predicate'];
|
|
125
|
+
const expect = enforceableExpect(declared);
|
|
115
126
|
if (expect !== undefined)
|
|
116
127
|
step.expect = expect;
|
|
128
|
+
else if (declared !== undefined)
|
|
129
|
+
step.unkeptExpect = UNKEPT_EXPECT;
|
|
117
130
|
if (route !== undefined)
|
|
118
131
|
step.page = route;
|
|
119
132
|
const intent = asString(args['intent'])?.trim();
|
|
120
133
|
if (intent !== undefined && intent.length > 0)
|
|
121
134
|
step.intent = intent;
|
|
122
|
-
recordings.capture(step, route);
|
|
135
|
+
recordings.capture(step, route, session);
|
|
123
136
|
}
|
|
124
137
|
/**
|
|
125
138
|
* Capture an act_and_wait once its verdict is known, keeping `until` as the step's expectation only
|
|
@@ -127,15 +140,15 @@ route) {
|
|
|
127
140
|
* a regression test asserting something never once observed to hold because of the action. The
|
|
128
141
|
* action itself is always recorded: it happened, and replay needs it to reach the next step.
|
|
129
142
|
*/
|
|
130
|
-
export function captureVerdictedAct(recordings, args, res, route, verified) {
|
|
143
|
+
export function captureVerdictedAct(recordings, args, res, route, verified, session) {
|
|
131
144
|
const { until: _until, predicate: _predicate, ...unproved } = args;
|
|
132
|
-
captureAct(recordings, Verified.YES === verified ? args : unproved, res, route);
|
|
145
|
+
captureAct(recordings, Verified.YES === verified ? args : unproved, res, route, session);
|
|
133
146
|
}
|
|
134
147
|
/** Fold a PASSING standalone assertion into the step it proved. See RecordingStore.attachExpect. */
|
|
135
|
-
export function captureAssertion(recordings, raw) {
|
|
148
|
+
export function captureAssertion(recordings, raw, session) {
|
|
136
149
|
const expect = enforceableExpect(raw);
|
|
137
150
|
if (expect !== undefined)
|
|
138
|
-
recordings.attachExpect(expect);
|
|
151
|
+
recordings.attachExpect(expect, session);
|
|
139
152
|
}
|
|
140
153
|
/**
|
|
141
154
|
* A declared predicate, as a recorded expectation — or nothing.
|
|
@@ -164,7 +177,23 @@ function enforceableExpect(raw) {
|
|
|
164
177
|
*/
|
|
165
178
|
export function compileActStep(args, res) {
|
|
166
179
|
const { args: compiled, stable } = compileAnchorArgs(asRecord(res), asString(args['ref']) ?? '', asString(args['action']) ?? '', replayActionArgs(args['args']));
|
|
167
|
-
|
|
180
|
+
const timeoutMs = explicitTimeoutMs(args);
|
|
181
|
+
return {
|
|
182
|
+
tool: ReticleTool.ACT,
|
|
183
|
+
stable,
|
|
184
|
+
args: compiled,
|
|
185
|
+
...(timeoutMs === undefined ? {} : { timeoutMs }),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** Keep only the timeout shape accepted by the public tool, including an intentional zero. */
|
|
189
|
+
function explicitTimeoutMs(args) {
|
|
190
|
+
const timeoutMs = args['timeout_ms'];
|
|
191
|
+
return 'number' === typeof timeoutMs &&
|
|
192
|
+
Number.isFinite(timeoutMs) &&
|
|
193
|
+
Number.isInteger(timeoutMs) &&
|
|
194
|
+
0 <= timeoutMs
|
|
195
|
+
? timeoutMs
|
|
196
|
+
: undefined;
|
|
168
197
|
}
|
|
169
198
|
/**
|
|
170
199
|
* The ONE anchor chooser: testid (gold) > role+name (identifies an instance) > component/source
|
|
@@ -207,6 +236,10 @@ function compileAnchorArgs(r, ref, action, actArgs) {
|
|
|
207
236
|
};
|
|
208
237
|
if (source !== undefined)
|
|
209
238
|
roleArgs['source'] = source;
|
|
239
|
+
if ('number' === typeof r['nth'] && 'number' === typeof r['of']) {
|
|
240
|
+
roleArgs['nth'] = r['nth'];
|
|
241
|
+
roleArgs['of'] = r['of'];
|
|
242
|
+
}
|
|
210
243
|
return { args: roleArgs, stable: true };
|
|
211
244
|
}
|
|
212
245
|
const component = asString(r['component']);
|
|
@@ -242,7 +275,13 @@ export function compileSequenceStep(args, res) {
|
|
|
242
275
|
const expect = enforceableExpect(step['expect']);
|
|
243
276
|
return expect === undefined ? compiled.args : { ...compiled.args, expect };
|
|
244
277
|
});
|
|
245
|
-
|
|
278
|
+
const timeoutMs = explicitTimeoutMs(args);
|
|
279
|
+
return {
|
|
280
|
+
tool: ReticleTool.ACT_SEQUENCE,
|
|
281
|
+
stable,
|
|
282
|
+
args: { steps: subSteps },
|
|
283
|
+
...(timeoutMs === undefined ? {} : { timeoutMs }),
|
|
284
|
+
};
|
|
246
285
|
}
|
|
247
286
|
/**
|
|
248
287
|
* Resolve a recorded step's element to a live ref, by whichever anchor the compiler chose.
|
|
@@ -275,11 +314,13 @@ async function resolveRef(session, step) {
|
|
|
275
314
|
const result = await session.command(ReticleCommand.QUERY, query);
|
|
276
315
|
if (!result.ok)
|
|
277
316
|
throw new Error(result.error ?? 'query failed');
|
|
278
|
-
const
|
|
317
|
+
const refs = queryRefs(result);
|
|
318
|
+
const meant = refFor(step, refs);
|
|
319
|
+
const ref = meant ?? refs[0];
|
|
279
320
|
if (ref === undefined) {
|
|
280
321
|
throw new Error(`${value} named '${String(name)}' did not resolve in current page`);
|
|
281
322
|
}
|
|
282
|
-
return { ref };
|
|
323
|
+
return meant === undefined ? { ref, note: ambiguousRoleNote(value, String(name)) } : { ref };
|
|
283
324
|
}
|
|
284
325
|
if (by === QueryBy.COMPONENT) {
|
|
285
326
|
const component = asString(step.component);
|
|
@@ -350,7 +391,7 @@ via = []) {
|
|
|
350
391
|
tool: step.tool,
|
|
351
392
|
ok: false,
|
|
352
393
|
at: address,
|
|
353
|
-
error:
|
|
394
|
+
error: invokedFlowMissing(step.invoke),
|
|
354
395
|
});
|
|
355
396
|
break;
|
|
356
397
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `reticle_flow_replay`'s answer: one flow replayed, written down as a run, ending with the Reticle
|
|
3
|
+
* result block. The run id is minted first, so each replayed step's screenshot is filed under it.
|
|
4
|
+
*/
|
|
5
|
+
import { type FlowReplayResult } from '@reticlehq/core';
|
|
6
|
+
import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
7
|
+
export declare function replayOneFlow(deps: ToolDeps, args: Record<string, unknown>, appUrl: string | undefined): Promise<FlowReplayResult>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `reticle_flow_replay`'s answer: one flow replayed, written down as a run, ending with the Reticle
|
|
3
|
+
* result block. The run id is minted first, so each replayed step's screenshot is filed under it.
|
|
4
|
+
*/
|
|
5
|
+
import { asString } from '@reticlehq/core';
|
|
6
|
+
import { defaultRunId, withShotRun } from '../../judgement/runs/default-run-id.js';
|
|
7
|
+
import { persistAndSyncVerificationRun } from '../../judgement/runs/verification-sync.js';
|
|
8
|
+
import { rootForTarget, safeSessionTarget } from '../../memory/project/session-root.js';
|
|
9
|
+
import { replayResult, resultField } from '../../surface/tools/reticle-result.js';
|
|
10
|
+
import { replaySeededOrNot } from './flow-learning.js';
|
|
11
|
+
export function replayOneFlow(deps, args, appUrl) {
|
|
12
|
+
return withShotRun(defaultRunId(), async () => {
|
|
13
|
+
const start = deps.now();
|
|
14
|
+
const replay = await replaySeededOrNot(deps, args, appUrl);
|
|
15
|
+
const durationMs = deps.now() - start;
|
|
16
|
+
const target = safeSessionTarget(deps, asString(args['sessionId']));
|
|
17
|
+
// Written down as a run, and named in the answer: the platform's Re-verify ties its check to
|
|
18
|
+
// it, and a check with no run could never resolve the issue it was for.
|
|
19
|
+
const runId = await persistAndSyncVerificationRun(deps, [{ replay, durationMs }], target);
|
|
20
|
+
return {
|
|
21
|
+
...replay,
|
|
22
|
+
...(runId === undefined ? {} : { runId }),
|
|
23
|
+
...resultField(() => replayResult(rootForTarget(deps, target), replay, durationMs, runId)),
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -26,6 +26,8 @@ import { FlakeStore } from '../stores/flake-store.js';
|
|
|
26
26
|
export async function recordSuiteFlakes(fs, reticleRoot, runs) {
|
|
27
27
|
const flakes = new FlakeStore(fs, reticleRoot);
|
|
28
28
|
for (const { replay } of runs) {
|
|
29
|
+
if (replay.status === ReplayStatus.UNVERIFIABLE)
|
|
30
|
+
continue;
|
|
29
31
|
await flakes.record(replay.name, ReplayStatus.OK === replay.status).catch(() => undefined);
|
|
30
32
|
}
|
|
31
33
|
return flakes.flakyFlows().catch(() => []);
|
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Which flows a suite run replays, resolved against the store.
|
|
3
|
-
*
|
|
4
|
-
* Shared by the MCP tool and the `reticle verify` command so the two cannot disagree about what a
|
|
5
|
-
* selection means.
|
|
6
|
-
*
|
|
7
|
-
* Lives beside the flow store rather than under `suite/` on purpose: it needs `flowsForSession`, and
|
|
8
|
-
* from `suite/` that import made `suite` and `flows` need EACH OTHER -- a mutual pair, which the
|
|
9
|
-
* reach guard forbids growing because two directories that need each other cannot be read, moved or
|
|
10
|
-
* tested apart. Here it adds no edge at all: `flows` reaching itself is nothing, and `cli -> flows`
|
|
11
|
-
* already existed. The pure rule lives in core (`selectFlows`); this is the part that has to read
|
|
12
|
-
* the files, because a label lives in one and `list` returns only names.
|
|
13
|
-
*/
|
|
14
|
-
import { type ProjectId } from '@reticlehq/core';
|
|
1
|
+
import type { ProjectTarget } from '../../memory/project/session-root.js';
|
|
15
2
|
import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
16
3
|
/**
|
|
17
4
|
* Resolve what a suite run should replay, and what it is holding back.
|
|
@@ -23,7 +10,7 @@ import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
|
23
10
|
* would turn a corrupt file into missing coverage nobody is told about, and replay reports the parse
|
|
24
11
|
* failure far better than a silent omission does.
|
|
25
12
|
*/
|
|
26
|
-
export declare function resolveSuiteSelection(deps: ToolDeps,
|
|
13
|
+
export declare function resolveSuiteSelection(deps: ToolDeps, target: ProjectTarget, args: Record<string, unknown>): Promise<{
|
|
27
14
|
run: string[];
|
|
28
15
|
quarantined: string[];
|
|
29
16
|
unmatched: string[];
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* already existed. The pure rule lives in core (`selectFlows`); this is the part that has to read
|
|
12
12
|
* the files, because a label lives in one and `list` returns only names.
|
|
13
13
|
*/
|
|
14
|
-
import { FLOW_FILE_VERSION, orderFlows, selectFlows
|
|
14
|
+
import { FLOW_FILE_VERSION, orderFlows, selectFlows } from '@reticlehq/core';
|
|
15
15
|
import { flowsForSession } from './flow-store-for-session.js';
|
|
16
16
|
/**
|
|
17
17
|
* Resolve what a suite run should replay, and what it is holding back.
|
|
@@ -23,8 +23,9 @@ import { flowsForSession } from './flow-store-for-session.js';
|
|
|
23
23
|
* would turn a corrupt file into missing coverage nobody is told about, and replay reports the parse
|
|
24
24
|
* failure far better than a silent omission does.
|
|
25
25
|
*/
|
|
26
|
-
export async function resolveSuiteSelection(deps,
|
|
27
|
-
const
|
|
26
|
+
export async function resolveSuiteSelection(deps, target, args) {
|
|
27
|
+
const { projectId } = target;
|
|
28
|
+
const store = flowsForSession(deps, target).flows;
|
|
28
29
|
const names = await store.list(projectId);
|
|
29
30
|
const asStrings = (value) => Array.isArray(value) ? value.filter((v) => 'string' === typeof v) : [];
|
|
30
31
|
const wantedNames = asStrings(args['names']);
|