@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
|
@@ -10,17 +10,20 @@
|
|
|
10
10
|
* daemon that outlives the agent by hours has no business scanning ports it does not need.
|
|
11
11
|
*/
|
|
12
12
|
import { probeRouteStatus } from './dev-server/route-status-probe.js';
|
|
13
|
-
import {
|
|
13
|
+
import { probeDevServerStates } from './dev-server/dev-server-probe.js';
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
14
15
|
import { homedir } from 'node:os';
|
|
16
|
+
import { join, resolve } from 'node:path';
|
|
17
|
+
import { callingClientDirectory } from '../../hooks/client-directory.js';
|
|
15
18
|
import { registeredElsewhere } from '../../memory/recall/registered-projects.js';
|
|
16
19
|
import { explainNoSession } from './no-session-diagnosis.js';
|
|
17
|
-
import {
|
|
18
|
-
import { nextActionFor, renderNextAction } from './no-session-next-action.js';
|
|
19
|
-
import { readProjectFramework, readProjectId, readProjectIsDesktop, readProjectPort, } from '../../command/cli/ports/resolve/cli-port.js';
|
|
20
|
+
import { detectDevCommandInProject, initCommandIn } from './dev-server/dev-command.js';
|
|
21
|
+
import { nextActionFor, portOfUrl, renderNextAction } from './no-session-next-action.js';
|
|
22
|
+
import { DEV_SERVER_PORTS, readProjectFramework, readProjectId, readProjectIsDesktop, readProjectPort, } from '../../command/cli/ports/resolve/cli-port.js';
|
|
20
23
|
import { discoverProjectConfigs } from '../../command/cli/config/config-discovery.js';
|
|
21
24
|
import { hasProjectConnectedBefore, rememberConnected, } from '../../memory/recall/prior/connection-memory.js';
|
|
22
25
|
import { isAlive, reticleStateHome } from '../../command/daemon/daemon.js';
|
|
23
|
-
import { daemonsServingProjectElsewhere, splitBrainNote } from '../../command/daemon/daemon-resolve.js';
|
|
26
|
+
import { daemonsServingProjectElsewhere, projectDaemonsElsewhere, projectlessNote, splitBrainNote, } from '../../command/daemon/daemon-resolve.js';
|
|
24
27
|
import { stallUptime } from './stall-clock.js';
|
|
25
28
|
import { probeDaemon } from '../../surface/mcp/mcp-proxy.js';
|
|
26
29
|
import { findOccupiedSiblings } from '../../command/cli/ports/sibling-ports.js';
|
|
@@ -54,8 +57,9 @@ function attachFailureClause(port, reason) {
|
|
|
54
57
|
* through `wireSessionScope`.
|
|
55
58
|
*/
|
|
56
59
|
export function startNoSessionWatch(options) {
|
|
57
|
-
const probe = options.probe ?? (() => probeDevServers());
|
|
58
60
|
let listening = [];
|
|
61
|
+
/** Ports the last scan was asked about. A port absent from this set was not observed, so it is not "down". */
|
|
62
|
+
let probed = new Set();
|
|
59
63
|
/**
|
|
60
64
|
* Ports that accepted a connection and then answered nothing in time.
|
|
61
65
|
*
|
|
@@ -81,6 +85,7 @@ export function startNoSessionWatch(options) {
|
|
|
81
85
|
/** Set only when an attempt actually failed, so the diagnosis can say so instead of hiding it. */
|
|
82
86
|
let attachFailure;
|
|
83
87
|
const directory = options.directory ?? process.cwd();
|
|
88
|
+
const exists = options.exists ?? ((file) => existsSync(join(directory, file)));
|
|
84
89
|
// The boot answer still counts (it is what the daemon scoped its sessions with), but `.reticle.json`
|
|
85
90
|
// is routinely written by `init` AFTER this daemon started, so re-read rather than cache. See the
|
|
86
91
|
// `initialized` comment below, which this shares.
|
|
@@ -144,8 +149,11 @@ export function startNoSessionWatch(options) {
|
|
|
144
149
|
* this one starts, which is precisely the window the agent then spends being told to start a dev
|
|
145
150
|
* server that is already running.
|
|
146
151
|
*/
|
|
147
|
-
const splitBrain = () => {
|
|
148
|
-
const projectId = readProjectId(
|
|
152
|
+
const splitBrain = (dir = directory) => {
|
|
153
|
+
const projectId = readProjectId(dir);
|
|
154
|
+
if (projectId === undefined) {
|
|
155
|
+
return projectlessNote(options.port, projectDaemonsElsewhere(options.port, stateDir, isAlive));
|
|
156
|
+
}
|
|
149
157
|
return splitBrainNote(options.port, daemonsServingProjectElsewhere(projectId, options.port, stateDir, isAlive, (port) => hasProjectConnectedBefore(stateDir, port, projectId)));
|
|
150
158
|
};
|
|
151
159
|
// Every path that registers a session goes through SessionManager.add, so this is the one hook
|
|
@@ -172,6 +180,36 @@ export function startNoSessionWatch(options) {
|
|
|
172
180
|
projectId: readProjectId(directory),
|
|
173
181
|
root: directory,
|
|
174
182
|
}).map((entry) => entry.port));
|
|
183
|
+
/**
|
|
184
|
+
* The ports the background scan must cover: the well-known list plus the facts that name THIS
|
|
185
|
+
* repo's port without guessing it (#1367).
|
|
186
|
+
*
|
|
187
|
+
* The scan is machine-wide, so it knows 3000/5173/8080… and nothing about this checkout: with a
|
|
188
|
+
* Next app already running on :3005 (`next dev -p 3005`) the diagnosis said nothing was listening
|
|
189
|
+
* and named a command that would have started a duplicate. Three facts name the port instead —
|
|
190
|
+
* the project's own dev script pins it in its own text, the build plugins announced theirs
|
|
191
|
+
* (already trusted for auto-attach), and the last session was on one.
|
|
192
|
+
*/
|
|
193
|
+
const scanPorts = () => {
|
|
194
|
+
const ports = new Set(DEV_SERVER_PORTS);
|
|
195
|
+
for (const port of ownDevServerPorts())
|
|
196
|
+
ports.add(port);
|
|
197
|
+
const pinned = detectDevCommandInProject(directory)?.port;
|
|
198
|
+
if (pinned !== undefined)
|
|
199
|
+
ports.add(pinned);
|
|
200
|
+
const known = options.sessions.lastKnown?.();
|
|
201
|
+
const knownPort = known === undefined ? undefined : portOfUrl(known.url);
|
|
202
|
+
if (knownPort !== undefined)
|
|
203
|
+
ports.add(knownPort);
|
|
204
|
+
// Every departed project, not only the newest. B can still be serving on :3005 after A leaves
|
|
205
|
+
// on :5173, and a scan that never asked :3005 would report B's app as stopped.
|
|
206
|
+
for (const url of options.sessions.tombstoneUrls?.() ?? []) {
|
|
207
|
+
const port = portOfUrl(url);
|
|
208
|
+
if (port !== undefined)
|
|
209
|
+
ports.add(port);
|
|
210
|
+
}
|
|
211
|
+
return [...ports];
|
|
212
|
+
};
|
|
175
213
|
/**
|
|
176
214
|
* Is `port` demonstrably this project's app? Either its dev server announced it, or this
|
|
177
215
|
* project's own last session was on it. Anything else is a guess, and a guess that opens a
|
|
@@ -214,17 +252,22 @@ export function startNoSessionWatch(options) {
|
|
|
214
252
|
}
|
|
215
253
|
};
|
|
216
254
|
const refresh = () => {
|
|
217
|
-
// Nothing to diagnose while a session is live, and no reason to scan.
|
|
255
|
+
// Nothing to diagnose while a session is live, and no reason to scan. What the last scan saw
|
|
256
|
+
// predates this session, so it is no observation of where the session goes on to depart from.
|
|
257
|
+
if (options.sessions.count() > 0)
|
|
258
|
+
probed = new Set();
|
|
218
259
|
if (running || options.sessions.count() > 0)
|
|
219
260
|
return;
|
|
220
261
|
running = true;
|
|
262
|
+
const candidates = scanPorts();
|
|
221
263
|
void (options.probe === undefined
|
|
222
|
-
? probeDevServerStates().then((states) => {
|
|
264
|
+
? probeDevServerStates(candidates).then((states) => {
|
|
223
265
|
slowListeners = states.slow;
|
|
224
266
|
return states.serving;
|
|
225
267
|
})
|
|
226
|
-
: probe())
|
|
268
|
+
: options.probe(candidates))
|
|
227
269
|
.then(async (ports) => {
|
|
270
|
+
probed = new Set(candidates);
|
|
228
271
|
listening = ports;
|
|
229
272
|
siblingListeners =
|
|
230
273
|
options.occupiedSiblings !== undefined
|
|
@@ -287,6 +330,143 @@ export function startNoSessionWatch(options) {
|
|
|
287
330
|
return undefined;
|
|
288
331
|
return { reason: closure.reason, ...closure.page };
|
|
289
332
|
};
|
|
333
|
+
/**
|
|
334
|
+
* The diagnosis for a client standing in a different project than this daemon.
|
|
335
|
+
*
|
|
336
|
+
* `everConnected` and the newest tombstone are facts about the process. Spent on a second
|
|
337
|
+
* project they say that project's wiring is done and name the first project's URL. A directory
|
|
338
|
+
* that has never had a session of its own has never connected, whatever else this daemon has seen.
|
|
339
|
+
* Ports count only when this project announced them or its own last session was on them, so the
|
|
340
|
+
* reopen command cannot fall through to somebody else's dev server.
|
|
341
|
+
*/
|
|
342
|
+
const diagnosisFor = (dir) => {
|
|
343
|
+
const projectId = readProjectId(dir);
|
|
344
|
+
const initialized = projectId !== undefined;
|
|
345
|
+
// A tab that reported no project cannot be another project's: it is the daemon's own last tab,
|
|
346
|
+
// never "this daemon has never seen one" beside a refusal that names where it last saw it. A
|
|
347
|
+
// tab that named another project stays that project's (a second app is not told to reopen it).
|
|
348
|
+
const newest = options.sessions.lastKnown?.();
|
|
349
|
+
const unclaimed = newest !== undefined && newest.projectId === undefined ? newest : undefined;
|
|
350
|
+
const known = (projectId === undefined ? undefined : options.sessions.lastKnownFor?.(projectId)) ??
|
|
351
|
+
unclaimed;
|
|
352
|
+
const everConnected = (projectId !== undefined && true === options.sessions.everConnectedTo?.(projectId)) ||
|
|
353
|
+
unclaimed !== undefined;
|
|
354
|
+
const ownPorts = new Set(devServersForProject(readDevServers(stateDir), { projectId, root: dir }).map((entry) => entry.port));
|
|
355
|
+
if (known !== undefined) {
|
|
356
|
+
const port = portOfUrl(known.url);
|
|
357
|
+
if (port !== undefined)
|
|
358
|
+
ownPorts.add(port);
|
|
359
|
+
}
|
|
360
|
+
const heard = listening.filter((port) => ownPorts.has(port));
|
|
361
|
+
// Not in the last scan means we have not looked, not that the server stopped. Treating the
|
|
362
|
+
// gap as "down" is what tells a still-running app to start a second one.
|
|
363
|
+
for (const port of ownPorts) {
|
|
364
|
+
if (!probed.has(port) && !heard.includes(port))
|
|
365
|
+
heard.push(port);
|
|
366
|
+
}
|
|
367
|
+
const slow = slowListeners.filter((port) => ownPorts.has(port));
|
|
368
|
+
const closure = options.sessions.lastClosure?.();
|
|
369
|
+
const refusalIsThisProject = closure !== undefined &&
|
|
370
|
+
true !== options.sessions.connectedSinceLastClosure?.() &&
|
|
371
|
+
projectId !== undefined &&
|
|
372
|
+
closure.page?.projectId === projectId;
|
|
373
|
+
const helloRefused = refusalIsThisProject &&
|
|
374
|
+
closure !== undefined &&
|
|
375
|
+
closure.page !== undefined &&
|
|
376
|
+
!isAuthRefusalReason(closure.reason)
|
|
377
|
+
? { reason: closure.reason, ...closure.page }
|
|
378
|
+
: undefined;
|
|
379
|
+
const discovery = initialized ? undefined : discoverProjectConfigs(dir);
|
|
380
|
+
const found = discovery === undefined ? [] : discovery.found.filter((config) => config.directory !== dir);
|
|
381
|
+
const registered = 0 < found.length ? [] : registeredElsewhere(homedir(), dir);
|
|
382
|
+
const configsElsewhere = 0 < found.length
|
|
383
|
+
? found.map((config) => ({
|
|
384
|
+
directory: config.directory,
|
|
385
|
+
...(config.projectId === undefined ? {} : { projectId: config.projectId }),
|
|
386
|
+
}))
|
|
387
|
+
: 0 < registered.length
|
|
388
|
+
? registered.map((project) => ({
|
|
389
|
+
directory: project.directory,
|
|
390
|
+
...(project.projectId === undefined ? {} : { projectId: project.projectId }),
|
|
391
|
+
}))
|
|
392
|
+
: undefined;
|
|
393
|
+
const framework = readProjectFramework(dir);
|
|
394
|
+
const configured = readProjectPort(dir);
|
|
395
|
+
const previouslyConnected = hasProjectConnectedBefore(stateDir, options.port, projectId);
|
|
396
|
+
const authRefused = refusalIsThisProject && closure !== undefined && isAuthRefusalReason(closure.reason);
|
|
397
|
+
const status = known !== undefined && lastKnownStatus !== undefined && lastKnownStatus.url === known.url
|
|
398
|
+
? { lastKnownStatus: lastKnownStatus.status }
|
|
399
|
+
: {};
|
|
400
|
+
const departedTo = known?.departedTo;
|
|
401
|
+
const departed = departedTo === undefined || '' === departedTo ? {} : { departedTo };
|
|
402
|
+
const upMs = stallUptime(Date.now());
|
|
403
|
+
const facts = {
|
|
404
|
+
everConnected,
|
|
405
|
+
initialized,
|
|
406
|
+
...(configsElsewhere === undefined ? {} : { configsElsewhere }),
|
|
407
|
+
...(discovery !== undefined && configsElsewhere === undefined
|
|
408
|
+
? { searchedDirectories: discovery.searched }
|
|
409
|
+
: {}),
|
|
410
|
+
listening: heard,
|
|
411
|
+
slowListeners: slow,
|
|
412
|
+
port: options.port,
|
|
413
|
+
directory: dir,
|
|
414
|
+
previouslyConnected,
|
|
415
|
+
authRefused,
|
|
416
|
+
...(helloRefused === undefined ? {} : { helloRefused }),
|
|
417
|
+
...(framework === undefined ? {} : { framework }),
|
|
418
|
+
...(readProjectIsDesktop(dir) ? { desktop: true } : {}),
|
|
419
|
+
leaseExpired: known !== undefined && (options.wasReapedLease?.(known.id) ?? false),
|
|
420
|
+
...(known === undefined ? {} : { lastKnownUrl: known.url, ...status, ...departed }),
|
|
421
|
+
...(upMs === undefined ? {} : { daemonUpMs: upMs }),
|
|
422
|
+
...(configured === undefined ? {} : { projectPort: configured }),
|
|
423
|
+
...(0 === siblingListeners.length ? {} : { siblingListeners }),
|
|
424
|
+
};
|
|
425
|
+
const split = splitBrain(dir);
|
|
426
|
+
const next = nextActionFor({
|
|
427
|
+
everConnected,
|
|
428
|
+
initialized,
|
|
429
|
+
...(configsElsewhere === undefined ? {} : { configsElsewhere }),
|
|
430
|
+
previouslyConnected,
|
|
431
|
+
exists: (file) => existsSync(join(dir, file)),
|
|
432
|
+
authRefused,
|
|
433
|
+
...(helloRefused === undefined ? {} : { helloRefused: helloRefused.reason }),
|
|
434
|
+
...(split === undefined ? {} : { splitBrain: split }),
|
|
435
|
+
listening: heard,
|
|
436
|
+
slowListeners: slow,
|
|
437
|
+
...(known === undefined
|
|
438
|
+
? {}
|
|
439
|
+
: {
|
|
440
|
+
lastKnownUrl: known.url,
|
|
441
|
+
...(known.departedTo === undefined ? {} : { departedTo: known.departedTo }),
|
|
442
|
+
}),
|
|
443
|
+
dev: detectDevCommandInProject(dir),
|
|
444
|
+
init: initCommandIn(dir),
|
|
445
|
+
});
|
|
446
|
+
return { facts, next };
|
|
447
|
+
};
|
|
448
|
+
/**
|
|
449
|
+
* A call that named the client's project. Undefined means nobody named one (an embed, a test, a
|
|
450
|
+
* daemon answering itself), and the path below stays the one this watch was started with.
|
|
451
|
+
*/
|
|
452
|
+
const callerAnswer = () => {
|
|
453
|
+
const caller = callingClientDirectory();
|
|
454
|
+
if (caller === undefined)
|
|
455
|
+
return undefined;
|
|
456
|
+
return diagnosisFor(caller);
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* `listening`, plus the departed session's port when no scan has looked at it since: not looked
|
|
460
|
+
* at is not stopped. Without it `reticle status` called a running Vite stopped because the only
|
|
461
|
+
* scan ran before the app was started.
|
|
462
|
+
*/
|
|
463
|
+
const observedListening = () => {
|
|
464
|
+
const known = options.sessions.lastKnown?.();
|
|
465
|
+
const port = known === undefined ? undefined : portOfUrl(known.url);
|
|
466
|
+
return port === undefined || probed.has(port) || listening.includes(port)
|
|
467
|
+
? listening
|
|
468
|
+
: [...listening, port];
|
|
469
|
+
};
|
|
290
470
|
const nextAction = (scope) => {
|
|
291
471
|
const split = splitBrain();
|
|
292
472
|
return nextActionFor({
|
|
@@ -294,6 +474,7 @@ export function startNoSessionWatch(options) {
|
|
|
294
474
|
initialized: scope.initialized,
|
|
295
475
|
...(scope.configsElsewhere === undefined ? {} : { configsElsewhere: scope.configsElsewhere }),
|
|
296
476
|
previouslyConnected: connectedBefore(),
|
|
477
|
+
exists,
|
|
297
478
|
// Read when asked, like every other fact here: a page can dial at any moment, and a daemon
|
|
298
479
|
// that cached "nothing has been refused" at boot would keep saying so.
|
|
299
480
|
authRefused: lastCloseWasAuthFailure(),
|
|
@@ -302,23 +483,37 @@ export function startNoSessionWatch(options) {
|
|
|
302
483
|
return refused === undefined ? {} : { helloRefused: refused.reason };
|
|
303
484
|
})(),
|
|
304
485
|
...(split === undefined ? {} : { splitBrain: split }),
|
|
305
|
-
listening,
|
|
486
|
+
listening: observedListening(),
|
|
487
|
+
slowListeners,
|
|
306
488
|
// The url the departed tab was on — the same tombstone the prose diagnosis quotes, so the
|
|
307
489
|
// command and the sentence beside it name the same page.
|
|
308
490
|
...(() => {
|
|
309
491
|
const known = options.sessions.lastKnown?.();
|
|
310
|
-
|
|
492
|
+
if (known === undefined)
|
|
493
|
+
return {};
|
|
494
|
+
return {
|
|
495
|
+
lastKnownUrl: known.url,
|
|
496
|
+
...(known.departedTo === undefined ? {} : { departedTo: known.departedTo }),
|
|
497
|
+
};
|
|
311
498
|
})(),
|
|
312
499
|
// Read when asked, like everything else here: a `package.json` can gain a dev script, and a
|
|
313
500
|
// daemon that cached "there is none" at boot would keep saying so for the rest of the day.
|
|
314
|
-
dev:
|
|
501
|
+
dev: detectDevCommandInProject(directory),
|
|
502
|
+
// This project's own runner and app folder, so the agent can wire it itself.
|
|
503
|
+
init: initCommandIn(directory),
|
|
315
504
|
});
|
|
316
505
|
};
|
|
317
|
-
options.sessions.setNoSessionNextAction(() =>
|
|
506
|
+
options.sessions.setNoSessionNextAction(() => {
|
|
507
|
+
const caller = callerAnswer();
|
|
508
|
+
return caller === undefined ? nextAction(projectScopeFacts()) : caller.next;
|
|
509
|
+
});
|
|
318
510
|
// ONE call for both registrations below. The prose and the branch code have to come from the
|
|
319
511
|
// same evaluation or they can describe different branches - the facts are read when asked, so two
|
|
320
512
|
// calls a moment apart can genuinely disagree (#615).
|
|
321
513
|
const explain = () => {
|
|
514
|
+
const caller = callerAnswer();
|
|
515
|
+
if (caller !== undefined)
|
|
516
|
+
return explainNoSession(caller.facts);
|
|
322
517
|
const scope = projectScopeFacts();
|
|
323
518
|
return explainNoSession({
|
|
324
519
|
everConnected: options.sessions.everConnected(),
|
|
@@ -329,7 +524,7 @@ export function startNoSessionWatch(options) {
|
|
|
329
524
|
// framework and its projectId, and whose real problem was a dev server older than the plugin.
|
|
330
525
|
// The boot value still counts: it is the one the daemon scoped its sessions with.
|
|
331
526
|
...scope,
|
|
332
|
-
listening,
|
|
527
|
+
listening: observedListening(),
|
|
333
528
|
slowListeners,
|
|
334
529
|
port: options.port,
|
|
335
530
|
// The directory `initialized` was decided in. Named in the message because "there is no
|
|
@@ -375,7 +570,12 @@ export function startNoSessionWatch(options) {
|
|
|
375
570
|
const status = lastKnownStatus !== undefined && lastKnownStatus.url === known.url
|
|
376
571
|
? { lastKnownStatus: lastKnownStatus.status }
|
|
377
572
|
: {};
|
|
378
|
-
|
|
573
|
+
// Where the tab was seen heading, when the SDK reported it fresh. Kept separate from
|
|
574
|
+
// lastKnownUrl: the 5xx probe needs the page the tab was ON.
|
|
575
|
+
const departed = known.departedTo === undefined || '' === known.departedTo
|
|
576
|
+
? {}
|
|
577
|
+
: { departedTo: known.departedTo };
|
|
578
|
+
return { lastKnownUrl: known.url, ...status, ...departed };
|
|
379
579
|
})(),
|
|
380
580
|
// How long this daemon has been waiting with no app. The diagnosis uses it to surface
|
|
381
581
|
// "install never finished" — the same condition telemetry already knows about.
|
|
@@ -397,6 +597,16 @@ export function startNoSessionWatch(options) {
|
|
|
397
597
|
// scope facts so a discovered workspace config cannot become an `init` recommendation below it,
|
|
398
598
|
// and both come from ONE `explain()` call so they cannot describe different branches.
|
|
399
599
|
const rendered = () => {
|
|
600
|
+
const caller = callerAnswer();
|
|
601
|
+
if (caller !== undefined) {
|
|
602
|
+
const { message, detail } = explainNoSession(caller.facts);
|
|
603
|
+
// The attach failure is about the daemon's own project. A call from that project still hears
|
|
604
|
+
// it. A call from another project must not be told that opening this one failed.
|
|
605
|
+
const callerDir = callingClientDirectory();
|
|
606
|
+
const ownProject = callerDir !== undefined && resolve(callerDir) === resolve(directory);
|
|
607
|
+
const lead = `${message} ${renderNextAction(caller.next)}${ownProject ? (attachFailure ?? '') : ''}`;
|
|
608
|
+
return { lead, full: undefined === detail ? lead : `${lead} ${detail}` };
|
|
609
|
+
}
|
|
400
610
|
const scope = projectScopeFacts();
|
|
401
611
|
const { message, detail } = explain();
|
|
402
612
|
const lead = `${message} ${renderNextAction(nextAction(scope))}${attachFailure ?? ''}`;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Any edit here is a per-session tax on every user: say it in as few words as still work.
|
|
10
10
|
*/
|
|
11
|
-
const SESSION_LEASE_NOTICE = 'When you stop driving, call reticle_session {action:"yield", mode:"waiting"|"ask"}. The panel reads "live" until you do. {action:"end"} when the task is done
|
|
11
|
+
const SESSION_LEASE_NOTICE = 'When you stop driving, call reticle_session {action:"yield", mode:"waiting"|"ask"}. The panel reads "live" until you do. {action:"end"} only when the task is done: it is final.';
|
|
12
12
|
export function buildSessionLease(sessionId, openedAt) {
|
|
13
13
|
return { sessionId, opened_at: openedAt, IMPORTANT: SESSION_LEASE_NOTICE };
|
|
14
14
|
}
|
|
@@ -19,4 +19,7 @@ export function mirroredNarration(sessionId, text) {
|
|
|
19
19
|
export const MIRRORED_COMMANDS = new Set([
|
|
20
20
|
ReticleCommand.NARRATE,
|
|
21
21
|
ReticleCommand.IMPACT,
|
|
22
|
+
// A replay usually reloads the page, so its progress has to reach whichever tab is there now.
|
|
23
|
+
ReticleCommand.FLOW_PROGRESS,
|
|
24
|
+
ReticleCommand.PLAN,
|
|
22
25
|
]);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { InboxMessage } from './human/live-control.js';
|
|
2
|
+
import { type Coverage, CoverageCapability, type ImpactSnapshot } from '@reticlehq/core';
|
|
3
|
+
export interface RecordedGap {
|
|
4
|
+
kind: string;
|
|
5
|
+
missing: string;
|
|
6
|
+
fix: string;
|
|
7
|
+
seenAt: number;
|
|
8
|
+
cost?: string;
|
|
9
|
+
ref?: string;
|
|
10
|
+
source?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Remember gaps a verdict on this session just reported. Malformed entries are skipped. */
|
|
13
|
+
export declare function recordGaps(sessionId: string, gaps: readonly object[], now: number): void;
|
|
14
|
+
/** A tab as the notes below key it: its session, and the app it shows. */
|
|
15
|
+
export interface NotedTab {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly projectId?: string | undefined;
|
|
18
|
+
readonly url?: string | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** A verdict on this tab named a file:line: source mapping is seen, whatever else lacks one. */
|
|
21
|
+
export declare function noteSourceSeen(tab: NotedTab, source: string | undefined): void;
|
|
22
|
+
/** An acted element carried a test id: the app uses them, whatever one control lacks. */
|
|
23
|
+
export declare function noteTestidSeen(tab: NotedTab, testid: string | undefined): void;
|
|
24
|
+
/** What an act result says about the element it reached: its test id and its source stamp. */
|
|
25
|
+
export declare function noteActedElement(tab: NotedTab, result: unknown): void;
|
|
26
|
+
/**
|
|
27
|
+
* An act's result, passed through after noting what it says about the element it reached. Every act
|
|
28
|
+
* dispatches through one function, so coverage sees test ids and source stamps from the first
|
|
29
|
+
* control acted on rather than only from a verdict.
|
|
30
|
+
*/
|
|
31
|
+
export declare function notedAct<T extends {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
result?: unknown;
|
|
34
|
+
}>(tab: NotedTab, done: T): T;
|
|
35
|
+
/** A tab the daemon can ask. Absent `command`: a test double or a tab with no page to ask. */
|
|
36
|
+
export interface ProbedTab extends NotedTab {
|
|
37
|
+
command?(name: string, args?: Record<string, unknown>, timeoutMs?: number): Promise<{
|
|
38
|
+
ok: boolean;
|
|
39
|
+
result?: unknown;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ask each page whose app has not shown both markers yet what it carries. What an act happens to
|
|
44
|
+
* reach decides nothing then: an app with test ids is seen to have them before anything acted, and a
|
|
45
|
+
* hidden tab of it says the same. A page that cannot answer (an older SDK, a closed tab) is skipped.
|
|
46
|
+
* True when a page showed something not known before.
|
|
47
|
+
*/
|
|
48
|
+
export declare function probeMarkers(tabs: readonly ProbedTab[]): Promise<boolean>;
|
|
49
|
+
/** What this session's verdicts recorded, newest first. */
|
|
50
|
+
export declare function recordedGaps(sessionId: string): readonly RecordedGap[];
|
|
51
|
+
/** Forget a session that ended. What its app has shown is kept: it is still that app's. */
|
|
52
|
+
export declare function forgetRecordedGaps(sessionId: string): void;
|
|
53
|
+
/** Forget everything, apps included. For tests. */
|
|
54
|
+
export declare function forgetAllRecordedGaps(): void;
|
|
55
|
+
/** What instrumentation coverage reads off a connected tab. */
|
|
56
|
+
export interface InstrumentedTab extends NotedTab {
|
|
57
|
+
readonly channels?: readonly string[] | undefined;
|
|
58
|
+
readonly sourceMapping?: boolean | undefined;
|
|
59
|
+
/** What the person said to the agent from this tab. Absent on a test double. */
|
|
60
|
+
inboxHistory?(): readonly InboxMessage[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The tab's HELLO channels, plus the `source` marker when an act or verdict mapped a control to
|
|
64
|
+
* its file:line (seen anywhere is seen) or its page said it carries source mapping, and the
|
|
65
|
+
* `testid` marker once an acted element carried one — the list the platform report sends and
|
|
66
|
+
* coverage reads. A build that turned the stamp off has no source marker, whatever was seen.
|
|
67
|
+
*/
|
|
68
|
+
export declare function announcedChannels(tab: InstrumentedTab): string[];
|
|
69
|
+
/**
|
|
70
|
+
* The coverage capabilities that do not apply to this tab's app, excluded from both sides of the
|
|
71
|
+
* score: file:line on a page that said it cannot apply there (plain HTML), until a stamp shows up.
|
|
72
|
+
* The platform reads the same list from the local-apps report, so both sides move together.
|
|
73
|
+
*/
|
|
74
|
+
export declare function notApplicableOf(tab: NotedTab): CoverageCapability[];
|
|
75
|
+
/** Whether the Harness may drive this tab's app (see core's `instrumentation-coverage.ts`), as pushed. */
|
|
76
|
+
export interface TabHarnessGate {
|
|
77
|
+
percent: number;
|
|
78
|
+
unlocked: boolean;
|
|
79
|
+
reason?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* This tab's coverage and its Harness gate, with the coding-agent prompt when its verdicts recorded
|
|
83
|
+
* any gap or the gate is shut: below the gate the prompt names every unseen capability, so there is
|
|
84
|
+
* always something to hand the agent.
|
|
85
|
+
*/
|
|
86
|
+
export declare function instrumentationOf(tab: InstrumentedTab,
|
|
87
|
+
/** The app's other tabs: what any of them has seen or recorded counts, as on the platform. */
|
|
88
|
+
siblings?: readonly InstrumentedTab[]): Coverage & {
|
|
89
|
+
prompt?: string;
|
|
90
|
+
harnessGate: TabHarnessGate;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* The impact snapshot a tab is pushed, carrying that tab's own coverage, running drive and agent
|
|
94
|
+
* link (who is attached, and this tab's notes to them). Every
|
|
95
|
+
* push needs the drive: one without it reads as "no drive", and the drive's own tool calls push.
|
|
96
|
+
*/
|
|
97
|
+
export declare function withInstrumentation(tab: InstrumentedTab, snapshot: ImpactSnapshot): ImpactSnapshot;
|