@reticlehq/server 3.5.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/SKILL.md +123 -116
- package/dist/chromium-launch-options.d.ts +3 -1
- package/dist/chromium-launch-options.js +2 -1
- package/dist/command/cli/adhoc-suite.d.ts +14 -0
- package/dist/command/cli/adhoc-suite.js +42 -7
- package/dist/command/cli/adhoc-verdict.d.ts +19 -2
- package/dist/command/cli/adhoc-verdict.js +76 -9
- package/dist/command/cli/answers/gate-exit.d.ts +23 -0
- package/dist/command/cli/answers/gate-exit.js +45 -0
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +3 -1
- package/dist/command/cli/answers/open-note.d.ts +2 -0
- package/dist/command/cli/answers/open-note.js +22 -0
- package/dist/command/cli/auth/device-flow.d.ts +13 -2
- package/dist/command/cli/auth/device-flow.js +17 -0
- package/dist/command/cli/cli-doctor.js +14 -0
- package/dist/command/cli/cli-flow-commands.d.ts +0 -11
- package/dist/command/cli/cli-flow-commands.js +31 -112
- package/dist/command/cli/cli-kill.js +3 -2
- package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
- package/dist/command/cli/cli-parse-grammar.js +75 -0
- package/dist/command/cli/cli-parse-verify.d.ts +2 -0
- package/dist/command/cli/cli-parse-verify.js +18 -0
- package/dist/command/cli/cli-parse.d.ts +19 -28
- package/dist/command/cli/cli-parse.js +82 -182
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +61 -9
- package/dist/command/cli/cli-usage.d.ts +33 -0
- package/dist/command/cli/cli-usage.js +287 -0
- package/dist/command/cli/cli-verify.d.ts +35 -5
- package/dist/command/cli/cli-verify.js +114 -35
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +192 -341
- package/dist/command/cli/cloud-kit.d.ts +12 -0
- package/dist/command/cli/cloud-kit.js +41 -2
- package/dist/command/cli/cloud-link.d.ts +57 -0
- package/dist/command/cli/cloud-link.js +308 -0
- package/dist/command/cli/cloud-login.d.ts +22 -0
- package/dist/command/cli/cloud-login.js +96 -8
- package/dist/command/cli/context-command.d.ts +1 -0
- package/dist/command/cli/context-command.js +33 -0
- package/dist/command/cli/daemon-start-options.d.ts +3 -0
- package/dist/command/cli/daemon-start-options.js +24 -3
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
- package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
- package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
- package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
- package/dist/command/cli/doctor/doctor-project-line.js +5 -4
- package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
- package/dist/command/cli/doctor/doctor-rows.js +6 -0
- package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
- package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
- package/dist/command/cli/drive/drive-attach.d.ts +27 -2
- package/dist/command/cli/drive/drive-attach.js +71 -4
- package/dist/command/cli/drive/drive-command.d.ts +2 -1
- package/dist/command/cli/drive/drive-command.js +13 -7
- package/dist/command/cli/known-regression.d.ts +13 -0
- package/dist/command/cli/known-regression.js +34 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
- package/dist/command/cli/launch/sdk-version-match.js +25 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
- package/dist/command/cli/mcp-command.d.ts +6 -0
- package/dist/command/cli/mcp-command.js +13 -5
- package/dist/command/cli/ports/port-holder.d.ts +10 -0
- package/dist/command/cli/ports/port-holder.js +25 -1
- package/dist/command/cli/project-name.d.ts +29 -1
- package/dist/command/cli/project-name.js +107 -2
- package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
- package/dist/command/cli/setup-mcp-cli.js +35 -12
- package/dist/command/cli/status/status-lines.d.ts +1 -0
- package/dist/command/cli/status/status-lines.js +47 -2
- package/dist/command/cli/status/workspace-links.d.ts +10 -0
- package/dist/command/cli/status/workspace-links.js +29 -0
- package/dist/command/cli/try-command.d.ts +96 -0
- package/dist/command/cli/try-command.js +362 -0
- package/dist/command/cli/tutorial.d.ts +0 -100
- package/dist/command/cli/tutorial.js +0 -181
- package/dist/command/cli/verify-results.d.ts +19 -0
- package/dist/command/cli/verify-results.js +29 -0
- package/dist/command/cli-onboarding.d.ts +0 -11
- package/dist/command/cli-onboarding.js +0 -15
- package/dist/command/cli.d.ts +20 -0
- package/dist/command/cli.js +130 -104
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +23 -1
- package/dist/command/daemon/daemon-resolve.js +79 -9
- package/dist/command/setup/agent-writer.d.ts +1 -1
- package/dist/command/setup/agent-writer.js +3 -2
- package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
- package/dist/command/setup/bringup/bridge-port.js +13 -3
- package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
- package/dist/command/setup/bringup/connect-lease.js +1 -0
- package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
- package/dist/command/setup/bringup/dev-server-wait.js +19 -0
- package/dist/command/setup/bringup/ensure-daemon.js +9 -2
- package/dist/command/setup/init/agent-restart.d.ts +23 -0
- package/dist/command/setup/init/agent-restart.js +28 -0
- package/dist/command/setup/init/init-port.d.ts +14 -1
- package/dist/command/setup/init/init-port.js +32 -2
- package/dist/command/setup/init/init-runtime.d.ts +22 -2
- package/dist/command/setup/init/init-runtime.js +114 -38
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +38 -9
- package/dist/command/setup/probe/existing-app.d.ts +12 -0
- package/dist/command/setup/probe/existing-app.js +14 -0
- package/dist/command/setup/remaining-steps.js +2 -1
- package/dist/command/setup/run-setup.d.ts +34 -9
- package/dist/command/setup/run-setup.js +65 -51
- package/dist/command/setup/setup-command.d.ts +25 -1
- package/dist/command/setup/setup-command.js +59 -4
- package/dist/command/setup/setup-mcp.js +25 -2
- package/dist/command/setup/tauri-signing.d.ts +19 -0
- package/dist/command/setup/tauri-signing.js +79 -0
- package/dist/command/setup/terminal/listeners.d.ts +10 -1
- package/dist/command/setup/terminal/listeners.js +37 -6
- package/dist/command/update/update-nudge.d.ts +9 -0
- package/dist/command/update/update-nudge.js +1 -1
- package/dist/command/update/updater.js +11 -15
- package/dist/command/version/version-nudge.js +3 -0
- package/dist/command/version/version-skew.d.ts +20 -1
- package/dist/command/version/version-skew.js +49 -4
- package/dist/features/crawl/crawl-tools.js +4 -0
- package/dist/features/crawl/crawl.d.ts +6 -0
- package/dist/features/crawl/crawl.js +23 -2
- package/dist/features/exhaust/ledger.d.ts +21 -14
- package/dist/features/exhaust/ledger.js +35 -9
- package/dist/features/harness/app-findings.d.ts +2 -0
- package/dist/features/harness/app-findings.js +52 -0
- package/dist/features/harness/drive-report.d.ts +61 -1
- package/dist/features/harness/drive-report.js +394 -26
- package/dist/features/harness/drive-runs.d.ts +120 -0
- package/dist/features/harness/drive-runs.js +289 -0
- package/dist/features/harness/drivers.d.ts +10 -14
- package/dist/features/harness/drivers.js +10 -14
- package/dist/features/harness/explore/console-pages.d.ts +15 -0
- package/dist/features/harness/explore/console-pages.js +146 -0
- package/dist/features/harness/explore/disparity.d.ts +19 -0
- package/dist/features/harness/explore/disparity.js +71 -0
- package/dist/features/harness/explore/fake-app.d.ts +16 -0
- package/dist/features/harness/explore/fake-app.js +49 -0
- package/dist/features/harness/explore/goal-search.d.ts +26 -0
- package/dist/features/harness/explore/goal-search.js +144 -0
- package/dist/features/harness/explore/page-tree.d.ts +49 -0
- package/dist/features/harness/explore/page-tree.js +148 -0
- package/dist/features/harness/explore/site-map.d.ts +34 -0
- package/dist/features/harness/explore/site-map.js +150 -0
- package/dist/features/harness/fill-values.d.ts +3 -73
- package/dist/features/harness/fill-values.js +3 -169
- package/dist/features/harness/goals.d.ts +82 -0
- package/dist/features/harness/goals.js +330 -0
- package/dist/features/harness/harness.d.ts +51 -1
- package/dist/features/harness/harness.js +207 -6
- package/dist/features/harness/platform/drive-target.d.ts +30 -0
- package/dist/features/harness/platform/drive-target.js +81 -0
- package/dist/features/harness/platform/local-apps.d.ts +127 -0
- package/dist/features/harness/platform/local-apps.js +280 -0
- package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
- package/dist/features/harness/platform/persona-credentials.js +69 -0
- package/dist/features/harness/platform/platform-drives.d.ts +61 -0
- package/dist/features/harness/platform/platform-drives.js +114 -0
- package/dist/features/harness/platform/refusal.d.ts +52 -0
- package/dist/features/harness/platform/refusal.js +71 -0
- package/dist/features/harness/platform/remote-drive.d.ts +186 -0
- package/dist/features/harness/platform/remote-drive.js +378 -0
- package/dist/features/harness/platform/script.d.ts +94 -0
- package/dist/features/harness/platform/script.js +260 -0
- package/dist/features/harness/platform/server-driver.d.ts +54 -0
- package/dist/features/harness/platform/server-driver.js +182 -0
- package/dist/features/harness/platform-config.d.ts +41 -1
- package/dist/features/harness/platform-config.js +106 -9
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/app-controls.d.ts +5 -0
- package/dist/features/harness/script/app-controls.js +40 -0
- package/dist/features/harness/script/lane-ids.d.ts +14 -0
- package/dist/features/harness/script/lane-ids.js +16 -0
- package/dist/features/harness/script/script-run.d.ts +70 -0
- package/dist/features/harness/script/script-run.js +606 -0
- package/dist/features/license/license.d.ts +2 -2
- package/dist/features/visual/step-shots.d.ts +31 -0
- package/dist/features/visual/step-shots.js +231 -0
- package/dist/features/visual/visual-tools.d.ts +10 -1
- package/dist/features/visual/visual-tools.js +62 -17
- package/dist/hooks/client-directory.d.ts +18 -0
- package/dist/hooks/client-directory.js +57 -0
- package/dist/hooks/coding-agents.d.ts +34 -0
- package/dist/hooks/coding-agents.js +117 -0
- package/dist/hooks/driven-by.d.ts +23 -0
- package/dist/hooks/driven-by.js +56 -0
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/hooks/hook-commands.js +15 -4
- package/dist/hooks/tool-log.d.ts +9 -0
- package/dist/hooks/tool-log.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +80 -243
- package/dist/judgement/capsule/capsule-store.d.ts +2 -2
- package/dist/judgement/capsule/causal-summary.d.ts +15 -1
- package/dist/judgement/capsule/causal-summary.js +33 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
- package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
- package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
- package/dist/judgement/runs/artifact/gap-summary.js +12 -3
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
- package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
- package/dist/judgement/runs/artifact/run-store.js +195 -3
- package/dist/judgement/runs/context-tools.js +59 -1
- package/dist/judgement/runs/default-run-id.d.ts +3 -0
- package/dist/judgement/runs/default-run-id.js +16 -0
- package/dist/judgement/runs/drive-run.d.ts +71 -1
- package/dist/judgement/runs/drive-run.js +317 -5
- package/dist/judgement/runs/repair-prompt.js +1 -1
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +13 -3
- package/dist/judgement/runs/runner-port.d.ts +5 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +5 -2
- package/dist/judgement/runs/verification-sync.js +40 -18
- package/dist/language/flows/change/gate.d.ts +10 -0
- package/dist/language/flows/change/gate.js +22 -0
- package/dist/language/flows/decision.js +36 -1
- package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
- package/dist/language/flows/fields/flow-secret-field.js +25 -2
- package/dist/language/flows/flow-anchor.d.ts +61 -10
- package/dist/language/flows/flow-anchor.js +98 -6
- package/dist/language/flows/flow-cross-step.d.ts +15 -0
- package/dist/language/flows/flow-cross-step.js +21 -0
- package/dist/language/flows/flow-intent.d.ts +1 -0
- package/dist/language/flows/flow-journey.d.ts +6 -0
- package/dist/language/flows/flow-journey.js +20 -0
- package/dist/language/flows/flow-learning.d.ts +4 -0
- package/dist/language/flows/flow-learning.js +45 -14
- package/dist/language/flows/flow-mutate-tools.js +5 -3
- package/dist/language/flows/flow-replay-run.d.ts +23 -9
- package/dist/language/flows/flow-replay-run.js +115 -110
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +40 -1
- package/dist/language/flows/flow-replay.js +110 -22
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-scope.js +5 -1
- package/dist/language/flows/flow-step-runners.d.ts +22 -2
- package/dist/language/flows/flow-step-runners.js +247 -47
- package/dist/language/flows/flow-store-for-session.d.ts +2 -2
- package/dist/language/flows/flow-store-for-session.js +7 -3
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +112 -89
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +74 -12
- package/dist/language/flows/heal-run.js +6 -4
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/flake.d.ts +2 -2
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
- package/dist/language/flows/recording/tape/recordings.js +95 -13
- package/dist/language/flows/replay-from-hud.d.ts +20 -0
- package/dist/language/flows/replay-from-hud.js +51 -0
- package/dist/language/flows/replay.d.ts +9 -5
- package/dist/language/flows/replay.js +56 -15
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/suite/suite-flakes.js +2 -0
- package/dist/language/flows/suite-selection.d.ts +2 -15
- package/dist/language/flows/suite-selection.js +4 -3
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +202 -191
- package/dist/launch-chromium.d.ts +27 -5
- package/dist/launch-chromium.js +38 -8
- package/dist/memory/cloud/cloud-config.d.ts +22 -1
- package/dist/memory/cloud/cloud-config.js +34 -5
- package/dist/memory/cloud/cloud-sync.d.ts +17 -14
- package/dist/memory/cloud/cloud-sync.js +15 -4
- package/dist/memory/cloud/harness-config.d.ts +75 -1
- package/dist/memory/cloud/harness-config.js +115 -24
- package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
- package/dist/memory/cloud/hud-notices-source.js +128 -0
- package/dist/memory/cloud/memory-scope.d.ts +161 -0
- package/dist/memory/cloud/memory-scope.js +227 -0
- package/dist/memory/cloud/sync-cycle.d.ts +44 -7
- package/dist/memory/cloud/sync-cycle.js +129 -15
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +121 -9
- package/dist/memory/cloud/sync-disk.d.ts +1 -1
- package/dist/memory/cloud/sync-disk.js +31 -10
- package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
- package/dist/memory/cloud/sync-screenshots.js +105 -0
- package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
- package/dist/memory/cloud/unsynced-roots.js +166 -0
- package/dist/memory/impact/account-watch.d.ts +34 -0
- package/dist/memory/impact/account-watch.js +59 -0
- package/dist/memory/impact/impact-recorder.d.ts +8 -0
- package/dist/memory/impact/impact-recorder.js +12 -2
- package/dist/memory/impact/impact-store.d.ts +17 -4
- package/dist/memory/impact/impact-store.js +169 -63
- package/dist/memory/intent/inline-intent.d.ts +1 -0
- package/dist/memory/intent/intent-shard-store.js +16 -4
- package/dist/memory/intent/intent-shard.d.ts +14 -2
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +122 -4
- package/dist/memory/intent/open-intents.d.ts +6 -0
- package/dist/memory/intent/open-intents.js +10 -1
- package/dist/memory/intent/settled-words.d.ts +24 -0
- package/dist/memory/intent/settled-words.js +130 -0
- package/dist/memory/journal/drive-flow.d.ts +16 -0
- package/dist/memory/journal/drive-flow.js +34 -2
- package/dist/memory/journal/drive-run-flush.d.ts +2 -0
- package/dist/memory/journal/drive-run-flush.js +20 -5
- package/dist/memory/journal/envelope.d.ts +8 -8
- package/dist/memory/journal/journal-recorder.js +52 -3
- package/dist/memory/journal/on-disk/retention.d.ts +8 -0
- package/dist/memory/journal/on-disk/retention.js +32 -2
- package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
- package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +42 -9
- package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
- package/dist/memory/project/artifact-root-resolver.js +125 -16
- package/dist/memory/project/artifact-root.d.ts +46 -8
- package/dist/memory/project/artifact-root.js +89 -10
- package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
- package/dist/memory/project/dir/reticle-dir.js +26 -3
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- package/dist/memory/project/project-tools.js +22 -3
- package/dist/memory/project/root-claims.d.ts +6 -0
- package/dist/memory/project/root-claims.js +39 -0
- package/dist/memory/project/session-root.d.ts +26 -1
- package/dist/memory/project/session-root.js +49 -5
- package/dist/memory/project/sync-status.d.ts +85 -0
- package/dist/memory/project/sync-status.js +224 -0
- package/dist/memory/recall/memory-tools.js +47 -2
- package/dist/memory/recall/platform-memory.d.ts +34 -0
- package/dist/memory/recall/platform-memory.js +139 -0
- package/dist/memory/recall/project-memory.d.ts +19 -0
- package/dist/memory/recall/project-memory.js +80 -13
- package/dist/portal/bridge/bridge.d.ts +9 -3
- package/dist/portal/bridge/bridge.js +82 -22
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -0
- package/dist/portal/bridge/pairing-token.d.ts +9 -0
- package/dist/portal/bridge/pairing-token.js +17 -0
- package/dist/portal/bridge/wrong-path.d.ts +17 -0
- package/dist/portal/bridge/wrong-path.js +35 -0
- package/dist/portal/input/network-mock-tools.js +11 -2
- package/dist/portal/input/real-input.d.ts +83 -10
- package/dist/portal/input/real-input.js +218 -30
- package/dist/portal/input/viewport-tools.js +3 -3
- package/dist/portal/pool/browser-pool.d.ts +70 -9
- package/dist/portal/pool/browser-pool.js +190 -37
- package/dist/portal/pool/context-permissions.d.ts +33 -0
- package/dist/portal/pool/context-permissions.js +33 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
- package/dist/portal/pool/lease-marker-stamp.js +49 -0
- package/dist/portal/pool/playwright-launcher.d.ts +35 -0
- package/dist/portal/pool/playwright-launcher.js +64 -3
- package/dist/portal/pool/pool-contract.d.ts +28 -5
- package/dist/portal/session/agent-link.d.ts +8 -0
- package/dist/portal/session/agent-link.js +17 -0
- package/dist/portal/session/command-payload.d.ts +8 -0
- package/dist/portal/session/command-payload.js +24 -0
- package/dist/portal/session/daemon-answers.d.ts +3 -3
- package/dist/portal/session/daemon-answers.js +4 -2
- package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
- package/dist/portal/session/dev-server/dev-command.js +87 -12
- package/dist/portal/session/facts/departure-note.d.ts +22 -0
- package/dist/portal/session/facts/departure-note.js +47 -0
- package/dist/portal/session/facts/observed-state.d.ts +16 -18
- package/dist/portal/session/facts/observed-state.js +46 -3
- package/dist/portal/session/facts/session-replaced.d.ts +5 -0
- package/dist/portal/session/facts/session-replaced.js +5 -0
- package/dist/portal/session/first-run-wiring.d.ts +42 -0
- package/dist/portal/session/first-run-wiring.js +132 -0
- package/dist/portal/session/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/human/notes-ledger.d.ts +20 -0
- package/dist/portal/session/human/notes-ledger.js +55 -0
- package/dist/portal/session/human/review-store.d.ts +12 -0
- package/dist/portal/session/human/review-store.js +18 -10
- package/dist/portal/session/live-control-tools.d.ts +0 -13
- package/dist/portal/session/live-control-tools.js +107 -13
- package/dist/portal/session/narration-args.d.ts +5 -0
- package/dist/portal/session/narration-args.js +17 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
- package/dist/portal/session/no-session-diagnosis.js +46 -9
- package/dist/portal/session/no-session-next-action.d.ts +31 -0
- package/dist/portal/session/no-session-next-action.js +159 -60
- package/dist/portal/session/no-session-watch.d.ts +14 -1
- package/dist/portal/session/no-session-watch.js +227 -17
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/presence/session-mirror.js +3 -0
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/serving-directory.d.ts +27 -0
- package/dist/portal/session/serving-directory.js +45 -0
- package/dist/portal/session/session-health.d.ts +18 -0
- package/dist/portal/session/session-health.js +9 -1
- package/dist/portal/session/session-info.d.ts +8 -1
- package/dist/portal/session/session-info.js +8 -1
- package/dist/portal/session/session-manager.d.ts +39 -0
- package/dist/portal/session/session-manager.js +98 -11
- package/dist/portal/session/session-reaper.js +4 -1
- package/dist/portal/session/session-successor.d.ts +13 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session-tools.js +26 -3
- package/dist/portal/session/session.d.ts +22 -30
- package/dist/portal/session/session.js +81 -79
- package/dist/portal/session/timing/command-timeout.js +25 -1
- package/dist/portal/session/timing/wall-clock.d.ts +1 -1
- package/dist/portal/session/timing/wall-clock.js +1 -1
- package/dist/portal/session/zero-install-first-call.d.ts +31 -0
- package/dist/portal/session/zero-install-first-call.js +88 -0
- package/dist/start-options.d.ts +12 -0
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +23 -1
- package/dist/status-payload.js +36 -1
- package/dist/surface/http-server.js +18 -2
- package/dist/surface/mcp/attach-memory.d.ts +1 -0
- package/dist/surface/mcp/attach-memory.js +12 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
- package/dist/surface/mcp/mcp-proxy.js +65 -13
- package/dist/surface/mcp/mcp.d.ts +34 -6
- package/dist/surface/mcp/mcp.js +61 -17
- package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
- package/dist/surface/mcp/proxy/drive-calls.js +27 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
- package/dist/surface/mcp/server-instructions.d.ts +4 -2
- package/dist/surface/mcp/server-instructions.js +32 -14
- package/dist/surface/mcp/shared-params.js +2 -2
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +1 -0
- package/dist/surface/tools/account-tool.d.ts +22 -0
- package/dist/surface/tools/account-tool.js +157 -0
- package/dist/surface/tools/act/act-danger.d.ts +11 -0
- package/dist/surface/tools/act/act-danger.js +38 -1
- package/dist/surface/tools/act/act-observation.d.ts +33 -0
- package/dist/surface/tools/act/act-observation.js +57 -0
- package/dist/surface/tools/act/act-preflight.js +25 -2
- package/dist/surface/tools/act/act-target.js +8 -3
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
- package/dist/surface/tools/act/resolve-target.d.ts +1 -1
- package/dist/surface/tools/act/resolve-target.js +18 -3
- package/dist/surface/tools/act/screen-request.d.ts +34 -0
- package/dist/surface/tools/act/screen-request.js +113 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
- package/dist/surface/tools/act/sequence-grade.js +13 -2
- package/dist/surface/tools/act/settle-in-flight.js +25 -3
- package/dist/surface/tools/act-sequence-tool.js +138 -29
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +71 -41
- package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
- package/dist/surface/tools/agent/app-notes-learning.js +80 -0
- package/dist/surface/tools/agent/app-notes.d.ts +4 -0
- package/dist/surface/tools/agent/app-notes.js +48 -0
- package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
- package/dist/surface/tools/agent/build-staleness.js +62 -0
- package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
- package/dist/surface/tools/agent/compact-envelope.js +374 -0
- package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
- package/dist/surface/tools/agent/for-the-agent.js +44 -0
- package/dist/surface/tools/agent/notices.d.ts +50 -0
- package/dist/surface/tools/agent/notices.js +152 -0
- package/dist/surface/tools/agent/reteach.d.ts +11 -0
- package/dist/surface/tools/agent/reteach.js +50 -0
- package/dist/surface/tools/args/alias-args.d.ts +5 -0
- package/dist/surface/tools/args/alias-args.js +10 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
- package/dist/surface/tools/assert/assert-source.d.ts +15 -0
- package/dist/surface/tools/assert/assert-source.js +40 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +42 -17
- package/dist/surface/tools/browser-tools.js +51 -2
- package/dist/surface/tools/chat-drives.d.ts +101 -0
- package/dist/surface/tools/chat-drives.js +409 -0
- package/dist/surface/tools/coverage-tools.d.ts +2 -10
- package/dist/surface/tools/coverage-tools.js +2 -53
- package/dist/surface/tools/dynamic-tools.js +29 -1
- package/dist/surface/tools/empty-session-list.d.ts +51 -0
- package/dist/surface/tools/empty-session-list.js +120 -0
- package/dist/surface/tools/error-recovery.d.ts +14 -0
- package/dist/surface/tools/error-recovery.js +105 -8
- package/dist/surface/tools/explore-tools.d.ts +31 -1
- package/dist/surface/tools/explore-tools.js +438 -66
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +18 -3
- package/dist/surface/tools/gap-novelty.d.ts +3 -1
- package/dist/surface/tools/gap-novelty.js +8 -1
- package/dist/surface/tools/harness-explore.d.ts +118 -57
- package/dist/surface/tools/harness-explore.js +344 -292
- package/dist/surface/tools/harness-gate.d.ts +88 -0
- package/dist/surface/tools/harness-gate.js +235 -0
- package/dist/surface/tools/harness-hunt.d.ts +43 -0
- package/dist/surface/tools/harness-hunt.js +215 -0
- package/dist/surface/tools/harness-plan.d.ts +17 -0
- package/dist/surface/tools/harness-plan.js +38 -0
- package/dist/surface/tools/harness-script.d.ts +30 -0
- package/dist/surface/tools/harness-script.js +560 -0
- package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
- package/dist/surface/tools/harness-tab-guard.js +27 -0
- package/dist/surface/tools/harness-toolset.d.ts +22 -1
- package/dist/surface/tools/harness-toolset.js +101 -7
- package/dist/surface/tools/human-notes.d.ts +16 -0
- package/dist/surface/tools/human-notes.js +27 -0
- package/dist/surface/tools/invoke-tool.d.ts +5 -2
- package/dist/surface/tools/invoke-tool.js +263 -85
- package/dist/surface/tools/lease-hint.js +26 -5
- package/dist/surface/tools/lease-permissions.d.ts +33 -0
- package/dist/surface/tools/lease-permissions.js +73 -0
- package/dist/surface/tools/lease-readiness.d.ts +38 -0
- package/dist/surface/tools/lease-readiness.js +57 -0
- package/dist/surface/tools/lease-seed.d.ts +49 -0
- package/dist/surface/tools/lease-seed.js +167 -0
- package/dist/surface/tools/lease-tools.d.ts +13 -24
- package/dist/surface/tools/lease-tools.js +146 -197
- package/dist/surface/tools/live-call-text.js +4 -4
- package/dist/surface/tools/merge-tools.js +42 -2
- package/dist/surface/tools/merged-name-redirect.js +4 -0
- package/dist/surface/tools/next-step.d.ts +29 -0
- package/dist/surface/tools/next-step.js +214 -0
- package/dist/surface/tools/observe-tools.js +45 -9
- package/dist/surface/tools/platform-moment.d.ts +72 -0
- package/dist/surface/tools/platform-moment.js +296 -0
- package/dist/surface/tools/query-hint-schema.d.ts +7 -0
- package/dist/surface/tools/query-hint-schema.js +10 -0
- package/dist/surface/tools/read-tools.js +71 -14
- package/dist/surface/tools/real-input-attempt.js +96 -13
- package/dist/surface/tools/reticle-result.d.ts +120 -0
- package/dist/surface/tools/reticle-result.js +364 -0
- package/dist/surface/tools/tool-kit.d.ts +83 -3
- package/dist/surface/tools/tool-kit.js +77 -7
- package/dist/surface/tools/tools.js +43 -59
- package/dist/telemetry/account-envelope.d.ts +7 -0
- package/dist/telemetry/account-envelope.js +61 -0
- package/dist/telemetry/agent-client.d.ts +15 -0
- package/dist/telemetry/agent-client.js +57 -0
- package/dist/telemetry/app-instrumented.js +9 -2
- package/dist/telemetry/argument-shape.d.ts +7 -0
- package/dist/telemetry/argument-shape.js +86 -1
- package/dist/telemetry/automation-hint.d.ts +2 -3
- package/dist/telemetry/automation-hint.js +33 -8
- package/dist/telemetry/cli-telemetry.js +7 -2
- package/dist/telemetry/daemon-telemetry.js +3 -0
- package/dist/telemetry/error-fingerprint.d.ts +10 -1
- package/dist/telemetry/error-fingerprint.js +61 -5
- package/dist/telemetry/feedback-cli.d.ts +0 -13
- package/dist/telemetry/feedback-cli.js +0 -77
- package/dist/telemetry/feedback.d.ts +13 -0
- package/dist/telemetry/feedback.js +183 -17
- package/dist/telemetry/harness-run.d.ts +18 -0
- package/dist/telemetry/harness-run.js +80 -0
- package/dist/telemetry/hud-events.d.ts +16 -0
- package/dist/telemetry/hud-events.js +27 -0
- package/dist/telemetry/hud-metrics.d.ts +29 -6
- package/dist/telemetry/hud-metrics.js +116 -25
- package/dist/telemetry/init-telemetry.js +2 -2
- package/dist/telemetry/install-source.d.ts +13 -25
- package/dist/telemetry/install-source.js +44 -3
- package/dist/telemetry/mcp-connection.d.ts +0 -14
- package/dist/telemetry/mcp-connection.js +5 -1
- package/dist/telemetry/onboarding-firsts.d.ts +32 -0
- package/dist/telemetry/onboarding-firsts.js +81 -6
- package/dist/telemetry/platform-linked.d.ts +5 -0
- package/dist/telemetry/platform-linked.js +32 -0
- package/dist/telemetry/project-profile.js +5 -3
- package/dist/telemetry/proxy-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +15 -4
- package/dist/telemetry/session-metrics.js +88 -52
- package/dist/telemetry/telemetry.d.ts +38 -2
- package/dist/telemetry/telemetry.js +144 -34
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +13 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +20 -6
- package/docs/README.md +3 -3
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +25 -28
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +33 -28
- package/docs/benchmarks.md +5 -5
- package/docs/best-practices.mdx +27 -9
- package/docs/capabilities.mdx +14 -16
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +54 -75
- package/docs/cli/doctor.mdx +14 -3
- package/docs/cli/drive.mdx +20 -14
- package/docs/cli/feedback.mdx +3 -3
- package/docs/cli/gate.mdx +7 -2
- package/docs/cli/help.mdx +50 -55
- package/docs/cli/init.mdx +43 -28
- package/docs/cli/license.mdx +12 -8
- package/docs/cli/mcp.mdx +4 -4
- package/docs/cli/open.mdx +3 -3
- package/docs/cli/report.mdx +4 -2
- package/docs/cli/restart.mdx +2 -2
- package/docs/cli/rollback.mdx +14 -8
- package/docs/cli/serve.mdx +4 -4
- package/docs/cli/setup.mdx +23 -0
- package/docs/cli/status.mdx +18 -5
- package/docs/cli/stop.mdx +67 -8
- package/docs/cli/try.mdx +62 -0
- package/docs/cli/update.mdx +4 -3
- package/docs/cli/verify.mdx +17 -6
- package/docs/cli/version.mdx +5 -4
- package/docs/cli.mdx +111 -42
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +9 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +7 -8
- package/docs/faq.mdx +3 -3
- package/docs/first-drive.md +5 -4
- package/docs/flows.md +35 -27
- package/docs/for-agents.md +4 -5
- package/docs/frameworks.mdx +32 -21
- package/docs/getting-started.md +65 -61
- package/docs/human-control.md +16 -16
- package/docs/index.mdx +15 -42
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +23 -13
- package/docs/instrumentation.mdx +5 -3
- package/docs/integration-patterns.md +7 -7
- package/docs/license-activation.mdx +1 -1
- package/docs/multi-agent-testing.md +24 -6
- package/docs/packages/babel-plugin.mdx +4 -2
- package/docs/packages/browser.mdx +16 -10
- package/docs/packages/core.mdx +12 -5
- package/docs/packages/electron.mdx +3 -2
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/eslint-plugin.mdx +18 -12
- package/docs/packages/next.mdx +8 -7
- package/docs/packages/open-verification.mdx +1 -1
- package/docs/packages/server.mdx +5 -5
- package/docs/packages/tauri.mdx +9 -9
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +32 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +69 -30
- package/docs/required-checks.md +8 -7
- package/docs/reticle-manual.md +15 -5
- package/docs/skill-file.mdx +17 -79
- package/docs/skill-setup.md +9 -9
- package/docs/skill.md +200 -0
- package/docs/system-map.md +7 -7
- package/docs/telemetry.md +23 -25
- package/docs/testing.md +4 -4
- package/docs/token-efficiency.md +12 -12
- package/docs/tools/act-and-wait.mdx +9 -2
- package/docs/tools/act-sequence.mdx +6 -7
- package/docs/tools/act.mdx +2 -2
- package/docs/tools/assert.mdx +18 -17
- package/docs/tools/console.mdx +9 -9
- package/docs/tools/inspect.mdx +16 -7
- package/docs/tools/look.mdx +24 -0
- package/docs/tools/navigate.mdx +5 -3
- package/docs/tools/network.mdx +2 -2
- package/docs/tools/observe.mdx +6 -6
- package/docs/tools/overview.mdx +34 -33
- package/docs/tools/query.mdx +5 -5
- package/docs/tools/session-and-feedback.mdx +22 -13
- package/docs/tools/sessions.mdx +8 -8
- package/docs/tools/snapshot.mdx +6 -5
- package/docs/tools/state.mdx +9 -9
- package/docs/tools/tools-and-run.mdx +26 -24
- package/docs/tools/verify.mdx +28 -0
- package/docs/tools/wait-for.mdx +8 -4
- package/docs/troubleshooting.mdx +21 -6
- package/docs/usage.md +55 -46
- package/docs/use-cases.mdx +3 -3
- package/docs/vs-chrome-devtools-mcp.mdx +9 -6
- package/docs/vs-playwright-mcp.mdx +3 -1
- package/docs/what-is-recorded.md +17 -5
- package/docs/what-is-reticle.mdx +5 -3
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -241
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- package/dist/features/harness/driver.d.ts +0 -50
- package/dist/features/harness/driver.js +0 -236
- package/dist/features/harness/jev-driver.d.ts +0 -188
- package/dist/features/harness/jev-driver.js +0 -678
- package/dist/features/harness/openai-driver.d.ts +0 -58
- package/dist/features/harness/openai-driver.js +0 -206
- package/dist/judgement/hunt/hunt-report.d.ts +0 -49
- package/dist/judgement/hunt/hunt-report.js +0 -84
- package/dist/language/flows/buddy-status.d.ts +0 -25
- package/dist/language/flows/buddy-status.js +0 -32
- package/dist/language/flows/change/watch-batcher.d.ts +0 -18
- package/dist/language/flows/change/watch-batcher.js +0 -19
- package/dist/memory/cloud/harness-offer.d.ts +0 -44
- package/dist/memory/cloud/harness-offer.js +0 -145
- package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
- package/dist/memory/project/dir/fill-value-store.js +0 -88
- package/dist/surface/tools/feature-capture.d.ts +0 -151
- package/dist/surface/tools/feature-capture.js +0 -235
- package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
- package/dist/surface/tools/tool-hit-rate.js +0 -90
- package/dist/telemetry/harness-drive.d.ts +0 -4
- package/dist/telemetry/harness-drive.js +0 -35
- package/dist/telemetry/identify.d.ts +0 -22
- package/dist/telemetry/identify.js +0 -73
- package/docs/cli/capsules.mdx +0 -70
- package/docs/cli/hunt.mdx +0 -73
- package/docs/cli/identify.mdx +0 -76
- package/docs/cli/kill.mdx +0 -91
- package/docs/cli/watch.mdx +0 -62
- package/docs/local-registry.md +0 -143
|
@@ -0,0 +1,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
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InstrumentationGap, JournalVerdictEffect } from '@reticlehq/core/artifacts';
|
|
2
|
-
import type
|
|
2
|
+
import { type Predicate } from '@reticlehq/engine/question/predicate/predicate.js';
|
|
3
3
|
import type { Session } from '../../../portal/session/session.js';
|
|
4
4
|
import { type Contradiction } from '@reticlehq/engine/disagreement/contradictions.js';
|
|
5
5
|
/**
|
|
@@ -4,19 +4,22 @@ import { gapsForAction } from '@reticlehq/engine/evidence/instrumentation-gaps.j
|
|
|
4
4
|
import { noteSessionGaps } from '@reticlehq/engine/evidence/gap-ledger.js';
|
|
5
5
|
import { declaresState } from '@reticlehq/engine/question/predicate/predicate-asks.js';
|
|
6
6
|
import { isStateUnwatched } from '@reticlehq/engine/evidence/blind-spots.js';
|
|
7
|
+
import { hiddenMatchNote } from '@reticlehq/engine/evidence/already-true.js';
|
|
8
|
+
import { provenExpectedLinks, } from '@reticlehq/engine/question/predicate/predicate.js';
|
|
7
9
|
import { findContradictions, } from '@reticlehq/engine/disagreement/contradictions.js';
|
|
8
10
|
import { crashedRuleNotes } from '@reticlehq/engine/disagreement/contradiction-folds.js';
|
|
9
11
|
import { declaredExpectations, declaresBodyIndependentChannel, } from '@reticlehq/engine/question/declared.js';
|
|
10
12
|
import { absenceBlindSpotNote, blindSpotsFromState, buildCoverageStatement, restsOnCompleteWindow, Coverage, impeachesCapture, transportGapNote, } from '@reticlehq/engine/evidence/blind-spots.js';
|
|
11
13
|
import { buildHonestyBlock } from '@reticlehq/engine/evidence/honesty.js';
|
|
12
|
-
import { acceptedWriteLabels } from '@reticlehq/engine/evidence/accepted-write.js';
|
|
14
|
+
import { acceptedWriteLabels, hasAcceptedWrite, } from '@reticlehq/engine/evidence/accepted-write.js';
|
|
13
15
|
import { unreadWriteLabels } from '@reticlehq/engine/evidence/unread-outcome.js';
|
|
14
16
|
import { decideVerified } from '@reticlehq/engine/evidence/verified.js';
|
|
15
17
|
import { describeWaitTarget, namedNetIsInFlight } from '@reticlehq/engine/evidence/unsettled.js';
|
|
16
18
|
import { inFlightRequestLabels, repeatedRequestLabels, } from '../act/settle-in-flight.js';
|
|
17
19
|
import { gradeOfPredicate } from './assert-grade.js';
|
|
18
|
-
import { assertSource } from './assert-source.js';
|
|
20
|
+
import { assertSource, stampedSourceIn } from './assert-source.js';
|
|
19
21
|
import { VerdictAttribution, verdictAttributionOf } from '@reticlehq/core';
|
|
22
|
+
import { noteSourceSeen } from '../../../portal/session/recorded-gaps.js';
|
|
20
23
|
/**
|
|
21
24
|
* The honesty verdict for a plain `reticle_assert`.
|
|
22
25
|
*
|
|
@@ -56,8 +59,12 @@ changeUndeclared) {
|
|
|
56
59
|
// over-warning, which is the correct direction here: the failure this guards against is a green
|
|
57
60
|
// that implies coverage it never had, and a needless caveat costs the agent a sentence.
|
|
58
61
|
const spots = blindSpotsFromState(session.blindSpots(), session.runtime);
|
|
59
|
-
|
|
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);
|
|
60
65
|
const absenceBlindSpot = absenceBlindSpotNote(predicate, spots);
|
|
66
|
+
// A green resting on hidden matches says the node exists, not that it shows (#1408).
|
|
67
|
+
const hiddenMatch = hiddenMatchNote(predicate, evidence);
|
|
61
68
|
// Omitted entirely when coverage is full, so an intact page pays nothing and the field's PRESENCE
|
|
62
69
|
// is the warning.
|
|
63
70
|
const coverage = Coverage.PARTIAL === statement.coverage
|
|
@@ -90,12 +97,15 @@ changeUndeclared) {
|
|
|
90
97
|
background: session.background,
|
|
91
98
|
expectedFailures: declared.netFailures,
|
|
92
99
|
namedNetUrls: declared.netUrls,
|
|
100
|
+
repeatableNetUrls: declared.repeatableNetUrls,
|
|
93
101
|
renderProved: pass && declared.rendersContent,
|
|
94
102
|
...(actCursor !== undefined && actCursor >= since ? { actionSince: actCursor } : {}),
|
|
95
103
|
});
|
|
96
104
|
// Only a spot that IMPEACHES the capture downgrades a general verdict. Structural boundaries are
|
|
97
105
|
// reported as coverage; the narrower absence exception is computed separately above.
|
|
98
|
-
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)));
|
|
99
109
|
// A gap in the WINDOW, as opposed to a standing limit of the page. Both mean the same thing to the
|
|
100
110
|
// rule — part of what happened was not seen — so both belong in `blindSpots`, which is the only
|
|
101
111
|
// input `decideVerified` reads for that.
|
|
@@ -115,7 +125,17 @@ changeUndeclared) {
|
|
|
115
125
|
// A consumer rule that crashed belongs here too: the engine ran with fewer rules than it claims,
|
|
116
126
|
// so part of what happened may simply not have been looked for.
|
|
117
127
|
const impeachingNotes = [impeaching.note, gap, ...crashedRuleNotes()].filter((n) => n !== undefined);
|
|
118
|
-
|
|
128
|
+
// Which 202s are still the claim's outcome to wait for (#1120). The proven links decide the
|
|
129
|
+
// exemption, so a 200 branch of an `anyOf` cannot exempt the 202 that also fired; and the walk
|
|
130
|
+
// only runs when a 202 is actually waiting, because that is the only case it can change.
|
|
131
|
+
const assertedAccepts = pass && hasAcceptedWrite(windowEvents)
|
|
132
|
+
? await provenExpectedLinks(session, predicate, since)
|
|
133
|
+
: [];
|
|
134
|
+
const outcomePending = acceptedWriteLabels(windowEvents, {
|
|
135
|
+
appUrl: session.url,
|
|
136
|
+
background: session.background,
|
|
137
|
+
asserted: assertedAccepts,
|
|
138
|
+
});
|
|
119
139
|
const outcomeUnread = unreadWriteLabels(windowEvents);
|
|
120
140
|
const stillInFlight = inFlightRequestLabels(windowEvents, session.url, session.background);
|
|
121
141
|
const effectiveInconclusive = inconclusive ?? (!pass ? session.preconditionFailure?.() : undefined);
|
|
@@ -160,6 +180,7 @@ changeUndeclared) {
|
|
|
160
180
|
...(effectiveInconclusive === undefined ? {} : { inconclusive: effectiveInconclusive }),
|
|
161
181
|
...(true === observationLost ? { observationLost: true, lastUrl: session.url } : {}),
|
|
162
182
|
...(absenceBlindSpot === undefined ? {} : { absenceBlindSpot }),
|
|
183
|
+
...(hiddenMatch === undefined ? {} : { hiddenMatch }),
|
|
163
184
|
...(namedNetIsInFlight(predicate, stillInFlight) ? { namedRequestInFlight: true } : {}),
|
|
164
185
|
honesty: buildHonestyBlock({
|
|
165
186
|
grade: gradeOfPredicate(predicate),
|
|
@@ -192,13 +213,25 @@ changeUndeclared) {
|
|
|
192
213
|
repeated: repeatedRequestLabels(windowEvents),
|
|
193
214
|
},
|
|
194
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
|
+
});
|
|
195
225
|
// The same rule the act path uses, fed by what THIS path knows. An assertion drives nothing, so
|
|
196
|
-
// only two of the four gates can fire here: a red with
|
|
197
|
-
//
|
|
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).
|
|
198
231
|
const gaps = gapsForAction({
|
|
199
232
|
pass,
|
|
200
233
|
...(changeUndeclared === undefined ? {} : { changeUndeclared }),
|
|
201
|
-
source: session.lastAct.source(),
|
|
234
|
+
source: source ?? stampedSourceIn(evidence) ?? session.lastAct.source(),
|
|
202
235
|
stateAsked: declaresState(predicate),
|
|
203
236
|
stateUnwatched: isStateUnwatched(spots),
|
|
204
237
|
// What the app DECLARED, so an under-instrumented one is told without having to be asked.
|
|
@@ -209,16 +242,8 @@ changeUndeclared) {
|
|
|
209
242
|
domMutated: false,
|
|
210
243
|
signalsFired: 0,
|
|
211
244
|
});
|
|
245
|
+
noteSourceSeen(session, source ?? stampedSourceIn(evidence));
|
|
212
246
|
noteSessionGaps(session, gaps);
|
|
213
|
-
// The one file:line this verdict is entitled to: its own evidence, or — for a failure with no DOM
|
|
214
|
-
// clause to point at — the control last driven. Returned so the RESPONSE can echo the same value
|
|
215
|
-
// the journal keeps; one verdict must never carry two different pointers.
|
|
216
|
-
const source = assertSource({
|
|
217
|
-
predicate,
|
|
218
|
-
evidence,
|
|
219
|
-
pass,
|
|
220
|
-
lastActSource: session.lastAct.source(),
|
|
221
|
-
});
|
|
222
247
|
// Who can act on this verdict, derived from the clause that decided it — see `attributedTo` below.
|
|
223
248
|
const attributedTo = verdictAttributionOf(decision.verifiedReason);
|
|
224
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']));
|
|
@@ -96,6 +132,10 @@ export const BROWSER_TOOLS = [
|
|
|
96
132
|
// which reads whatever is at the target afterwards, cannot tell the two apart on its own.
|
|
97
133
|
const target = absoluteTarget(url, session.url);
|
|
98
134
|
const priorIds = idsAtTarget(deps.sessions, target);
|
|
135
|
+
// The document the tab is on NOW. Sampled before dispatch because the replacement can
|
|
136
|
+
// connect while the NAVIGATE reply is still pending, and reading it after the await would
|
|
137
|
+
// record the replacement as the starting document (#1320).
|
|
138
|
+
const navigatedFromDocumentId = session.currentDocumentId;
|
|
99
139
|
session.beginAction(ReticleTool.NAVIGATE, { url });
|
|
100
140
|
// Same floor as the reload path above, for the same reason: going to a new URL replaces the
|
|
101
141
|
// document just as thoroughly. `beginAction` attributes events to this action; it does not move
|
|
@@ -112,13 +152,22 @@ export const BROWSER_TOOLS = [
|
|
|
112
152
|
const arrival = true === result.ok
|
|
113
153
|
? await awaitArrival(deps.sessions, target, {
|
|
114
154
|
// Keep the original Session object and URL so arrival detection can distinguish
|
|
115
|
-
// an in-progress navigation from a document that arrived somewhere else.
|
|
155
|
+
// an in-progress navigation from a document that arrived somewhere else. The
|
|
156
|
+
// document identity lets a same-URL navigation wait for its replacement instead
|
|
157
|
+
// of confirming the document it is about to destroy (#1320).
|
|
116
158
|
navigatedSession: session,
|
|
117
159
|
navigatedFrom: session.url,
|
|
160
|
+
...(navigatedFromDocumentId === undefined ? {} : { navigatedFromDocumentId }),
|
|
118
161
|
priorIds,
|
|
119
162
|
}, timeoutMs)
|
|
120
163
|
: null;
|
|
121
|
-
|
|
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;
|
|
122
171
|
}
|
|
123
172
|
finally {
|
|
124
173
|
session.finishAction();
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { SessionInfo } from '../../portal/session/session-info.js';
|
|
2
|
+
import { LinkCapability, type PresenterTone } from '@reticlehq/core';
|
|
3
|
+
import type { ToolDeps } from './tool-kit.js';
|
|
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';
|
|
8
|
+
/** What this daemon does for the platform's chat. Each one is listed only once it is built. */
|
|
9
|
+
export declare const CHAT_CAPABILITIES: readonly LinkCapability[];
|
|
10
|
+
/** The slice of the session manager this needs. */
|
|
11
|
+
export interface ChatDriveSessions {
|
|
12
|
+
list(): SessionInfo[];
|
|
13
|
+
count(): number;
|
|
14
|
+
get(id: string): {
|
|
15
|
+
autoEnd(text: string, tone: PresenterTone): void;
|
|
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;
|
|
27
|
+
} | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface ChatDriveCloud {
|
|
30
|
+
/** The platform and key a tab's own project is linked with, or undefined when it is not. */
|
|
31
|
+
sessionCloud: (sessionId: string) => Promise<{
|
|
32
|
+
url: string;
|
|
33
|
+
apiKey: string;
|
|
34
|
+
} | undefined>;
|
|
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
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
export declare function startChatDrives(deps: ToolDeps, sessions: ChatDriveSessions, fs: FileSystemPort, cloud: ChatDriveCloud, log: (line: string) => void): {
|
|
44
|
+
stop: () => void;
|
|
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
|
+
};
|