@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
|
@@ -3,8 +3,9 @@ import { notePendingNoSessionReason } from '../../telemetry/tool-refused.js';
|
|
|
3
3
|
import { declareDrivenRedactionKeys, forgetDrivenRedactionKeys, } from '../input/driven-redaction.js';
|
|
4
4
|
import { Session } from './session.js';
|
|
5
5
|
import { AttachmentHistory } from './presence/attachment-history.js';
|
|
6
|
-
import { openedBeforeDeparture, pickDocumentSuccessor, } from './session-successor.js';
|
|
7
|
-
import { SESSION_DISCONNECTED_REASON } from './facts/session-replaced.js';
|
|
6
|
+
import { claimedSessionOf, openedBeforeDeparture, pickDocumentSuccessor, } from './session-successor.js';
|
|
7
|
+
import { SESSION_DISCONNECTED_REASON, SESSION_PARKED_REASON } from './facts/session-replaced.js';
|
|
8
|
+
import { isErrorDocument } from './session-info.js';
|
|
8
9
|
/** The scheme://host:port of a URL, or undefined if it can't be parsed. Used to compare origins. */
|
|
9
10
|
export function originOf(url) {
|
|
10
11
|
if (url === undefined)
|
|
@@ -43,19 +44,31 @@ function scopeSessions(sessions, scope) {
|
|
|
43
44
|
* reader goes looking at their app instead of at the scope. Name what IS connected and how to
|
|
44
45
|
* target it: both facts are already in hand here.
|
|
45
46
|
*/
|
|
46
|
-
function scopeMissError(connected, scope) {
|
|
47
|
+
export function scopeMissError(connected, scope) {
|
|
47
48
|
const who = scope?.projectId !== undefined
|
|
48
49
|
? `project '${scope.projectId}'`
|
|
49
50
|
: scope?.url !== undefined
|
|
50
51
|
? `your app at ${scope.url}`
|
|
51
52
|
: 'the active project';
|
|
53
|
+
const anyUntagged = connected.some((s) => s.projectId === undefined);
|
|
54
|
+
const anyTagged = connected.some((s) => s.projectId !== undefined);
|
|
55
|
+
const how = anyUntagged && !anyTagged
|
|
56
|
+
? 'with no projectId'
|
|
57
|
+
: anyUntagged && anyTagged
|
|
58
|
+
? 'under a different project or with no projectId'
|
|
59
|
+
: 'under a different project';
|
|
52
60
|
const listed = connected
|
|
53
|
-
.map((s) =>
|
|
61
|
+
.map((s) => s.projectId !== undefined
|
|
62
|
+
? `'${s.projectId}' (${s.url}, sessionId '${s.id}')`
|
|
63
|
+
: `(no projectId: the page's connect() carries none) (${s.url}, sessionId '${s.id}')`)
|
|
54
64
|
.join(', ');
|
|
55
|
-
|
|
56
|
-
`
|
|
57
|
-
|
|
58
|
-
`or restart the daemon from that app's directory
|
|
65
|
+
const advice = anyUntagged
|
|
66
|
+
? `Pass the sessionId above to target one, add a projectId to the app's connect() call or ` +
|
|
67
|
+
`.reticle.json, or restart the daemon from that app's directory.`
|
|
68
|
+
: `Pass the sessionId above to target one, or restart the daemon from that app's directory.`;
|
|
69
|
+
return (`no browser session for ${who}, but ${String(connected.length)} session(s) ARE connected ${how}: ` +
|
|
70
|
+
`${listed}. The daemon scopes to the .reticle.json of the directory it was started in, so ` +
|
|
71
|
+
`this is a scope mismatch, not a dead app. ${advice}`);
|
|
59
72
|
}
|
|
60
73
|
/**
|
|
61
74
|
* Owns the set of connected browser sessions and the smart auto-selection that resolves which one a
|
|
@@ -72,6 +85,8 @@ const MAX_REMEMBERED_CLOSURES = 5;
|
|
|
72
85
|
* Bounded so a long-lived daemon cannot accumulate one record per tab forever.
|
|
73
86
|
*/
|
|
74
87
|
const MAX_TOMBSTONES = 32;
|
|
88
|
+
/** How a leased tab's id begins (`lease-tools.ts` mints them). */
|
|
89
|
+
const LEASE_ID_PREFIX = 'lease-';
|
|
75
90
|
export class SessionManager {
|
|
76
91
|
#sessions = new Map();
|
|
77
92
|
/**
|
|
@@ -112,6 +127,8 @@ export class SessionManager {
|
|
|
112
127
|
}
|
|
113
128
|
add(session) {
|
|
114
129
|
this.#everConnected = true;
|
|
130
|
+
if (session.projectId !== undefined)
|
|
131
|
+
this.#connectedProjects.add(session.projectId);
|
|
115
132
|
// Ordering, not lifetime: this is what makes a remembered refusal distinguishable from a live
|
|
116
133
|
// one. Here for the same reason `#everConnected` is — `add` is the one method every path that
|
|
117
134
|
// registers a session goes through.
|
|
@@ -144,6 +161,24 @@ export class SessionManager {
|
|
|
144
161
|
const scope = driven.projectId === undefined ? { url: driven.url } : { projectId: driven.projectId };
|
|
145
162
|
return scopeSessions([...this.#sessions.values()], scope).filter((s) => s !== driven);
|
|
146
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Close a window's connection and refuse its id until the daemon restarts.
|
|
166
|
+
*
|
|
167
|
+
* Reported from a Tauri app whose hidden windows kept reconnecting: ending the session only ended
|
|
168
|
+
* the presenter, so the window came straight back. A reload keeps its id (sessionStorage), so the
|
|
169
|
+
* id is what stays parked; the 1008 close tells the SDK not to retry. Its tombstone goes too, so a
|
|
170
|
+
* call naming it is refused rather than handed a sibling window.
|
|
171
|
+
*/
|
|
172
|
+
park(session) {
|
|
173
|
+
this.#parked.add(session.id);
|
|
174
|
+
session.disconnect(SESSION_PARKED_REASON);
|
|
175
|
+
this.remove(session);
|
|
176
|
+
this.#tombstones.delete(session.id);
|
|
177
|
+
}
|
|
178
|
+
isParked(sessionId) {
|
|
179
|
+
return this.#parked.has(sessionId);
|
|
180
|
+
}
|
|
181
|
+
#parked = new Set();
|
|
147
182
|
remove(session) {
|
|
148
183
|
if (this.#sessions.get(session.id) !== session)
|
|
149
184
|
return false;
|
|
@@ -164,10 +199,13 @@ export class SessionManager {
|
|
|
164
199
|
this.#siblingsAtDeparture.set(session.id, new Set([...this.#sessions.values()]
|
|
165
200
|
.filter((s) => s !== session && openedBeforeDeparture(s, session))
|
|
166
201
|
.map((s) => s.id)));
|
|
202
|
+
const departedTo = session.departedTo();
|
|
167
203
|
this.#tombstones.set(session.id, {
|
|
168
204
|
id: session.id,
|
|
169
205
|
url: session.url,
|
|
170
206
|
...(session.projectId === undefined ? {} : { projectId: session.projectId }),
|
|
207
|
+
// Where the tab was seen heading, kept off `url`: successor matching needs the old origin.
|
|
208
|
+
...(departedTo === undefined ? {} : { departedTo }),
|
|
171
209
|
});
|
|
172
210
|
while (this.#tombstones.size > MAX_TOMBSTONES) {
|
|
173
211
|
const oldest = this.#tombstones.keys().next().value;
|
|
@@ -222,6 +260,15 @@ export class SessionManager {
|
|
|
222
260
|
all() {
|
|
223
261
|
return [...this.#sessions.values()];
|
|
224
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* The connected sessions an id-less call may consider: the active project's, when one is set.
|
|
265
|
+
*
|
|
266
|
+
* The same set `resolve()` chooses from, so a caller that falls back from a refused resolution
|
|
267
|
+
* (an id-less yield) never reaches a tab the project scope would never have handed it.
|
|
268
|
+
*/
|
|
269
|
+
inScope() {
|
|
270
|
+
return scopeSessions(this.all(), this.#defaultScope);
|
|
271
|
+
}
|
|
225
272
|
count() {
|
|
226
273
|
return this.#sessions.size;
|
|
227
274
|
}
|
|
@@ -322,9 +369,20 @@ export class SessionManager {
|
|
|
322
369
|
}
|
|
323
370
|
/** Whether any session has connected since this daemon booted — half the diagnosis. */
|
|
324
371
|
#everConnected = false;
|
|
372
|
+
/**
|
|
373
|
+
* Which projects have registered a session in this process.
|
|
374
|
+
*
|
|
375
|
+
* `#everConnected` is one bit for the whole daemon. A second project asking "has anything
|
|
376
|
+
* connected" was answered about the first. The set is the same fact, per project.
|
|
377
|
+
*/
|
|
378
|
+
#connectedProjects = new Set();
|
|
325
379
|
everConnected() {
|
|
326
380
|
return this.#everConnected;
|
|
327
381
|
}
|
|
382
|
+
/** Whether a session for this project has registered since boot. An unknown id has not. */
|
|
383
|
+
everConnectedTo(projectId) {
|
|
384
|
+
return this.#connectedProjects.has(projectId);
|
|
385
|
+
}
|
|
328
386
|
/**
|
|
329
387
|
* Record a bridge-initiated close so `resolve` can explain a session that vanished.
|
|
330
388
|
*
|
|
@@ -385,6 +443,24 @@ export class SessionManager {
|
|
|
385
443
|
last = record;
|
|
386
444
|
return last;
|
|
387
445
|
}
|
|
446
|
+
/**
|
|
447
|
+
* The most recent departed session for one project.
|
|
448
|
+
*
|
|
449
|
+
* `lastKnown` is the newest tombstone of any project. A shared daemon that quoted it to every
|
|
450
|
+
* caller told the second project to reopen the first project's tab.
|
|
451
|
+
*/
|
|
452
|
+
lastKnownFor(projectId) {
|
|
453
|
+
let last;
|
|
454
|
+
for (const record of this.#tombstones.values()) {
|
|
455
|
+
if (record.projectId === projectId)
|
|
456
|
+
last = record;
|
|
457
|
+
}
|
|
458
|
+
return last;
|
|
459
|
+
}
|
|
460
|
+
/** Every departed session's URL, oldest first. The port scan has to see all of them, not only the newest. */
|
|
461
|
+
tombstoneUrls() {
|
|
462
|
+
return [...this.#tombstones.values()].map((record) => record.url);
|
|
463
|
+
}
|
|
388
464
|
/**
|
|
389
465
|
* A dead `sessionId`, answered with what the caller needs to recover — not with an errand.
|
|
390
466
|
*
|
|
@@ -410,8 +486,17 @@ export class SessionManager {
|
|
|
410
486
|
' The app is not dialling this daemon; call ' +
|
|
411
487
|
'reticle_sessions for the diagnosis rather than retrying this call.');
|
|
412
488
|
}
|
|
413
|
-
|
|
414
|
-
|
|
489
|
+
// A leased tab belongs to whoever holds the lease: naming it, and the page it is on, told one
|
|
490
|
+
// agent what every other agent on this daemon was doing. Only the app's own tabs are offered.
|
|
491
|
+
const own = live.filter((s) => claimedSessionOf(s.url) === undefined);
|
|
492
|
+
const ended = sessionId.startsWith(LEASE_ID_PREFIX)
|
|
493
|
+
? ` Lease '${sessionId}' has ended (it expired or was released); lease a new tab to go on.`
|
|
494
|
+
: '';
|
|
495
|
+
if (0 === own.length)
|
|
496
|
+
return (`no connected session with id '${sessionId}'.${ended} ` +
|
|
497
|
+
'Omit sessionId to let Reticle scope to your project, or lease a tab of your own.');
|
|
498
|
+
const named = own.map((s) => `'${s.id}' (${s.url})`).join(', ');
|
|
499
|
+
return (`no connected session with id '${sessionId}'.${ended} Your app's tabs: ${named}. ` +
|
|
415
500
|
'Retry with one of those, or omit sessionId entirely and let Reticle scope to your project.');
|
|
416
501
|
}
|
|
417
502
|
resolve(sessionId, scope) {
|
|
@@ -495,7 +580,9 @@ export class SessionManager {
|
|
|
495
580
|
// every call auto-targeted the one tab guaranteed to time out.
|
|
496
581
|
const scored = all.map((s) => ({
|
|
497
582
|
s,
|
|
498
|
-
|
|
583
|
+
// An error document (a dev server's 404 that still mounted the SDK) ranks below any working
|
|
584
|
+
// page, hidden or not: it is never the app the agent was asked about.
|
|
585
|
+
score: s.unresponsive() ? 3 : isErrorDocument(s.page) ? 2 : s.throttled() ? 1 : 0,
|
|
499
586
|
ms: s.lastSeenMs(),
|
|
500
587
|
}));
|
|
501
588
|
const bestScore = Math.min(...scored.map((x) => x.score));
|
|
@@ -101,7 +101,10 @@ export function endAllSessions(sessions, reason) {
|
|
|
101
101
|
for (const session of sessions.all()) {
|
|
102
102
|
if (session.isEnded())
|
|
103
103
|
continue;
|
|
104
|
-
|
|
104
|
+
// WAITING, not WARN: a dropped MCP connection is far more often an agent that finished its turn
|
|
105
|
+
// than one that crashed, and the daemon cannot tell them apart. Red at the end of every
|
|
106
|
+
// completed Harness or agent run read as an error the run never had.
|
|
107
|
+
endWithUndelivered(session, reason, PresenterTone.WAITING);
|
|
105
108
|
ended.push(session.id);
|
|
106
109
|
}
|
|
107
110
|
if (ended.length > 0)
|
|
@@ -14,11 +14,24 @@ export interface SessionIdentity {
|
|
|
14
14
|
id: string;
|
|
15
15
|
url: string;
|
|
16
16
|
projectId?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Where the tab was seen heading just before it went away (#1256). Separate from `url` — the
|
|
19
|
+
* old origin — because successor matching must match on where the tab WAS.
|
|
20
|
+
*/
|
|
21
|
+
departedTo?: string;
|
|
17
22
|
}
|
|
18
23
|
export interface SuccessorClock {
|
|
19
24
|
now: () => number;
|
|
20
25
|
sleep: (ms: number) => Promise<void>;
|
|
21
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* The session a URL explicitly CLAIMS to be, via `__reticle_session`.
|
|
29
|
+
*
|
|
30
|
+
* A leased tab carries this marker so the pool can find the context it opened, and an app can set it
|
|
31
|
+
* deliberately so a battery addresses a known id. Either way it is a claim of identity, not a
|
|
32
|
+
* coincidence of origin — which is what makes it the right thing to gate succession on.
|
|
33
|
+
*/
|
|
34
|
+
export declare function claimedSessionOf(url: string): string | undefined;
|
|
22
35
|
/**
|
|
23
36
|
* The one live session that can honestly take over from `departed`, or undefined when none or more
|
|
24
37
|
* than one could.
|
|
@@ -30,7 +30,7 @@ function originOf(url) {
|
|
|
30
30
|
* deliberately so a battery addresses a known id. Either way it is a claim of identity, not a
|
|
31
31
|
* coincidence of origin — which is what makes it the right thing to gate succession on.
|
|
32
32
|
*/
|
|
33
|
-
function claimedSessionOf(url) {
|
|
33
|
+
export function claimedSessionOf(url) {
|
|
34
34
|
try {
|
|
35
35
|
return new URL(url).searchParams.get(RETICLE_URL_PARAM.SESSION) ?? undefined;
|
|
36
36
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { ReticleCommand } from '@reticlehq/core';
|
|
2
|
+
import { HudCorner, HudVisibility, ReticleCommand } from '@reticlehq/core';
|
|
3
3
|
import { ReticleTool } from '@reticlehq/core';
|
|
4
4
|
import { asNumber, asString } from '@reticlehq/core';
|
|
5
5
|
import { idleMsSchema } from '../../surface/tools/args/numeric-bounds.js';
|
|
@@ -12,11 +12,17 @@ import { idleMsSchema } from '../../surface/tools/args/numeric-bounds.js';
|
|
|
12
12
|
export const SESSION_TOOLS = [
|
|
13
13
|
{
|
|
14
14
|
name: ReticleTool.SESSION_TUNE,
|
|
15
|
-
description: 'Tune the presenter session for this app. { idleEndMs } sets how long the session stays open after you go quiet before the panel shows the human you are WAITING (your turn). Default 5min — the SLOW backstop; signal handback IMMEDIATELY with reticle_session{action:"yield"} instead of waiting for this. Lower it for snappier auto-handback, raise it for a slow app where long gaps between your tool calls are normal. Enforced SERVER-SIDE (immune to background-tab throttling); it also fires if you (the MCP client) disconnect — so a forgotten or crashed session never leaves the HUD reading "live". Going quiet then acting again revives the session automatically. Returns { applied, idleEndMs }.',
|
|
15
|
+
description: 'Tune the presenter session for this app. { idleEndMs } sets how long the session stays open after you go quiet before the panel shows the human you are WAITING (your turn). Default 5min — the SLOW backstop; signal handback IMMEDIATELY with reticle_session{action:"yield"} instead of waiting for this. Lower it for snappier auto-handback, raise it for a slow app where long gaps between your tool calls are normal. Enforced SERVER-SIDE (immune to background-tab throttling); it also fires if you (the MCP client) disconnect — so a forgotten or crashed session never leaves the HUD reading "live". Going quiet then acting again revives the session automatically. Also moves the HUD out of your way: { hud: "hidden" | "shown" | "removed" } (removed lasts until the page reloads), or a corner to move it to: { hud: "top-left" }. Use it when the HUD covers a control you must test; say so in your report. Returns { applied, idleEndMs, hud }.',
|
|
16
16
|
inputSchema: {
|
|
17
17
|
idleEndMs: idleMsSchema
|
|
18
18
|
.optional()
|
|
19
19
|
.describe('Idle window in milliseconds after which the panel shows WAITING (your turn). Default: 300000 (5 min) — the slow backstop; prefer reticle_session{action:"yield"}. Raise for slow apps.'),
|
|
20
|
+
hud: z
|
|
21
|
+
.enum([
|
|
22
|
+
...Object.values(HudVisibility),
|
|
23
|
+
...Object.values(HudCorner),
|
|
24
|
+
])
|
|
25
|
+
.optional(),
|
|
20
26
|
sessionId: z
|
|
21
27
|
.string()
|
|
22
28
|
.optional()
|
|
@@ -25,6 +31,7 @@ export const SESSION_TOOLS = [
|
|
|
25
31
|
outputSchema: {
|
|
26
32
|
applied: z.boolean(),
|
|
27
33
|
idleEndMs: z.number().optional(),
|
|
34
|
+
hud: z.array(z.string()).optional(),
|
|
28
35
|
},
|
|
29
36
|
handler: async (deps, args) => {
|
|
30
37
|
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
@@ -33,9 +40,25 @@ export const SESSION_TOOLS = [
|
|
|
33
40
|
// authority), so the agent-set window is honored even when the tab is backgrounded.
|
|
34
41
|
if (idleEndMs !== undefined)
|
|
35
42
|
session.setIdleEndMs(idleEndMs);
|
|
36
|
-
|
|
43
|
+
// One parameter on the wire to the agent, two to the page: a corner moves it, anything else
|
|
44
|
+
// shows, hides or removes it.
|
|
45
|
+
const asked = asString(args['hud']);
|
|
46
|
+
const isCorner = Object.values(HudCorner).includes(asked);
|
|
47
|
+
const hud = isCorner ? undefined : asked;
|
|
48
|
+
const corner = isCorner ? asked : undefined;
|
|
49
|
+
const res = await session.command(ReticleCommand.SESSION_CONFIG, {
|
|
50
|
+
...(idleEndMs === undefined ? {} : { idleEndMs }),
|
|
51
|
+
...(hud === undefined ? {} : { hud }),
|
|
52
|
+
...(corner === undefined ? {} : { corner }),
|
|
53
|
+
});
|
|
37
54
|
if (!res.ok)
|
|
38
55
|
throw new Error(res.error ?? 'session config failed');
|
|
56
|
+
// Asked to move the HUD and the page says nothing about it: an SDK older than this daemon, or
|
|
57
|
+
// no HUD mounted. Reported, never `applied: true`: an agent told the HUD moved would test a
|
|
58
|
+
// control it is still covering.
|
|
59
|
+
const applied = res.result?.hud;
|
|
60
|
+
if ((hud !== undefined || corner !== undefined) && !Array.isArray(applied))
|
|
61
|
+
throw new Error('the page did not apply `hud`: its Reticle SDK predates it, or no HUD is mounted. Update the SDK (npx @reticlehq/server update) or test with the HUD where it is.');
|
|
39
62
|
return res.result ?? { applied: true };
|
|
40
63
|
},
|
|
41
64
|
},
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { WebSocket } from 'ws';
|
|
2
2
|
import { type ChannelId, type ImpactSnapshot, type ProjectId } from '@reticlehq/core';
|
|
3
|
+
import { type NarrationBy } from './narration-args.js';
|
|
3
4
|
import type { HandshakeFacts } from './facts/handshake-facts.js';
|
|
4
5
|
import { LastAct } from './last-act.js';
|
|
5
6
|
import { GapLedger } from '@reticlehq/engine/evidence/gap-ledger.js';
|
|
6
|
-
import { CaptureLedger } from '../../surface/tools/feature-capture.js';
|
|
7
7
|
import { type PageRuntime } from './timing/command-timeout.js';
|
|
8
|
-
import { type SessionHealth } from './session-health.js';
|
|
8
|
+
import { readHealthEvent, type SessionHealth } from './session-health.js';
|
|
9
9
|
export type { SessionHealth };
|
|
10
|
-
import { PresenterTone, SessionState, type BrowserBrand, type CommandResult, type JournalAction, type JournalWriteLoss, type HelloMessage, type HumanControlData, type ReticleEvent } from '@reticlehq/core';
|
|
10
|
+
import { ReticleCommand, PresenterTone, SessionState, type BrowserBrand, type CommandResult, type JournalAction, type JournalWriteLoss, type HelloMessage, type HumanControlData, type ReticleEvent } from '@reticlehq/core';
|
|
11
11
|
import type { JournalReader, JournalRecorder } from '../../memory/journal/journal-recorder.js';
|
|
12
12
|
import { type EventQueryOptions } from '../../memory/journal/journal-query.js';
|
|
13
13
|
import { type AmbientCounts } from '@reticlehq/engine/window/ambient.js';
|
|
@@ -15,8 +15,8 @@ import { type InboxMessage } from './human/live-control.js';
|
|
|
15
15
|
export type { InboxMessage } from './human/live-control.js';
|
|
16
16
|
import { type ReviewMark } from './human/review-store.js';
|
|
17
17
|
import { type SessionLease } from './presence/session-lease.js';
|
|
18
|
-
import type { SessionInfo } from './session-info.js';
|
|
19
18
|
export type { SessionInfo } from './session-info.js';
|
|
19
|
+
import { type SessionInfo } from './session-info.js';
|
|
20
20
|
type Clock = () => number;
|
|
21
21
|
/**
|
|
22
22
|
* One connected browser tab. Owns its socket, a ring buffer of observations, and the
|
|
@@ -35,13 +35,8 @@ export declare class Session implements HandshakeFacts {
|
|
|
35
35
|
readonly projectId: ProjectId | undefined;
|
|
36
36
|
/**
|
|
37
37
|
* The `.reticle` directory this session's evidence belongs in — impact counters AND capsules.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* resolved per call: the answer cannot change while the tab is connected, and resolving it once
|
|
41
|
-
* means every counter that fires for this session agrees about where it goes.
|
|
42
|
-
*
|
|
43
|
-
* Undefined when nothing could name a project — the caller then falls back to the daemon's own
|
|
44
|
-
* root, which is what every counter did unconditionally before this existed.
|
|
38
|
+
* Stamped once, from the project it declared in HELLO, so every counter agrees where it goes.
|
|
39
|
+
* Undefined when nothing could name a project: callers fall back to the daemon's own root.
|
|
45
40
|
*/
|
|
46
41
|
artifactRoot: string | undefined;
|
|
47
42
|
/**
|
|
@@ -60,9 +55,14 @@ export declare class Session implements HandshakeFacts {
|
|
|
60
55
|
commands?: readonly string[] | undefined;
|
|
61
56
|
sourceMapping?: boolean | undefined;
|
|
62
57
|
readonly redactKeys: readonly string[];
|
|
58
|
+
/** The desktop window this is and its document's HTTP status, merged from every PAGE_HEALTH. */
|
|
59
|
+
readonly page: ReturnType<typeof readHealthEvent>['page'];
|
|
60
|
+
/** The newest journal action: a verdict's screenshot names it, so the run pairs it with its check. */
|
|
61
|
+
lastActionId: string | undefined;
|
|
63
62
|
constructor(hello: HelloMessage, socket: WebSocket, clock: Clock);
|
|
64
63
|
/** Milliseconds since this session connected — the authoritative buffer clock. */
|
|
65
64
|
elapsed(): number;
|
|
65
|
+
departedTo(): string | undefined;
|
|
66
66
|
/** Mark that the SDK was just heard from. Called on every inbound message. */
|
|
67
67
|
touch(): void;
|
|
68
68
|
/** ms since the SDK last reported anything (distinct from elapsed-since-connect). */
|
|
@@ -104,7 +104,7 @@ export declare class Session implements HandshakeFacts {
|
|
|
104
104
|
preconditionFailure(): string | undefined;
|
|
105
105
|
/** What the rules that decide a verdict need from the daemon. See daemon-answers.ts. */
|
|
106
106
|
readonly note: typeof import("../../log.js").log;
|
|
107
|
-
readonly keepCallerContext:
|
|
107
|
+
readonly keepCallerContext: <A extends unknown[]>(fn: (...args: A) => void) => ((...args: A) => void);
|
|
108
108
|
/** Re-stamp an incoming event with server-relative time, buffer it, and fan out. */
|
|
109
109
|
pushEvent(event: ReticleEvent, byteSize?: number): void;
|
|
110
110
|
recordActedRef(ref: string): void;
|
|
@@ -121,7 +121,7 @@ export declare class Session implements HandshakeFacts {
|
|
|
121
121
|
provedLabels(): ReadonlySet<string>;
|
|
122
122
|
actedRefs(): ReadonlySet<string>;
|
|
123
123
|
noteRateLimited(dropped: number): void;
|
|
124
|
-
blindSpots(): Readonly<Record<string, number>>;
|
|
124
|
+
blindSpots(since?: number): Readonly<Record<string, number>>;
|
|
125
125
|
/** Learned ambient-churn counts (PredicateSession hook the settle oracle reads). */
|
|
126
126
|
ambientCounts(): AmbientCounts;
|
|
127
127
|
/** Only what THIS session observed — what teardown accumulates onto the persisted map. */
|
|
@@ -141,10 +141,7 @@ export declare class Session implements HandshakeFacts {
|
|
|
141
141
|
queryEvents(options: EventQueryOptions): Promise<ReticleEvent[]>;
|
|
142
142
|
/** What the durable ledger could not WRITE — see `readJournalWriteLoss` for the rule and why. */
|
|
143
143
|
journalWriteLoss(): Promise<JournalWriteLoss | undefined>;
|
|
144
|
-
/**
|
|
145
|
-
* Open an action-attribution window: events observed until finishAction attribute to the returned
|
|
146
|
-
* action id. Ids are minted independently of command correlation ids so the journal is self-contained.
|
|
147
|
-
*/
|
|
144
|
+
/** Open an attribution window: events until finishAction carry the returned (journal-own) id. */
|
|
148
145
|
beginAction(tool: string, args: Record<string, unknown>): string;
|
|
149
146
|
/**
|
|
150
147
|
* Record one action WITHOUT opening an attribution window — for a tool that returns a verdict but
|
|
@@ -186,11 +183,6 @@ export declare class Session implements HandshakeFacts {
|
|
|
186
183
|
* end of it.
|
|
187
184
|
*/
|
|
188
185
|
readonly gaps: GapLedger;
|
|
189
|
-
/**
|
|
190
|
-
* The read-only calls the journal does not keep, so "was `reticle_context` ever called" has
|
|
191
|
-
* something to fold. See surface/tools/feature-capture.ts — it is the only state that instrument adds.
|
|
192
|
-
*/
|
|
193
|
-
readonly capture: CaptureLedger;
|
|
194
186
|
/**
|
|
195
187
|
* Stamp the wall-clock of the latest AGENT command (called whenever a tool resolves this session).
|
|
196
188
|
* If the reaper had auto-ended the session, a fresh command means the agent is alive again, so the
|
|
@@ -242,9 +234,9 @@ export declare class Session implements HandshakeFacts {
|
|
|
242
234
|
* summary) so a transition never emits two PRESENTER commands.
|
|
243
235
|
*/
|
|
244
236
|
setState(next: SessionState, text?: string, tone?: PresenterTone): void;
|
|
245
|
-
/** Push a human note onto the inbox (see LiveControl). */
|
|
237
|
+
/** Push a human note onto the inbox (see LiveControl); the HUD shows it as sent. */
|
|
246
238
|
pushMessage(text: string): void;
|
|
247
|
-
/** Queued human notes, cleared as they are read (delivered-once). */
|
|
239
|
+
/** Queued human notes, cleared as they are read (delivered-once); the HUD shows them as seen. */
|
|
248
240
|
drainInbox(): InboxMessage[];
|
|
249
241
|
/** Diagnostic read of the inbox depth (does not clear). */
|
|
250
242
|
inboxSize(): number;
|
|
@@ -264,15 +256,15 @@ export declare class Session implements HandshakeFacts {
|
|
|
264
256
|
*/
|
|
265
257
|
applyHumanControl(data: HumanControlData): void;
|
|
266
258
|
/**
|
|
267
|
-
* Push the impact record to this tab's HUD.
|
|
268
|
-
*
|
|
269
|
-
* Debounced: the record changes on every tool call, and the panel does not need 200 frames to
|
|
270
|
-
* show a counter going up. The LAST state always lands, because the timer re-reads the store
|
|
271
|
-
* when it fires rather than capturing a snapshot when it was scheduled.
|
|
259
|
+
* Push the impact record to this tab's HUD. Debounced (a counter needs no 200 frames); the LAST
|
|
260
|
+
* state always lands, because the timer re-reads the store when it fires.
|
|
272
261
|
*/
|
|
273
262
|
pushImpact(read: () => ImpactSnapshot | undefined, immediate?: boolean): void;
|
|
274
263
|
pushPresenter(state: SessionState, text?: string, tone?: PresenterTone): void;
|
|
275
|
-
|
|
264
|
+
/** `mirror: false` for a notice about THIS page (its SDK is behind), which every tab says itself. */
|
|
265
|
+
pushNarration(text: string, mirror?: boolean, by?: NarrationBy): void;
|
|
266
|
+
/** A HUD replay's progress, or the Harness's drive plan: pictures the HUD redraws as they change. */
|
|
267
|
+
pushView(name: typeof ReticleCommand.FLOW_PROGRESS | typeof ReticleCommand.PLAN, args: object): void;
|
|
276
268
|
/** The one-time lease block on the first agent command, then undefined forever after. */
|
|
277
269
|
takeSessionLease(): SessionLease | undefined;
|
|
278
270
|
/**
|