@reticlehq/server 3.6.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/SKILL.md +122 -123
- 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 +18 -2
- package/dist/command/cli/adhoc-verdict.js +70 -6
- 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/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 +28 -105
- 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 +34 -4
- package/dist/command/cli/cli-verify.js +81 -12
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +145 -333
- 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 +15 -1
- package/dist/command/cli/cloud-login.js +67 -13
- 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/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/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 +11 -2
- 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.js +1 -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 +29 -8
- 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 -178
- 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 +14 -0
- package/dist/command/cli.js +103 -83
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +9 -1
- package/dist/command/daemon/daemon-resolve.js +49 -10
- 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/dev-server-log-cap.js +2 -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 +10 -1
- package/dist/command/setup/init/init-port.js +22 -2
- package/dist/command/setup/init/init-runtime.d.ts +12 -2
- package/dist/command/setup/init/init-runtime.js +96 -37
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +36 -8
- 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 +1 -1
- package/dist/command/setup/run-setup.d.ts +29 -9
- package/dist/command/setup/run-setup.js +34 -28
- package/dist/command/setup/setup-command.d.ts +23 -0
- package/dist/command/setup/setup-command.js +57 -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 +38 -2
- package/dist/features/crawl/crawl.js +14 -1
- package/dist/features/exhaust/ledger.d.ts +14 -14
- package/dist/features/harness/drive-report.d.ts +39 -5
- package/dist/features/harness/drive-report.js +271 -54
- 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 +1 -1
- package/dist/features/harness/drivers.js +1 -1
- 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/goals.d.ts +68 -7
- package/dist/features/harness/goals.js +289 -36
- package/dist/features/harness/harness.d.ts +30 -1
- package/dist/features/harness/harness.js +141 -7
- package/dist/features/harness/platform/local-apps.d.ts +36 -3
- package/dist/features/harness/platform/local-apps.js +81 -5
- 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 +8 -2
- package/dist/features/harness/platform/remote-drive.js +22 -9
- package/dist/features/harness/platform/script.d.ts +57 -11
- package/dist/features/harness/platform/script.js +144 -12
- package/dist/features/harness/platform/server-driver.d.ts +17 -4
- package/dist/features/harness/platform/server-driver.js +29 -26
- package/dist/features/harness/platform-config.d.ts +38 -5
- package/dist/features/harness/platform-config.js +93 -8
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/script-run.d.ts +30 -1
- package/dist/features/harness/script/script-run.js +355 -48
- 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.js +22 -14
- 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 +21 -2
- package/dist/hooks/driven-by.js +42 -2
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +26 -183
- 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 +20 -4
- 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.js +25 -9
- package/dist/judgement/runs/artifact/run-store.d.ts +13 -1
- package/dist/judgement/runs/artifact/run-store.js +175 -8
- 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 +53 -5
- package/dist/judgement/runs/drive-run.js +234 -20
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +5 -2
- 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 +2 -0
- package/dist/judgement/runs/verification-sync.js +36 -15
- package/dist/language/flows/decision.js +2 -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 +7 -2
- package/dist/language/flows/flow-anchor.js +10 -3
- 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 +37 -3
- package/dist/language/flows/flow-replay-run.js +16 -18
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +18 -1
- package/dist/language/flows/flow-replay.js +22 -7
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-step-runners.d.ts +2 -0
- package/dist/language/flows/flow-step-runners.js +12 -6
- package/dist/language/flows/flow-store-for-session.js +5 -1
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +61 -62
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +69 -10
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +29 -1
- package/dist/language/flows/recording/tape/recordings.js +60 -10
- package/dist/language/flows/replay.js +29 -6
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +200 -193
- package/dist/memory/cloud/cloud-config.d.ts +10 -1
- package/dist/memory/cloud/cloud-config.js +19 -5
- package/dist/memory/cloud/cloud-sync.js +3 -3
- package/dist/memory/cloud/harness-config.d.ts +49 -0
- package/dist/memory/cloud/harness-config.js +16 -20
- package/dist/memory/cloud/memory-scope.d.ts +17 -0
- package/dist/memory/cloud/memory-scope.js +22 -0
- package/dist/memory/cloud/sync-cycle.d.ts +32 -4
- package/dist/memory/cloud/sync-cycle.js +113 -12
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +114 -4
- package/dist/memory/cloud/sync-disk.js +26 -2
- 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 +16 -1
- package/dist/memory/impact/account-watch.js +26 -1
- package/dist/memory/impact/impact-store.d.ts +1 -4
- package/dist/memory/impact/impact-store.js +32 -42
- 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 +12 -0
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +42 -2
- 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/journal-recorder.js +46 -3
- package/dist/memory/journal/on-disk/retention.d.ts +5 -0
- package/dist/memory/journal/on-disk/retention.js +27 -2
- package/dist/memory/journal/on-disk/workspace-tiers.js +2 -0
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +38 -7
- package/dist/memory/project/artifact-root-resolver.js +33 -5
- package/dist/memory/project/artifact-root.d.ts +4 -3
- package/dist/memory/project/artifact-root.js +2 -2
- package/dist/memory/project/dir/reticle-dir.d.ts +14 -0
- package/dist/memory/project/dir/reticle-dir.js +23 -2
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- 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 +2 -0
- package/dist/memory/project/session-root.js +9 -1
- package/dist/memory/project/sync-status.d.ts +46 -0
- package/dist/memory/project/sync-status.js +135 -1
- package/dist/memory/recall/memory-tools.js +46 -3
- 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.js +36 -8
- package/dist/portal/bridge/bridge.d.ts +9 -5
- package/dist/portal/bridge/bridge.js +66 -23
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -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 +2 -0
- package/dist/portal/input/real-input.js +13 -10
- package/dist/portal/pool/browser-pool.d.ts +48 -0
- package/dist/portal/pool/browser-pool.js +120 -2
- 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 +27 -5
- package/dist/portal/pool/playwright-launcher.js +59 -14
- package/dist/portal/pool/pool-contract.d.ts +21 -1
- 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.js +6 -1
- 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 +9 -0
- package/dist/portal/session/dev-server/dev-command.js +27 -1
- 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/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/live-control-tools.js +82 -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 +1 -1
- package/dist/portal/session/no-session-diagnosis.js +31 -9
- package/dist/portal/session/no-session-next-action.d.ts +20 -0
- package/dist/portal/session/no-session-next-action.js +134 -61
- package/dist/portal/session/no-session-watch.js +179 -22
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/session-health.d.ts +11 -0
- package/dist/portal/session/session-health.js +3 -1
- package/dist/portal/session/session-info.js +2 -1
- package/dist/portal/session/session-manager.d.ts +18 -0
- package/dist/portal/session/session-manager.js +54 -3
- package/dist/portal/session/session-successor.d.ts +8 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session.d.ts +15 -28
- package/dist/portal/session/session.js +60 -61
- 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 +7 -1
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +13 -1
- package/dist/status-payload.js +13 -1
- package/dist/surface/http-server.js +7 -1
- 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 +4 -0
- package/dist/surface/mcp/mcp-proxy.js +29 -8
- package/dist/surface/mcp/mcp.d.ts +23 -0
- package/dist/surface/mcp/mcp.js +34 -4
- 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.js +22 -14
- package/dist/surface/mcp/shared-params.js +1 -1
- 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/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-sequence-tool.js +136 -27
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +48 -34
- 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.js +25 -15
- package/dist/surface/tools/browser-tools.js +43 -1
- package/dist/surface/tools/chat-drives.d.ts +75 -0
- package/dist/surface/tools/chat-drives.js +265 -21
- 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 +10 -0
- package/dist/surface/tools/empty-session-list.js +45 -5
- package/dist/surface/tools/error-recovery.d.ts +8 -0
- package/dist/surface/tools/error-recovery.js +69 -5
- package/dist/surface/tools/explore-tools.d.ts +23 -2
- package/dist/surface/tools/explore-tools.js +377 -74
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +4 -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 +52 -73
- package/dist/surface/tools/harness-explore.js +177 -146
- 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 +5 -0
- package/dist/surface/tools/harness-plan.js +7 -0
- package/dist/surface/tools/harness-script.d.ts +22 -0
- package/dist/surface/tools/harness-script.js +256 -38
- 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 +8 -0
- package/dist/surface/tools/harness-toolset.js +27 -4
- 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 +220 -93
- 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 +20 -0
- package/dist/surface/tools/lease-seed.js +45 -1
- package/dist/surface/tools/lease-tools.d.ts +10 -1
- package/dist/surface/tools/lease-tools.js +119 -69
- package/dist/surface/tools/live-call-text.js +2 -2
- 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 +11 -1
- package/dist/surface/tools/next-step.js +73 -18
- package/dist/surface/tools/observe-tools.js +43 -5
- package/dist/surface/tools/platform-moment.d.ts +60 -0
- package/dist/surface/tools/platform-moment.js +132 -4
- package/dist/surface/tools/read-tools.js +65 -14
- 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 +68 -2
- package/dist/surface/tools/tool-kit.js +73 -1
- package/dist/surface/tools/tools.js +25 -13
- 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 +27 -6
- package/dist/telemetry/hud-metrics.js +99 -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 +26 -2
- package/dist/telemetry/telemetry.js +102 -21
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +12 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +16 -5
- package/docs/README.md +2 -2
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +24 -27
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +13 -12
- 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 +8 -3
- package/docs/cli/drive.mdx +12 -12
- 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 +32 -15
- 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 +13 -4
- 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 +3 -2
- package/docs/cli.mdx +110 -41
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +5 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +5 -2
- 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 +66 -64
- package/docs/human-control.md +15 -14
- package/docs/index.mdx +15 -43
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +22 -12
- 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 +8 -8
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +11 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +58 -29
- 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 +22 -24
- 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 +13 -4
- 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 +51 -45
- 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 +7 -5
- package/docs/what-is-reticle.mdx +2 -2
- package/docs/why-reticle.mdx +1 -1
- package/package.json +6 -5
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -249
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- 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/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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-teach on a mistake the primer covers: ONE line, once per rule per agent session.
|
|
3
|
+
*
|
|
4
|
+
* After a compaction the agent keeps calling, but the rules it read at the start are gone. The daemon
|
|
5
|
+
* still knows it is the same agent (same MCP connection), and it can see the mistake in the call it
|
|
6
|
+
* just answered. So the answer carries the one rule that call broke — and costs nothing when the
|
|
7
|
+
* agent behaves. Deduplication is `foldNotices`' once-per-session rule.
|
|
8
|
+
*
|
|
9
|
+
* Advice only: computed from a result that is already decided, returned as a sentence.
|
|
10
|
+
*/
|
|
11
|
+
import { ReticleTool, Verified, asRecord } from '@reticlehq/core';
|
|
12
|
+
export const ReteachLine = {
|
|
13
|
+
NO_UNTIL: 'Rule: name the consequence in `until` BEFORE acting — without it the result is "no-fault", which proves nothing.',
|
|
14
|
+
ALIAS: 'Rule: write predicates in their canonical spelling (see `normalized`); aliases are a courtesy, not the API.',
|
|
15
|
+
CASE: 'Rule: text checks are exact-case — use ignoreCase: true only when the case truly does not matter.',
|
|
16
|
+
RELIST: 'Rule: you already have this tab — reuse its sessionId (or omit it) instead of listing sessions again.',
|
|
17
|
+
COMPACTED: 'Lost track (context compacted)? reticle_run { tool: "reticle_context", args: { compact: true } } returns what this session proved, failed and still owes.',
|
|
18
|
+
};
|
|
19
|
+
const listCounts = new Map();
|
|
20
|
+
/** Tests only. */
|
|
21
|
+
export function resetReteach() {
|
|
22
|
+
listCounts.clear();
|
|
23
|
+
}
|
|
24
|
+
/** The rule this call broke, if any. */
|
|
25
|
+
export function reteachFor(session, tool, args, result) {
|
|
26
|
+
const lines = [];
|
|
27
|
+
if (ReticleTool.ACT_AND_WAIT === tool &&
|
|
28
|
+
args['until'] === undefined &&
|
|
29
|
+
args['predicate'] === undefined) {
|
|
30
|
+
if (Verified.NO_FAULT === result['verified'])
|
|
31
|
+
lines.push(ReteachLine.NO_UNTIL);
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(result['normalized']) && result['normalized'].length > 0)
|
|
34
|
+
lines.push(ReteachLine.ALIAS);
|
|
35
|
+
const verdict = 'object' === typeof result['verdict'] && null !== result['verdict']
|
|
36
|
+
? asRecord(result['verdict'])
|
|
37
|
+
: result;
|
|
38
|
+
if (true === verdict['caseOnlyMiss'])
|
|
39
|
+
lines.push(ReteachLine.CASE);
|
|
40
|
+
const listing = ReticleTool.SESSIONS === tool ||
|
|
41
|
+
(ReticleTool.SESSION === tool && (args['action'] === undefined || 'list' === args['action']));
|
|
42
|
+
if (listing && Array.isArray(result['sessions']) && result['sessions'].length > 0) {
|
|
43
|
+
const seen = (listCounts.get(session) ?? 0) + 1;
|
|
44
|
+
listCounts.set(session, seen);
|
|
45
|
+
// The third listing in one session: the first two are orientation, a third is a lost thread.
|
|
46
|
+
if (seen >= 3)
|
|
47
|
+
lines.push(ReteachLine.RELIST, ReteachLine.COMPACTED);
|
|
48
|
+
}
|
|
49
|
+
return lines;
|
|
50
|
+
}
|
|
@@ -15,3 +15,8 @@
|
|
|
15
15
|
* missing instead of being replaced by a guess.
|
|
16
16
|
*/
|
|
17
17
|
export declare function aliasParam(args: Record<string, unknown>, canonical: string, aliases: readonly string[]): Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* The alias a call used for `canonical`, named the way a verdict tool names a normalised predicate
|
|
20
|
+
* (`normalized: ["name → flowName"]`): accepted, and said, so the agent learns the real spelling.
|
|
21
|
+
*/
|
|
22
|
+
export declare function aliasUsed(args: Record<string, unknown>, canonical: string, aliases: readonly string[]): string[];
|
|
@@ -23,3 +23,13 @@ export function aliasParam(args, canonical, aliases) {
|
|
|
23
23
|
}
|
|
24
24
|
return args;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* The alias a call used for `canonical`, named the way a verdict tool names a normalised predicate
|
|
28
|
+
* (`normalized: ["name → flowName"]`): accepted, and said, so the agent learns the real spelling.
|
|
29
|
+
*/
|
|
30
|
+
export function aliasUsed(args, canonical, aliases) {
|
|
31
|
+
if (args[canonical] !== undefined)
|
|
32
|
+
return [];
|
|
33
|
+
const alias = aliases.find((name) => args[name] !== undefined);
|
|
34
|
+
return alias === undefined ? [] : [`${alias} → ${canonical}`];
|
|
35
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The per-call acknowledgement of steps the replay guard holds as destructive. Never persisted into
|
|
4
|
+
* a flow: a destructive confirmation is a decision made for one run.
|
|
5
|
+
*/
|
|
6
|
+
export declare const confirmDangerousArg: (scope: string) => z.ZodOptional<z.ZodBoolean>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The per-call acknowledgement of steps the replay guard holds as destructive. Never persisted into
|
|
4
|
+
* a flow: a destructive confirmation is a decision made for one run.
|
|
5
|
+
*/
|
|
6
|
+
export const confirmDangerousArg = (scope) => z.boolean().optional().describe(`Set true to allow destructive controls during ${scope} only.`);
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { Predicate } from '@reticlehq/engine/question/predicate/predicate-schema.js';
|
|
2
2
|
import type { Session } from '../../../portal/session/session.js';
|
|
3
|
+
/**
|
|
4
|
+
* Any `data-reticle-source` stamp on an ELEMENT anywhere in an assertion's evidence, near misses
|
|
5
|
+
* included.
|
|
6
|
+
*
|
|
7
|
+
* Not a pointer to report: `assertSource` decides that, and it refuses a near miss because that is
|
|
8
|
+
* a different element. This answers a narrower question, the one the `no-source-mapping` gap asks:
|
|
9
|
+
* does this build stamp its elements at all? A near miss that carries `source` proves it does, so a
|
|
10
|
+
* failure whose only located element is a near miss must not tell the agent to install a plugin
|
|
11
|
+
* that is already working (#1422).
|
|
12
|
+
*
|
|
13
|
+
* Only element descriptors count (they carry a `ref` or a `tag`): a console error's `source` is the
|
|
14
|
+
* browser's script URL and says nothing about build stamps. The depth bound is generous enough for
|
|
15
|
+
* nested `allOf`/`anyOf` evidence and exists only because evidence is page-supplied.
|
|
16
|
+
*/
|
|
17
|
+
export declare function stampedSourceIn(evidence: unknown, depth?: number): string | undefined;
|
|
3
18
|
/**
|
|
4
19
|
* The `file:line` an ASSERTION is entitled to report — its own evidence, or nothing.
|
|
5
20
|
*
|
|
@@ -28,6 +28,46 @@ function evidenceSource(evidence) {
|
|
|
28
28
|
}
|
|
29
29
|
return agreed;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Any `data-reticle-source` stamp on an ELEMENT anywhere in an assertion's evidence, near misses
|
|
33
|
+
* included.
|
|
34
|
+
*
|
|
35
|
+
* Not a pointer to report: `assertSource` decides that, and it refuses a near miss because that is
|
|
36
|
+
* a different element. This answers a narrower question, the one the `no-source-mapping` gap asks:
|
|
37
|
+
* does this build stamp its elements at all? A near miss that carries `source` proves it does, so a
|
|
38
|
+
* failure whose only located element is a near miss must not tell the agent to install a plugin
|
|
39
|
+
* that is already working (#1422).
|
|
40
|
+
*
|
|
41
|
+
* Only element descriptors count (they carry a `ref` or a `tag`): a console error's `source` is the
|
|
42
|
+
* browser's script URL and says nothing about build stamps. The depth bound is generous enough for
|
|
43
|
+
* nested `allOf`/`anyOf` evidence and exists only because evidence is page-supplied.
|
|
44
|
+
*/
|
|
45
|
+
export function stampedSourceIn(evidence, depth = 0) {
|
|
46
|
+
if (depth > MAX_EVIDENCE_DEPTH || 'object' !== typeof evidence || null === evidence) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(evidence)) {
|
|
50
|
+
for (const entry of evidence) {
|
|
51
|
+
const found = stampedSourceIn(entry, depth + 1);
|
|
52
|
+
if (found !== undefined)
|
|
53
|
+
return found;
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const entry = evidence;
|
|
58
|
+
const isElement = 'string' === typeof entry.ref || 'string' === typeof entry.tag;
|
|
59
|
+
if (isElement && 'string' === typeof entry.source && 0 < entry.source.length) {
|
|
60
|
+
return entry.source;
|
|
61
|
+
}
|
|
62
|
+
for (const value of Object.values(evidence)) {
|
|
63
|
+
const found = stampedSourceIn(value, depth + 1);
|
|
64
|
+
if (found !== undefined)
|
|
65
|
+
return found;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
/** How deep `stampedSourceIn` follows nested evidence: combinators nest, a page could nest forever. */
|
|
70
|
+
const MAX_EVIDENCE_DEPTH = 16;
|
|
31
71
|
/**
|
|
32
72
|
* The `file:line` an ASSERTION is entitled to report — its own evidence, or nothing.
|
|
33
73
|
*
|
|
@@ -17,8 +17,9 @@ import { decideVerified } from '@reticlehq/engine/evidence/verified.js';
|
|
|
17
17
|
import { describeWaitTarget, namedNetIsInFlight } from '@reticlehq/engine/evidence/unsettled.js';
|
|
18
18
|
import { inFlightRequestLabels, repeatedRequestLabels, } from '../act/settle-in-flight.js';
|
|
19
19
|
import { gradeOfPredicate } from './assert-grade.js';
|
|
20
|
-
import { assertSource } from './assert-source.js';
|
|
20
|
+
import { assertSource, stampedSourceIn } from './assert-source.js';
|
|
21
21
|
import { VerdictAttribution, verdictAttributionOf } from '@reticlehq/core';
|
|
22
|
+
import { noteSourceSeen } from '../../../portal/session/recorded-gaps.js';
|
|
22
23
|
/**
|
|
23
24
|
* The honesty verdict for a plain `reticle_assert`.
|
|
24
25
|
*
|
|
@@ -58,7 +59,9 @@ changeUndeclared) {
|
|
|
58
59
|
// over-warning, which is the correct direction here: the failure this guards against is a green
|
|
59
60
|
// that implies coverage it never had, and a needless caveat costs the agent a sentence.
|
|
60
61
|
const spots = blindSpotsFromState(session.blindSpots(), session.runtime);
|
|
61
|
-
|
|
62
|
+
// The window's own counts, so sampling before it is not described as this window's (#1414).
|
|
63
|
+
const windowSpots = blindSpotsFromState(session.blindSpots(since), session.runtime);
|
|
64
|
+
const statement = buildCoverageStatement(spots, windowSpots);
|
|
62
65
|
const absenceBlindSpot = absenceBlindSpotNote(predicate, spots);
|
|
63
66
|
// A green resting on hidden matches says the node exists, not that it shows (#1408).
|
|
64
67
|
const hiddenMatch = hiddenMatchNote(predicate, evidence);
|
|
@@ -94,12 +97,15 @@ changeUndeclared) {
|
|
|
94
97
|
background: session.background,
|
|
95
98
|
expectedFailures: declared.netFailures,
|
|
96
99
|
namedNetUrls: declared.netUrls,
|
|
100
|
+
repeatableNetUrls: declared.repeatableNetUrls,
|
|
97
101
|
renderProved: pass && declared.rendersContent,
|
|
98
102
|
...(actCursor !== undefined && actCursor >= since ? { actionSince: actCursor } : {}),
|
|
99
103
|
});
|
|
100
104
|
// Only a spot that IMPEACHES the capture downgrades a general verdict. Structural boundaries are
|
|
101
105
|
// reported as coverage; the narrower absence exception is computed separately above.
|
|
102
|
-
const impeaching = buildCoverageStatement(
|
|
106
|
+
const impeaching = buildCoverageStatement(
|
|
107
|
+
// The WINDOW's blind spots: sampling before it is a coverage fact, not this verdict's gap (#1414).
|
|
108
|
+
windowSpots.filter((sp) => impeachesCapture(sp.kind)));
|
|
103
109
|
// A gap in the WINDOW, as opposed to a standing limit of the page. Both mean the same thing to the
|
|
104
110
|
// rule — part of what happened was not seen — so both belong in `blindSpots`, which is the only
|
|
105
111
|
// input `decideVerified` reads for that.
|
|
@@ -207,13 +213,25 @@ changeUndeclared) {
|
|
|
207
213
|
repeated: repeatedRequestLabels(windowEvents),
|
|
208
214
|
},
|
|
209
215
|
});
|
|
216
|
+
// The one file:line this verdict is entitled to: its own evidence, or — for a failure with no DOM
|
|
217
|
+
// clause to point at — the control last driven. Returned so the RESPONSE can echo the same value
|
|
218
|
+
// the journal keeps; one verdict must never carry two different pointers.
|
|
219
|
+
const source = assertSource({
|
|
220
|
+
predicate,
|
|
221
|
+
evidence,
|
|
222
|
+
pass,
|
|
223
|
+
lastActSource: session.lastAct.source(),
|
|
224
|
+
});
|
|
210
225
|
// The same rule the act path uses, fed by what THIS path knows. An assertion drives nothing, so
|
|
211
|
-
// only two of the four gates can fire here: a red with
|
|
212
|
-
//
|
|
226
|
+
// only two of the four gates can fire here: a red with nothing located, and a state assertion
|
|
227
|
+
// against an app that registers no store. "Nothing located" reads the verdict's own source first,
|
|
228
|
+
// then any stamp in its evidence (a near miss carries one), and only then the last act: before,
|
|
229
|
+
// it read only the last act, so a red asked before any act reported `no-source-mapping` while its
|
|
230
|
+
// own near misses carried file:line (#1422).
|
|
213
231
|
const gaps = gapsForAction({
|
|
214
232
|
pass,
|
|
215
233
|
...(changeUndeclared === undefined ? {} : { changeUndeclared }),
|
|
216
|
-
source: session.lastAct.source(),
|
|
234
|
+
source: source ?? stampedSourceIn(evidence) ?? session.lastAct.source(),
|
|
217
235
|
stateAsked: declaresState(predicate),
|
|
218
236
|
stateUnwatched: isStateUnwatched(spots),
|
|
219
237
|
// What the app DECLARED, so an under-instrumented one is told without having to be asked.
|
|
@@ -224,16 +242,8 @@ changeUndeclared) {
|
|
|
224
242
|
domMutated: false,
|
|
225
243
|
signalsFired: 0,
|
|
226
244
|
});
|
|
245
|
+
noteSourceSeen(session, source ?? stampedSourceIn(evidence));
|
|
227
246
|
noteSessionGaps(session, gaps);
|
|
228
|
-
// The one file:line this verdict is entitled to: its own evidence, or — for a failure with no DOM
|
|
229
|
-
// clause to point at — the control last driven. Returned so the RESPONSE can echo the same value
|
|
230
|
-
// the journal keeps; one verdict must never carry two different pointers.
|
|
231
|
-
const source = assertSource({
|
|
232
|
-
predicate,
|
|
233
|
-
evidence,
|
|
234
|
-
pass,
|
|
235
|
-
lastActSource: session.lastAct.source(),
|
|
236
|
-
});
|
|
237
247
|
// Who can act on this verdict, derived from the clause that decided it — see `attributedTo` below.
|
|
238
248
|
const attributedTo = verdictAttributionOf(decision.verifiedReason);
|
|
239
249
|
return {
|
|
@@ -9,6 +9,32 @@ import { ReticleTool } from '@reticlehq/core';
|
|
|
9
9
|
import { asNumber, asString } from '@reticlehq/core';
|
|
10
10
|
import { sessionIdShape, commandOrThrow } from './tool-kit.js';
|
|
11
11
|
import { timeoutMsSchema } from './args/numeric-bounds.js';
|
|
12
|
+
/** Said when a lease's page now has no Reticle SDK: only the browser can still act on it. */
|
|
13
|
+
const MSG_LEASE_WITHOUT_SDK = 'This page has no Reticle SDK, so only browser-level actions apply here (navigate, screenshot). ' +
|
|
14
|
+
'The lease is kept: navigate back to the app and it reattaches.';
|
|
15
|
+
/** Navigate a lease through its browser page, and wait for its SDK to come back. */
|
|
16
|
+
async function navigateLease(deps, sessionId, url, args) {
|
|
17
|
+
const timeoutMs = asNumber(args['timeout_ms']) ?? ARRIVAL_TIMEOUT_MS;
|
|
18
|
+
const went = (await deps.pool?.gotoLease(sessionId, url, timeoutMs)) ?? false;
|
|
19
|
+
if (!went)
|
|
20
|
+
return { ok: false, url, reason: 'the leased page did not navigate' };
|
|
21
|
+
const back = await waitForSession(deps, sessionId, timeoutMs);
|
|
22
|
+
return back
|
|
23
|
+
? { ok: true, url, confirmed: true, sessionId }
|
|
24
|
+
: { ok: true, url, confirmed: false, waitedMs: timeoutMs, note: MSG_LEASE_WITHOUT_SDK };
|
|
25
|
+
}
|
|
26
|
+
/** Whether the session reconnects within the budget. */
|
|
27
|
+
async function waitForSession(deps, sessionId, timeoutMs) {
|
|
28
|
+
const start = deps.now();
|
|
29
|
+
for (;;) {
|
|
30
|
+
if (deps.sessions.get(sessionId) !== undefined)
|
|
31
|
+
return true;
|
|
32
|
+
if (deps.now() - start >= timeoutMs)
|
|
33
|
+
return false;
|
|
34
|
+
await new Promise((resolve) => setTimeout(resolve, LEASE_POLL_MS));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const LEASE_POLL_MS = 100;
|
|
12
38
|
export const BROWSER_TOOLS = [
|
|
13
39
|
{
|
|
14
40
|
name: ReticleTool.NAVIGATE,
|
|
@@ -85,6 +111,16 @@ export const BROWSER_TOOLS = [
|
|
|
85
111
|
const requested = asString(args['url']);
|
|
86
112
|
if (requested === undefined || 0 === requested.length)
|
|
87
113
|
return { ok: false, reason: 'url required' };
|
|
114
|
+
const named = asString(args['sessionId']);
|
|
115
|
+
// A lease whose page has no SDK right now (it was navigated to an image, a PDF, another site):
|
|
116
|
+
// the page is still the lease's, so it is navigated through the browser and reattaches when it
|
|
117
|
+
// is back on the app, instead of answering "no connected session" for good.
|
|
118
|
+
if (named !== undefined && deps.sessions.get(named) === undefined) {
|
|
119
|
+
const leaseUrl = deps.pool?.leaseUrl(named);
|
|
120
|
+
if (leaseUrl !== undefined) {
|
|
121
|
+
return navigateLease(deps, named, carryReticleIdentity(leaseUrl, requested), args);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
88
124
|
// Record navigate as an action. Its window is usually empty (the page unloads and the SDK
|
|
89
125
|
// reconnects), but the action record itself — "navigated to X" — is the causal fact worth keeping.
|
|
90
126
|
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
@@ -125,7 +161,13 @@ export const BROWSER_TOOLS = [
|
|
|
125
161
|
priorIds,
|
|
126
162
|
}, timeoutMs)
|
|
127
163
|
: null;
|
|
128
|
-
|
|
164
|
+
const answer = navigateResult(result, arrival, timeoutMs);
|
|
165
|
+
// A lease navigated off its app (an image, a PDF) is kept, and says what still works.
|
|
166
|
+
const offApp = null === arrival &&
|
|
167
|
+
true === result.ok &&
|
|
168
|
+
deps.pool?.leaseUrl(session.id) !== undefined &&
|
|
169
|
+
deps.sessions.get(session.id) === undefined;
|
|
170
|
+
return offApp ? { ...answer, note: MSG_LEASE_WITHOUT_SDK } : answer;
|
|
129
171
|
}
|
|
130
172
|
finally {
|
|
131
173
|
session.finishAction();
|
|
@@ -2,6 +2,9 @@ import type { SessionInfo } from '../../portal/session/session-info.js';
|
|
|
2
2
|
import { LinkCapability, type PresenterTone } from '@reticlehq/core';
|
|
3
3
|
import type { ToolDeps } from './tool-kit.js';
|
|
4
4
|
import type { FileSystemPort } from '../../memory/project/fs/fs-port.js';
|
|
5
|
+
import { type ProbedTab } from '../../portal/session/recorded-gaps.js';
|
|
6
|
+
import { type FreeDrive } from '../../features/harness/platform/platform-drives.js';
|
|
7
|
+
import { HumanControlKind, type LinkUnsyncedRoot } from '@reticlehq/core';
|
|
5
8
|
/** What this daemon does for the platform's chat. Each one is listed only once it is built. */
|
|
6
9
|
export declare const CHAT_CAPABILITIES: readonly LinkCapability[];
|
|
7
10
|
/** The slice of the session manager this needs. */
|
|
@@ -11,6 +14,16 @@ export interface ChatDriveSessions {
|
|
|
11
14
|
get(id: string): {
|
|
12
15
|
autoEnd(text: string, tone: PresenterTone): void;
|
|
13
16
|
pushNarration(text: string): void;
|
|
17
|
+
readonly sdkVersion?: string | undefined;
|
|
18
|
+
readonly channels?: readonly string[] | undefined;
|
|
19
|
+
/** Asks the page what it carries (`probeMarkers`). Absent on a test double. */
|
|
20
|
+
command?: ProbedTab['command'];
|
|
21
|
+
readonly sourceMapping?: boolean | undefined;
|
|
22
|
+
} | undefined;
|
|
23
|
+
/** The last page handshake the bridge refused, when there was one. */
|
|
24
|
+
lastClosure?(): {
|
|
25
|
+
at: number;
|
|
26
|
+
reason: string;
|
|
14
27
|
} | undefined;
|
|
15
28
|
}
|
|
16
29
|
export interface ChatDriveCloud {
|
|
@@ -20,7 +33,69 @@ export interface ChatDriveCloud {
|
|
|
20
33
|
apiKey: string;
|
|
21
34
|
} | undefined>;
|
|
22
35
|
version: string;
|
|
36
|
+
/** Folders holding runs the platform never got (the sync daemon's last count). Absolute roots. */
|
|
37
|
+
unsynced?: () => readonly {
|
|
38
|
+
root: string;
|
|
39
|
+
runs: number;
|
|
40
|
+
linked: boolean;
|
|
41
|
+
}[];
|
|
23
42
|
}
|
|
24
43
|
export declare function startChatDrives(deps: ToolDeps, sessions: ChatDriveSessions, fs: FileSystemPort, cloud: ChatDriveCloud, log: (line: string) => void): {
|
|
25
44
|
stop: () => void;
|
|
26
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* The panel's Harness controls. The switch is the platform's autonomous mode, unchanged. Run Harness
|
|
48
|
+
* and Stop drive. A run asks the platform for the drive's grant, then starts it
|
|
49
|
+
* through the same explore an agent calls (counted, recorded, polled the same way); its lines and
|
|
50
|
+
* steps reach the HUD log as the drive narrates them. A refused grant says why, and where to start
|
|
51
|
+
* a trial when it wants a card.
|
|
52
|
+
*/
|
|
53
|
+
export declare function hudDrive(deps: ToolDeps, sessionId: string,
|
|
54
|
+
/** The panel's control, as the bridge narrowed it (`harness-request.ts`). */
|
|
55
|
+
request: {
|
|
56
|
+
kind: typeof HumanControlKind.HARNESS;
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
} | {
|
|
59
|
+
kind: typeof HumanControlKind.HARNESS_RUN;
|
|
60
|
+
persona?: string;
|
|
61
|
+
} | {
|
|
62
|
+
kind: typeof HumanControlKind.HARNESS_STOP;
|
|
63
|
+
},
|
|
64
|
+
/** The autonomous switch: written through to the platform, which the daemon owns. */
|
|
65
|
+
applySwitch: (enabled: boolean) => void, grant?: (platform: {
|
|
66
|
+
url: string;
|
|
67
|
+
apiKey: string;
|
|
68
|
+
}) => Promise<FreeDrive>): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* The link a panel sign-in makes once it lands: the tab's project, never a page that did not say
|
|
71
|
+
* which project it is (that would bind a hash-named project nothing here reads).
|
|
72
|
+
*/
|
|
73
|
+
export declare function projectLinkOnly(link: ((root: string) => Promise<number>) | undefined): ((root: string) => Promise<number>) | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* The panel's Harness controls on a bridge: the switch writes through to the platform, so console
|
|
76
|
+
* and panel cannot disagree; Run and Stop drive, in the project of the tab that asked.
|
|
77
|
+
*/
|
|
78
|
+
export declare function attachHudHarness(bridge: {
|
|
79
|
+
attachHarnessRequest(handler: (request: Parameters<typeof hudDrive>[2] | {
|
|
80
|
+
kind: typeof HumanControlKind.HARNESS_LINK;
|
|
81
|
+
}, session: {
|
|
82
|
+
id: string;
|
|
83
|
+
artifactRoot?: string | undefined;
|
|
84
|
+
}) => void): void;
|
|
85
|
+
}, daemon: {
|
|
86
|
+
/** Read when a control arrives: the daemon builds its deps after it wires the bridge. */
|
|
87
|
+
deps: () => ToolDeps;
|
|
88
|
+
/** Where a tab with no project of its own drives. */
|
|
89
|
+
root: string;
|
|
90
|
+
/** Repaint every panel, so a running drive shows its Stop button and a finished one hides it. */
|
|
91
|
+
repaint: () => void;
|
|
92
|
+
}, applySwitch: (root: string, on: boolean) => void,
|
|
93
|
+
/** Link this project: what `reticle connect` does from that folder. Absent: the button says so. */
|
|
94
|
+
link?: (root: string) => Promise<number>): void;
|
|
95
|
+
/**
|
|
96
|
+
* The `unsynced` field of a report. Sent empty too, once this daemon has counted: the platform reads
|
|
97
|
+
* an absent list as "no news" and kept a "never sent" banner for runs that had long been sent.
|
|
98
|
+
*/
|
|
99
|
+
export declare function unsyncedReport(unsynced: readonly LinkUnsyncedRoot[] | undefined, home: string): {
|
|
100
|
+
unsynced?: LinkUnsyncedRoot[];
|
|
101
|
+
};
|