@reticlehq/server 3.7.0 → 3.8.1
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/SKILL.md +59 -68
- package/bin/reticle.js +9 -2
- package/dist/command/cli/adhoc-suite.js +1 -1
- package/dist/command/cli/adhoc-verdict.d.ts +12 -0
- package/dist/command/cli/adhoc-verdict.js +62 -4
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +5 -1
- package/dist/command/cli/auth/cloud-session.d.ts +11 -19
- package/dist/command/cli/auth/cloud-session.js +23 -0
- package/dist/command/cli/auth/device-flow.d.ts +3 -37
- package/dist/command/cli/cli-doctor.js +66 -21
- package/dist/command/cli/cli-flow-commands.js +53 -11
- package/dist/command/cli/cli-kill.d.ts +8 -0
- package/dist/command/cli/cli-kill.js +43 -3
- package/dist/command/cli/cli-parse-feedback.d.ts +4 -0
- package/dist/command/cli/cli-parse-feedback.js +13 -1
- package/dist/command/cli/cli-parse-grammar.d.ts +1 -2
- package/dist/command/cli/cli-parse-grammar.js +1 -6
- package/dist/command/cli/cli-parse-serve.d.ts +24 -0
- package/dist/command/cli/cli-parse-serve.js +124 -0
- package/dist/command/cli/cli-parse.d.ts +12 -11
- package/dist/command/cli/cli-parse.js +100 -123
- package/dist/command/cli/cli-usage.d.ts +0 -11
- package/dist/command/cli/cli-usage.js +43 -16
- package/dist/command/cli/cli-verify.d.ts +1 -1
- package/dist/command/cli/cli-verify.js +29 -14
- package/dist/command/cli/cloud-cli.js +27 -9
- package/dist/command/cli/cloud-kit.js +3 -3
- package/dist/command/cli/cloud-link.d.ts +1 -20
- package/dist/command/cli/cloud-link.js +2 -0
- package/dist/command/cli/cloud-login.d.ts +6 -2
- package/dist/command/cli/cloud-login.js +13 -41
- package/dist/command/cli/config/checkout.d.ts +10 -0
- package/dist/command/cli/config/checkout.js +78 -0
- package/dist/command/cli/doctor/doctor-agent-link.d.ts +23 -0
- package/dist/command/cli/doctor/doctor-agent-link.js +28 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +1 -7
- package/dist/command/cli/doctor/doctor-rows.d.ts +4 -0
- package/dist/command/cli/doctor/doctor-rows.js +4 -0
- package/dist/command/cli/drive/drive-attach.d.ts +5 -0
- package/dist/command/cli/drive/drive-attach.js +21 -1
- package/dist/command/cli/hook/codex-transcript.d.ts +20 -0
- package/dist/command/cli/hook/codex-transcript.js +224 -0
- package/dist/command/cli/hook/episode-structure.d.ts +24 -0
- package/dist/command/cli/hook/episode-structure.js +138 -0
- package/dist/command/cli/hook/hook-command.d.ts +9 -0
- package/dist/command/cli/hook/hook-command.js +211 -0
- package/dist/command/cli/hook/hook-fast.d.ts +31 -0
- package/dist/command/cli/hook/hook-fast.js +136 -0
- package/dist/command/cli/hook/prompt-hook.d.ts +30 -0
- package/dist/command/cli/hook/prompt-hook.js +199 -0
- package/dist/command/cli/hook/tool-hook.d.ts +21 -0
- package/dist/command/cli/hook/tool-hook.js +259 -0
- package/dist/command/cli/launch/cli-launch.d.ts +2 -0
- package/dist/command/cli/launch/cli-launch.js +22 -2
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +28 -2
- package/dist/command/cli/mcp-command.d.ts +9 -0
- package/dist/command/cli/mcp-command.js +127 -41
- package/dist/command/cli/open-navigate.d.ts +43 -0
- package/dist/command/cli/open-navigate.js +85 -0
- package/dist/command/cli/ports/port-holder.d.ts +16 -4
- package/dist/command/cli/ports/port-holder.js +58 -12
- package/dist/command/cli/ports/resolve/cli-port.js +18 -2
- package/dist/command/cli/project-name.d.ts +1 -7
- package/dist/command/cli/project-name.js +1 -0
- package/dist/command/cli/report-command.d.ts +8 -2
- package/dist/command/cli/report-command.js +95 -18
- package/dist/command/cli/status-fields.d.ts +9 -2
- package/dist/command/cli/status-fields.js +148 -4
- package/dist/command/cli/try-command.d.ts +3 -4
- package/dist/command/cli/try-command.js +6 -11
- package/dist/command/cli/verify-results.d.ts +4 -1
- package/dist/command/cli/verify-results.js +3 -1
- package/dist/command/cli.d.ts +1 -7
- package/dist/command/cli.js +79 -160
- package/dist/command/daemon/daemon-resilience.d.ts +6 -1
- package/dist/command/daemon/daemon-resilience.js +31 -18
- package/dist/command/daemon/daemon.d.ts +11 -0
- package/dist/command/daemon/daemon.js +70 -2
- package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +2 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.js +13 -2
- package/dist/command/daemon/wake-decision.js +4 -2
- package/dist/command/daemon/win32-escape.d.ts +32 -0
- package/dist/command/daemon/win32-escape.js +119 -0
- package/dist/command/setup/agent-configs.d.ts +9 -0
- package/dist/command/setup/agent-configs.js +9 -0
- package/dist/command/setup/auto-approve.d.ts +10 -3
- package/dist/command/setup/auto-approve.js +51 -3
- package/dist/command/setup/bringup/dev-server-files.d.ts +1 -9
- package/dist/command/setup/bringup/dev-server-wait.js +5 -1
- package/dist/command/setup/bringup/ensure-daemon.js +4 -7
- package/dist/command/setup/init/init-host.js +6 -0
- package/dist/command/setup/init/init-port.js +5 -4
- package/dist/command/setup/init/init-runtime.js +7 -1
- package/dist/command/setup/node-effects.d.ts +8 -0
- package/dist/command/setup/node-effects.js +36 -4
- package/dist/command/setup/probe/dev-port.d.ts +26 -0
- package/dist/command/setup/probe/dev-port.js +117 -0
- package/dist/command/setup/probe/page-probe.d.ts +1 -1
- package/dist/command/setup/probe/page-probe.js +11 -3
- package/dist/command/setup/remaining-steps.d.ts +0 -7
- package/dist/command/setup/remaining-steps.js +3 -2
- package/dist/command/setup/run-setup.d.ts +11 -0
- package/dist/command/setup/run-setup.js +33 -5
- package/dist/command/setup/setup-command.d.ts +2 -0
- package/dist/command/setup/setup-command.js +22 -4
- package/dist/command/update/updater.d.ts +1 -6
- package/dist/command/update/updater.js +4 -5
- package/dist/command/update/version-seen.d.ts +24 -0
- package/dist/command/update/version-seen.js +65 -0
- package/dist/command/version/peer-announce.d.ts +9 -1
- package/dist/command/version/peer-announce.js +25 -2
- package/dist/command/version/sdk-fix.d.ts +5 -6
- package/dist/command/version/sdk-fix.js +17 -32
- package/dist/command/version/version-skew.d.ts +16 -1
- package/dist/command/version/version-skew.js +84 -10
- package/dist/features/crawl/crawl-tools.js +2 -2
- package/dist/features/crawl/crawl.js +2 -0
- package/dist/features/exhaust/ledger.d.ts +15 -96
- package/dist/features/exhaust/ledger.js +3 -3
- package/dist/features/harness/drive-runs.d.ts +28 -4
- package/dist/features/harness/drive-runs.js +99 -7
- package/dist/features/harness/drivers.d.ts +1 -1
- package/dist/features/harness/drivers.js +1 -1
- package/dist/features/harness/harness.d.ts +5 -0
- package/dist/features/harness/harness.js +24 -12
- package/dist/features/harness/platform/platform-drives.d.ts +7 -1
- package/dist/features/harness/platform/platform-drives.js +12 -7
- package/dist/features/harness/platform/refusal.d.ts +1 -1
- package/dist/features/harness/platform/refusal.js +4 -4
- package/dist/features/harness/platform/remote-drive.js +70 -28
- package/dist/features/harness/platform/server-driver.js +22 -1
- package/dist/features/harness/platform-config.d.ts +1 -10
- package/dist/features/harness/platform-config.js +0 -20
- package/dist/features/license/license.d.ts +2 -14
- package/dist/features/visual/step-shots.d.ts +33 -1
- package/dist/features/visual/step-shots.js +155 -1
- package/dist/features/visual/visual-tools.js +12 -4
- package/dist/hooks/coding-agents.d.ts +6 -0
- package/dist/hooks/coding-agents.js +24 -3
- package/dist/hooks/episode-stamp.d.ts +32 -0
- package/dist/hooks/episode-stamp.js +61 -0
- package/dist/hooks/hook-commands.js +19 -9
- package/dist/index.d.ts +5 -1
- package/dist/index.js +66 -24
- package/dist/judgement/app-graph/journal-steps.d.ts +8 -0
- package/dist/judgement/app-graph/journal-steps.js +92 -0
- package/dist/judgement/capsule/capsule-store.d.ts +2 -39
- package/dist/judgement/domain/domain-model.js +1 -10
- package/dist/judgement/domain/domain-tools.js +4 -2
- package/dist/judgement/runs/artifact/run-store.d.ts +28 -8
- package/dist/judgement/runs/artifact/run-store.js +153 -28
- package/dist/judgement/runs/default-run-id.d.ts +3 -1
- package/dist/judgement/runs/default-run-id.js +15 -3
- package/dist/judgement/runs/drive-run.d.ts +3 -3
- package/dist/judgement/runs/drive-run.js +11 -7
- package/dist/judgement/runs/run-ledger.d.ts +21 -0
- package/dist/judgement/runs/run-ledger.js +143 -0
- package/dist/judgement/runs/runner-port.d.ts +1 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +4 -3
- package/dist/judgement/runs/verification-sync.js +27 -5
- package/dist/language/flows/affected-tools.js +2 -1
- package/dist/language/flows/annotate-notes/annotate.js +8 -3
- package/dist/language/flows/annotate-tools.js +1 -1
- package/dist/language/flows/change/affected.d.ts +8 -0
- package/dist/language/flows/change/affected.js +20 -7
- package/dist/language/flows/decision.js +19 -4
- package/dist/language/flows/fields/flow-secret-field.d.ts +9 -0
- package/dist/language/flows/fields/flow-secret-field.js +67 -5
- package/dist/language/flows/flow-anchor.d.ts +5 -0
- package/dist/language/flows/flow-anchor.js +4 -0
- package/dist/language/flows/flow-cross-step.d.ts +7 -1
- package/dist/language/flows/flow-cross-step.js +9 -0
- package/dist/language/flows/flow-expect-grammar.js +15 -10
- package/dist/language/flows/flow-intent.js +6 -1
- package/dist/language/flows/flow-journey.d.ts +8 -0
- package/dist/language/flows/flow-journey.js +13 -0
- package/dist/language/flows/flow-lease.d.ts +27 -0
- package/dist/language/flows/flow-lease.js +59 -0
- package/dist/language/flows/flow-replay-run.d.ts +1 -87
- package/dist/language/flows/flow-replay-run.js +111 -310
- package/dist/language/flows/flow-replay.js +21 -19
- package/dist/language/flows/flow-replayable.d.ts +38 -0
- package/dist/language/flows/flow-replayable.js +179 -0
- package/dist/language/flows/flow-start-path.d.ts +108 -0
- package/dist/language/flows/flow-start-path.js +313 -0
- package/dist/language/flows/flow-step-runners.d.ts +23 -2
- package/dist/language/flows/flow-step-runners.js +191 -32
- package/dist/language/flows/flow-store-for-session.d.ts +8 -1
- package/dist/language/flows/flow-store-for-session.js +6 -0
- package/dist/language/flows/flow-tools.d.ts +2 -23
- package/dist/language/flows/flow-tools.js +63 -113
- package/dist/language/flows/flows.d.ts +4 -6
- package/dist/language/flows/flows.js +90 -15
- package/dist/language/flows/heal-run.d.ts +10 -4
- package/dist/language/flows/heal-run.js +26 -9
- package/dist/language/flows/recording/flake.d.ts +3 -27
- package/dist/language/flows/recording/flake.js +1 -1
- package/dist/language/flows/recording/recording-backtrack.js +1 -4
- package/dist/language/flows/recording/tape/recordings.d.ts +11 -1
- package/dist/language/flows/recording/tape/recordings.js +9 -3
- package/dist/language/flows/replay.d.ts +25 -5
- package/dist/language/flows/replay.js +83 -16
- package/dist/language/flows/stores/assertion-tiers-store.js +1 -1
- package/dist/language/flows/suite/coverage.d.ts +9 -0
- package/dist/language/flows/suite/coverage.js +12 -1
- package/dist/language/flows/suite-selection.d.ts +25 -0
- package/dist/language/flows/suite-selection.js +41 -9
- package/dist/machine/git-tracks.d.ts +6 -0
- package/dist/machine/git-tracks.js +36 -0
- package/dist/memory/cloud/background-sync.d.ts +25 -0
- package/dist/memory/cloud/background-sync.js +79 -0
- package/dist/memory/cloud/cloud-config.d.ts +12 -1
- package/dist/memory/cloud/cloud-config.js +39 -13
- package/dist/memory/cloud/cloud-sync.d.ts +3 -24
- package/dist/memory/cloud/cloud-sync.js +5 -2
- package/dist/memory/cloud/harness-config.d.ts +0 -7
- package/dist/memory/cloud/memory-scope.d.ts +19 -0
- package/dist/memory/cloud/memory-scope.js +48 -0
- package/dist/memory/cloud/sync-answer.d.ts +43 -0
- package/dist/memory/cloud/sync-answer.js +42 -0
- package/dist/memory/cloud/sync-cycle.d.ts +40 -10
- package/dist/memory/cloud/sync-cycle.js +97 -144
- package/dist/memory/cloud/sync-daemon.d.ts +50 -3
- package/dist/memory/cloud/sync-daemon.js +473 -83
- package/dist/memory/cloud/sync-describe.d.ts +28 -0
- package/dist/memory/cloud/sync-describe.js +92 -0
- package/dist/memory/cloud/sync-disk.d.ts +9 -1
- package/dist/memory/cloud/sync-disk.js +137 -33
- package/dist/memory/cloud/sync-flow-versions.d.ts +26 -0
- package/dist/memory/cloud/sync-flow-versions.js +42 -0
- package/dist/memory/impact/impact-store.js +32 -15
- package/dist/memory/intent/intent-shard.d.ts +41 -266
- package/dist/memory/intent/intent-tools.js +20 -61
- package/dist/memory/intent/record-request.d.ts +27 -0
- package/dist/memory/intent/record-request.js +88 -0
- package/dist/memory/intent/settled-words.js +9 -1
- package/dist/memory/journal/drive-flow.d.ts +3 -0
- package/dist/memory/journal/drive-flow.js +11 -41
- package/dist/memory/journal/envelope-store.js +1 -1
- package/dist/memory/journal/envelope.d.ts +6 -154
- package/dist/memory/journal/episode-log.d.ts +107 -0
- package/dist/memory/journal/episode-log.js +302 -0
- package/dist/memory/journal/journal-recorder.d.ts +7 -0
- package/dist/memory/journal/journal-recorder.js +22 -9
- package/dist/memory/journal/on-disk/ambient-file.d.ts +1 -7
- package/dist/memory/journal/on-disk/ambient-file.js +1 -1
- package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +24 -3
- package/dist/memory/journal/on-disk/workspace-gitignore.js +38 -7
- package/dist/memory/journal/on-disk/workspace-tiers.js +7 -0
- package/dist/memory/journal/self-observation.js +3 -1
- package/dist/memory/journal/session-end.js +23 -9
- package/dist/memory/journal/session-journal.js +39 -20
- package/dist/memory/project/artifact-root-resolver.d.ts +14 -1
- package/dist/memory/project/artifact-root-resolver.js +68 -23
- package/dist/memory/project/artifact-root.d.ts +17 -3
- package/dist/memory/project/artifact-root.js +47 -9
- package/dist/memory/project/fs/fs-port.d.ts +5 -0
- package/dist/memory/project/fs/fs-port.js +13 -0
- package/dist/memory/project/learned-routes.d.ts +3 -4
- package/dist/memory/project/learned-routes.js +3 -11
- package/dist/memory/project/link-directory.js +5 -2
- package/dist/memory/project/root-claims.d.ts +3 -1
- package/dist/memory/project/root-claims.js +41 -7
- package/dist/memory/project/session-root.d.ts +1 -1
- package/dist/memory/project/session-root.js +1 -15
- package/dist/memory/project/sync-status.js +5 -6
- package/dist/memory/recall/memory-tools.js +2 -2
- package/dist/memory/recall/platform-memory.d.ts +3 -1
- package/dist/memory/recall/platform-memory.js +9 -1
- package/dist/memory/recall/project-memory.js +15 -19
- package/dist/portal/bridge/auth-failure-reason.d.ts +13 -0
- package/dist/portal/bridge/auth-failure-reason.js +19 -0
- package/dist/portal/bridge/bridge.d.ts +19 -4
- package/dist/portal/bridge/bridge.js +150 -177
- package/dist/portal/bridge/harness-request.d.ts +15 -0
- package/dist/portal/bridge/harness-request.js +19 -0
- package/dist/portal/bridge/origin/origin-follow.d.ts +46 -0
- package/dist/portal/bridge/origin/origin-follow.js +110 -0
- package/dist/portal/bridge/pairing-token.d.ts +6 -0
- package/dist/portal/bridge/pairing-token.js +47 -16
- package/dist/portal/bridge/protocol-skew.d.ts +27 -2
- package/dist/portal/bridge/protocol-skew.js +66 -2
- package/dist/portal/bridge/session-nonces.d.ts +46 -0
- package/dist/portal/bridge/session-nonces.js +72 -0
- package/dist/portal/input/viewport-tools.d.ts +31 -0
- package/dist/portal/input/viewport-tools.js +106 -15
- package/dist/portal/pool/bounded-close.d.ts +23 -0
- package/dist/portal/pool/bounded-close.js +38 -0
- package/dist/portal/pool/browser-pool.d.ts +44 -39
- package/dist/portal/pool/browser-pool.js +247 -95
- package/dist/portal/pool/context-permissions.d.ts +9 -1
- package/dist/portal/pool/context-permissions.js +26 -0
- package/dist/portal/pool/lease-emulation.d.ts +37 -0
- package/dist/portal/pool/lease-emulation.js +29 -0
- package/dist/portal/pool/playwright-launcher.d.ts +6 -0
- package/dist/portal/pool/playwright-launcher.js +74 -7
- package/dist/portal/pool/pool-contract.d.ts +23 -1
- package/dist/portal/pool/pool-lease.d.ts +128 -0
- package/dist/portal/pool/pool-lease.js +49 -0
- package/dist/portal/pool/zero-install.d.ts +8 -1
- package/dist/portal/pool/zero-install.js +24 -2
- package/dist/portal/production/production-activation.d.ts +136 -0
- package/dist/portal/production/production-activation.js +173 -0
- package/dist/portal/production/production-drive.d.ts +52 -0
- package/dist/portal/production/production-drive.js +301 -0
- package/dist/portal/production/production-hello.d.ts +23 -0
- package/dist/portal/production/production-hello.js +23 -0
- package/dist/portal/realm/web-realm.js +42 -15
- package/dist/portal/session/control-envelope.d.ts +1 -1
- package/dist/portal/session/dev-server/served-document.d.ts +0 -5
- package/dist/portal/session/dev-server/served-document.js +6 -8
- package/dist/portal/session/facts/handshake-facts.d.ts +8 -1
- package/dist/portal/session/first-run-wiring.d.ts +3 -36
- package/dist/portal/session/first-run-wiring.js +10 -103
- package/dist/portal/session/live-control-tools.js +61 -19
- package/dist/portal/session/no-session-next-action.d.ts +11 -0
- package/dist/portal/session/no-session-next-action.js +40 -15
- package/dist/portal/session/no-session-watch.d.ts +7 -0
- package/dist/portal/session/no-session-watch.js +67 -23
- package/dist/portal/session/output-budget.d.ts +10 -0
- package/dist/portal/session/output-budget.js +16 -0
- package/dist/portal/session/presence/session-lease.d.ts +2 -0
- package/dist/portal/session/presence/session-lease.js +8 -0
- package/dist/portal/session/recorded-gaps.d.ts +15 -11
- package/dist/portal/session/recorded-gaps.js +39 -18
- package/dist/portal/session/serving-directory.d.ts +24 -2
- package/dist/portal/session/serving-directory.js +93 -5
- package/dist/portal/session/session-info.d.ts +26 -0
- package/dist/portal/session/session-info.js +20 -0
- package/dist/portal/session/session-manager.d.ts +35 -3
- package/dist/portal/session/session-manager.js +69 -14
- package/dist/portal/session/session-successor.js +1 -9
- package/dist/portal/session/session-tools.js +22 -4
- package/dist/portal/session/session.d.ts +10 -10
- package/dist/portal/session/session.js +37 -29
- package/dist/portal/session/zero-install-first-call.d.ts +7 -2
- package/dist/portal/session/zero-install-first-call.js +43 -20
- package/dist/start-wiring.d.ts +2 -2
- package/dist/start-wiring.js +17 -3
- package/dist/status-payload.d.ts +11 -1
- package/dist/status-payload.js +7 -1
- package/dist/surface/agent-presence-grace.d.ts +11 -0
- package/dist/surface/agent-presence-grace.js +34 -0
- package/dist/surface/http-server.d.ts +12 -1
- package/dist/surface/http-server.js +64 -15
- package/dist/surface/mcp/faults/mcp-outage.d.ts +12 -2
- package/dist/surface/mcp/faults/mcp-outage.js +19 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +17 -74
- package/dist/surface/mcp/mcp-proxy.js +194 -267
- package/dist/surface/mcp/mcp.d.ts +20 -3
- package/dist/surface/mcp/mcp.js +88 -25
- package/dist/surface/mcp/proxy/drive-calls.d.ts +44 -0
- package/dist/surface/mcp/proxy/drive-calls.js +114 -5
- package/dist/surface/mcp/proxy/proxy-boot.d.ts +11 -0
- package/dist/surface/mcp/proxy/proxy-boot.js +1 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +6 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +14 -1
- package/dist/surface/mcp/proxy/proxy-handshake.d.ts +34 -2
- package/dist/surface/mcp/proxy/proxy-handshake.js +76 -8
- package/dist/surface/mcp/server-instructions.js +35 -16
- package/dist/surface/mcp/shared-params.d.ts +8 -0
- package/dist/surface/mcp/shared-params.js +15 -1
- package/dist/surface/mcp/sse-frame-parser.d.ts +11 -0
- package/dist/surface/mcp/sse-frame-parser.js +18 -0
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +13 -0
- package/dist/surface/mcp/tool-catalog-cache.d.ts +2 -0
- package/dist/surface/mcp/tool-catalog-cache.js +14 -4
- package/dist/surface/tools/account-tool.d.ts +4 -3
- package/dist/surface/tools/account-tool.js +20 -31
- package/dist/surface/tools/act/act-danger.d.ts +2 -0
- package/dist/surface/tools/act/act-danger.js +41 -14
- package/dist/surface/tools/act/act-observation.d.ts +11 -0
- package/dist/surface/tools/act/act-observation.js +33 -0
- package/dist/surface/tools/act/act-preflight.js +10 -3
- package/dist/surface/tools/act/act-sequence-retry.js +2 -1
- package/dist/surface/tools/act/act-target.js +19 -5
- package/dist/surface/tools/act/durable.js +1 -1
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +9 -7
- package/dist/surface/tools/act/navigation/navigate-arrival.js +11 -14
- package/dist/surface/tools/act/unsettled-find.d.ts +36 -0
- package/dist/surface/tools/act/unsettled-find.js +71 -0
- package/dist/surface/tools/act-sequence-tool.js +53 -24
- package/dist/surface/tools/act-tools.d.ts +2 -3
- package/dist/surface/tools/act-tools.js +49 -47
- package/dist/surface/tools/agent/compact-envelope.d.ts +2 -2
- package/dist/surface/tools/agent/for-the-agent.js +41 -3
- package/dist/surface/tools/assert/assert-grade.js +8 -3
- package/dist/surface/tools/assert/assert-verdict.js +4 -2
- package/dist/surface/tools/browser-tools.js +7 -4
- package/dist/surface/tools/chat-drives.js +50 -25
- package/dist/surface/tools/coverage-tools.js +1 -1
- package/dist/surface/tools/dynamic-tools.d.ts +8 -0
- package/dist/surface/tools/dynamic-tools.js +89 -34
- package/dist/surface/tools/empty-session-list.d.ts +18 -25
- package/dist/surface/tools/empty-session-list.js +67 -38
- package/dist/surface/tools/error-recovery.d.ts +17 -7
- package/dist/surface/tools/error-recovery.js +53 -20
- package/dist/surface/tools/explore-tools.d.ts +10 -0
- package/dist/surface/tools/explore-tools.js +72 -19
- package/dist/surface/tools/feedback-tools.js +23 -2
- package/dist/surface/tools/gap-novelty.d.ts +6 -0
- package/dist/surface/tools/gap-novelty.js +9 -0
- package/dist/surface/tools/gaps/capability-absences.js +4 -3
- package/dist/surface/tools/harness-explore.d.ts +1 -1
- package/dist/surface/tools/harness-explore.js +6 -4
- package/dist/surface/tools/harness-gate.d.ts +43 -21
- package/dist/surface/tools/harness-gate.js +55 -81
- package/dist/surface/tools/harness-script.d.ts +2 -0
- package/dist/surface/tools/harness-script.js +11 -6
- package/dist/surface/tools/harness-toolset.js +3 -4
- package/dist/surface/tools/invoke-tool.d.ts +0 -8
- package/dist/surface/tools/invoke-tool.js +164 -178
- package/dist/surface/tools/lease-hint.d.ts +9 -0
- package/dist/surface/tools/lease-hint.js +22 -3
- package/dist/surface/tools/lease-permissions.d.ts +1 -1
- package/dist/surface/tools/lease-readiness.d.ts +55 -0
- package/dist/surface/tools/lease-readiness.js +150 -2
- package/dist/surface/tools/lease-tools.d.ts +3 -75
- package/dist/surface/tools/lease-tools.js +124 -188
- package/dist/surface/tools/map-tools.d.ts +20 -0
- package/dist/surface/tools/map-tools.js +145 -0
- package/dist/surface/tools/merge-tools.js +11 -7
- package/dist/surface/tools/next-step.js +6 -3
- package/dist/surface/tools/observe-tools.js +46 -35
- package/dist/surface/tools/platform-moment.d.ts +3 -12
- package/dist/surface/tools/platform-moment.js +12 -24
- package/dist/surface/tools/read/complete-snapshot.d.ts +7 -1
- package/dist/surface/tools/read/complete-snapshot.js +13 -2
- package/dist/surface/tools/read/query-paginate.js +6 -0
- package/dist/surface/tools/read/query-shape.d.ts +9 -0
- package/dist/surface/tools/read/query-shape.js +15 -0
- package/dist/surface/tools/read/snapshot-unmounted-note.d.ts +1 -0
- package/dist/surface/tools/read/snapshot-unmounted-note.js +73 -0
- package/dist/surface/tools/read-tools.js +5 -5
- package/dist/surface/tools/real-input-attempt.d.ts +11 -0
- package/dist/surface/tools/real-input-attempt.js +206 -38
- package/dist/surface/tools/reconcile-tools.js +21 -8
- package/dist/surface/tools/reticle-result.d.ts +3 -0
- package/dist/surface/tools/reticle-result.js +8 -1
- package/dist/surface/tools/run-report.d.ts +22 -0
- package/dist/surface/tools/run-report.js +141 -0
- package/dist/surface/tools/session-ports.d.ts +57 -0
- package/dist/surface/tools/session-ports.js +102 -0
- package/dist/surface/tools/tool-kit.d.ts +58 -4
- package/dist/surface/tools/tool-kit.js +140 -6
- package/dist/surface/tools/tool-surface.d.ts +2 -0
- package/dist/surface/tools/tool-surface.js +45 -0
- package/dist/surface/tools/tools.js +49 -87
- package/dist/telemetry/automation-hint.d.ts +5 -0
- package/dist/telemetry/automation-hint.js +7 -0
- package/dist/telemetry/cli-telemetry.d.ts +22 -0
- package/dist/telemetry/cli-telemetry.js +80 -11
- package/dist/telemetry/daemon-telemetry.d.ts +3 -1
- package/dist/telemetry/daemon-telemetry.js +9 -2
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +8 -3
- package/dist/telemetry/feedback.d.ts +1 -1
- package/dist/telemetry/feedback.js +51 -4
- package/dist/telemetry/harness-run.d.ts +3 -3
- package/dist/telemetry/harness-run.js +18 -7
- package/dist/telemetry/hud-events.d.ts +1 -1
- package/dist/telemetry/hud-metrics.d.ts +6 -3
- package/dist/telemetry/hud-metrics.js +20 -8
- package/dist/telemetry/install-source.js +1 -1
- package/dist/telemetry/mcp-connection.d.ts +1 -1
- package/dist/telemetry/mcp-connection.js +21 -2
- package/dist/telemetry/onboarding-firsts.d.ts +6 -1
- package/dist/telemetry/onboarding-firsts.js +41 -1
- package/dist/telemetry/proxy-telemetry.d.ts +42 -0
- package/dist/telemetry/proxy-telemetry.js +70 -1
- package/dist/telemetry/session-metrics.d.ts +1 -3
- package/dist/telemetry/session-metrics.js +16 -12
- package/dist/telemetry/telemetry.d.ts +9 -1
- package/dist/telemetry/telemetry.js +16 -1
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +7 -1
- package/dist/wire-journal.js +12 -2
- package/docs/README.md +4 -2
- package/docs/actions.mdx +7 -6
- package/docs/adapters.md +2 -1
- package/docs/agent-cheatsheet.md +19 -5
- package/docs/architecture.md +13 -10
- package/docs/autodrive.md +6 -5
- package/docs/benchmarks.md +2 -2
- package/docs/capabilities.mdx +1 -1
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +6 -6
- package/docs/cli/doctor.mdx +3 -1
- package/docs/cli/feedback.mdx +11 -7
- package/docs/cli/gate.mdx +1 -1
- package/docs/cli/help.mdx +1 -1
- package/docs/cli/init.mdx +20 -16
- package/docs/cli/mcp.mdx +5 -2
- package/docs/cli/open.mdx +5 -2
- package/docs/cli/report.mdx +1 -1
- package/docs/cli/restart.mdx +1 -1
- package/docs/cli/rollback.mdx +4 -4
- package/docs/cli/serve.mdx +7 -5
- package/docs/cli/setup.mdx +1 -1
- package/docs/cli/status.mdx +6 -2
- package/docs/cli/stop.mdx +3 -3
- package/docs/cli/telemetry.mdx +5 -1
- package/docs/cli/try.mdx +8 -8
- package/docs/cli/update.mdx +8 -5
- package/docs/cli/verify.mdx +12 -5
- package/docs/cli/version.mdx +1 -1
- package/docs/cli.mdx +10 -6
- package/docs/debugging.md +1 -1
- package/docs/deploy-checks.md +8 -6
- package/docs/desktop.mdx +14 -18
- package/docs/enterprise.md +6 -6
- package/docs/environment.mdx +5 -3
- package/docs/faq.mdx +9 -6
- package/docs/first-drive.md +19 -9
- package/docs/flows.md +3 -4
- package/docs/for-agents.md +1 -1
- package/docs/frameworks.mdx +34 -11
- package/docs/getting-started.md +46 -29
- package/docs/http-transport.md +2 -2
- package/docs/human-control.md +8 -8
- package/docs/index.mdx +2 -2
- package/docs/install-agentic.mdx +18 -19
- package/docs/install-manual.mdx +8 -4
- package/docs/integration-patterns.md +5 -5
- package/docs/multi-agent-testing.md +7 -5
- package/docs/packages/browser.mdx +34 -2
- package/docs/packages/core.mdx +2 -1
- package/docs/packages/electron.mdx +15 -3
- package/docs/packages/eslint-plugin.mdx +1 -1
- package/docs/packages/next.mdx +17 -5
- package/docs/packages/react.mdx +8 -1
- package/docs/packages/server.mdx +3 -3
- package/docs/packages/tauri.mdx +3 -3
- package/docs/packages/vite-plugin.mdx +1 -1
- package/docs/packages.mdx +19 -6
- package/docs/platform-integration.md +12 -4
- package/docs/predicates.mdx +18 -7
- package/docs/production-mode.md +108 -0
- package/docs/prompt-capture.md +99 -0
- package/docs/quickstart.mdx +14 -12
- package/docs/recipes.mdx +9 -8
- package/docs/required-checks.md +3 -2
- package/docs/skill-file.mdx +4 -3
- package/docs/skill-setup.md +2 -2
- package/docs/skill.md +62 -70
- package/docs/state-files.md +1 -0
- package/docs/state-management.mdx +11 -9
- package/docs/system-map.md +14 -13
- package/docs/telemetry.md +32 -24
- package/docs/testing.md +9 -5
- package/docs/tools/act-and-wait.mdx +17 -13
- package/docs/tools/act-sequence.mdx +40 -66
- package/docs/tools/act.mdx +7 -5
- package/docs/tools/assert.mdx +1 -1
- package/docs/tools/look.mdx +1 -1
- package/docs/tools/navigate.mdx +1 -1
- package/docs/tools/network.mdx +13 -11
- package/docs/tools/overview.mdx +3 -3
- package/docs/tools/query.mdx +3 -3
- package/docs/tools/session-and-feedback.mdx +9 -6
- package/docs/tools/sessions.mdx +7 -0
- package/docs/tools/snapshot.mdx +9 -7
- package/docs/tools/tools-and-run.mdx +11 -10
- package/docs/tools/verify.mdx +1 -1
- package/docs/troubleshooting.mdx +21 -9
- package/docs/usage.md +58 -43
- package/docs/use-cases.mdx +2 -2
- package/docs/vs-chrome-devtools-mcp.mdx +5 -5
- package/docs/vs-playwright-mcp.mdx +5 -4
- package/docs/what-is-recorded.md +12 -7
- package/docs/what-is-reticle.mdx +2 -2
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/dev/stale-issue-guard.d.ts +0 -34
- package/dist/command/dev/stale-issue-guard.js +0 -69
package/docs/tools/network.mdx
CHANGED
|
@@ -16,10 +16,10 @@ icon: satellite-dish
|
|
|
16
16
|
## Example
|
|
17
17
|
|
|
18
18
|
```json
|
|
19
|
-
{ "limit": 3 }
|
|
19
|
+
{ "limit": 3, "bodies": true }
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
Real response
|
|
22
|
+
Real response with `bodies: true`, with the second call's `headers` block trimmed off:
|
|
23
23
|
|
|
24
24
|
```json
|
|
25
25
|
{
|
|
@@ -76,15 +76,17 @@ Most tools would return an empty array and let you draw the wrong conclusion. Th
|
|
|
76
76
|
|
|
77
77
|
## Filters
|
|
78
78
|
|
|
79
|
-
| Argument
|
|
80
|
-
|
|
|
81
|
-
| `urlContains`
|
|
82
|
-
| `method`
|
|
83
|
-
| `status`
|
|
84
|
-
| `ok`
|
|
85
|
-
| `limit`
|
|
86
|
-
| `actionId`
|
|
87
|
-
| `since` / `until` | Cursors from a prior act, to scope to a window between two actions
|
|
79
|
+
| Argument | What it does |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| `urlContains` | Substring the URL must contain |
|
|
82
|
+
| `method` | `GET` · `POST` · `PUT` · `DELETE` · `PATCH` |
|
|
83
|
+
| `status` | Exact status code, e.g. `500` |
|
|
84
|
+
| `ok` | `false` keeps only failures. The fastest way to "did anything break?" |
|
|
85
|
+
| `limit` | Most recent N. Older matches are dropped and counted |
|
|
86
|
+
| `actionId` | Only requests attributed to one action: "what did that click request?" |
|
|
87
|
+
| `since` / `until` | Cursors from a prior act, to scope to a window between two actions |
|
|
88
|
+
| `bodies` | Omitted: keep a body only where it can decide a verdict (failures, unscored calls, calls your filter named), and report the rest in `bodiesWithheld`. `true`: every captured body. `false`: no bodies |
|
|
89
|
+
| `assets` | `true` lists the dev server's own successful asset requests. Omitted: they are folded into `assetsFolded` |
|
|
88
90
|
|
|
89
91
|
## Catching a double submit
|
|
90
92
|
|
package/docs/tools/overview.mdx
CHANGED
|
@@ -9,7 +9,7 @@ Your agent is shown **ten** tools by default: `reticle_navigate`, `reticle_look`
|
|
|
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
|
|
|
12
|
-
That is not a limitation
|
|
12
|
+
That is not a limitation. It is the design. MCP re-sends every advertised tool definition to the model on **every single turn**, so the tool list is not a menu you pay for once. It's rent.
|
|
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
|
|
|
@@ -82,7 +82,7 @@ Those repeats were not retries. The calls succeeded and got repeated, because th
|
|
|
82
82
|
|
|
83
83
|
`reticle_run` takes a tool name and its arguments. `reticle_tools` lists what's available and returns the full argument grammar for any of them, so your agent can discover a tool mid-task without you having pre-loaded its schema.
|
|
84
84
|
|
|
85
|
-
Notable residents of the cold tail: flow recording and replay, visual diffing and screenshots, network mocking, viewport pinning,
|
|
85
|
+
Notable residents of the cold tail: flow recording and replay, visual diffing and screenshots, network mocking, viewport pinning, the clock, storage, and the App Graph map (`reticle_map`).
|
|
86
86
|
|
|
87
87
|
## Read responses carry their cost
|
|
88
88
|
|
|
@@ -156,7 +156,7 @@ These pages are named for the unmerged tools. Each one gives the default spellin
|
|
|
156
156
|
| [`reticle_assert`](/tools/assert) | Did the named consequence hold? **Produces a verdict** |
|
|
157
157
|
| [`reticle_tools`](/tools/tools-and-run) | What else is available, and what are its arguments? |
|
|
158
158
|
| [`reticle_run`](/tools/tools-and-run) | Invoke any other registered tool by name |
|
|
159
|
-
| [`reticle_session`](/tools/session-and-feedback) |
|
|
159
|
+
| [`reticle_session`](/tools/session-and-feedback) | List connected tabs (the default), hand control back with `yield`, tune the HUD, read the account |
|
|
160
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) |
|
|
161
161
|
|
|
162
162
|
<Card title="The complete reference" icon="book" href="/usage">
|
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
|
-
`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
|
|
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 or testid. Your agent then binds to meaning, not to DOM structure that a refactor will move.
|
|
15
15
|
|
|
16
16
|
## Example
|
|
17
17
|
|
|
@@ -48,7 +48,7 @@ Real response from a running app, with four of the six elements trimmed out for
|
|
|
48
48
|
}
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
Seven buttons,
|
|
51
|
+
Seven buttons matched and six came back, because `limit` is 6. Each one has a `ref` to act on and a source file to open, for 236 tokens.
|
|
52
52
|
|
|
53
53
|
## Arguments
|
|
54
54
|
|
|
@@ -121,7 +121,7 @@ The testid existed, on another route. `hint.route` says where you actually are,
|
|
|
121
121
|
|
|
122
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 the app is built in
|
|
124
|
+
`source` appears when the app is built in development with the Reticle build plugin. Production builds omit it. Both sidebar buttons above report `Sidebar.tsx:41`. That is the line where the component renders its nav buttons in a loop, which is 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
|
|
|
@@ -13,9 +13,9 @@ The presenter panel in your app shows a live transcript of what the agent is doi
|
|
|
13
13
|
| Action | What it does |
|
|
14
14
|
| --- | --- |
|
|
15
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 [
|
|
16
|
+
| `feedback` | Tell the maintainers Reticle got something wrong. Takes the fields described under [Feedback](#feedback) below |
|
|
17
17
|
| `yield` | Hand control back between turns. `mode: "waiting"` or `"ask"`. Revivable |
|
|
18
|
-
| `end` | The task is done.
|
|
18
|
+
| `end` | The whole task is done. Ends the session for good, and it does not revive. Ending a leased tab also releases the lease |
|
|
19
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
20
|
| `resume` | Clear a pause the human applied |
|
|
21
21
|
| `messages` | Drain the human-to-agent inbox |
|
|
@@ -48,12 +48,11 @@ And each lease carries the rule in the payload itself:
|
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
<Tip>
|
|
51
|
-
`yield` when you
|
|
52
|
-
|
|
53
|
-
told.
|
|
51
|
+
Use `yield` when you pause and might come back: your next action revives the session. Use `end`
|
|
52
|
+
only when the whole task is done: it is final, and the panel shows the session as ended.
|
|
54
53
|
</Tip>
|
|
55
54
|
|
|
56
|
-
##
|
|
55
|
+
## Feedback
|
|
57
56
|
|
|
58
57
|
<Note>
|
|
59
58
|
`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.
|
|
@@ -83,6 +82,8 @@ Reticle is built for agents, which creates an unusual problem: the primary user'
|
|
|
83
82
|
|
|
84
83
|
The `rating` is secondary to that text on purpose. A score produced because something asked for one is indistinguishable from a score that was earned, and once both sit in the same column neither means anything. The text is the part that can be acted on or quoted.
|
|
85
84
|
|
|
85
|
+
`contact` is an email address for a reply from the maintainers. Send only an address that the user typed for this purpose. Never guess one or reuse one from somewhere else. It must be one plain address of at most 254 characters. Anything else is refused with a reason, and nothing is filed. Without `contact`, no address is sent.
|
|
86
|
+
|
|
86
87
|
### It will tell you when it cannot send
|
|
87
88
|
|
|
88
89
|
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:
|
|
@@ -119,6 +120,8 @@ The setup that failed to finish is exactly the setup that most needs reporting,
|
|
|
119
120
|
npx @reticlehq/server feedback --agent --kind gap "reticle init finished but no session ever connected"
|
|
120
121
|
```
|
|
121
122
|
|
|
123
|
+
To get a reply, add `--contact you@example.com`. Use only an address that the user typed for this purpose. Without the flag, no address is sent.
|
|
124
|
+
|
|
122
125
|
<Note>
|
|
123
126
|
Report defects in **Reticle**. A bug you find in the app under test is Reticle working correctly,
|
|
124
127
|
and belongs in your answer to the user. Not in a bug report to us. We get a surprising number of
|
package/docs/tools/sessions.mdx
CHANGED
|
@@ -27,6 +27,7 @@ Real response from a healthy session:
|
|
|
27
27
|
"url": "http://localhost:4310/",
|
|
28
28
|
"title": "Reticle · Mission Control",
|
|
29
29
|
"adapters": ["react"],
|
|
30
|
+
"sdkVersion": "3.8.0",
|
|
30
31
|
"hasCapabilities": true,
|
|
31
32
|
"hidden": false,
|
|
32
33
|
"lastSeenMs": 155,
|
|
@@ -68,6 +69,8 @@ An empty list is not silent. It comes back with a `why` that separates the two c
|
|
|
68
69
|
|
|
69
70
|
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
71
|
|
|
72
|
+
The empty list also carries `next_action`, the same answer as a command to run. In a project that was never wired, it carries `next_step` too. Nothing was installed and no file changed. `lease` is the call that checks the running app now with nothing installed: do it first. `consent` is the question to ask before `reticle init` wires the app. Run `init` only when the user agrees.
|
|
73
|
+
|
|
71
74
|
## The fields that decide whether driving will work
|
|
72
75
|
|
|
73
76
|
| Field | Why it matters |
|
|
@@ -78,6 +81,10 @@ That string is trimmed. The full text also lists the exact ports it scanned, say
|
|
|
78
81
|
| `adapters` | `["react"]` means you get component names and source pointers |
|
|
79
82
|
| `realInputAvailable` | `true` when native CDP input is available, under `reticle drive` |
|
|
80
83
|
| `outages` | How often the connection has dropped. Non-zero is worth investigating |
|
|
84
|
+
| `sdkVersion` | The page's SDK version |
|
|
85
|
+
| `sdkBehind` | Present when the page SDK is a minor release or more behind the daemon. Newer commands and fixes are missing. It says how to update |
|
|
86
|
+
| `versionSkew` | Present when the page SDK and the daemon differ. Fix it before you trust a verdict |
|
|
87
|
+
| `instrumentation` | `injected` when a hosted verifier put the SDK into the page from outside. Absent means the app installed it |
|
|
81
88
|
|
|
82
89
|
<Warning>
|
|
83
90
|
A hidden tab (`hidden: true`, which also sets `throttled`) is the most common cause of "the click
|
package/docs/tools/snapshot.mdx
CHANGED
|
@@ -21,7 +21,7 @@ icon: camera
|
|
|
21
21
|
| `interactive` | Only clickable and focusable elements | **65 tokens** |
|
|
22
22
|
| `full` | Every element | Depends on the page |
|
|
23
23
|
|
|
24
|
-
### `status
|
|
24
|
+
### `status`: the cheapest check
|
|
25
25
|
|
|
26
26
|
```json
|
|
27
27
|
{ "mode": "status" }
|
|
@@ -39,7 +39,7 @@ icon: camera
|
|
|
39
39
|
|
|
40
40
|
Ninety-eight bytes to answer "where am I?". Use it after a navigation instead of re-reading the page.
|
|
41
41
|
|
|
42
|
-
### `interactive
|
|
42
|
+
### `interactive`: the usual working view
|
|
43
43
|
|
|
44
44
|
```json
|
|
45
45
|
{ "mode": "interactive" }
|
|
@@ -59,11 +59,13 @@ Everything you can act on, with a `ref` for each, for 65 tokens. Note the passwo
|
|
|
59
59
|
|
|
60
60
|
## Arguments
|
|
61
61
|
|
|
62
|
-
| Argument | What it does
|
|
63
|
-
|
|
|
64
|
-
| `mode`
|
|
65
|
-
| `scope`
|
|
66
|
-
| `diff`
|
|
62
|
+
| Argument | What it does |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `mode` | `full` (the default) · `interactive` · `status` |
|
|
65
|
+
| `scope` | CSS selector or ref, to snapshot one subtree |
|
|
66
|
+
| `diff` | Return only what changed since your last snapshot of the same scope and mode |
|
|
67
|
+
| `ids` | Add `[testid=…]` to each control that has one. Off by default, because it costs tokens |
|
|
68
|
+
| `audit` | Also measure what a person would see as broken: text cut off with no ellipsis, controls drawn over each other, text below WCAG contrast. Returns `audit: [{ kind, ref, what, detail }]`. Off by default, because it forces layout |
|
|
67
69
|
|
|
68
70
|
## `diff` is how you keep a long session cheap
|
|
69
71
|
|
|
@@ -16,17 +16,18 @@ icon: boxes-stacked
|
|
|
16
16
|
|
|
17
17
|
Returns every tool with a one-line summary. A sample of what lives in the cold tail. (`reticle_verify` is advertised, so its `flows`, `change`, `crawl` and `coverage` actions need no hop.)
|
|
18
18
|
|
|
19
|
-
| Tool
|
|
20
|
-
|
|
|
19
|
+
| Tool | What it does |
|
|
20
|
+
| --- | --- |
|
|
21
21
|
| `reticle_capabilities` | The app's advertised testable surface, testids, signals, stores, flows |
|
|
22
|
-
| `reticle_screenshot`
|
|
23
|
-
| `reticle_visual_diff`
|
|
24
|
-
| `reticle_network_mock` | Force a 500, go offline, or delay a response
|
|
25
|
-
| `reticle_viewport`
|
|
26
|
-
| `reticle_clock`
|
|
27
|
-
| `reticle_storage`
|
|
28
|
-
| `reticle_reconcile`
|
|
29
|
-
| `reticle_scroll_to`
|
|
22
|
+
| `reticle_screenshot` | Pixel screenshot of the driven page, saved as a visual baseline |
|
|
23
|
+
| `reticle_visual_diff` | Perceptually diff the live page against that baseline |
|
|
24
|
+
| `reticle_network_mock` | Force a 500, go offline, or delay a response |
|
|
25
|
+
| `reticle_viewport` | Pin the viewport so screenshots are reproducible across machines |
|
|
26
|
+
| `reticle_clock` | Freeze time or fast-forward timers, toasts, debounces, auto-dismiss |
|
|
27
|
+
| `reticle_storage` | localStorage, sessionStorage and readable cookies |
|
|
28
|
+
| `reticle_reconcile` | Compare what the API returned against what the page actually renders |
|
|
29
|
+
| `reticle_scroll_to` | Find a row in a virtualised list that has not rendered yet |
|
|
30
|
+
| `reticle_map` | The app as Reticle has seen it: screens, how much of each is proved, where to test next, and, with `to`, the controls to press to reach a route |
|
|
30
31
|
|
|
31
32
|
The response also tells you which surface is active:
|
|
32
33
|
|
package/docs/tools/verify.mdx
CHANGED
|
@@ -17,7 +17,7 @@ icon: shield-check
|
|
|
17
17
|
| `affected` | Names the saved flows that must re-verify for `files` or `since`, without running them | no |
|
|
18
18
|
| `coverage` | Lists the controls you have and have not driven this session | no |
|
|
19
19
|
| `crawl` | Drives every reachable control itself and reports faults and contradictions. **Destructive:** it really clicks | no |
|
|
20
|
-
| `explore` | The Harness, Reticle's model-driven explorer, drives the journey you name in `persona` and saves what it drove as flows. Runs on the Reticle platform: run `reticle connect` first. A new account gets
|
|
20
|
+
| `explore` | The Harness, Reticle's model-driven explorer, drives the journey you name in `persona` and saves what it drove as flows. Runs on the Reticle platform: run `reticle connect` first. A new account gets free credits to try it. **Destructive** | no |
|
|
21
21
|
| `mutate` | Grades a saved flow: breaks the endpoint it depends on and replays it. A flow that stays green is a click sequence, not a test | no |
|
|
22
22
|
| `heal` | Rebinds a flow whose locator was renamed. Re-asserts the saved consequence first and refuses if it stops firing. `apply: true` writes the fix | no |
|
|
23
23
|
|
package/docs/troubleshooting.mdx
CHANGED
|
@@ -20,10 +20,12 @@ npx @reticlehq/server doctor
|
|
|
20
20
|
```
|
|
21
21
|
reticle doctor
|
|
22
22
|
node v22.14.0
|
|
23
|
-
chromium ✓ installed
|
|
23
|
+
chromium ✓ installed (chromium-1234)
|
|
24
24
|
daemon ✓ running on :4400 (pid 24735, v<the version you have>)
|
|
25
25
|
sessions ✓ 1 page connected
|
|
26
26
|
bridge port 4400 (your app must dial THIS port, not your dev-server port)
|
|
27
|
+
agent link ✓ an MCP client attached here and called tools before (a record, not a live check)
|
|
28
|
+
project ✓ wired here (my-app)
|
|
27
29
|
daemon log /Users/you/.reticle/daemon-4400.log
|
|
28
30
|
tracing RETICLE_TRACE=1 on the daemon for per-stage timings in that log
|
|
29
31
|
```
|
|
@@ -57,7 +59,7 @@ If nothing ever connected:
|
|
|
57
59
|
|
|
58
60
|
The daemon still does not do it, on purpose. A build process started by a long-lived background daemon is invisible to whoever's machine it is running on, was never consented to, cannot easily be stopped, and orphans when the daemon exits. It would also mean a piece of standing infrastructure runs arbitrary `package.json` scripts. An agent already has shell access in your repo, already runs install and build commands, and runs inside a host that asks you before it does. A dev server the agent starts is in the transcript, attributable to a step you approved, and stoppable.
|
|
59
61
|
|
|
60
|
-
The agent does not have to work out the command. When `reticle_session { action: "list" }` comes back with nothing connected, it carries a `next_action`
|
|
62
|
+
The agent does not have to work out the command. When `reticle_session { action: "list" }` comes back with nothing connected, it carries a `next_action`. Its `action` names the case: `daemon_split` (the app is on a different daemon; start nothing), `start_dev_server`, `run_init`, `open_app` or `reopen_app`. Where one applies, it also gives the literal command and the port. In a project that was never wired, it also carries `next_step`. Its `lease` checks the running app now with nothing installed. Its `consent` is the question to ask before `reticle init` changes files. Run `init` only when the user agrees. The command is read from this project's own scripts, so a project with no recognisable dev script gets no command rather than a guess.
|
|
61
63
|
|
|
62
64
|
The guards, which apply wherever this instruction appears:
|
|
63
65
|
|
|
@@ -107,8 +109,8 @@ failed. That is everything the page can see: from inside the browser it cannot t
|
|
|
107
109
|
is not there from one it is not allowed to reach, so this is not evidence about the daemon. What
|
|
108
110
|
answers it: run `npx @reticlehq/server status` to see whether one is listening and on which port.
|
|
109
111
|
If your app runs in a container, devcontainer or WSL, the daemon is on a different host, so point
|
|
110
|
-
the page at it
|
|
111
|
-
|
|
112
|
+
the page at it: RETICLE_PORT or reticle({ port }) with the Vite plugin, reticle.connect({ url })
|
|
113
|
+
by hand. An https page cannot open a ws:// socket. Still retrying…
|
|
112
114
|
```
|
|
113
115
|
|
|
114
116
|
**You should not have to read this page to find that out.** If the agent opened the app with `reticle_lease`, which is the path `init` steers it to, the daemon reads that address off the page's own console, compares it with the port it is bound to, and puts the mismatch in the tool result:
|
|
@@ -210,7 +212,7 @@ Before concluding "no request fired", read the buffer note:
|
|
|
210
212
|
## Assertions are flaky on async UIs
|
|
211
213
|
|
|
212
214
|
- Use `timeout_ms` on `assert` and `wait_for`.
|
|
213
|
-
-
|
|
215
|
+
- By default an assertion counts only the events after your last act. Pass a `since` cursor from `reticle_act` or `reticle_observe` to set that window yourself.
|
|
214
216
|
|
|
215
217
|
## `reticle_look { action: "state" }` returns nothing
|
|
216
218
|
|
|
@@ -238,9 +240,19 @@ A dev server on `https://` with a self-signed or mkcert certificate makes `retic
|
|
|
238
240
|
|
|
239
241
|
It is off by default. When it is on, certificate checks are skipped for every site opened in that lease's browser context, including resources loaded from other sites. Other leases keep their checks. A context cannot change the setting once it is made, so acquiring again with the other value replaces the lease instead of reusing it.
|
|
240
242
|
|
|
243
|
+
## The page never connects under a strict CSP
|
|
244
|
+
|
|
245
|
+
A build that sends a strict Content-Security-Policy blocks the bridge socket. A production build that you run locally (`next start`, `vite preview`) often sends one. The app runs, and the SDK never connects, with no error in the app. Add the bridge to `connect-src`, with your bridge port if it is not `4400`:
|
|
246
|
+
|
|
247
|
+
```text
|
|
248
|
+
connect-src 'self' ws://localhost:4400 ws://127.0.0.1:4400
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Add it only in the builds that Reticle drives, never in the policy that you deploy. If the policy also blocks inline scripts, `script-src` stops a pasted connect snippet before it runs: serve that snippet as an external module. `reticle doctor` reads the policy that the page serves and names the line to add, and a lease result says the same. For [production mode](/production-mode), add the `wss://` bridge from the ticket instead. Desktop apps have their own note in [Desktop](/desktop).
|
|
252
|
+
|
|
241
253
|
## `ERESOLVE` installing next to a prerelease
|
|
242
254
|
|
|
243
|
-
`@reticlehq/next` declares `peer next >=13` and `@reticlehq/react` declares `peer react >=18`. On a Next canary or React RC, npm refuses. See [the prerelease notes](/getting-started#installing-alongside-a-
|
|
255
|
+
`@reticlehq/next` declares `peer next >=13` and `@reticlehq/react` declares `peer react >=18`. On a Next canary or React RC, npm refuses. See [the prerelease notes](/getting-started#installing-alongside-a-next-js-or-react-prerelease).
|
|
244
256
|
|
|
245
257
|
## The tool list is empty
|
|
246
258
|
|
|
@@ -251,8 +263,8 @@ Some clients read their MCP tool list once, at startup, and never again. Cursor
|
|
|
251
263
|
## Restarting things
|
|
252
264
|
|
|
253
265
|
```bash
|
|
254
|
-
npx @reticlehq/server
|
|
255
|
-
npx @reticlehq/server status # confirm it
|
|
266
|
+
npx @reticlehq/server restart # clean stop, then start and wait until it listens
|
|
267
|
+
npx @reticlehq/server status # confirm it is back
|
|
256
268
|
```
|
|
257
269
|
|
|
258
270
|
<Warning>
|
|
@@ -274,7 +286,7 @@ Stale sessions pointing at dev servers you restarted an hour ago look completely
|
|
|
274
286
|
## Frequently asked questions
|
|
275
287
|
|
|
276
288
|
<AccordionGroup>
|
|
277
|
-
<Accordion title=
|
|
289
|
+
<Accordion title='Why does reticle_session { action: "list" } return nothing when my app is clearly running?'>
|
|
278
290
|
Your app running is not the same as your app being connected. The SDK has to dial the daemon's
|
|
279
291
|
bridge port over a WebSocket. If `npx @reticlehq/server doctor` shows the daemon up and
|
|
280
292
|
`sessions` at zero, either `reticle.connect()` never executed (check the dev guard is actually
|