@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
|
@@ -9,22 +9,32 @@
|
|
|
9
9
|
* so the decision logic — including the two honesty guards (no session, no flows ⇒ never a green pass)
|
|
10
10
|
* — is unit-tested without launching a real browser.
|
|
11
11
|
*/
|
|
12
|
+
import { CLI_CLIENT_NAME } from '../../judgement/runs/verification-sync.js';
|
|
12
13
|
import { join, basename } from 'node:path';
|
|
13
14
|
import { readFileSync } from 'node:fs';
|
|
14
15
|
import { runAdhocVerdict } from './adhoc-verdict.js';
|
|
16
|
+
import { callerArtifactRoot } from '../../memory/project/link-directory.js';
|
|
17
|
+
import { verifyResults } from './verify-results.js';
|
|
18
|
+
import { writeFile } from 'node:fs/promises';
|
|
15
19
|
import { runAdhocExplore, runAdhocSuite } from './adhoc-suite.js';
|
|
16
|
-
import { exploreApp, harnessAvailable, MSG_NO_HARNESS_KEY, } from '../../surface/tools/harness-explore.js';
|
|
20
|
+
import { cutOffReason, exploreApp, harnessAvailable, MSG_NO_HARNESS_KEY, withLinkedCredential, } from '../../surface/tools/harness-explore.js';
|
|
21
|
+
import { linkedCloudPort } from '../../memory/cloud/cloud-config.js';
|
|
22
|
+
import { CONNECT } from '../../surface/tools/platform-moment.js';
|
|
17
23
|
import { resolveSuiteSelection } from '../../language/flows/suite-selection.js';
|
|
18
|
-
import {
|
|
24
|
+
import { projectOnly } from '../../memory/project/session-root.js';
|
|
25
|
+
import { configuredPairingToken, nodePairingTokenDeps, readOrCreatePairingTokenSync, defaultPairingTokenDir, } from '../../portal/bridge/pairing-token.js';
|
|
19
26
|
import { randomUUID } from 'node:crypto';
|
|
20
|
-
import { RETICLE_DEFAULT_PORT, ReticleEnv, bridgeWsUrl, isLoopbackHostname, ReticleDir, RunAgentKind, RunFramework, RunProfile, RunTrigger, VerdictStatus, VerifyPhase, } from '@reticlehq/core';
|
|
27
|
+
import { MCP_SSE_PATH, MCP_MESSAGE_PATH, RETICLE_DEFAULT_PORT, ReticleEnv, bridgeWsUrl, isLoopbackHostname, ReticleDir, RunAgentKind, RunFramework, RunProfile, RunTrigger, VerdictStatus, VerifyPhase, } from '@reticlehq/core';
|
|
21
28
|
import { start } from '../../index.js';
|
|
22
29
|
import { probePresence, describePresence, PortPresence, } from '../daemon/binding/port-presence.js';
|
|
23
30
|
import { EXPECT_FLAG } from './cli-parse-grammar.js';
|
|
24
31
|
import { probeDaemon } from '../../surface/mcp/mcp-proxy.js';
|
|
25
32
|
import { fetchStatus, summarizeStatus } from '../daemon/binding/daemon-status-probe.js';
|
|
26
33
|
import { cloudFetch, createProgressReporter, syncProgressToCloud, syncRunToCloud, SyncOutcome, } from '../../memory/cloud/cloud-sync.js';
|
|
27
|
-
import {
|
|
34
|
+
import { readProjectId } from './ports/resolve/cli-port.js';
|
|
35
|
+
import { linkedRunsCloudPort, resolveProjectCloud } from '../../memory/cloud/cloud-config.js';
|
|
36
|
+
import { readDashboardUrl } from '../../memory/project/sync-status.js';
|
|
37
|
+
import { seeRunLine } from '../../memory/project/sync-status.js';
|
|
28
38
|
import { homedir } from 'node:os';
|
|
29
39
|
import { ReticleRunner } from '../../judgement/runs/reticle-runner.js';
|
|
30
40
|
import { createRunnerPort } from '../../judgement/runs/runner-port.js';
|
|
@@ -41,7 +51,15 @@ const EXIT_FAIL = 1;
|
|
|
41
51
|
const DEFAULT_SESSION_TIMEOUT_MS = 15_000;
|
|
42
52
|
const SESSION_POLL_MS = 250;
|
|
43
53
|
const DEFAULT_PROJECT_NAME = 'app';
|
|
44
|
-
|
|
54
|
+
/**
|
|
55
|
+
* The project a verify run is named for: the dashboard project this checkout is linked to, else the
|
|
56
|
+
* id its `.reticle.json` carries, else the folder. A CI run read "ci-repo" on a dashboard whose
|
|
57
|
+
* project, and the repo's own committed config, said `web-ci`.
|
|
58
|
+
*/
|
|
59
|
+
export function verifyProjectName(linked, configured, folder) {
|
|
60
|
+
return linked ?? configured ?? (folder || DEFAULT_PROJECT_NAME);
|
|
61
|
+
}
|
|
62
|
+
const VERIFY_AGENT_ID = CLI_CLIENT_NAME;
|
|
45
63
|
const MSG_NO_SESSION = 'No app connected: Reticle drove the URL but no @reticlehq/browser session dialed back.\n' +
|
|
46
64
|
' Make sure the SDK is in the build and reticle.connect() runs on the preview page' +
|
|
47
65
|
' (for a non-localhost preview: allowNonLocalhost + a pairing token).';
|
|
@@ -150,6 +168,9 @@ export async function runVerify(args, ports) {
|
|
|
150
168
|
await syncProgressToCloud(streamId,
|
|
151
169
|
// The run's OWN injected timestamp — no wall clock is read in this path (rule 7).
|
|
152
170
|
[{ phase: VerifyPhase.PUSHED, at: run.createdAt }], cloud, cloudFetch).catch(() => undefined);
|
|
171
|
+
if (args.resultsJson !== undefined && ports.writeResults !== undefined) {
|
|
172
|
+
await ports.writeResults(args.resultsJson, `${JSON.stringify(verifyResults(run), null, 2)}\n`);
|
|
173
|
+
}
|
|
153
174
|
ports.out(renderRunReport(run));
|
|
154
175
|
ports.exit(run.verdict.status === VerdictStatus.PASS ? EXIT_PASS : EXIT_FAIL);
|
|
155
176
|
}
|
|
@@ -176,6 +197,12 @@ async function explore(conn, args, ports) {
|
|
|
176
197
|
}
|
|
177
198
|
ports.out('No saved flows yet — driving the app to record some.');
|
|
178
199
|
const drive = await conn.explore(args.persona);
|
|
200
|
+
const cut = cutOffReason(drive);
|
|
201
|
+
if (cut !== undefined) {
|
|
202
|
+
ports.fail(cut);
|
|
203
|
+
ports.exit(EXIT_FAIL);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
179
206
|
if (0 === drive.savedFlows.length) {
|
|
180
207
|
ports.fail(MSG_EXPLORED_NOTHING);
|
|
181
208
|
ports.exit(EXIT_FAIL);
|
|
@@ -192,15 +219,35 @@ async function explore(conn, args, ports) {
|
|
|
192
219
|
* already reported locally; the cloud copy is an enhancement.
|
|
193
220
|
*/
|
|
194
221
|
async function pushRunToCloud(run, config, ports) {
|
|
195
|
-
if (null === config)
|
|
222
|
+
if (null === config) {
|
|
223
|
+
ports.out(`run ${run.runId} was kept on this computer: this repo is not linked, so nothing was sent ` +
|
|
224
|
+
`to the dashboard. To save runs for your team: ${CONNECT}`);
|
|
196
225
|
return;
|
|
226
|
+
}
|
|
197
227
|
const result = await syncRunToCloud(run, config, cloudFetch);
|
|
198
228
|
if (result.outcome === SyncOutcome.SYNCED) {
|
|
199
|
-
ports.
|
|
229
|
+
const dashboard = ports.dashboardUrl?.();
|
|
230
|
+
ports.out(dashboard === undefined
|
|
231
|
+
? `↑ run ${run.runId} recorded on the Reticle dashboard`
|
|
232
|
+
: seeRunLine(dashboard, run.runId));
|
|
200
233
|
}
|
|
201
234
|
else {
|
|
202
|
-
ports.fail(
|
|
235
|
+
ports.fail(runSyncFailure(result.status, result.error));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/** The platform answered: the credential was not accepted. */
|
|
239
|
+
const REFUSED_STATUSES = new Set([401, 403]);
|
|
240
|
+
/**
|
|
241
|
+
* Why the run did not reach the dashboard. A revoked key left CI green with "cloud run sync failed
|
|
242
|
+
* (401)" in the log as the only trace; a refused key is said as one, loudly.
|
|
243
|
+
*/
|
|
244
|
+
export function runSyncFailure(status, error) {
|
|
245
|
+
if (status !== undefined && REFUSED_STATUSES.has(status)) {
|
|
246
|
+
return (`⚠ The platform refused this project's API key (${String(status)}): this run did NOT reach ` +
|
|
247
|
+
'the dashboard, and nothing pushed with this key will. The key was revoked, or its owner no ' +
|
|
248
|
+
'longer has access to the workspace — mint a new one in Settings → API keys. Run kept locally.');
|
|
203
249
|
}
|
|
250
|
+
return `cloud run sync failed (${String(status ?? error ?? 'error')}); run kept locally`;
|
|
204
251
|
}
|
|
205
252
|
function delay(ms) {
|
|
206
253
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -233,6 +280,9 @@ export function buildVerifyDeps(running, reticleRoot, now) {
|
|
|
233
280
|
fs,
|
|
234
281
|
reticleRoot,
|
|
235
282
|
now,
|
|
283
|
+
// The key `reticle connect` filed. Without it a connected machine that never exported
|
|
284
|
+
// RETICLE_API_KEY was told to run `reticle connect` when asking the Harness to drive.
|
|
285
|
+
linkedCloud: linkedCloudPort(fs, reticleRoot, homedir(), process.env),
|
|
236
286
|
};
|
|
237
287
|
if (running.realInput !== undefined)
|
|
238
288
|
deps.realInput = running.realInput;
|
|
@@ -259,17 +309,18 @@ async function openLiveConnection(opts) {
|
|
|
259
309
|
const envPort = Number(process.env[ReticleEnv.PORT]);
|
|
260
310
|
const port = Number.isFinite(envPort) && envPort > 0 ? envPort : opts.port;
|
|
261
311
|
const { origin, loopback } = urlParts(opts.url);
|
|
262
|
-
|
|
312
|
+
// The configured token when there is one: an app in a container presents the one in the shared
|
|
313
|
+
// token directory, and a fresh one-shot token refused it (#1251).
|
|
314
|
+
const token = loopback
|
|
315
|
+
? undefined
|
|
316
|
+
: ((await configuredPairingToken(process.env, nodePairingTokenDeps())) ?? randomUUID());
|
|
317
|
+
const pairing = token === undefined
|
|
263
318
|
? {}
|
|
264
|
-
:
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
injectConnect: { token, url: bridgeUrl },
|
|
270
|
-
...(origin !== undefined ? { allowedOrigins: [origin] } : {}),
|
|
271
|
-
};
|
|
272
|
-
})();
|
|
319
|
+
: {
|
|
320
|
+
token,
|
|
321
|
+
injectConnect: { token, url: bridgeWsUrl(port) },
|
|
322
|
+
...(origin !== undefined ? { allowedOrigins: [origin] } : {}),
|
|
323
|
+
};
|
|
273
324
|
const running = await start({
|
|
274
325
|
port,
|
|
275
326
|
driveUrl: opts.url,
|
|
@@ -281,22 +332,28 @@ async function openLiveConnection(opts) {
|
|
|
281
332
|
...(opts.storageState !== undefined ? { storageState: opts.storageState } : {}),
|
|
282
333
|
});
|
|
283
334
|
const deps = buildVerifyDeps(running, opts.reticleRoot, opts.now);
|
|
284
|
-
const
|
|
335
|
+
const harnessEnv = await withLinkedCredential(deps, process.env);
|
|
336
|
+
const runner = new ReticleRunner(createRunnerPort(deps, opts.sessionId, { confirmDangerous: true === opts.confirmDangerous }));
|
|
285
337
|
return {
|
|
286
338
|
sessionReady: (timeoutMs) => waitForSession(deps.sessions, timeoutMs, opts.now),
|
|
287
339
|
listFlows: async (select) => select === undefined || 0 === select.length
|
|
288
340
|
? deps.flows.list()
|
|
289
|
-
: (await resolveSuiteSelection(deps, undefined, { labels: [...select] })).run,
|
|
341
|
+
: (await resolveSuiteSelection(deps, projectOnly(undefined), { labels: [...select] })).run,
|
|
290
342
|
// Absent, not throwing, when no model is configured: the CLI reads its absence as "unavailable"
|
|
291
343
|
// and prints the one sentence that makes it available.
|
|
292
|
-
...(harnessAvailable(
|
|
344
|
+
...(harnessAvailable(harnessEnv)
|
|
293
345
|
? {
|
|
294
346
|
explore: async (focus) => {
|
|
295
|
-
const result = await exploreApp(deps,
|
|
347
|
+
const result = await exploreApp(deps, harnessEnv, {
|
|
296
348
|
...(focus === undefined ? {} : { focus }),
|
|
297
349
|
...(opts.sessionId === undefined ? {} : { sessionId: opts.sessionId }),
|
|
298
350
|
});
|
|
299
|
-
return {
|
|
351
|
+
return {
|
|
352
|
+
savedFlows: result.savedFlows,
|
|
353
|
+
steps: result.drive.steps,
|
|
354
|
+
stopReason: result.drive.stopReason,
|
|
355
|
+
...(result.drive.error === undefined ? {} : { error: result.drive.error }),
|
|
356
|
+
};
|
|
300
357
|
},
|
|
301
358
|
}
|
|
302
359
|
: {}),
|
|
@@ -389,16 +446,19 @@ export function expectNeedsDaemonMessage(port, presence) {
|
|
|
389
446
|
' • Start a daemon on that port, pointed at the app, then re-run this command: ' +
|
|
390
447
|
`npx @reticlehq/server serve --port ${String(port)} --drive <url>\n` +
|
|
391
448
|
` • Or drop ${EXPECT_FLAG}, and verify drives the url itself and replays your saved flows — ` +
|
|
392
|
-
'a different question, and it proves nothing about your predicate
|
|
449
|
+
'a different question, and it proves nothing about your predicate.\n\n' +
|
|
450
|
+
` • Once that daemon is running, you can also drive its HTTP MCP transport for anything ` +
|
|
451
|
+
`${EXPECT_FLAG} cannot do — click, fill, press (${MCP_SSE_PATH}, then ${MCP_MESSAGE_PATH}). ` +
|
|
452
|
+
'See https://docs.reticle.sh/http-transport.md.');
|
|
393
453
|
}
|
|
394
454
|
/**
|
|
395
|
-
* The
|
|
455
|
+
* The platform key is set here but not in the daemon, which is what asks the platform. The daemon is
|
|
396
456
|
* usually the one `init` or the agent's MCP client started, from an environment without the key.
|
|
397
457
|
*/
|
|
398
458
|
export function daemonLacksKeyMessage(port) {
|
|
399
|
-
return (`${ReticleEnv.
|
|
400
|
-
'started without it, and the
|
|
401
|
-
`inherits the key: npx @reticlehq/server restart --port ${String(port)}`);
|
|
459
|
+
return (`${ReticleEnv.API_KEY} is set in this shell, but the daemon on port ${String(port)} was ` +
|
|
460
|
+
'started without it, and the daemon is what asks the platform to drive. Restart it from this ' +
|
|
461
|
+
`shell so it inherits the key: npx @reticlehq/server restart --port ${String(port)}`);
|
|
402
462
|
}
|
|
403
463
|
/** What `verify` does next, once the options and the state of the port are both known. */
|
|
404
464
|
export const VerifyRoute = {
|
|
@@ -430,7 +490,7 @@ export function routeVerify(args) {
|
|
|
430
490
|
}
|
|
431
491
|
if (args.presence !== PortPresence.DAEMON)
|
|
432
492
|
return { route: VerifyRoute.FLOWS };
|
|
433
|
-
if (true === args.explore && true !== args.wantsOwnBrowser) {
|
|
493
|
+
if (true === args.explore && true !== args.wantsOwnBrowser && true !== args.hasSavedFlows) {
|
|
434
494
|
return { route: VerifyRoute.ADHOC_EXPLORE };
|
|
435
495
|
}
|
|
436
496
|
// No predicate, but there may be SAVED FLOWS, and a daemon already owns the port: replay them
|
|
@@ -470,33 +530,45 @@ export function handleVerify(parsed) {
|
|
|
470
530
|
}
|
|
471
531
|
}
|
|
472
532
|
const reticleRoot = join(process.cwd(), ReticleDir.ROOT);
|
|
473
|
-
const
|
|
533
|
+
const linkedName = async () => verifyProjectName((await resolveProjectCloud(createNodeFileSystem(), reticleRoot, homedir(), process.env))
|
|
534
|
+
.projectId, readProjectId(process.cwd()), basename(process.cwd()));
|
|
474
535
|
const ports = {
|
|
475
|
-
connect: () => openLiveConnection({
|
|
536
|
+
connect: async () => openLiveConnection({
|
|
476
537
|
url: parsed.url,
|
|
477
538
|
headless: parsed.headless,
|
|
478
539
|
reticleRoot,
|
|
479
|
-
projectName,
|
|
540
|
+
projectName: await linkedName(),
|
|
480
541
|
now,
|
|
481
542
|
port: parsed.port ?? RETICLE_DEFAULT_PORT,
|
|
482
543
|
...(parsed.storageState !== undefined ? { storageState: parsed.storageState } : {}),
|
|
483
544
|
...(parsed.sessionId !== undefined ? { sessionId: parsed.sessionId } : {}),
|
|
545
|
+
...(true === parsed.confirmDangerous ? { confirmDangerous: true } : {}),
|
|
484
546
|
}),
|
|
485
547
|
out: (line) => process.stdout.write(`${line}\n`),
|
|
486
548
|
fail: (line) => process.stderr.write(`${line}\n`),
|
|
487
549
|
exit: (code) => process.exit(code),
|
|
488
|
-
cloud:
|
|
550
|
+
cloud: linkedRunsCloudPort(createNodeFileSystem(), reticleRoot, homedir(), process.env),
|
|
551
|
+
dashboardUrl: () => readDashboardUrl(reticleRoot),
|
|
552
|
+
writeResults: (path, text) => writeFile(path, text, 'utf8'),
|
|
489
553
|
};
|
|
490
554
|
// Asked BEFORE anything binds. The listen failure arrives asynchronously on the server object,
|
|
491
555
|
// long after `start` has resolved, so no `.catch` on that promise can ever see it — which is why
|
|
492
556
|
// this used to reach the user as a raw node stack rather than as an answer.
|
|
493
557
|
void (async () => {
|
|
558
|
+
const keyNote = (await resolveProjectCloud(createNodeFileSystem(), reticleRoot, homedir(), process.env)).note;
|
|
559
|
+
if (keyNote !== undefined)
|
|
560
|
+
process.stderr.write(`${keyNote}\n`);
|
|
494
561
|
const port = parsed.port ?? RETICLE_DEFAULT_PORT;
|
|
562
|
+
// A lease opened for this verdict writes its runs into this folder's project, not `unmatched/`.
|
|
563
|
+
const root = callerArtifactRoot(process.cwd());
|
|
564
|
+
const callerRoot = root === undefined ? {} : { root };
|
|
495
565
|
const presence = await probePresence(port, { tcpOpen: probeDaemon, status: fetchStatus });
|
|
496
566
|
const plan = routeVerify({
|
|
497
567
|
hasPredicate: expectation !== undefined,
|
|
498
568
|
wantsOwnBrowser: !parsed.headless || parsed.storageState !== undefined,
|
|
499
569
|
explore: true === parsed.explore || parsed.persona !== undefined,
|
|
570
|
+
hasSavedFlows: 0 <
|
|
571
|
+
(await new FlowStore(createNodeFileSystem(), reticleRoot, { now: Date.now }).list()).length,
|
|
500
572
|
presence,
|
|
501
573
|
port,
|
|
502
574
|
});
|
|
@@ -522,6 +594,7 @@ export function handleVerify(parsed) {
|
|
|
522
594
|
// Read fresh, not from `presence`: that probe asks whether a daemon is on the port, and
|
|
523
595
|
// this asks whether a TAB is — the difference between asserting and opening the url first.
|
|
524
596
|
sessions: async () => summarizeStatus(await fetchStatus(port)).sessions,
|
|
597
|
+
...callerRoot,
|
|
525
598
|
...(parsed.sessionId === undefined ? {} : { sessionId: parsed.sessionId }),
|
|
526
599
|
...((t) => (t === undefined || 0 === t.length ? {} : { token: t }))(readOrCreatePairingTokenSync(defaultPairingTokenDir())),
|
|
527
600
|
});
|
|
@@ -535,6 +608,10 @@ export function handleVerify(parsed) {
|
|
|
535
608
|
case VerifyRoute.ADHOC_SUITE: {
|
|
536
609
|
const suite = await runAdhocSuite({
|
|
537
610
|
port,
|
|
611
|
+
...(parsed.url !== undefined && '' !== parsed.url ? { url: parsed.url } : {}),
|
|
612
|
+
sessions: async () => summarizeStatus(await fetchStatus(port)).sessions,
|
|
613
|
+
...callerRoot,
|
|
614
|
+
...(true === parsed.confirmDangerous ? { confirmDangerous: true } : {}),
|
|
538
615
|
...(parsed.select === undefined ? {} : { select: parsed.select }),
|
|
539
616
|
...(parsed.sessionId === undefined ? {} : { sessionId: parsed.sessionId }),
|
|
540
617
|
...((t) => (t === undefined || 0 === t.length ? {} : { token: t }))(readOrCreatePairingTokenSync(defaultPairingTokenDir())),
|
|
@@ -552,13 +629,14 @@ export function handleVerify(parsed) {
|
|
|
552
629
|
url: parsed.url,
|
|
553
630
|
...(parsed.persona === undefined ? {} : { persona: parsed.persona }),
|
|
554
631
|
sessions: async () => summarizeStatus(await fetchStatus(port)).sessions,
|
|
632
|
+
...callerRoot,
|
|
555
633
|
...((t) => (t === undefined || 0 === t.length ? {} : { token: t }))(readOrCreatePairingTokenSync(defaultPairingTokenDir())),
|
|
556
634
|
});
|
|
557
635
|
for (const line of explored.lines)
|
|
558
636
|
ports.out(line);
|
|
559
637
|
// The drive runs INSIDE the daemon, so the key has to be in ITS environment. A reader who
|
|
560
|
-
// exported it in this shell and
|
|
561
|
-
//
|
|
638
|
+
// exported it in this shell and was told to link has been told to do the thing they just
|
|
639
|
+
// did; say where the key is actually missing.
|
|
562
640
|
if (0 !== explored.code && harnessAvailable(process.env)) {
|
|
563
641
|
const refusedForKey = explored.lines.some((line) => line.includes(MSG_NO_HARNESS_KEY));
|
|
564
642
|
if (refusedForKey)
|
|
@@ -574,6 +652,7 @@ export function handleVerify(parsed) {
|
|
|
574
652
|
...(true === parsed.explore ? { explore: true } : {}),
|
|
575
653
|
...(parsed.persona === undefined ? {} : { persona: parsed.persona }),
|
|
576
654
|
...(parsed.select === undefined ? {} : { select: parsed.select }),
|
|
655
|
+
...(parsed.resultsJson === undefined ? {} : { resultsJson: parsed.resultsJson }),
|
|
577
656
|
}, ports);
|
|
578
657
|
return;
|
|
579
658
|
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
export { cmdLink } from './cloud-link.js';
|
|
1
2
|
export declare const isCloudCommand: (cmd: string | undefined) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Who is signed in and which project this repo is linked to, for `reticle status`. Local files
|
|
5
|
+
* only: status must answer with no network.
|
|
6
|
+
*/
|
|
7
|
+
export declare const accountStatusFields: () => Promise<{
|
|
8
|
+
signedInAs: string | null;
|
|
9
|
+
linkedProject: string | null;
|
|
10
|
+
linkedWorkspace?: string;
|
|
11
|
+
keyRefused?: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** Whether `reticle connect`'s init half installs the packages: not under `--no-install`. */
|
|
14
|
+
export declare const connectInstalls: (argv: readonly string[]) => boolean;
|
|
2
15
|
/** Dispatch a cloud subcommand. Returns the process exit code. */
|
|
3
16
|
export declare const runCloudCommand: (argv: readonly string[]) => Promise<number>;
|