@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,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `permissions` argument of `reticle_lease { action: "acquire" }` (#1370).
|
|
3
|
+
*
|
|
4
|
+
* Granted before the first navigation of a fresh lease. On an origin that already has a live lease,
|
|
5
|
+
* acquire hands back THAT lease rather than opening a second tab, and it may be another agent's tab
|
|
6
|
+
* mid-flow — nothing at this layer knows whose it is. So its grants never change there: the same list
|
|
7
|
+
* is a plain reuse, a different one is refused with the way out (release, then acquire again).
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { ReticleTool } from '@reticlehq/core';
|
|
11
|
+
import { LeasePermissionError, NOTIFICATIONS_PERMISSION, } from '../../portal/pool/context-permissions.js';
|
|
12
|
+
export const LEASE_PERMISSIONS_ARG = z
|
|
13
|
+
.array(z.string().min(1))
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Browser permissions to grant on the app origin before the first navigation, e.g. ["geolocation", "clipboard-read"]. A fresh lease starts with none granted. An origin that already has a lease keeps its grants: a different list there is refused, so release it and acquire again to change them. Names are Playwright\'s, and one it does not know is refused.');
|
|
16
|
+
/** The family member these refusals come from, named the way `open-note.ts` names it. */
|
|
17
|
+
const LeaseAction = { ACQUIRE: 'acquire' };
|
|
18
|
+
/** How this tool's refusals name the call: built from `ReticleTool.LEASE`, not spelled out. */
|
|
19
|
+
const ACQUIRE = `${ReticleTool.LEASE}{action:"${LeaseAction.ACQUIRE}"}`;
|
|
20
|
+
const INVALID_PERMISSIONS = `${ACQUIRE} permissions must be a list of permission names, e.g. ["geolocation"]`;
|
|
21
|
+
/** The one `Notification.permission` value that means the page can see a notifications grant. */
|
|
22
|
+
const GRANTED = 'granted';
|
|
23
|
+
/** The validated list, undefined when the caller passed none, or a refusal naming the right shape. */
|
|
24
|
+
export function parseLeasePermissions(raw) {
|
|
25
|
+
if (raw === undefined)
|
|
26
|
+
return undefined;
|
|
27
|
+
const parsed = LEASE_PERMISSIONS_ARG.safeParse(raw);
|
|
28
|
+
if (!parsed.success)
|
|
29
|
+
throw new Error(INVALID_PERMISSIONS);
|
|
30
|
+
return parsed.data;
|
|
31
|
+
}
|
|
32
|
+
/** A permission failure, reworded for the agent; undefined for every other error. */
|
|
33
|
+
export function permissionRefusal(err) {
|
|
34
|
+
return err instanceof LeasePermissionError ? new Error(`${ACQUIRE} ${err.message}`) : undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* What to tell the agent when the page cannot see a notifications grant, else undefined.
|
|
38
|
+
*
|
|
39
|
+
* Undefined too when the page could not be asked: the grant was made, and a reading nobody took is
|
|
40
|
+
* not evidence that it failed.
|
|
41
|
+
*/
|
|
42
|
+
export async function notificationReadBack(pool, sessionId, permissions) {
|
|
43
|
+
if (true !== permissions?.includes(NOTIFICATIONS_PERMISSION))
|
|
44
|
+
return undefined;
|
|
45
|
+
const reading = await pool.notificationPermission(sessionId);
|
|
46
|
+
if (reading === undefined || GRANTED === reading)
|
|
47
|
+
return undefined;
|
|
48
|
+
return (`notifications was granted, but this page's Notification.permission still reads "${reading}": ` +
|
|
49
|
+
'the pooled headless browser does not support notifications, so UI gated on ' +
|
|
50
|
+
'Notification.permission will not see the grant. navigator.permissions.query({ name: "notifications" }) does report it.');
|
|
51
|
+
}
|
|
52
|
+
const sameSet = (a, b) => a.length === b.length &&
|
|
53
|
+
a.every((name) => b.includes(name)) &&
|
|
54
|
+
b.every((name) => a.includes(name));
|
|
55
|
+
/**
|
|
56
|
+
* Refuse to reuse a held lease under a different set of grants. Nothing to refuse when the caller
|
|
57
|
+
* named no list, or the same one in any order.
|
|
58
|
+
*/
|
|
59
|
+
export function refuseRegrant(pool, sessionId, permissions) {
|
|
60
|
+
if (permissions === undefined)
|
|
61
|
+
return;
|
|
62
|
+
const held = pool.permissionsOf(sessionId);
|
|
63
|
+
if (held === undefined || sameSet(permissions, held))
|
|
64
|
+
return;
|
|
65
|
+
throw new Error(`${ACQUIRE} this origin's lease ${sessionId} already holds [${held.join(', ')}], and it may be ` +
|
|
66
|
+
"another agent's live tab, so its grants are not changed in place. If it is yours, release it " +
|
|
67
|
+
'and acquire again with the new list.');
|
|
68
|
+
}
|
|
69
|
+
/** `{ hint }` joining whichever parts are present, or nothing at all. */
|
|
70
|
+
export function hintOf(...parts) {
|
|
71
|
+
const present = parts.filter((part) => part !== undefined);
|
|
72
|
+
return 0 === present.length ? {} : { hint: present.join(' ') };
|
|
73
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is a leased tab usable right now? The checks `reticle_lease` runs before it may say `ready: true`.
|
|
3
|
+
* Presence in the sessions map is not enough: the tab has to answer, and it has to be visible.
|
|
4
|
+
*/
|
|
5
|
+
/** The narrow slice of a session the probe needs. Anything that quacks like this works. */
|
|
6
|
+
interface ProbeableSession {
|
|
7
|
+
command?: (name: string, args: Record<string, unknown>, timeoutMs: number) => Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Did the SDK report its tab hidden? A hidden tab answers commands while its timers and rAF are
|
|
11
|
+
* throttled, so a lease on it is `ready` by every other test and verifies nothing (#1351).
|
|
12
|
+
*
|
|
13
|
+
* Known gap: this reads the last PAGE_HEALTH, which lands just after HELLO — a check in that gap sees the
|
|
14
|
+
* default `false`. The pool foregrounding the page is what covers the gap; this catches the rest.
|
|
15
|
+
*/
|
|
16
|
+
export declare function tabHidden(session: unknown): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Does this tab still answer?
|
|
19
|
+
*
|
|
20
|
+
* PRESENCE IS NOT LIVENESS. The sessions map still holds a tab that is attached, streaming events,
|
|
21
|
+
* and answering nothing, so `ready` read off a row in that map hands back a lease that `snapshot`,
|
|
22
|
+
* `state` and `console` then reject (#692). It has to mean the tab replied.
|
|
23
|
+
*
|
|
24
|
+
* ANY reply counts, including one that reports the command failed. The question is whether the SDK
|
|
25
|
+
* answers at all, not what it says — so an SDK too old to know the command replies
|
|
26
|
+
* `unknown command '…'`, and that is proof. Only the absence of a reply is evidence of absence:
|
|
27
|
+
* `PendingCommands.track` REJECTS on timeout and on a dropped socket, and resolves on every real
|
|
28
|
+
* answer, so the two cases are already separated for us.
|
|
29
|
+
*
|
|
30
|
+
* `CAPABILITIES` is the probe because it takes no arguments and returns a small fixed list. No new
|
|
31
|
+
* wire command is introduced: this rides an existing round trip.
|
|
32
|
+
*
|
|
33
|
+
* Fails OPEN. A registry entry with no `command` is a shape this code did not put there, and
|
|
34
|
+
* turning a lease that works into a refusal over a probe that could not run would be a worse
|
|
35
|
+
* failure than the one being fixed.
|
|
36
|
+
*/
|
|
37
|
+
export declare function probeLeaseAlive(session: ProbeableSession | undefined, timeoutMs?: number): Promise<boolean>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is a leased tab usable right now? The checks `reticle_lease` runs before it may say `ready: true`.
|
|
3
|
+
* Presence in the sessions map is not enough: the tab has to answer, and it has to be visible.
|
|
4
|
+
*/
|
|
5
|
+
import { ReticleCommand } from '@reticlehq/core';
|
|
6
|
+
/**
|
|
7
|
+
* How long a liveness probe waits for the tab to say anything at all.
|
|
8
|
+
*
|
|
9
|
+
* Short on purpose. This is not "finish the work", it is "are you there" — a page executing
|
|
10
|
+
* JavaScript answers a no-argument command in single-digit milliseconds, and a wedged one is not
|
|
11
|
+
* going to answer in two seconds either.
|
|
12
|
+
*/
|
|
13
|
+
const LEASE_PROBE_TIMEOUT_MS = 1_500;
|
|
14
|
+
/**
|
|
15
|
+
* Did the SDK report its tab hidden? A hidden tab answers commands while its timers and rAF are
|
|
16
|
+
* throttled, so a lease on it is `ready` by every other test and verifies nothing (#1351).
|
|
17
|
+
*
|
|
18
|
+
* Known gap: this reads the last PAGE_HEALTH, which lands just after HELLO — a check in that gap sees the
|
|
19
|
+
* default `false`. The pool foregrounding the page is what covers the gap; this catches the rest.
|
|
20
|
+
*/
|
|
21
|
+
export function tabHidden(session) {
|
|
22
|
+
return (null !== session &&
|
|
23
|
+
'object' === typeof session &&
|
|
24
|
+
true === session.info?.().hidden);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Does this tab still answer?
|
|
28
|
+
*
|
|
29
|
+
* PRESENCE IS NOT LIVENESS. The sessions map still holds a tab that is attached, streaming events,
|
|
30
|
+
* and answering nothing, so `ready` read off a row in that map hands back a lease that `snapshot`,
|
|
31
|
+
* `state` and `console` then reject (#692). It has to mean the tab replied.
|
|
32
|
+
*
|
|
33
|
+
* ANY reply counts, including one that reports the command failed. The question is whether the SDK
|
|
34
|
+
* answers at all, not what it says — so an SDK too old to know the command replies
|
|
35
|
+
* `unknown command '…'`, and that is proof. Only the absence of a reply is evidence of absence:
|
|
36
|
+
* `PendingCommands.track` REJECTS on timeout and on a dropped socket, and resolves on every real
|
|
37
|
+
* answer, so the two cases are already separated for us.
|
|
38
|
+
*
|
|
39
|
+
* `CAPABILITIES` is the probe because it takes no arguments and returns a small fixed list. No new
|
|
40
|
+
* wire command is introduced: this rides an existing round trip.
|
|
41
|
+
*
|
|
42
|
+
* Fails OPEN. A registry entry with no `command` is a shape this code did not put there, and
|
|
43
|
+
* turning a lease that works into a refusal over a probe that could not run would be a worse
|
|
44
|
+
* failure than the one being fixed.
|
|
45
|
+
*/
|
|
46
|
+
export async function probeLeaseAlive(session, timeoutMs = LEASE_PROBE_TIMEOUT_MS) {
|
|
47
|
+
const send = session?.command;
|
|
48
|
+
if (send === undefined)
|
|
49
|
+
return true;
|
|
50
|
+
try {
|
|
51
|
+
await send.call(session, ReticleCommand.CAPABILITIES, {}, timeoutMs);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seeded storage for a lease, and the errors a lease's navigation throws: what a caller may see of
|
|
3
|
+
* them without seeing the secrets it seeded. Split from lease-tools.ts, which crossed the line cap.
|
|
4
|
+
*/
|
|
5
|
+
import { type SeedStorage } from '@reticlehq/core';
|
|
6
|
+
/**
|
|
7
|
+
* Scrub known secret shapes and raw seedStorage values (cookies, localStorage, sessionStorage)
|
|
8
|
+
* from an error string before it reaches daemon logs, metrics, or MCP error responses.
|
|
9
|
+
*/
|
|
10
|
+
export declare function scrubSeedFromError(text: string, seed?: unknown): string;
|
|
11
|
+
/** True for a Playwright `storageState()` export (`{ origins: [...] }`), not our seed shape. */
|
|
12
|
+
export declare function looksLikeStorageStateExport(seed: unknown): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Turn a raw navigation failure (Playwright's `page.goto: net::ERR_… at <url>\nCall log:…`, often
|
|
15
|
+
* with ANSI codes) into a short, clean reason — so the agent/user sees "is the app running?" instead
|
|
16
|
+
* of an internals-leaking wall of text.
|
|
17
|
+
*/
|
|
18
|
+
/** What {@link cleanNavError} answers for a navigation that ran out of time. */
|
|
19
|
+
export declare const NAV_TIMED_OUT = "navigation timed out";
|
|
20
|
+
export declare function cleanNavError(err: unknown, seed?: SeedStorage): string;
|
|
21
|
+
/** What a lease whose navigation hit a certificate error tells the caller. */
|
|
22
|
+
export declare const NAV_CERT_REFUSED: string;
|
|
23
|
+
/** The question a failed lease navigation asks, when nothing says the app is up. */
|
|
24
|
+
export declare const NAV_FAILED_QUESTION = "is the app running there?";
|
|
25
|
+
/** What a lease navigation that ran out of time tells the caller to do. */
|
|
26
|
+
export declare const NAV_TIMEOUT_ADVICE: string;
|
|
27
|
+
/**
|
|
28
|
+
* The sentence for a lease whose first navigation failed.
|
|
29
|
+
*
|
|
30
|
+
* A timeout and a refusal are different stories and get different sentences. A refusal
|
|
31
|
+
* (`net::ERR_CONNECTION_REFUSED` and the like) means nothing is serving there, so asking whether the
|
|
32
|
+
* app is running is the right question. A timeout proves less — only that the page was not ready in
|
|
33
|
+
* time — and its most common cause is a dev server compiling a route for the first time, which
|
|
34
|
+
* routinely outlasts the navigation budget. Asking "is the app running?" there sends the agent
|
|
35
|
+
* hunting for a dev server that is up instead of retrying, so the timeout sentence names both
|
|
36
|
+
* cases and leads with the retry.
|
|
37
|
+
*/
|
|
38
|
+
export declare function navFailureMessage(url: string, err: unknown, seed?: SeedStorage): string;
|
|
39
|
+
/**
|
|
40
|
+
* Determine if a required seedStorage application precondition failed.
|
|
41
|
+
*
|
|
42
|
+
* Checks strong signals:
|
|
43
|
+
* 1. HTTP 401/403 status on the initial navigation.
|
|
44
|
+
* 2. Cross-origin redirect when localStorage or sessionStorage was requested (skipped by origin-scoping).
|
|
45
|
+
* 3. Clear redirect to an authentication/login endpoint when the requested URL was not a login page.
|
|
46
|
+
*
|
|
47
|
+
* Normal app redirects (e.g. / → /dashboard) are valid and return undefined.
|
|
48
|
+
*/
|
|
49
|
+
export declare function evaluateSeedPrecondition(requestedUrl: string, actualUrl: string | undefined, seed: SeedStorage, navStatus?: number): string | undefined;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seeded storage for a lease, and the errors a lease's navigation throws: what a caller may see of
|
|
3
|
+
* them without seeing the secrets it seeded. Split from lease-tools.ts, which crossed the line cap.
|
|
4
|
+
*/
|
|
5
|
+
import { REDACTED_VALUE, scrubKnownSecrets } from '@reticlehq/core';
|
|
6
|
+
function redactExactValue(text, value) {
|
|
7
|
+
if (0 === value.length)
|
|
8
|
+
return text;
|
|
9
|
+
const escaped = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
10
|
+
return text.replace(new RegExp(`(^|[^a-zA-Z0-9])${escaped}(?=$|[^a-zA-Z0-9])`, 'g'), `$1${REDACTED_VALUE}`);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Scrub known secret shapes and raw seedStorage values (cookies, localStorage, sessionStorage)
|
|
14
|
+
* from an error string before it reaches daemon logs, metrics, or MCP error responses.
|
|
15
|
+
*/
|
|
16
|
+
export function scrubSeedFromError(text, seed) {
|
|
17
|
+
let out = scrubKnownSecrets(text);
|
|
18
|
+
if (undefined !== seed && null !== seed && 'object' === typeof seed) {
|
|
19
|
+
const s = seed;
|
|
20
|
+
const cookies = s['cookies'];
|
|
21
|
+
if (undefined !== cookies && null !== cookies) {
|
|
22
|
+
if (Array.isArray(cookies)) {
|
|
23
|
+
for (const c of cookies) {
|
|
24
|
+
if (undefined !== c && null !== c && 'object' === typeof c) {
|
|
25
|
+
const val = c['value'];
|
|
26
|
+
if (undefined !== val && 'string' === typeof val) {
|
|
27
|
+
out = redactExactValue(out, val);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if ('object' === typeof cookies) {
|
|
33
|
+
for (const v of Object.values(cookies)) {
|
|
34
|
+
if ('string' === typeof v) {
|
|
35
|
+
out = redactExactValue(out, v);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const local = s['local'];
|
|
41
|
+
if (undefined !== local && null !== local && 'object' === typeof local) {
|
|
42
|
+
for (const v of Object.values(local)) {
|
|
43
|
+
if ('string' === typeof v) {
|
|
44
|
+
out = redactExactValue(out, v);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const session = s['session'];
|
|
49
|
+
if (undefined !== session && null !== session && 'object' === typeof session) {
|
|
50
|
+
for (const v of Object.values(session)) {
|
|
51
|
+
if ('string' === typeof v) {
|
|
52
|
+
out = redactExactValue(out, v);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
/** True for a Playwright `storageState()` export (`{ origins: [...] }`), not our seed shape. */
|
|
60
|
+
export function looksLikeStorageStateExport(seed) {
|
|
61
|
+
return Array.isArray(seed?.origins);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Turn a raw navigation failure (Playwright's `page.goto: net::ERR_… at <url>\nCall log:…`, often
|
|
65
|
+
* with ANSI codes) into a short, clean reason — so the agent/user sees "is the app running?" instead
|
|
66
|
+
* of an internals-leaking wall of text.
|
|
67
|
+
*/
|
|
68
|
+
/** What {@link cleanNavError} answers for a navigation that ran out of time. */
|
|
69
|
+
export const NAV_TIMED_OUT = 'navigation timed out';
|
|
70
|
+
export function cleanNavError(err, seed) {
|
|
71
|
+
const rawMsg = err instanceof Error ? err.message : String(err);
|
|
72
|
+
const msg = scrubSeedFromError(rawMsg, seed);
|
|
73
|
+
// Strip ANSI color codes (ESC[…m) Playwright emits — built via fromCharCode to keep the
|
|
74
|
+
// control character out of a regex literal (no-control-regex).
|
|
75
|
+
const ansi = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g');
|
|
76
|
+
const firstLine = (msg.split('\n')[0] ?? msg).replace(ansi, '');
|
|
77
|
+
const netCode = /net::[A-Z_]+/.exec(firstLine);
|
|
78
|
+
if (netCode !== null)
|
|
79
|
+
return netCode[0];
|
|
80
|
+
if (/timeout/i.test(firstLine))
|
|
81
|
+
return NAV_TIMED_OUT;
|
|
82
|
+
return firstLine
|
|
83
|
+
.replace(/^page\.goto:\s*/, '')
|
|
84
|
+
.replace(/\s+at\s+https?:\/\/\S+.*$/, '')
|
|
85
|
+
.trim()
|
|
86
|
+
.slice(0, 100);
|
|
87
|
+
}
|
|
88
|
+
/** Chromium's certificate failures: `net::ERR_CERT_AUTHORITY_INVALID`, `ERR_CERT_DATE_INVALID`, … */
|
|
89
|
+
const CERT_ERROR = /^net::ERR_CERT_/;
|
|
90
|
+
/** What a lease whose navigation hit a certificate error tells the caller. */
|
|
91
|
+
export const NAV_CERT_REFUSED = 'the browser refused its TLS certificate, which a self-signed or mkcert dev certificate gets. ' +
|
|
92
|
+
'If it is your dev server, acquire again with ignoreHTTPSErrors: true to accept it for this lease';
|
|
93
|
+
/** The question a failed lease navigation asks, when nothing says the app is up. */
|
|
94
|
+
export const NAV_FAILED_QUESTION = 'is the app running there?';
|
|
95
|
+
/** What a lease navigation that ran out of time tells the caller to do. */
|
|
96
|
+
export const NAV_TIMEOUT_ADVICE = 'If the app is running, a dev server compiling a route for the first time can take longer than ' +
|
|
97
|
+
'that: retry the acquire. If it is not running, start it first.';
|
|
98
|
+
/** Lead of the timeout sentence, before the budget ("within 30 s", or "in time" when unknown). */
|
|
99
|
+
const NAV_TIMEOUT_LEAD = 'the page did not finish loading';
|
|
100
|
+
const NAV_TIMEOUT_UNKNOWN_BUDGET = 'in time';
|
|
101
|
+
/** Playwright's own wording for a navigation that ran out of time, with the budget it used. */
|
|
102
|
+
const PLAYWRIGHT_TIMEOUT = /Timeout (\d+)ms exceeded/;
|
|
103
|
+
/**
|
|
104
|
+
* The sentence for a lease whose first navigation failed.
|
|
105
|
+
*
|
|
106
|
+
* A timeout and a refusal are different stories and get different sentences. A refusal
|
|
107
|
+
* (`net::ERR_CONNECTION_REFUSED` and the like) means nothing is serving there, so asking whether the
|
|
108
|
+
* app is running is the right question. A timeout proves less — only that the page was not ready in
|
|
109
|
+
* time — and its most common cause is a dev server compiling a route for the first time, which
|
|
110
|
+
* routinely outlasts the navigation budget. Asking "is the app running?" there sends the agent
|
|
111
|
+
* hunting for a dev server that is up instead of retrying, so the timeout sentence names both
|
|
112
|
+
* cases and leads with the retry.
|
|
113
|
+
*/
|
|
114
|
+
export function navFailureMessage(url, err, seed) {
|
|
115
|
+
const reason = cleanNavError(err, seed);
|
|
116
|
+
// A certificate the browser refused is not an app that is down: the server answered, with a cert
|
|
117
|
+
// no CA here vouches for (a self-signed or mkcert dev certificate). Asking "is the app running?"
|
|
118
|
+
// sent the caller to restart a dev server that was fine (#1255).
|
|
119
|
+
if (CERT_ERROR.test(reason))
|
|
120
|
+
return `could not open ${url} — ${NAV_CERT_REFUSED} (${reason})`;
|
|
121
|
+
if (NAV_TIMED_OUT !== reason)
|
|
122
|
+
return `could not open ${url} — ${NAV_FAILED_QUESTION} (${reason})`;
|
|
123
|
+
const rawMsg = err instanceof Error ? err.message : String(err);
|
|
124
|
+
const budgetMs = PLAYWRIGHT_TIMEOUT.exec(rawMsg)?.[1];
|
|
125
|
+
const within = budgetMs === undefined
|
|
126
|
+
? NAV_TIMEOUT_UNKNOWN_BUDGET
|
|
127
|
+
: `within ${String(Number(budgetMs) / 1000)} s`;
|
|
128
|
+
return `could not open ${url} — ${NAV_TIMEOUT_LEAD} ${within} (${reason}). ${NAV_TIMEOUT_ADVICE}`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Determine if a required seedStorage application precondition failed.
|
|
132
|
+
*
|
|
133
|
+
* Checks strong signals:
|
|
134
|
+
* 1. HTTP 401/403 status on the initial navigation.
|
|
135
|
+
* 2. Cross-origin redirect when localStorage or sessionStorage was requested (skipped by origin-scoping).
|
|
136
|
+
* 3. Clear redirect to an authentication/login endpoint when the requested URL was not a login page.
|
|
137
|
+
*
|
|
138
|
+
* Normal app redirects (e.g. / → /dashboard) are valid and return undefined.
|
|
139
|
+
*/
|
|
140
|
+
export function evaluateSeedPrecondition(requestedUrl, actualUrl, seed, navStatus) {
|
|
141
|
+
if (401 === navStatus || 403 === navStatus) {
|
|
142
|
+
return `HTTP ${navStatus} returned on initial seeded navigation to ${requestedUrl}`;
|
|
143
|
+
}
|
|
144
|
+
if (actualUrl === undefined || '' === actualUrl.trim())
|
|
145
|
+
return undefined;
|
|
146
|
+
let reqParsed;
|
|
147
|
+
let actParsed;
|
|
148
|
+
try {
|
|
149
|
+
reqParsed = new URL(requestedUrl);
|
|
150
|
+
actParsed = new URL(actualUrl);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
// Cross-origin redirect when local or session storage was requested
|
|
156
|
+
const hasStorage = (undefined !== seed.local && 0 < Object.keys(seed.local).length) ||
|
|
157
|
+
(undefined !== seed.session && 0 < Object.keys(seed.session).length);
|
|
158
|
+
if (hasStorage && reqParsed.origin !== actParsed.origin) {
|
|
159
|
+
return `seeded storage precondition not established: cross-origin redirect from ${reqParsed.origin} to ${actParsed.origin} skipped origin-scoped storage injection`;
|
|
160
|
+
}
|
|
161
|
+
// Clear redirect to an authentication/login endpoint when the requested URL was not a login page
|
|
162
|
+
const isAuthPath = (pathname) => /(?:^|\/)(?:login|signin|sign-in|auth\/login|auth\/signin|session\/new)(?:$|\/)/i.test(pathname);
|
|
163
|
+
if (!isAuthPath(reqParsed.pathname) && isAuthPath(actParsed.pathname)) {
|
|
164
|
+
return `seeded authentication precondition not established: redirected from ${reqParsed.pathname} to login page (${actParsed.pathname})`;
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
@@ -14,34 +14,15 @@ import { type StorageFixturePort } from '../../portal/input/storage-fixture.js';
|
|
|
14
14
|
import { type NetworkMutationPort } from '../../portal/input/network-mutation.js';
|
|
15
15
|
import type { Perturbation } from '@reticlehq/core';
|
|
16
16
|
import { type SeedStorage } from '@reticlehq/core';
|
|
17
|
-
import
|
|
17
|
+
import { HudVisibility } from '@reticlehq/core';
|
|
18
|
+
import { type ToolDef, type ToolDeps } from './tool-kit.js';
|
|
19
|
+
import type { BrowserPool } from '../../portal/pool/browser-pool.js';
|
|
18
20
|
/**
|
|
19
21
|
* Append Reticle identity params (__reticle_session, optional __reticle_project) to a URL so the app's own SDK
|
|
20
22
|
* adopts them on connect. Pure; falls back to plain concatenation if the URL can't be parsed.
|
|
21
23
|
*/
|
|
22
|
-
export declare function appendReticleParams(url: string, session: string, projectId?: string): string;
|
|
23
|
-
|
|
24
|
-
* Scrub known secret shapes and raw seedStorage values (cookies, localStorage, sessionStorage)
|
|
25
|
-
* from an error string before it reaches daemon logs, metrics, or MCP error responses.
|
|
26
|
-
*/
|
|
27
|
-
export declare function scrubSeedFromError(text: string, seed?: unknown): string;
|
|
28
|
-
/**
|
|
29
|
-
* Turn a raw navigation failure (Playwright's `page.goto: net::ERR_… at <url>\nCall log:…`, often
|
|
30
|
-
* with ANSI codes) into a short, clean reason — so the agent/user sees "is the app running?" instead
|
|
31
|
-
* of an internals-leaking wall of text.
|
|
32
|
-
*/
|
|
33
|
-
export declare function cleanNavError(err: unknown, seed?: SeedStorage): string;
|
|
34
|
-
/**
|
|
35
|
-
* Determine if a required seedStorage application precondition failed.
|
|
36
|
-
*
|
|
37
|
-
* Checks strong signals:
|
|
38
|
-
* 1. HTTP 401/403 status on the initial navigation.
|
|
39
|
-
* 2. Cross-origin redirect when localStorage or sessionStorage was requested (skipped by origin-scoping).
|
|
40
|
-
* 3. Clear redirect to an authentication/login endpoint when the requested URL was not a login page.
|
|
41
|
-
*
|
|
42
|
-
* Normal app redirects (e.g. / → /dashboard) are valid and return undefined.
|
|
43
|
-
*/
|
|
44
|
-
export declare function evaluateSeedPrecondition(requestedUrl: string, actualUrl: string | undefined, seed: SeedStorage, navStatus?: number): string | undefined;
|
|
24
|
+
export declare function appendReticleParams(url: string, session: string, projectId?: string, hud?: HudVisibility): string;
|
|
25
|
+
export { cleanNavError, evaluateSeedPrecondition, scrubSeedFromError } from './lease-seed.js';
|
|
45
26
|
/**
|
|
46
27
|
* The session a lease's tab actually registered as, or undefined while nothing has.
|
|
47
28
|
*
|
|
@@ -132,6 +113,14 @@ export declare function connectOrInject(lease: {
|
|
|
132
113
|
}>;
|
|
133
114
|
export declare function hasOriginLock(origin: string): boolean;
|
|
134
115
|
export declare const LEASE_ACQUIRE_TOOL: ToolDef;
|
|
116
|
+
/**
|
|
117
|
+
* Release one lease and everything that hangs off it. Returns how many leases are still held.
|
|
118
|
+
*
|
|
119
|
+
* Shared with `reticle_session { action: "end" }`: an ended session that kept its lease stayed
|
|
120
|
+
* connected until the reaper took it, and every id-less call from the next agent was refused as
|
|
121
|
+
* ambiguous in the meantime.
|
|
122
|
+
*/
|
|
123
|
+
export declare function releaseLease(deps: ToolDeps, pool: BrowserPool, sessionId: string): Promise<number>;
|
|
135
124
|
export declare const LEASE_TOOLS: ToolDef[];
|
|
136
125
|
/**
|
|
137
126
|
* The state a suite should boot its flows from: whatever the agent is already sitting in.
|