@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
package/docs/tools/assert.mdx
CHANGED
|
@@ -6,14 +6,14 @@ icon: gavel
|
|
|
6
6
|
|
|
7
7
|
`reticle_assert` evaluates a predicate against what the app actually did and returns a verdict: `verified` plus `pass`, evidence when it holds, and `expected` versus `observed` when it does not. Reach for it when you want a verdict on something you did not just cause, or on several actions at once.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Verdicts come from [`reticle_act_and_wait`](/tools/act-and-wait), `reticle_assert`, `reticle_act { steps }` when a step declares `expect`, and `reticle_verify` (`change`/`flows`). Everything else moves or reads the app and proves nothing. Only `verified: "yes"` is a pass: `unknown` means Reticle could not tell, and `no-fault` means nothing was declared to prove. `reticle_assert` takes the same predicate grammar as `until` and evaluates it against what already happened.
|
|
10
10
|
|
|
11
11
|
## A real failure
|
|
12
12
|
|
|
13
|
-
Failures are more instructive than passes, so here is one. I asserted
|
|
13
|
+
Failures are more instructive than passes, so here is one. I asserted that signing in lands on `/dashboard`, after a click that did not navigate. The page was still on `/login`:
|
|
14
14
|
|
|
15
15
|
```json
|
|
16
|
-
{ "predicate": { "kind": "route", "pathname": "/" } }
|
|
16
|
+
{ "predicate": { "kind": "route", "pathname": "/dashboard" } }
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
```json
|
|
@@ -22,10 +22,10 @@ Failures are more instructive than passes, so here is one. I asserted a route ch
|
|
|
22
22
|
"verifiedReason": "assertion_failed",
|
|
23
23
|
"because": "the declared consequence did not hold",
|
|
24
24
|
"pass": false,
|
|
25
|
-
"failureReason": "no route change
|
|
26
|
-
"observed": "no route change in the window",
|
|
27
|
-
"expected": "
|
|
28
|
-
"assertion": "route.
|
|
25
|
+
"failureReason": "current route (no route change in the window) '/login', expected '/dashboard'",
|
|
26
|
+
"observed": "current route (no route change in the window) '/login'",
|
|
27
|
+
"expected": "route '/dashboard'",
|
|
28
|
+
"assertion": "route.pathname",
|
|
29
29
|
"source": "src/components/Login.tsx:81",
|
|
30
30
|
"buffer": {
|
|
31
31
|
"held": 536,
|
|
@@ -40,12 +40,12 @@ Failures are more instructive than passes, so here is one. I asserted a route ch
|
|
|
40
40
|
`pathname` is what the published schema declares, so it is the one to write.
|
|
41
41
|
</Note>
|
|
42
42
|
|
|
43
|
-
<
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
</
|
|
43
|
+
<Note>
|
|
44
|
+
A `route` predicate is decided by the last route change in the window. When there was none, it
|
|
45
|
+
reads the session's current URL instead, and `observed` says so ("current route (no route change
|
|
46
|
+
in the window)"). So asserting the route you are already on passes; on its own it does not prove
|
|
47
|
+
that anything navigated. Check `evidence.decidedBy` on a pass to see which of the two decided it.
|
|
48
|
+
</Note>
|
|
49
49
|
|
|
50
50
|
Note also `expected` and `observed` side by side. A verdict that says only "failed" makes you go digging; this one tells you what it wanted, what it saw, and where in your source the relevant element lives.
|
|
51
51
|
|
|
@@ -98,11 +98,12 @@ A presence-only predicate passes and tells you not to trust it much:
|
|
|
98
98
|
|
|
99
99
|
## Arguments
|
|
100
100
|
|
|
101
|
-
| Argument
|
|
102
|
-
|
|
|
101
|
+
| Argument | What it does |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| `action` | `now` (the default) evaluates against the window that already exists; `wait` waits for it to hold |
|
|
103
104
|
| `predicate` (or `until`) | `{ kind, ...fields }`. See the [predicate reference](/predicates) |
|
|
104
|
-
| `timeout_ms`
|
|
105
|
-
| `since`
|
|
105
|
+
| `timeout_ms` | `now`: if above zero, wait this long before failing (default `0`, capped at `55000`). `wait`: default `4000`, up to `600000`, resumed with `resume_ms` past one call's limit |
|
|
106
|
+
| `since` | Cursor from a prior act. Scope to events after that action |
|
|
106
107
|
|
|
107
108
|
## Scope it with `since`
|
|
108
109
|
|
package/docs/tools/console.mdx
CHANGED
|
@@ -11,7 +11,7 @@ icon: terminal
|
|
|
11
11
|
`allowedTools` allowlist or an MCP permission rule naming it refuses before Reticle is asked.
|
|
12
12
|
</Warning>
|
|
13
13
|
|
|
14
|
-
`
|
|
14
|
+
`reticle_observe { action: "console" }` returns the app's console log, filtered by level, and tells you whether an empty result is a real reading or a missing one. Reach for it as the fast triage read after something goes wrong, and assert `{ "kind": "console", "absent": true }` when you want a clean console to be part of the pass.
|
|
15
15
|
|
|
16
16
|
```json
|
|
17
17
|
{ "limit": 3 }
|
|
@@ -44,12 +44,12 @@ Read both fields together. `observed: true` with a non-zero `dropped` count mean
|
|
|
44
44
|
|
|
45
45
|
## Arguments
|
|
46
46
|
|
|
47
|
-
| Argument | What it does
|
|
48
|
-
| ----------------- |
|
|
49
|
-
| `level` | `log` · `warn` · `error` · `info`
|
|
50
|
-
| `limit` | Most recent N. Older matches are dropped and counted |
|
|
51
|
-
| `actionId` | Only lines attributed to one action
|
|
52
|
-
| `since` / `until` | Cursors from a prior act
|
|
47
|
+
| Argument | What it does |
|
|
48
|
+
| ----------------- | ------------------------------------------------------------------ |
|
|
49
|
+
| `level` | `log` · `warn` · `error` · `info` |
|
|
50
|
+
| `limit` | Most recent N (default 200). Older matches are dropped and counted |
|
|
51
|
+
| `actionId` | Only lines attributed to one action |
|
|
52
|
+
| `since` / `until` | Cursors from a prior act |
|
|
53
53
|
|
|
54
54
|
## The check worth making by default
|
|
55
55
|
|
|
@@ -63,8 +63,8 @@ That fails if the click succeeds _and_ logs an error, which is exactly the case
|
|
|
63
63
|
|
|
64
64
|
<Tip>
|
|
65
65
|
`level: "error"` is the fast triage read. If it comes back empty with `observed: true`, stop
|
|
66
|
-
looking at the console and go look at [`
|
|
67
|
-
[`
|
|
66
|
+
looking at the console and go look at [`reticle_observe { action: "network" }`](/tools/network) or
|
|
67
|
+
[`reticle_look { action: "state" }`](/tools/state) instead. That is a real capture from this fixture:
|
|
68
68
|
`{"logs":[],"observed":true,"cost":{"bytes":337,"tokens":85}}`, eighty-five tokens to rule out a
|
|
69
69
|
whole class of bug.
|
|
70
70
|
</Tip>
|
package/docs/tools/inspect.mdx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
2
|
+
title: 'reticle_look { action: "element" }'
|
|
3
3
|
description: Everything about one element. Accessibility properties, geometry, computed styles, design tokens, React component stack, and the exact source file and line.
|
|
4
4
|
icon: crosshairs
|
|
5
5
|
---
|
|
@@ -11,12 +11,12 @@ icon: crosshairs
|
|
|
11
11
|
`allowedTools` allowlist or an MCP permission rule naming it refuses before Reticle is asked.
|
|
12
12
|
</Warning>
|
|
13
13
|
|
|
14
|
-
`
|
|
14
|
+
`reticle_look { action: "find" }` finds elements. `reticle_look { action: "element" }` tells you everything about one of them. It is the tool that turns a finding into an edit, because it ends with a file and a line number.
|
|
15
15
|
|
|
16
16
|
## Example
|
|
17
17
|
|
|
18
18
|
```json
|
|
19
|
-
{ "ref": "e120" }
|
|
19
|
+
{ "action": "element", "ref": "e120" }
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
Real response:
|
|
@@ -40,7 +40,16 @@ Real response:
|
|
|
40
40
|
"display": "flex",
|
|
41
41
|
"visibility": "visible"
|
|
42
42
|
},
|
|
43
|
-
"scroll": {
|
|
43
|
+
"scroll": {
|
|
44
|
+
"scrollTop": 0,
|
|
45
|
+
"scrollHeight": 36,
|
|
46
|
+
"clientHeight": 36,
|
|
47
|
+
"overflowY": "visible",
|
|
48
|
+
"scrollLeft": 0,
|
|
49
|
+
"scrollWidth": 219,
|
|
50
|
+
"clientWidth": 219,
|
|
51
|
+
"overflowX": "visible"
|
|
52
|
+
},
|
|
44
53
|
"theme": {
|
|
45
54
|
"colorToken": "--muted",
|
|
46
55
|
"backgroundToken": null,
|
|
@@ -65,7 +74,7 @@ Real response:
|
|
|
65
74
|
|
|
66
75
|
Read `colorTokens` rather than `colorToken` when it matters. Design systems routinely give several tokens the same value, and the singular field is `null` whenever more than one matches, because naming an arbitrary winner is worse than admitting the palette cannot tell them apart. `themeScope` says which theme the reading was taken under, so two inspects either side of a theme toggle are comparable instead of quietly contradictory. It is `null`, as above, when the element sits under no scoped theme at all.
|
|
67
76
|
|
|
68
|
-
**`scroll`** reports the element's own scroll box. `scrollHeight` above `clientHeight` means there is content below the fold inside this element, which is a different problem from the page being scrolled wrong.
|
|
77
|
+
**`scroll`** reports the element's own scroll box on both axes. `scrollHeight` above `clientHeight` means there is content below the fold inside this element, which is a different problem from the page being scrolled wrong. `scrollWidth` above `clientWidth` means the content did not fit across, which is how a label clipped by `text-overflow: ellipsis` shows up.
|
|
69
78
|
|
|
70
79
|
**`occluded`** is the difference between "visible" and "actually clickable". An element can be present, visible and enabled while sitting under a modal overlay. `states` will look perfect; `occluded: true` is the honest answer.
|
|
71
80
|
|
|
@@ -90,6 +99,6 @@ Read `colorTokens` rather than `colorToken` when it matters. Design systems rout
|
|
|
90
99
|
</CardGroup>
|
|
91
100
|
|
|
92
101
|
<Note>
|
|
93
|
-
`
|
|
94
|
-
probably want [`
|
|
102
|
+
`{ action: "element" }` returns one element in detail. If you find yourself inspecting six things in a row, you
|
|
103
|
+
probably want [`reticle_look { action: "find" }`](/tools/query) with `attrs` instead, one call, six answers.
|
|
95
104
|
</Note>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: reticle_look
|
|
3
|
+
description: Read the page without changing it. The rendered tree, a locator resolved to refs, one element in full, or the app's store.
|
|
4
|
+
icon: magnifying-glass
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
`reticle_look` reads the page and changes nothing. Pick what to read with `action`. With no `action`, it reads the page.
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{ "action": "find", "by": "testid", "value": "submit" }
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| `action` | What it returns | Unmerged name | Details |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `page` (default) | The semantic snapshot of what is rendered, with a `ref` for each control. `mode: "interactive"` keeps only what you can act on; `diff: true` returns only what changed since the last look | `reticle_snapshot` | [Snapshot](/tools/snapshot) |
|
|
16
|
+
| `find` | A locator (testid, role, text, label, component) resolved to refs you can act on. `limit` caps the list; `count_only` returns just the count | `reticle_query` | [Query](/tools/query) |
|
|
17
|
+
| `element` | Everything about one `ref`: geometry, scroll, design tokens, and on React the source `file:line` | `reticle_inspect` | [Inspect](/tools/inspect) |
|
|
18
|
+
| `state` | A registered store's value. Scope it with `store`, `path` and `depth` | `reticle_state` | [State](/tools/state) |
|
|
19
|
+
|
|
20
|
+
A `ref` like `e7` stays valid until its element leaves the DOM, so you do not re-look between actions.
|
|
21
|
+
|
|
22
|
+
`reticle_look` never produces a verdict. Verdicts come from `reticle_act_and_wait`, `reticle_assert`, `reticle_act { steps }` when a step declares `expect`, and `reticle_verify` (`change`/`flows`). Everything else moves or reads the app and proves nothing. Only `verified: "yes"` is a pass: `unknown` means Reticle could not tell, and `no-fault` means nothing was declared to prove.
|
|
23
|
+
|
|
24
|
+
With `RETICLE_ADVERTISE_ALL_TOOLS=1`, the daemon advertises the four unmerged names instead of `reticle_look`.
|
package/docs/tools/navigate.mdx
CHANGED
|
@@ -24,7 +24,7 @@ Real response, with the throttled-tab `session` and `warning` fields trimmed off
|
|
|
24
24
|
|
|
25
25
|
## `confirmed: true` when the page comes back in time
|
|
26
26
|
|
|
27
|
-
The daemon waits up to `timeout_ms` (default 5000) for the SDK to re-announce itself. When it does, you are told so and can act immediately without a `
|
|
27
|
+
The daemon waits up to `timeout_ms` (default 5000) for the SDK to re-announce itself. When it does, you are told so, with the `sessionId` it came back as, and can act immediately without a `reticle_session { action: "list" }` round trip. This is a real reload response:
|
|
28
28
|
|
|
29
29
|
```json
|
|
30
30
|
{
|
|
@@ -42,6 +42,8 @@ A full navigation destroys the document the SDK was living in. Reticle cannot re
|
|
|
42
42
|
|
|
43
43
|
Most tools would return `ok: true` and let you assume arrival. When the page then fails to load, or loads without instrumentation, you get a confusing cascade of "element not found" errors several calls later, with nothing pointing at the real cause.
|
|
44
44
|
|
|
45
|
+
`confirmed: false` with a `landedOn` URL is a different case: the page arrived, but the app sent it somewhere else, such as a login or route-guard redirect. `landedOn` says where the browser actually is.
|
|
46
|
+
|
|
45
47
|
`waitedMs` says which of two things you are looking at. Reticle stopped waiting at the budget it had, or the page never came back. The first is fixed by asking for more: a single-page app reattaching under HMR has been measured at 30–60s, which no default should wait for on every call, but which the caller who knows the app can grant.
|
|
46
48
|
|
|
47
49
|
```json
|
|
@@ -57,10 +59,10 @@ Most tools would return `ok: true` and let you assume arrival. When the page the
|
|
|
57
59
|
then confirm a session reconnected:
|
|
58
60
|
|
|
59
61
|
```json
|
|
60
|
-
{}
|
|
62
|
+
{ "action": "list" }
|
|
61
63
|
```
|
|
62
64
|
|
|
63
|
-
with [`
|
|
65
|
+
with [`reticle_session`](/tools/sessions), and only then look at the page. If no session appears at the new URL, the page did not load or is not instrumented. And you know that immediately rather than three calls later.
|
|
64
66
|
|
|
65
67
|
<Warning>
|
|
66
68
|
**Refs do not survive a navigation.** A new document means new refs. Across one afternoon on the
|
package/docs/tools/network.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: reticle_network
|
|
3
|
-
description: A filtered log of every request the app made, with
|
|
3
|
+
description: A filtered log of every request the app made, with status, timing, bodies when capture is on, automatic credential redaction, and an honest note when evidence has expired.
|
|
4
4
|
icon: satellite-dish
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ icon: satellite-dish
|
|
|
11
11
|
`allowedTools` allowlist or an MCP permission rule naming it refuses before Reticle is asked.
|
|
12
12
|
</Warning>
|
|
13
13
|
|
|
14
|
-
`reticle_network` returns a filtered log of every request the app made, with
|
|
14
|
+
`reticle_network` returns a filtered log of every request the app made, with status, timing, and automatic credential redaction. Request and response bodies are recorded only when the app connects with `captureNetworkBodies: true` (off by default); a failed response keeps its body either way. Reach for it to answer "did that call actually fire, and what came back?", which is the thing a screenshot fundamentally cannot show.
|
|
15
15
|
|
|
16
16
|
## Example
|
|
17
17
|
|
package/docs/tools/observe.mdx
CHANGED
|
@@ -6,7 +6,7 @@ icon: timeline
|
|
|
6
6
|
|
|
7
7
|
`reticle_observe` returns the full timeline of everything the app did in a window: DOM, network, routing, console, animations and signals, in order, with a summary on top. Reach for it when you do not yet know what went wrong. It reads and diagnoses; it does not produce a verdict.
|
|
8
8
|
|
|
9
|
-
It is the wide-angle lens. Where `
|
|
9
|
+
It is the wide-angle lens. Where `reticle_observe { action: "network" }` and `reticle_observe { action: "console" }` answer one question each, the default `events` action returns everything.
|
|
10
10
|
|
|
11
11
|
## Example
|
|
12
12
|
|
|
@@ -75,15 +75,15 @@ The `summary` block is the cheap answer. `consoleErrors: 0` and `network: 0` tel
|
|
|
75
75
|
|
|
76
76
|
| Argument | What it does |
|
|
77
77
|
| ----------------- | ------------------------------------------------------------------ |
|
|
78
|
-
| `window_ms` | How far back to look
|
|
78
|
+
| `window_ms` | How far back to look. Default 2000, ignored when `since` is given |
|
|
79
79
|
| `since` / `until` | Cursors from a prior act. The precise way to scope |
|
|
80
80
|
| `actionId` | Only events attributed to one action: "what did that click cause?" |
|
|
81
81
|
| `filters` | Event-type allowlist. The cheapest way to shrink a big timeline |
|
|
82
|
-
| `max_events` | Cap the timeline to the most recent N
|
|
82
|
+
| `max_events` | Cap the timeline to the most recent N (default 200) |
|
|
83
83
|
|
|
84
84
|
## Scope by cursor, not by clock
|
|
85
85
|
|
|
86
|
-
Every `reticle_act` response includes a `since` cursor. Passing it to `observe` scopes the timeline to exactly what followed that action, with no guessing about how many milliseconds to look back:
|
|
86
|
+
Every `reticle_act` and `reticle_act_and_wait` response includes a `since` cursor. Passing it to `observe` scopes the timeline to exactly what followed that action, with no guessing about how many milliseconds to look back:
|
|
87
87
|
|
|
88
88
|
```json
|
|
89
89
|
{ "since": 30224, "filters": ["signal", "net"] }
|
|
@@ -127,7 +127,7 @@ When two channels disagree, `observe` says so without being asked:
|
|
|
127
127
|
|
|
128
128
|
Punctuation in that block is lightly normalised for the docs; the field names and values are verbatim.
|
|
129
129
|
|
|
130
|
-
A successful write that moved nothing on the client is the exact shape of a false green.
|
|
130
|
+
A successful write that moved nothing on the client is the exact shape of a false green. `filters` and `max_events` shape what the call returns, never what it concludes: contradictions are computed over the whole window, so a narrow filter cannot manufacture one.
|
|
131
131
|
|
|
132
132
|
## When to use it
|
|
133
133
|
|
|
@@ -138,7 +138,7 @@ Use `observe` when you do not yet know what went wrong. Use the narrow tools whe
|
|
|
138
138
|
"Something broke after that click, show me everything that happened."
|
|
139
139
|
</Card>
|
|
140
140
|
<Card title="Wasteful use" icon="circle-xmark">
|
|
141
|
-
"Did a POST fire?" [`
|
|
141
|
+
"Did a POST fire?" [`reticle_observe { action: "network" }`](/tools/network) answers that far more cheaply.
|
|
142
142
|
</Card>
|
|
143
143
|
</CardGroup>
|
|
144
144
|
|
package/docs/tools/overview.mdx
CHANGED
|
@@ -5,7 +5,7 @@ description: The tools your agent sees every turn, the many more it can reach on
|
|
|
5
5
|
icon: wrench
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Your agent is shown **ten** tools by default: `reticle_navigate`, `reticle_look`, `reticle_act`, `reticle_act_and_wait`, `reticle_observe`, `reticle_assert`, `reticle_session`, `reticle_verify`, `reticle_tools` and `reticle_run`. Verdicts come from `reticle_act_and_wait`, `reticle_assert`, `reticle_act { steps }` when a step declares `expect`, and `reticle_verify` (`change`/`flows`). Everything else moves or reads the app and proves nothing. Only `verified: "yes"` is a pass: `unknown` means Reticle could not tell, and `no-fault` means nothing was declared to prove.
|
|
9
9
|
|
|
10
10
|
Most of the rest were not removed. They were **merged**. `reticle_snapshot` is `reticle_look { action: "page" }`; `reticle_console` is `reticle_observe { action: "console" }`. One tool, one action argument, same work. Calling a retired name returns the call that replaced it, and `reticle_tools` prints the whole mapping.
|
|
11
11
|
|
|
@@ -13,61 +13,60 @@ That is not a limitation, it's the design. MCP re-sends every advertised tool de
|
|
|
13
13
|
|
|
14
14
|
A wider surface costs tokens on every message. Less obviously, it makes the model wander: give it fifty ways to look at a page and it will try several before doing anything useful.
|
|
15
15
|
|
|
16
|
-
What the verify loop does **not** advertise are the specialised tools: `reticle_screenshot`, `reticle_visual_diff`, `reticle_storage`, `reticle_network_mock`, `reticle_clock`. Each is one `reticle_run { tool, args }` hop away
|
|
16
|
+
What the verify loop does **not** advertise are the specialised tools: `reticle_screenshot`, `reticle_visual_diff`, `reticle_storage`, `reticle_network_mock`, `reticle_clock`. Each is one `reticle_run { tool, args }` hop away.
|
|
17
|
+
|
|
18
|
+
A daemon started with `RETICLE_ADVERTISE_ALL_TOOLS=1` advertises 30 tools outright, and it **switches to the unmerged spelling**: `reticle_snapshot`, `reticle_query`, `reticle_inspect` and `reticle_state` replace `reticle_look`; `reticle_network` and `reticle_console` replace `reticle_observe { action }`; `reticle_wait_for` replaces `reticle_assert { action: "wait" }`; `reticle_sessions` and `reticle_feedback` replace `reticle_session` list and feedback; `reticle_act_sequence` replaces `reticle_act { steps }`. Examples in these docs use the default spelling. The counts are asserted by `server/src/surface/tools/surface-sizes.test.ts`.
|
|
17
19
|
|
|
18
20
|
<Note>
|
|
19
|
-
Measured
|
|
20
|
-
surface is **
|
|
21
|
-
`RETICLE_ADVERTISE_ALL_TOOLS
|
|
22
|
-
|
|
23
|
-
every server through one tokenizer in a single pass. Re-measure before quoting any of it; the
|
|
24
|
-
surface grows, and the figures this note replaced were a year out of date and described a surface
|
|
25
|
-
that no longer existed.
|
|
21
|
+
Measured with [`bench/harness/schema-tax.mjs`](/token-efficiency) on 2026-10-08: the default
|
|
22
|
+
surface is **10 tools, about 4,650 schema tokens**, against **30 tools, about 35,000 tokens** with
|
|
23
|
+
`RETICLE_ADVERTISE_ALL_TOOLS=1`, charged on every message. Re-measure before quoting; the surface
|
|
24
|
+
grows.
|
|
26
25
|
</Note>
|
|
27
26
|
|
|
28
|
-
## The
|
|
29
|
-
|
|
30
|
-
Grouped by the job they do in the verify loop.
|
|
27
|
+
## The ten, by job
|
|
31
28
|
|
|
32
29
|
<CardGroup cols={2}>
|
|
33
30
|
<Card title="Look" icon="magnifying-glass">
|
|
34
|
-
`
|
|
35
|
-
`reticle_capabilities`
|
|
31
|
+
`reticle_look { action: "page" | "find" | "element" | "state" }`
|
|
36
32
|
</Card>
|
|
37
33
|
<Card title="Act" icon="hand-pointer">
|
|
38
|
-
`reticle_act` · `
|
|
34
|
+
`reticle_act` · `reticle_act { steps }` · `reticle_act_and_wait` · `reticle_navigate`
|
|
39
35
|
</Card>
|
|
40
36
|
<Card title="Observe" icon="satellite-dish">
|
|
41
|
-
`reticle_observe` · `
|
|
37
|
+
`reticle_observe` · `{ action: "network" }` · `{ action: "console" }`
|
|
38
|
+
</Card>
|
|
39
|
+
<Card title="Prove" icon="circle-check">
|
|
40
|
+
`reticle_act_and_wait` · `reticle_assert` · `reticle_verify`
|
|
42
41
|
</Card>
|
|
43
|
-
<Card title="
|
|
44
|
-
`
|
|
42
|
+
<Card title="Discover" icon="compass">
|
|
43
|
+
`reticle_tools` · `reticle_run`
|
|
45
44
|
</Card>
|
|
46
45
|
<Card title="Session & feedback" icon="comment">
|
|
47
|
-
`reticle_session
|
|
46
|
+
`reticle_session { action: "list" | "feedback" | "yield" | … }`
|
|
48
47
|
</Card>
|
|
49
48
|
</CardGroup>
|
|
50
49
|
|
|
51
50
|
<Warning>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
Verdicts come from `reticle_act_and_wait`, `reticle_assert`, `reticle_act {steps}` when a step
|
|
52
|
+
declares `expect`, and `reticle_verify` (`change`/`flows`). Everything else moves or reads the app
|
|
53
|
+
and proves nothing. Only `verified: "yes"` is a pass: `unknown` means Reticle could not tell, and
|
|
54
|
+
`no-fault` means nothing was declared to prove. A drive that ends without a verdict has no result,
|
|
55
|
+
however many tools it used.
|
|
55
56
|
</Warning>
|
|
56
57
|
|
|
57
58
|
## Why these and not others
|
|
58
59
|
|
|
59
60
|
Each one earned its slot, and a couple are there because of measured mistakes.
|
|
60
61
|
|
|
61
|
-
`reticle_inspect` maps a DOM node to `src/components/Sidebar.tsx:41`. Finding a bug is half the job. Knowing which file to open is the half that makes an agent useful.
|
|
62
|
+
`reticle_look { action: "element" }` (unmerged name `reticle_inspect`) maps a DOM node to `src/components/Sidebar.tsx:41`. Finding a bug is half the job. Knowing which file to open is the half that makes an agent useful.
|
|
62
63
|
|
|
63
64
|
It used to be reachable only through `reticle_run`, which meant an agent had to already know it existed to use it.
|
|
64
65
|
|
|
65
|
-
`reticle_act_sequence` batches a multi-step interaction into one round trip. It was also reachable only through `reticle_run`, and the consequence is a login form driven one call at a time, over and over.
|
|
66
|
+
`reticle_act { steps }` (unmerged name `reticle_act_sequence`) batches a multi-step interaction into one round trip. It was also reachable only through `reticle_run`, and the consequence is a login form driven one call at a time, over and over.
|
|
66
67
|
|
|
67
68
|
Those repeats were not retries. The calls succeeded and got repeated, because the batching tool was invisible. A tool an agent must already know about is a tool that never gets called.
|
|
68
69
|
|
|
69
|
-
Direct `reticle_network` and `reticle_console` stay advertised even though `reticle_observe` can filter for both, because two obvious tools beat one clever tool with a filter grammar.
|
|
70
|
-
|
|
71
70
|
<Tip>
|
|
72
71
|
Trimming further has a floor. An eight-tool cut measurably dropped real-agent accuracy, because
|
|
73
72
|
the model loses scaffolding and wanders on harder flows. That reading is old enough to be dated
|
|
@@ -75,7 +74,7 @@ Direct `reticle_network` and `reticle_console` stay advertised even though `reti
|
|
|
75
74
|
good; empty is not.
|
|
76
75
|
</Tip>
|
|
77
76
|
|
|
78
|
-
## Reaching
|
|
77
|
+
## Reaching every other tool
|
|
79
78
|
|
|
80
79
|
```json
|
|
81
80
|
{ "tool": "reticle_verify", "args": { "action": "flows" } }
|
|
@@ -85,15 +84,15 @@ Direct `reticle_network` and `reticle_console` stay advertised even though `reti
|
|
|
85
84
|
|
|
86
85
|
Notable residents of the cold tail: flow recording and replay, visual diffing and screenshots, network mocking, viewport pinning, coverage, autonomous crawling, and the human-in-the-loop session controls.
|
|
87
86
|
|
|
88
|
-
##
|
|
87
|
+
## Read responses carry their cost
|
|
89
88
|
|
|
90
|
-
|
|
89
|
+
The read tools (`reticle_look` page and find, `reticle_observe` network and console) tell you what each answer cost, because a verification tool that quietly eats your context window is not saving you anything:
|
|
91
90
|
|
|
92
91
|
```json
|
|
93
92
|
"cost": { "bytes": 944, "tokens": 236 }
|
|
94
93
|
```
|
|
95
94
|
|
|
96
|
-
That is a real `
|
|
95
|
+
That is from a real `reticle_look { action: "find" }` response: seven buttons found, with source pointers, for 236 tokens.
|
|
97
96
|
|
|
98
97
|
## Every response tells you when not to trust it
|
|
99
98
|
|
|
@@ -119,6 +118,8 @@ A tool that says "no requests found" when it actually means "I lost the ones you
|
|
|
119
118
|
|
|
120
119
|
## Reference
|
|
121
120
|
|
|
121
|
+
These pages are named for the unmerged tools. Each one gives the default spelling (`reticle_look { action: "page" }` for `reticle_snapshot`, and so on).
|
|
122
|
+
|
|
122
123
|
### Look
|
|
123
124
|
|
|
124
125
|
| Tool | Answers |
|
|
@@ -154,10 +155,10 @@ A tool that says "no requests found" when it actually means "I lost the ones you
|
|
|
154
155
|
| --- | --- |
|
|
155
156
|
| [`reticle_assert`](/tools/assert) | Did the named consequence hold? **Produces a verdict** |
|
|
156
157
|
| [`reticle_tools`](/tools/tools-and-run) | What else is available, and what are its arguments? |
|
|
157
|
-
| [`reticle_run`](/tools/tools-and-run) | Invoke any
|
|
158
|
+
| [`reticle_run`](/tools/tools-and-run) | Invoke any other registered tool by name |
|
|
158
159
|
| [`reticle_session`](/tools/session-and-feedback) | Hand control back to the human |
|
|
159
|
-
| [`
|
|
160
|
+
| [`reticle_session { action: "feedback" }`](/tools/session-and-feedback) | Tell the maintainers Reticle got something wrong (`reticle_feedback` is its unmerged name, not advertised by default) |
|
|
160
161
|
|
|
161
162
|
<Card title="The complete reference" icon="book" href="/usage">
|
|
162
|
-
Every tool, every argument, including the
|
|
163
|
+
Every tool, every argument, including the cold tail.
|
|
163
164
|
</Card>
|
package/docs/tools/query.mdx
CHANGED
|
@@ -11,7 +11,7 @@ icon: magnifying-glass
|
|
|
11
11
|
`allowedTools` allowlist or an MCP permission rule naming it refuses before Reticle is asked.
|
|
12
12
|
</Warning>
|
|
13
13
|
|
|
14
|
-
`
|
|
14
|
+
`reticle_look { action: "find" }` answers "where is the thing I mean?" without dumping the whole page into your context window. It queries the way a testing library does. By role, label, text, testid. So your agent binds to meaning rather than to DOM structure that a refactor will move.
|
|
15
15
|
|
|
16
16
|
## Example
|
|
17
17
|
|
|
@@ -63,7 +63,7 @@ Seven buttons, each with a `ref` to act on and a source file to open, for 236 to
|
|
|
63
63
|
| `attrs` | Attribute NAMES to project per match, e.g. `['href']` to inventory links. The values come back in each match's `attrs` map. It does not filter, so `name=value` is refused |
|
|
64
64
|
| `self` | Return the `scope` element itself instead of searching inside it |
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
`role`, `text`, `label`, `placeholder`, `testid` and `alt` also have a predicate spelling, so `{ "role": "button" }` works as shorthand for `{ "by": "role", "value": "button" }`.
|
|
67
67
|
|
|
68
68
|
## Use `count_only` when you only need a number
|
|
69
69
|
|
|
@@ -119,13 +119,13 @@ The testid existed, on another route. `hint.route` says where you actually are,
|
|
|
119
119
|
|
|
120
120
|
## Reading the response
|
|
121
121
|
|
|
122
|
-
`ref` is the handle for every other
|
|
122
|
+
`ref` is the handle for every other call: `reticle_act`, `reticle_look { action: "element" }`, `reticle_look { action: "state" }`. It stays valid until the element leaves the DOM, so you do not need to re-snapshot between actions on the same element.
|
|
123
123
|
|
|
124
|
-
`source` appears when
|
|
124
|
+
`source` appears when the app is built in dev with the Reticle build plugin; production builds omit it. Note that both sidebar buttons above report `Sidebar.tsx:41`, and so do the three trimmed out of the example. That is the line where the component renders all five in a loop, which is exactly the line you want to edit.
|
|
125
125
|
|
|
126
126
|
`truncated: true` with `total: 7` means `limit` cut the list, not that Reticle ran out of room. Neither field is emitted when nothing was cut, so their absence is itself the signal that you are looking at every match.
|
|
127
127
|
|
|
128
|
-
`states` distinguishes `present` from `visible` from `enabled`. An element can be all three and still be covered by a modal. [`
|
|
128
|
+
`states` distinguishes `present` from `visible` from `enabled`. An element can be all three and still be covered by a modal. [`reticle_look { action: "element" }`](/tools/inspect) reports `occluded` for that.
|
|
129
129
|
|
|
130
130
|
<Tip>
|
|
131
131
|
Query by `testid` when you can. Role and text queries survive refactors well; testids survive
|
|
@@ -10,15 +10,18 @@ icon: comments
|
|
|
10
10
|
|
|
11
11
|
The presenter panel in your app shows a live transcript of what the agent is doing. It reads "live" until the agent says otherwise. So an agent that wanders off without a word leaves a panel claiming work is in progress forever.
|
|
12
12
|
|
|
13
|
-
| Action
|
|
14
|
-
|
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
13
|
+
| Action | What it does |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| `list` | Which tabs are connected, and whether they can be driven. Your first call. An empty list carries a `why` naming the cause |
|
|
16
|
+
| `feedback` | Tell the maintainers Reticle got something wrong. Takes the fields described under [reticle_feedback](#reticle-feedback) below |
|
|
17
|
+
| `yield` | Hand control back between turns. `mode: "waiting"` or `"ask"`. Revivable |
|
|
18
|
+
| `end` | The task is done. Frees the session; revives on the next action |
|
|
19
|
+
| `tune` | Adjust session behaviour: `idleEndMs`, the idle-end window, or `hud`: `hidden`, `shown`, `removed` (until reload), or a corner (`top-left`, `top-right`, `bottom-left`, `bottom-right`) when the HUD covers a control you must test |
|
|
20
|
+
| `resume` | Clear a pause the human applied |
|
|
21
|
+
| `messages` | Drain the human-to-agent inbox |
|
|
22
|
+
| `review` | List, and with `resolve`, retire the mistakes a human pinned to elements |
|
|
23
|
+
| `narrate` | State your intent on the presenter panel, with an optional `level` |
|
|
24
|
+
| `account` | Where the user stands: signed in or not, whether the project reports to the dashboard, plan and credits, whether the Harness is on, and the one thing to do next. Read it before telling the user anything about credits or the plan |
|
|
22
25
|
|
|
23
26
|
```json
|
|
24
27
|
{ "action": "yield", "mode": "waiting" }
|
|
@@ -40,7 +43,7 @@ And each lease carries the rule in the payload itself:
|
|
|
40
43
|
|
|
41
44
|
```json
|
|
42
45
|
"session_lease": {
|
|
43
|
-
"IMPORTANT": "When you stop driving, call reticle_session {action:\"yield\", mode:\"waiting\"|\"ask\"}. The panel reads \"live\" until you do."
|
|
46
|
+
"IMPORTANT": "When you stop driving, call reticle_session {action:\"yield\", mode:\"waiting\"|\"ask\"}. The panel reads \"live\" until you do. {action:\"end\"} only when the task is done: it is final."
|
|
44
47
|
}
|
|
45
48
|
```
|
|
46
49
|
|
|
@@ -52,6 +55,10 @@ And each lease carries the rule in the payload itself:
|
|
|
52
55
|
|
|
53
56
|
## reticle_feedback
|
|
54
57
|
|
|
58
|
+
<Note>
|
|
59
|
+
`reticle_feedback` is not advertised by default. Call `reticle_session { action: "feedback", kind, text }`: the same fields, routed on `action`. The old name answers with the new call.
|
|
60
|
+
</Note>
|
|
61
|
+
|
|
55
62
|
Reticle is built for agents, which creates an unusual problem: the primary user's experience vanishes the moment its context does. If an agent hits a gap and works around it silently, nobody ever learns the gap existed.
|
|
56
63
|
|
|
57
64
|
```json
|
|
@@ -78,13 +85,15 @@ The `rating` is secondary to that text on purpose. A score produced because some
|
|
|
78
85
|
|
|
79
86
|
### It will tell you when it cannot send
|
|
80
87
|
|
|
81
|
-
Feedback
|
|
88
|
+
Feedback sends in the background so you are not kept waiting, but it does not pretend to succeed: `sent` stays `false` until delivery is confirmed, `accepted` says the report was validated and queued, and a send that later fails is reported on a later tool result. A report that is not accepted says why:
|
|
82
89
|
|
|
83
90
|
```json
|
|
84
91
|
{
|
|
85
92
|
"sent": false,
|
|
86
93
|
"accepted": false,
|
|
87
|
-
"reason": "this is a Reticle source checkout, where telemetry is disabled by design, so
|
|
94
|
+
"reason": "this is a Reticle source checkout, where telemetry is disabled by design, so this could not be sent (it has been written to disk instead, and nothing was lost).",
|
|
95
|
+
"savedTo": "<project>/.reticle/feedback/<timestamp>-bug.md",
|
|
96
|
+
"fileWith": "gh issue create --repo reticlehq/reticle --title \"Reticle feedback: bug\" --body-file \"<project>/.reticle/feedback/<timestamp>-bug.md\"",
|
|
88
97
|
"redacted": [],
|
|
89
98
|
"context": {
|
|
90
99
|
"stack": "react",
|
|
@@ -100,7 +109,7 @@ Feedback is not fire-and-forget, and it does not pretend to succeed:
|
|
|
100
109
|
|
|
101
110
|
`redacted` names anything stripped from your report before it left the machine, so you can see what was and was not sent. `context` is the environment attached automatically, which is why a useful report costs one call and no boilerplate.
|
|
102
111
|
|
|
103
|
-
|
|
112
|
+
When the report cannot be sent it is written to disk: `savedTo` is the file and `fileWith` is a ready-to-run command that turns it into an issue. The instruction in `note` is the important part: when the report cannot be delivered, say so in your answer to the human rather than letting the finding evaporate.
|
|
104
113
|
|
|
105
114
|
### From the shell, when the tools are unreachable
|
|
106
115
|
|
package/docs/tools/sessions.mdx
CHANGED
|
@@ -51,7 +51,7 @@ A backgrounded tab adds a `recommendation` telling you what to do about it, and
|
|
|
51
51
|
"outages": 3,
|
|
52
52
|
"lastOutage": { "startedMs": 1786818483776, "durationMs": 967 }
|
|
53
53
|
},
|
|
54
|
-
"recommendation": "tab hidden
|
|
54
|
+
"recommendation": "tab is not hidden but has not reported health recently ... Timing-sensitive work (animations, debounces, gestures) is what degrades: pass `refuseWhenThrottled: true` to refuse rather than act over events that may not land. Lease a separate context only if a drive here actually fails; ..."
|
|
55
55
|
}
|
|
56
56
|
```
|
|
57
57
|
|
|
@@ -62,27 +62,27 @@ An empty list is not silent. It comes back with a `why` that separates the two c
|
|
|
62
62
|
```json
|
|
63
63
|
{
|
|
64
64
|
"sessions": [],
|
|
65
|
-
"why": "no browser session connected. Two things to weigh, and neither of them is proof. (1) Nothing is listening on the ports Reticle scans, so the dev server may not be running
|
|
65
|
+
"why": "no browser session connected. Two things to weigh, and neither of them is proof. (1) Nothing is listening on the ports Reticle scans, so the dev server may not be running: START IT YOURSELF, in the background, using the command in `next_action`, and tell the human in one line that it is running. (2) There is no `.reticle.json` in the directory this daemon is running in, which is the file `reticle init` writes, so the app may carry no Reticle SDK. Check the app's OWN directory before re-running it. ..."
|
|
66
66
|
}
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
That string is trimmed. The full text also lists the exact ports it scanned and warns that in a monorepo the daemon often runs at the root while the app lives in a subdirectory
|
|
69
|
+
That string is trimmed. The full text also lists the exact ports it scanned, says a server on any other port is invisible to the scan (ask for the app's URL and open it with `reticle open <url>`), and warns that in a monorepo the daemon often runs at the root while the app lives in a subdirectory.
|
|
70
70
|
|
|
71
71
|
## The fields that decide whether driving will work
|
|
72
72
|
|
|
73
73
|
| Field | Why it matters |
|
|
74
74
|
| --- | --- |
|
|
75
|
-
| `throttled` | The
|
|
75
|
+
| `throttled` | The tab is hidden, or has not reported health recently. A hidden tab clamps timers and animation frames, so an action can land on a page that never advances; a throttled tab that is not hidden is usually just quiet and often still driveable |
|
|
76
76
|
| `hidden` / `focused` | Why it's throttled, and what to do about it |
|
|
77
|
-
| `hasCapabilities` | Whether the app registered testids, signals and stores. `false` means [`
|
|
77
|
+
| `hasCapabilities` | Whether the app registered testids, signals and stores. `false` means [`reticle_look { action: "state" }`](/tools/state) has nothing to read |
|
|
78
78
|
| `adapters` | `["react"]` means you get component names and source pointers |
|
|
79
79
|
| `realInputAvailable` | `true` when native CDP input is available, under `reticle drive` |
|
|
80
80
|
| `outages` | How often the connection has dropped. Non-zero is worth investigating |
|
|
81
81
|
|
|
82
82
|
<Warning>
|
|
83
|
-
`
|
|
84
|
-
dedicated context. It is not your app being broken. It is
|
|
85
|
-
nobody is looking at.
|
|
83
|
+
A hidden tab (`hidden: true`, which also sets `throttled`) is the most common cause of "the click
|
|
84
|
+
did nothing". Focus the tab, or drive a dedicated context. It is not your app being broken. It is
|
|
85
|
+
the browser saving battery on a tab nobody is looking at.
|
|
86
86
|
</Warning>
|
|
87
87
|
|
|
88
88
|
## Confirm after navigating
|