@reticlehq/server 3.5.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/SKILL.md +123 -116
- package/dist/chromium-launch-options.d.ts +3 -1
- package/dist/chromium-launch-options.js +2 -1
- package/dist/command/cli/adhoc-suite.d.ts +14 -0
- package/dist/command/cli/adhoc-suite.js +42 -7
- package/dist/command/cli/adhoc-verdict.d.ts +19 -2
- package/dist/command/cli/adhoc-verdict.js +76 -9
- package/dist/command/cli/answers/gate-exit.d.ts +23 -0
- package/dist/command/cli/answers/gate-exit.js +45 -0
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +3 -1
- package/dist/command/cli/answers/open-note.d.ts +2 -0
- package/dist/command/cli/answers/open-note.js +22 -0
- package/dist/command/cli/auth/device-flow.d.ts +13 -2
- package/dist/command/cli/auth/device-flow.js +17 -0
- package/dist/command/cli/cli-doctor.js +14 -0
- package/dist/command/cli/cli-flow-commands.d.ts +0 -11
- package/dist/command/cli/cli-flow-commands.js +31 -112
- package/dist/command/cli/cli-kill.js +3 -2
- package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
- package/dist/command/cli/cli-parse-grammar.js +75 -0
- package/dist/command/cli/cli-parse-verify.d.ts +2 -0
- package/dist/command/cli/cli-parse-verify.js +18 -0
- package/dist/command/cli/cli-parse.d.ts +19 -28
- package/dist/command/cli/cli-parse.js +82 -182
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +61 -9
- package/dist/command/cli/cli-usage.d.ts +33 -0
- package/dist/command/cli/cli-usage.js +287 -0
- package/dist/command/cli/cli-verify.d.ts +35 -5
- package/dist/command/cli/cli-verify.js +114 -35
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +192 -341
- package/dist/command/cli/cloud-kit.d.ts +12 -0
- package/dist/command/cli/cloud-kit.js +41 -2
- package/dist/command/cli/cloud-link.d.ts +57 -0
- package/dist/command/cli/cloud-link.js +308 -0
- package/dist/command/cli/cloud-login.d.ts +22 -0
- package/dist/command/cli/cloud-login.js +96 -8
- package/dist/command/cli/context-command.d.ts +1 -0
- package/dist/command/cli/context-command.js +33 -0
- package/dist/command/cli/daemon-start-options.d.ts +3 -0
- package/dist/command/cli/daemon-start-options.js +24 -3
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
- package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
- package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
- package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
- package/dist/command/cli/doctor/doctor-project-line.js +5 -4
- package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
- package/dist/command/cli/doctor/doctor-rows.js +6 -0
- package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
- package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
- package/dist/command/cli/drive/drive-attach.d.ts +27 -2
- package/dist/command/cli/drive/drive-attach.js +71 -4
- package/dist/command/cli/drive/drive-command.d.ts +2 -1
- package/dist/command/cli/drive/drive-command.js +13 -7
- package/dist/command/cli/known-regression.d.ts +13 -0
- package/dist/command/cli/known-regression.js +34 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
- package/dist/command/cli/launch/sdk-version-match.js +25 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
- package/dist/command/cli/mcp-command.d.ts +6 -0
- package/dist/command/cli/mcp-command.js +13 -5
- package/dist/command/cli/ports/port-holder.d.ts +10 -0
- package/dist/command/cli/ports/port-holder.js +25 -1
- package/dist/command/cli/project-name.d.ts +29 -1
- package/dist/command/cli/project-name.js +107 -2
- package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
- package/dist/command/cli/setup-mcp-cli.js +35 -12
- package/dist/command/cli/status/status-lines.d.ts +1 -0
- package/dist/command/cli/status/status-lines.js +47 -2
- package/dist/command/cli/status/workspace-links.d.ts +10 -0
- package/dist/command/cli/status/workspace-links.js +29 -0
- package/dist/command/cli/try-command.d.ts +96 -0
- package/dist/command/cli/try-command.js +362 -0
- package/dist/command/cli/tutorial.d.ts +0 -100
- package/dist/command/cli/tutorial.js +0 -181
- package/dist/command/cli/verify-results.d.ts +19 -0
- package/dist/command/cli/verify-results.js +29 -0
- package/dist/command/cli-onboarding.d.ts +0 -11
- package/dist/command/cli-onboarding.js +0 -15
- package/dist/command/cli.d.ts +20 -0
- package/dist/command/cli.js +130 -104
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +23 -1
- package/dist/command/daemon/daemon-resolve.js +79 -9
- package/dist/command/setup/agent-writer.d.ts +1 -1
- package/dist/command/setup/agent-writer.js +3 -2
- package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
- package/dist/command/setup/bringup/bridge-port.js +13 -3
- package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
- package/dist/command/setup/bringup/connect-lease.js +1 -0
- package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
- package/dist/command/setup/bringup/dev-server-wait.js +19 -0
- package/dist/command/setup/bringup/ensure-daemon.js +9 -2
- package/dist/command/setup/init/agent-restart.d.ts +23 -0
- package/dist/command/setup/init/agent-restart.js +28 -0
- package/dist/command/setup/init/init-port.d.ts +14 -1
- package/dist/command/setup/init/init-port.js +32 -2
- package/dist/command/setup/init/init-runtime.d.ts +22 -2
- package/dist/command/setup/init/init-runtime.js +114 -38
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +38 -9
- package/dist/command/setup/probe/existing-app.d.ts +12 -0
- package/dist/command/setup/probe/existing-app.js +14 -0
- package/dist/command/setup/remaining-steps.js +2 -1
- package/dist/command/setup/run-setup.d.ts +34 -9
- package/dist/command/setup/run-setup.js +65 -51
- package/dist/command/setup/setup-command.d.ts +25 -1
- package/dist/command/setup/setup-command.js +59 -4
- package/dist/command/setup/setup-mcp.js +25 -2
- package/dist/command/setup/tauri-signing.d.ts +19 -0
- package/dist/command/setup/tauri-signing.js +79 -0
- package/dist/command/setup/terminal/listeners.d.ts +10 -1
- package/dist/command/setup/terminal/listeners.js +37 -6
- package/dist/command/update/update-nudge.d.ts +9 -0
- package/dist/command/update/update-nudge.js +1 -1
- package/dist/command/update/updater.js +11 -15
- package/dist/command/version/version-nudge.js +3 -0
- package/dist/command/version/version-skew.d.ts +20 -1
- package/dist/command/version/version-skew.js +49 -4
- package/dist/features/crawl/crawl-tools.js +4 -0
- package/dist/features/crawl/crawl.d.ts +6 -0
- package/dist/features/crawl/crawl.js +23 -2
- package/dist/features/exhaust/ledger.d.ts +21 -14
- package/dist/features/exhaust/ledger.js +35 -9
- package/dist/features/harness/app-findings.d.ts +2 -0
- package/dist/features/harness/app-findings.js +52 -0
- package/dist/features/harness/drive-report.d.ts +61 -1
- package/dist/features/harness/drive-report.js +394 -26
- package/dist/features/harness/drive-runs.d.ts +120 -0
- package/dist/features/harness/drive-runs.js +289 -0
- package/dist/features/harness/drivers.d.ts +10 -14
- package/dist/features/harness/drivers.js +10 -14
- package/dist/features/harness/explore/console-pages.d.ts +15 -0
- package/dist/features/harness/explore/console-pages.js +146 -0
- package/dist/features/harness/explore/disparity.d.ts +19 -0
- package/dist/features/harness/explore/disparity.js +71 -0
- package/dist/features/harness/explore/fake-app.d.ts +16 -0
- package/dist/features/harness/explore/fake-app.js +49 -0
- package/dist/features/harness/explore/goal-search.d.ts +26 -0
- package/dist/features/harness/explore/goal-search.js +144 -0
- package/dist/features/harness/explore/page-tree.d.ts +49 -0
- package/dist/features/harness/explore/page-tree.js +148 -0
- package/dist/features/harness/explore/site-map.d.ts +34 -0
- package/dist/features/harness/explore/site-map.js +150 -0
- package/dist/features/harness/fill-values.d.ts +3 -73
- package/dist/features/harness/fill-values.js +3 -169
- package/dist/features/harness/goals.d.ts +82 -0
- package/dist/features/harness/goals.js +330 -0
- package/dist/features/harness/harness.d.ts +51 -1
- package/dist/features/harness/harness.js +207 -6
- package/dist/features/harness/platform/drive-target.d.ts +30 -0
- package/dist/features/harness/platform/drive-target.js +81 -0
- package/dist/features/harness/platform/local-apps.d.ts +127 -0
- package/dist/features/harness/platform/local-apps.js +280 -0
- package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
- package/dist/features/harness/platform/persona-credentials.js +69 -0
- package/dist/features/harness/platform/platform-drives.d.ts +61 -0
- package/dist/features/harness/platform/platform-drives.js +114 -0
- package/dist/features/harness/platform/refusal.d.ts +52 -0
- package/dist/features/harness/platform/refusal.js +71 -0
- package/dist/features/harness/platform/remote-drive.d.ts +186 -0
- package/dist/features/harness/platform/remote-drive.js +378 -0
- package/dist/features/harness/platform/script.d.ts +94 -0
- package/dist/features/harness/platform/script.js +260 -0
- package/dist/features/harness/platform/server-driver.d.ts +54 -0
- package/dist/features/harness/platform/server-driver.js +182 -0
- package/dist/features/harness/platform-config.d.ts +41 -1
- package/dist/features/harness/platform-config.js +106 -9
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/app-controls.d.ts +5 -0
- package/dist/features/harness/script/app-controls.js +40 -0
- package/dist/features/harness/script/lane-ids.d.ts +14 -0
- package/dist/features/harness/script/lane-ids.js +16 -0
- package/dist/features/harness/script/script-run.d.ts +70 -0
- package/dist/features/harness/script/script-run.js +606 -0
- package/dist/features/license/license.d.ts +2 -2
- package/dist/features/visual/step-shots.d.ts +31 -0
- package/dist/features/visual/step-shots.js +231 -0
- package/dist/features/visual/visual-tools.d.ts +10 -1
- package/dist/features/visual/visual-tools.js +62 -17
- package/dist/hooks/client-directory.d.ts +18 -0
- package/dist/hooks/client-directory.js +57 -0
- package/dist/hooks/coding-agents.d.ts +34 -0
- package/dist/hooks/coding-agents.js +117 -0
- package/dist/hooks/driven-by.d.ts +23 -0
- package/dist/hooks/driven-by.js +56 -0
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/hooks/hook-commands.js +15 -4
- package/dist/hooks/tool-log.d.ts +9 -0
- package/dist/hooks/tool-log.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +80 -243
- package/dist/judgement/capsule/capsule-store.d.ts +2 -2
- package/dist/judgement/capsule/causal-summary.d.ts +15 -1
- package/dist/judgement/capsule/causal-summary.js +33 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
- package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
- package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
- package/dist/judgement/runs/artifact/gap-summary.js +12 -3
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
- package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
- package/dist/judgement/runs/artifact/run-store.js +195 -3
- package/dist/judgement/runs/context-tools.js +59 -1
- package/dist/judgement/runs/default-run-id.d.ts +3 -0
- package/dist/judgement/runs/default-run-id.js +16 -0
- package/dist/judgement/runs/drive-run.d.ts +71 -1
- package/dist/judgement/runs/drive-run.js +317 -5
- package/dist/judgement/runs/repair-prompt.js +1 -1
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +13 -3
- package/dist/judgement/runs/runner-port.d.ts +5 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +5 -2
- package/dist/judgement/runs/verification-sync.js +40 -18
- package/dist/language/flows/change/gate.d.ts +10 -0
- package/dist/language/flows/change/gate.js +22 -0
- package/dist/language/flows/decision.js +36 -1
- package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
- package/dist/language/flows/fields/flow-secret-field.js +25 -2
- package/dist/language/flows/flow-anchor.d.ts +61 -10
- package/dist/language/flows/flow-anchor.js +98 -6
- package/dist/language/flows/flow-cross-step.d.ts +15 -0
- package/dist/language/flows/flow-cross-step.js +21 -0
- package/dist/language/flows/flow-intent.d.ts +1 -0
- package/dist/language/flows/flow-journey.d.ts +6 -0
- package/dist/language/flows/flow-journey.js +20 -0
- package/dist/language/flows/flow-learning.d.ts +4 -0
- package/dist/language/flows/flow-learning.js +45 -14
- package/dist/language/flows/flow-mutate-tools.js +5 -3
- package/dist/language/flows/flow-replay-run.d.ts +23 -9
- package/dist/language/flows/flow-replay-run.js +115 -110
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +40 -1
- package/dist/language/flows/flow-replay.js +110 -22
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-scope.js +5 -1
- package/dist/language/flows/flow-step-runners.d.ts +22 -2
- package/dist/language/flows/flow-step-runners.js +247 -47
- package/dist/language/flows/flow-store-for-session.d.ts +2 -2
- package/dist/language/flows/flow-store-for-session.js +7 -3
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +112 -89
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +74 -12
- package/dist/language/flows/heal-run.js +6 -4
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/flake.d.ts +2 -2
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
- package/dist/language/flows/recording/tape/recordings.js +95 -13
- package/dist/language/flows/replay-from-hud.d.ts +20 -0
- package/dist/language/flows/replay-from-hud.js +51 -0
- package/dist/language/flows/replay.d.ts +9 -5
- package/dist/language/flows/replay.js +56 -15
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/suite/suite-flakes.js +2 -0
- package/dist/language/flows/suite-selection.d.ts +2 -15
- package/dist/language/flows/suite-selection.js +4 -3
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +202 -191
- package/dist/launch-chromium.d.ts +27 -5
- package/dist/launch-chromium.js +38 -8
- package/dist/memory/cloud/cloud-config.d.ts +22 -1
- package/dist/memory/cloud/cloud-config.js +34 -5
- package/dist/memory/cloud/cloud-sync.d.ts +17 -14
- package/dist/memory/cloud/cloud-sync.js +15 -4
- package/dist/memory/cloud/harness-config.d.ts +75 -1
- package/dist/memory/cloud/harness-config.js +115 -24
- package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
- package/dist/memory/cloud/hud-notices-source.js +128 -0
- package/dist/memory/cloud/memory-scope.d.ts +161 -0
- package/dist/memory/cloud/memory-scope.js +227 -0
- package/dist/memory/cloud/sync-cycle.d.ts +44 -7
- package/dist/memory/cloud/sync-cycle.js +129 -15
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +121 -9
- package/dist/memory/cloud/sync-disk.d.ts +1 -1
- package/dist/memory/cloud/sync-disk.js +31 -10
- package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
- package/dist/memory/cloud/sync-screenshots.js +105 -0
- package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
- package/dist/memory/cloud/unsynced-roots.js +166 -0
- package/dist/memory/impact/account-watch.d.ts +34 -0
- package/dist/memory/impact/account-watch.js +59 -0
- package/dist/memory/impact/impact-recorder.d.ts +8 -0
- package/dist/memory/impact/impact-recorder.js +12 -2
- package/dist/memory/impact/impact-store.d.ts +17 -4
- package/dist/memory/impact/impact-store.js +169 -63
- package/dist/memory/intent/inline-intent.d.ts +1 -0
- package/dist/memory/intent/intent-shard-store.js +16 -4
- package/dist/memory/intent/intent-shard.d.ts +14 -2
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +122 -4
- package/dist/memory/intent/open-intents.d.ts +6 -0
- package/dist/memory/intent/open-intents.js +10 -1
- package/dist/memory/intent/settled-words.d.ts +24 -0
- package/dist/memory/intent/settled-words.js +130 -0
- package/dist/memory/journal/drive-flow.d.ts +16 -0
- package/dist/memory/journal/drive-flow.js +34 -2
- package/dist/memory/journal/drive-run-flush.d.ts +2 -0
- package/dist/memory/journal/drive-run-flush.js +20 -5
- package/dist/memory/journal/envelope.d.ts +8 -8
- package/dist/memory/journal/journal-recorder.js +52 -3
- package/dist/memory/journal/on-disk/retention.d.ts +8 -0
- package/dist/memory/journal/on-disk/retention.js +32 -2
- package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
- package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +42 -9
- package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
- package/dist/memory/project/artifact-root-resolver.js +125 -16
- package/dist/memory/project/artifact-root.d.ts +46 -8
- package/dist/memory/project/artifact-root.js +89 -10
- package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
- package/dist/memory/project/dir/reticle-dir.js +26 -3
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- package/dist/memory/project/project-tools.js +22 -3
- package/dist/memory/project/root-claims.d.ts +6 -0
- package/dist/memory/project/root-claims.js +39 -0
- package/dist/memory/project/session-root.d.ts +26 -1
- package/dist/memory/project/session-root.js +49 -5
- package/dist/memory/project/sync-status.d.ts +85 -0
- package/dist/memory/project/sync-status.js +224 -0
- package/dist/memory/recall/memory-tools.js +47 -2
- package/dist/memory/recall/platform-memory.d.ts +34 -0
- package/dist/memory/recall/platform-memory.js +139 -0
- package/dist/memory/recall/project-memory.d.ts +19 -0
- package/dist/memory/recall/project-memory.js +80 -13
- package/dist/portal/bridge/bridge.d.ts +9 -3
- package/dist/portal/bridge/bridge.js +82 -22
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -0
- package/dist/portal/bridge/pairing-token.d.ts +9 -0
- package/dist/portal/bridge/pairing-token.js +17 -0
- package/dist/portal/bridge/wrong-path.d.ts +17 -0
- package/dist/portal/bridge/wrong-path.js +35 -0
- package/dist/portal/input/network-mock-tools.js +11 -2
- package/dist/portal/input/real-input.d.ts +83 -10
- package/dist/portal/input/real-input.js +218 -30
- package/dist/portal/input/viewport-tools.js +3 -3
- package/dist/portal/pool/browser-pool.d.ts +70 -9
- package/dist/portal/pool/browser-pool.js +190 -37
- package/dist/portal/pool/context-permissions.d.ts +33 -0
- package/dist/portal/pool/context-permissions.js +33 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
- package/dist/portal/pool/lease-marker-stamp.js +49 -0
- package/dist/portal/pool/playwright-launcher.d.ts +35 -0
- package/dist/portal/pool/playwright-launcher.js +64 -3
- package/dist/portal/pool/pool-contract.d.ts +28 -5
- package/dist/portal/session/agent-link.d.ts +8 -0
- package/dist/portal/session/agent-link.js +17 -0
- package/dist/portal/session/command-payload.d.ts +8 -0
- package/dist/portal/session/command-payload.js +24 -0
- package/dist/portal/session/daemon-answers.d.ts +3 -3
- package/dist/portal/session/daemon-answers.js +4 -2
- package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
- package/dist/portal/session/dev-server/dev-command.js +87 -12
- package/dist/portal/session/facts/departure-note.d.ts +22 -0
- package/dist/portal/session/facts/departure-note.js +47 -0
- package/dist/portal/session/facts/observed-state.d.ts +16 -18
- package/dist/portal/session/facts/observed-state.js +46 -3
- package/dist/portal/session/facts/session-replaced.d.ts +5 -0
- package/dist/portal/session/facts/session-replaced.js +5 -0
- package/dist/portal/session/first-run-wiring.d.ts +42 -0
- package/dist/portal/session/first-run-wiring.js +132 -0
- package/dist/portal/session/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/human/notes-ledger.d.ts +20 -0
- package/dist/portal/session/human/notes-ledger.js +55 -0
- package/dist/portal/session/human/review-store.d.ts +12 -0
- package/dist/portal/session/human/review-store.js +18 -10
- package/dist/portal/session/live-control-tools.d.ts +0 -13
- package/dist/portal/session/live-control-tools.js +107 -13
- package/dist/portal/session/narration-args.d.ts +5 -0
- package/dist/portal/session/narration-args.js +17 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
- package/dist/portal/session/no-session-diagnosis.js +46 -9
- package/dist/portal/session/no-session-next-action.d.ts +31 -0
- package/dist/portal/session/no-session-next-action.js +159 -60
- package/dist/portal/session/no-session-watch.d.ts +14 -1
- package/dist/portal/session/no-session-watch.js +227 -17
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/presence/session-mirror.js +3 -0
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/serving-directory.d.ts +27 -0
- package/dist/portal/session/serving-directory.js +45 -0
- package/dist/portal/session/session-health.d.ts +18 -0
- package/dist/portal/session/session-health.js +9 -1
- package/dist/portal/session/session-info.d.ts +8 -1
- package/dist/portal/session/session-info.js +8 -1
- package/dist/portal/session/session-manager.d.ts +39 -0
- package/dist/portal/session/session-manager.js +98 -11
- package/dist/portal/session/session-reaper.js +4 -1
- package/dist/portal/session/session-successor.d.ts +13 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session-tools.js +26 -3
- package/dist/portal/session/session.d.ts +22 -30
- package/dist/portal/session/session.js +81 -79
- package/dist/portal/session/timing/command-timeout.js +25 -1
- package/dist/portal/session/timing/wall-clock.d.ts +1 -1
- package/dist/portal/session/timing/wall-clock.js +1 -1
- package/dist/portal/session/zero-install-first-call.d.ts +31 -0
- package/dist/portal/session/zero-install-first-call.js +88 -0
- package/dist/start-options.d.ts +12 -0
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +23 -1
- package/dist/status-payload.js +36 -1
- package/dist/surface/http-server.js +18 -2
- package/dist/surface/mcp/attach-memory.d.ts +1 -0
- package/dist/surface/mcp/attach-memory.js +12 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
- package/dist/surface/mcp/mcp-proxy.js +65 -13
- package/dist/surface/mcp/mcp.d.ts +34 -6
- package/dist/surface/mcp/mcp.js +61 -17
- package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
- package/dist/surface/mcp/proxy/drive-calls.js +27 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
- package/dist/surface/mcp/server-instructions.d.ts +4 -2
- package/dist/surface/mcp/server-instructions.js +32 -14
- package/dist/surface/mcp/shared-params.js +2 -2
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +1 -0
- package/dist/surface/tools/account-tool.d.ts +22 -0
- package/dist/surface/tools/account-tool.js +157 -0
- package/dist/surface/tools/act/act-danger.d.ts +11 -0
- package/dist/surface/tools/act/act-danger.js +38 -1
- package/dist/surface/tools/act/act-observation.d.ts +33 -0
- package/dist/surface/tools/act/act-observation.js +57 -0
- package/dist/surface/tools/act/act-preflight.js +25 -2
- package/dist/surface/tools/act/act-target.js +8 -3
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
- package/dist/surface/tools/act/resolve-target.d.ts +1 -1
- package/dist/surface/tools/act/resolve-target.js +18 -3
- package/dist/surface/tools/act/screen-request.d.ts +34 -0
- package/dist/surface/tools/act/screen-request.js +113 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
- package/dist/surface/tools/act/sequence-grade.js +13 -2
- package/dist/surface/tools/act/settle-in-flight.js +25 -3
- package/dist/surface/tools/act-sequence-tool.js +138 -29
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +71 -41
- package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
- package/dist/surface/tools/agent/app-notes-learning.js +80 -0
- package/dist/surface/tools/agent/app-notes.d.ts +4 -0
- package/dist/surface/tools/agent/app-notes.js +48 -0
- package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
- package/dist/surface/tools/agent/build-staleness.js +62 -0
- package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
- package/dist/surface/tools/agent/compact-envelope.js +374 -0
- package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
- package/dist/surface/tools/agent/for-the-agent.js +44 -0
- package/dist/surface/tools/agent/notices.d.ts +50 -0
- package/dist/surface/tools/agent/notices.js +152 -0
- package/dist/surface/tools/agent/reteach.d.ts +11 -0
- package/dist/surface/tools/agent/reteach.js +50 -0
- package/dist/surface/tools/args/alias-args.d.ts +5 -0
- package/dist/surface/tools/args/alias-args.js +10 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
- package/dist/surface/tools/assert/assert-source.d.ts +15 -0
- package/dist/surface/tools/assert/assert-source.js +40 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +42 -17
- package/dist/surface/tools/browser-tools.js +51 -2
- package/dist/surface/tools/chat-drives.d.ts +101 -0
- package/dist/surface/tools/chat-drives.js +409 -0
- package/dist/surface/tools/coverage-tools.d.ts +2 -10
- package/dist/surface/tools/coverage-tools.js +2 -53
- package/dist/surface/tools/dynamic-tools.js +29 -1
- package/dist/surface/tools/empty-session-list.d.ts +51 -0
- package/dist/surface/tools/empty-session-list.js +120 -0
- package/dist/surface/tools/error-recovery.d.ts +14 -0
- package/dist/surface/tools/error-recovery.js +105 -8
- package/dist/surface/tools/explore-tools.d.ts +31 -1
- package/dist/surface/tools/explore-tools.js +438 -66
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +18 -3
- package/dist/surface/tools/gap-novelty.d.ts +3 -1
- package/dist/surface/tools/gap-novelty.js +8 -1
- package/dist/surface/tools/harness-explore.d.ts +118 -57
- package/dist/surface/tools/harness-explore.js +344 -292
- package/dist/surface/tools/harness-gate.d.ts +88 -0
- package/dist/surface/tools/harness-gate.js +235 -0
- package/dist/surface/tools/harness-hunt.d.ts +43 -0
- package/dist/surface/tools/harness-hunt.js +215 -0
- package/dist/surface/tools/harness-plan.d.ts +17 -0
- package/dist/surface/tools/harness-plan.js +38 -0
- package/dist/surface/tools/harness-script.d.ts +30 -0
- package/dist/surface/tools/harness-script.js +560 -0
- package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
- package/dist/surface/tools/harness-tab-guard.js +27 -0
- package/dist/surface/tools/harness-toolset.d.ts +22 -1
- package/dist/surface/tools/harness-toolset.js +101 -7
- package/dist/surface/tools/human-notes.d.ts +16 -0
- package/dist/surface/tools/human-notes.js +27 -0
- package/dist/surface/tools/invoke-tool.d.ts +5 -2
- package/dist/surface/tools/invoke-tool.js +263 -85
- package/dist/surface/tools/lease-hint.js +26 -5
- package/dist/surface/tools/lease-permissions.d.ts +33 -0
- package/dist/surface/tools/lease-permissions.js +73 -0
- package/dist/surface/tools/lease-readiness.d.ts +38 -0
- package/dist/surface/tools/lease-readiness.js +57 -0
- package/dist/surface/tools/lease-seed.d.ts +49 -0
- package/dist/surface/tools/lease-seed.js +167 -0
- package/dist/surface/tools/lease-tools.d.ts +13 -24
- package/dist/surface/tools/lease-tools.js +146 -197
- package/dist/surface/tools/live-call-text.js +4 -4
- package/dist/surface/tools/merge-tools.js +42 -2
- package/dist/surface/tools/merged-name-redirect.js +4 -0
- package/dist/surface/tools/next-step.d.ts +29 -0
- package/dist/surface/tools/next-step.js +214 -0
- package/dist/surface/tools/observe-tools.js +45 -9
- package/dist/surface/tools/platform-moment.d.ts +72 -0
- package/dist/surface/tools/platform-moment.js +296 -0
- package/dist/surface/tools/query-hint-schema.d.ts +7 -0
- package/dist/surface/tools/query-hint-schema.js +10 -0
- package/dist/surface/tools/read-tools.js +71 -14
- package/dist/surface/tools/real-input-attempt.js +96 -13
- package/dist/surface/tools/reticle-result.d.ts +120 -0
- package/dist/surface/tools/reticle-result.js +364 -0
- package/dist/surface/tools/tool-kit.d.ts +83 -3
- package/dist/surface/tools/tool-kit.js +77 -7
- package/dist/surface/tools/tools.js +43 -59
- package/dist/telemetry/account-envelope.d.ts +7 -0
- package/dist/telemetry/account-envelope.js +61 -0
- package/dist/telemetry/agent-client.d.ts +15 -0
- package/dist/telemetry/agent-client.js +57 -0
- package/dist/telemetry/app-instrumented.js +9 -2
- package/dist/telemetry/argument-shape.d.ts +7 -0
- package/dist/telemetry/argument-shape.js +86 -1
- package/dist/telemetry/automation-hint.d.ts +2 -3
- package/dist/telemetry/automation-hint.js +33 -8
- package/dist/telemetry/cli-telemetry.js +7 -2
- package/dist/telemetry/daemon-telemetry.js +3 -0
- package/dist/telemetry/error-fingerprint.d.ts +10 -1
- package/dist/telemetry/error-fingerprint.js +61 -5
- package/dist/telemetry/feedback-cli.d.ts +0 -13
- package/dist/telemetry/feedback-cli.js +0 -77
- package/dist/telemetry/feedback.d.ts +13 -0
- package/dist/telemetry/feedback.js +183 -17
- package/dist/telemetry/harness-run.d.ts +18 -0
- package/dist/telemetry/harness-run.js +80 -0
- package/dist/telemetry/hud-events.d.ts +16 -0
- package/dist/telemetry/hud-events.js +27 -0
- package/dist/telemetry/hud-metrics.d.ts +29 -6
- package/dist/telemetry/hud-metrics.js +116 -25
- package/dist/telemetry/init-telemetry.js +2 -2
- package/dist/telemetry/install-source.d.ts +13 -25
- package/dist/telemetry/install-source.js +44 -3
- package/dist/telemetry/mcp-connection.d.ts +0 -14
- package/dist/telemetry/mcp-connection.js +5 -1
- package/dist/telemetry/onboarding-firsts.d.ts +32 -0
- package/dist/telemetry/onboarding-firsts.js +81 -6
- package/dist/telemetry/platform-linked.d.ts +5 -0
- package/dist/telemetry/platform-linked.js +32 -0
- package/dist/telemetry/project-profile.js +5 -3
- package/dist/telemetry/proxy-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +15 -4
- package/dist/telemetry/session-metrics.js +88 -52
- package/dist/telemetry/telemetry.d.ts +38 -2
- package/dist/telemetry/telemetry.js +144 -34
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +13 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +20 -6
- package/docs/README.md +3 -3
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +25 -28
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +33 -28
- package/docs/benchmarks.md +5 -5
- package/docs/best-practices.mdx +27 -9
- package/docs/capabilities.mdx +14 -16
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +54 -75
- package/docs/cli/doctor.mdx +14 -3
- package/docs/cli/drive.mdx +20 -14
- package/docs/cli/feedback.mdx +3 -3
- package/docs/cli/gate.mdx +7 -2
- package/docs/cli/help.mdx +50 -55
- package/docs/cli/init.mdx +43 -28
- package/docs/cli/license.mdx +12 -8
- package/docs/cli/mcp.mdx +4 -4
- package/docs/cli/open.mdx +3 -3
- package/docs/cli/report.mdx +4 -2
- package/docs/cli/restart.mdx +2 -2
- package/docs/cli/rollback.mdx +14 -8
- package/docs/cli/serve.mdx +4 -4
- package/docs/cli/setup.mdx +23 -0
- package/docs/cli/status.mdx +18 -5
- package/docs/cli/stop.mdx +67 -8
- package/docs/cli/try.mdx +62 -0
- package/docs/cli/update.mdx +4 -3
- package/docs/cli/verify.mdx +17 -6
- package/docs/cli/version.mdx +5 -4
- package/docs/cli.mdx +111 -42
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +9 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +7 -8
- package/docs/faq.mdx +3 -3
- package/docs/first-drive.md +5 -4
- package/docs/flows.md +35 -27
- package/docs/for-agents.md +4 -5
- package/docs/frameworks.mdx +32 -21
- package/docs/getting-started.md +65 -61
- package/docs/human-control.md +16 -16
- package/docs/index.mdx +15 -42
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +23 -13
- package/docs/instrumentation.mdx +5 -3
- package/docs/integration-patterns.md +7 -7
- package/docs/license-activation.mdx +1 -1
- package/docs/multi-agent-testing.md +24 -6
- package/docs/packages/babel-plugin.mdx +4 -2
- package/docs/packages/browser.mdx +16 -10
- package/docs/packages/core.mdx +12 -5
- package/docs/packages/electron.mdx +3 -2
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/eslint-plugin.mdx +18 -12
- package/docs/packages/next.mdx +8 -7
- package/docs/packages/open-verification.mdx +1 -1
- package/docs/packages/server.mdx +5 -5
- package/docs/packages/tauri.mdx +9 -9
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +32 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +69 -30
- package/docs/required-checks.md +8 -7
- package/docs/reticle-manual.md +15 -5
- package/docs/skill-file.mdx +17 -79
- package/docs/skill-setup.md +9 -9
- package/docs/skill.md +200 -0
- package/docs/system-map.md +7 -7
- package/docs/telemetry.md +23 -25
- package/docs/testing.md +4 -4
- package/docs/token-efficiency.md +12 -12
- package/docs/tools/act-and-wait.mdx +9 -2
- package/docs/tools/act-sequence.mdx +6 -7
- package/docs/tools/act.mdx +2 -2
- package/docs/tools/assert.mdx +18 -17
- package/docs/tools/console.mdx +9 -9
- package/docs/tools/inspect.mdx +16 -7
- package/docs/tools/look.mdx +24 -0
- package/docs/tools/navigate.mdx +5 -3
- package/docs/tools/network.mdx +2 -2
- package/docs/tools/observe.mdx +6 -6
- package/docs/tools/overview.mdx +34 -33
- package/docs/tools/query.mdx +5 -5
- package/docs/tools/session-and-feedback.mdx +22 -13
- package/docs/tools/sessions.mdx +8 -8
- package/docs/tools/snapshot.mdx +6 -5
- package/docs/tools/state.mdx +9 -9
- package/docs/tools/tools-and-run.mdx +26 -24
- package/docs/tools/verify.mdx +28 -0
- package/docs/tools/wait-for.mdx +8 -4
- package/docs/troubleshooting.mdx +21 -6
- package/docs/usage.md +55 -46
- package/docs/use-cases.mdx +3 -3
- package/docs/vs-chrome-devtools-mcp.mdx +9 -6
- package/docs/vs-playwright-mcp.mdx +3 -1
- package/docs/what-is-recorded.md +17 -5
- package/docs/what-is-reticle.mdx +5 -3
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -241
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- package/dist/features/harness/driver.d.ts +0 -50
- package/dist/features/harness/driver.js +0 -236
- package/dist/features/harness/jev-driver.d.ts +0 -188
- package/dist/features/harness/jev-driver.js +0 -678
- package/dist/features/harness/openai-driver.d.ts +0 -58
- package/dist/features/harness/openai-driver.js +0 -206
- package/dist/judgement/hunt/hunt-report.d.ts +0 -49
- package/dist/judgement/hunt/hunt-report.js +0 -84
- package/dist/language/flows/buddy-status.d.ts +0 -25
- package/dist/language/flows/buddy-status.js +0 -32
- package/dist/language/flows/change/watch-batcher.d.ts +0 -18
- package/dist/language/flows/change/watch-batcher.js +0 -19
- package/dist/memory/cloud/harness-offer.d.ts +0 -44
- package/dist/memory/cloud/harness-offer.js +0 -145
- package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
- package/dist/memory/project/dir/fill-value-store.js +0 -88
- package/dist/surface/tools/feature-capture.d.ts +0 -151
- package/dist/surface/tools/feature-capture.js +0 -235
- package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
- package/dist/surface/tools/tool-hit-rate.js +0 -90
- package/dist/telemetry/harness-drive.d.ts +0 -4
- package/dist/telemetry/harness-drive.js +0 -35
- package/dist/telemetry/identify.d.ts +0 -22
- package/dist/telemetry/identify.js +0 -73
- package/docs/cli/capsules.mdx +0 -70
- package/docs/cli/hunt.mdx +0 -73
- package/docs/cli/identify.mdx +0 -76
- package/docs/cli/kill.mdx +0 -91
- package/docs/cli/watch.mdx +0 -62
- package/docs/local-registry.md +0 -143
|
@@ -3,102 +3,18 @@
|
|
|
3
3
|
* The parser stays pure and unit-testable; `cli.ts` owns the side-effecting handlers and dispatch,
|
|
4
4
|
* and re-exports this surface.
|
|
5
5
|
*/
|
|
6
|
-
import { TutorialAudience } from './tutorial.js';
|
|
7
6
|
import { parseFeedbackArgs } from './cli-parse-feedback.js';
|
|
8
7
|
import { parseVerifySuffix } from './cli-parse-verify.js';
|
|
9
|
-
import { HEADED_FLAG, PORT_FLAG, VERIFY_COMMAND, missingOperand, missingValue, notANumber, retiredFlag, unknownArgument, } from './cli-parse-grammar.js';
|
|
8
|
+
import { HEADED_FLAG, PORT_FLAG, VERIFY_COMMAND, missingOperand, missingValue, notANumber, retiredFlag, unknownArgument, CLOUD_COMMANDS, REMOVED_COMMANDS, removedNote, } from './cli-parse-grammar.js';
|
|
10
9
|
// Re-exported because the daemon's own argv builder reaches for these through this module, which is
|
|
11
10
|
// where the grammar has always lived as far as every caller is concerned.
|
|
12
11
|
export { HEADED_FLAG, PORT_FLAG };
|
|
13
12
|
import { FORCE_FLAG } from './cli-kill.js';
|
|
14
13
|
// Re-exported so every existing importer of these flags is unaffected by the file split.
|
|
15
14
|
export { AGENT_FLAG, BUG_FLAG, FEEDBACK_KINDS, KIND_FLAG, RATING_FLAG, } from './cli-parse-feedback.js';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* `reticle`, which belongs to somebody else, and npx will happily fetch and run it. The docs were
|
|
20
|
-
* telling readers to do exactly that on 110 lines before it was caught, so the invocation now leads
|
|
21
|
-
* the usage block rather than being a footnote somewhere else.
|
|
22
|
-
*/
|
|
23
|
-
export const CLI_USAGE = `usage: npx @reticlehq/server <command> (or \`reticle <command>\` once the bin is on your PATH)
|
|
24
|
-
|
|
25
|
-
reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>]
|
|
26
|
-
[--env KEY=VALUE]... [--files-only] [--hooks] (wire Reticle into the project in this directory)
|
|
27
|
-
init is ONBOARDING: it wires the project, boots the app and proves a session
|
|
28
|
-
connected. It does not drive. The FIRST RUN is the stage that proves a flow:
|
|
29
|
-
reticle verify <url> --explore --persona "<who does what>", or the same thing
|
|
30
|
-
from an agent as reticle_verify { action: "explore", persona: "…" }
|
|
31
|
-
--app picks WHICH app in a monorepo, when several are found
|
|
32
|
-
--env is what the app needs to reach a usable state: the key from
|
|
33
|
-
.env.example, the mock backend, the variable that skips an auth wall.
|
|
34
|
-
Repeatable, and a value may contain spaces and equals signs
|
|
35
|
-
--files-only writes the files and stops, which is what init did before it
|
|
36
|
-
learned to boot the app and prove the install works
|
|
37
|
-
--relaunch prints the exact command that restarts THIS conversation with
|
|
38
|
-
the tools loaded, so the restart is not a chore handed to a human. It
|
|
39
|
-
refuses when the session id has no transcript behind it, because
|
|
40
|
-
--resume on an empty id opens a blank conversation that looks like
|
|
41
|
-
success. Works with --files-only
|
|
42
|
-
--license writes the key to .env and keeps .env out of git
|
|
43
|
-
--json puts the result on stdout, so an agent reads one object
|
|
44
|
-
--no-open / --no-agents / --url / --timeout are the runtime dials: CI, a
|
|
45
|
-
headless box, or an app you already run
|
|
46
|
-
--no-mcp skips MORE than the server registration: also the agent rule files
|
|
47
|
-
(CLAUDE.md / AGENTS.md / .cursor) and the /reticle command, because all three
|
|
48
|
-
only make sense once the tools are reachable.
|
|
49
|
-
reticle serve [--port N] [--drive <url>] [--headless] [--http] [--http-port N] [--http-token T]
|
|
50
|
-
reticle stop [--port N] [--quiet] (stop the daemon we started, by its recorded pid)
|
|
51
|
-
reticle kill [--port N] [--force] (free the port by its LISTENER, never the agent's mcp proxy)
|
|
52
|
-
reticle restart [--port N] [--force] (kill, then start a daemon and wait for a real bind)
|
|
53
|
-
reticle status [--port N] [--json] (a readable block; --json for the event)
|
|
54
|
-
reticle doctor [--port N] (one command to diagnose setup: Chromium, daemon, port)
|
|
55
|
-
reticle open [url] [--port N] (show the app: reuse the connected tab, else open one)
|
|
56
|
-
reticle verify <url> [--port N] [--headed] [--timeout N] [--storage-state <file>] [--session-id <id>] (one-shot: drive the URL, verify saved flows, exit 0=pass)
|
|
57
|
-
[--explore] [--persona <who>] (no saved flows? let Reticle drive the app itself and record them)
|
|
58
|
-
[--select <label>] (repeatable: verify only flows carrying these labels — no model, exit 0=pass)
|
|
59
|
-
[--expect '<json predicate>' | --expect-file <path>] (one verdict, no saved
|
|
60
|
-
flows needed. --expect-file is the form no shell can mangle: cmd.exe keeps the
|
|
61
|
-
single quotes the docs show, and PowerShell strips the inner double quotes, and
|
|
62
|
-
a predicate that does not parse produces no verdict at all — asks the daemon that
|
|
63
|
-
is already running, so nothing is bound and nothing is stopped. It NEEDS that
|
|
64
|
-
daemon: with none on the port it refuses and names the flag, rather than reporting
|
|
65
|
-
on your saved flows instead. Cannot be combined with --storage-state, which this
|
|
66
|
-
path has nowhere to load. This is the path when your client never loaded the
|
|
67
|
-
reticle_* tools. exit 0 ONLY on verified:"yes" — "unknown" is not a pass)
|
|
68
|
-
reticle affected [--since <ref>] [file...] (which saved flows must re-verify for the changed files)
|
|
69
|
-
reticle gate [--since <ref>] [--accept-coverage] [file...] (exit non-zero unless passing artifacts cover the affected flows)
|
|
70
|
-
reticle report [--session <id>] [--hook] (what the latest session claimed, and what held)
|
|
71
|
-
reticle setup mcp (register the MCP server with your agents; the installer's registration half)
|
|
72
|
-
reticle capsules (list the saved fail-to-pass bug capsules in .reticle/capsules)
|
|
73
|
-
reticle hunt <dir> (aggregate a directory of crawl reports into one false-green rate)
|
|
74
|
-
reticle watch [url] (on save, report which saved flows must re-verify)
|
|
75
|
-
reticle drive <url> [--headless] (foreground mode, for debugging)
|
|
76
|
-
reticle mcp [--port N] [--drive <url>] [--headless] (MCP stdio proxy; auto-starts daemon if needed)
|
|
77
|
-
reticle update (install the latest server version and restart)
|
|
78
|
-
reticle rollback (restore the previous server version and restart)
|
|
79
|
-
reticle license (show enterprise license status: active | eval | missing)
|
|
80
|
-
reticle telemetry [status|enable|disable] (anonymous usage metrics; status shows what's sent + the policy)
|
|
81
|
-
reticle feedback [--rating 1-5] [--bug] "message" (tell us what worked and what didn't; prints exactly what it sends)
|
|
82
|
-
reticle feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement|experience> "message"
|
|
83
|
-
(agents: file from anywhere, including a setup that never finished)
|
|
84
|
-
reticle identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
|
|
85
|
-
(OPT-IN: tell us who you are, e.g. for support or an enterprise trial)
|
|
86
|
-
|
|
87
|
-
Cloud (link this project to Reticle; runs/flows recorded on the dashboard):
|
|
88
|
-
reticle connect [--project <name|id>] [--url <cloud origin>]
|
|
89
|
-
(wire this app if needed, sign in, link, send local history)
|
|
90
|
-
reticle login [--url <u>] [--email <e>] [--code <c>] [--org <n>]
|
|
91
|
-
(browser device flow by default; --email mails a code)
|
|
92
|
-
reticle logout [--url <u>] (sign out of ONE host; others stay signed in)
|
|
93
|
-
reticle link [--project <name|id>] (bind this repo: mints a scoped key, writes .reticle/cloud.json)
|
|
94
|
-
reticle whoami (who am I signed in as, and is this repo attached?)
|
|
95
|
-
reticle project <ls|create <name>> (list or create cloud projects)
|
|
96
|
-
reticle config [--runs on|off] [--memory on|off] [--flows on|off] [--verify local|server]
|
|
97
|
-
reticle push | sync [--watch] (one sync cycle: send the difference, collect decisions)
|
|
98
|
-
reticle runs | regression | share <runId> (read cloud state; regression exits 3 if any flow broke)
|
|
99
|
-
|
|
100
|
-
'drive' shows the browser; everything else is hidden (serve/mcp own the pool behind leases, replay
|
|
101
|
-
and the spec runner: batch work). --headed opts any of them in, --headless hides drive, CI hides it.`;
|
|
15
|
+
// The help text lives on its own page; re-exported so every importer of it is unaffected.
|
|
16
|
+
import { CLI_USAGE } from './cli-usage.js';
|
|
17
|
+
export { CLI_USAGE };
|
|
102
18
|
const INIT_COMMAND = 'init';
|
|
103
19
|
const SERVE_COMMAND = 'serve';
|
|
104
20
|
const STOP_COMMAND = 'stop';
|
|
@@ -108,16 +24,15 @@ const STATUS_COMMAND = 'status';
|
|
|
108
24
|
const OPEN_COMMAND = 'open';
|
|
109
25
|
const DRIVE_COMMAND = 'drive';
|
|
110
26
|
const AFFECTED_COMMAND = 'affected';
|
|
111
|
-
const HUNT_COMMAND = 'hunt';
|
|
112
|
-
const CAPSULES_COMMAND = 'capsules';
|
|
113
27
|
const GATE_COMMAND = 'gate';
|
|
114
28
|
/** Hook mode: prose a human can read, and silence when there was simply nothing to check. */
|
|
115
29
|
const HOOK_FLAG = '--hook';
|
|
116
30
|
const ACCEPT_COVERAGE_FLAG = '--accept-coverage';
|
|
117
31
|
/** `reticle report [--session <id>] [--hook]` — what the latest session claimed, and what held. */
|
|
118
32
|
const REPORT_COMMAND = 'report';
|
|
33
|
+
/** `reticle context --compact`: the resume block, from disk. A SessionStart hook prints it. */
|
|
34
|
+
const CONTEXT_COMMAND = 'context';
|
|
119
35
|
const SESSION_FLAG = '--session';
|
|
120
|
-
const WATCH_COMMAND = 'watch';
|
|
121
36
|
const UPDATE_COMMAND = 'update';
|
|
122
37
|
const ROLLBACK_COMMAND = 'rollback';
|
|
123
38
|
const MCP_COMMAND = 'mcp';
|
|
@@ -125,11 +40,8 @@ const LICENSE_COMMAND = 'license';
|
|
|
125
40
|
const VERSION_COMMAND = 'version';
|
|
126
41
|
const TELEMETRY_COMMAND = 'telemetry';
|
|
127
42
|
const FEEDBACK_COMMAND = 'feedback';
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
const EMAIL_FLAG = '--email';
|
|
131
|
-
const CONTEXT_FLAG = '--context';
|
|
132
|
-
const FORGET_FLAG = '--forget';
|
|
43
|
+
const DOCTOR_COMMAND = 'doctor';
|
|
44
|
+
const SETUP_COMMAND = 'setup';
|
|
133
45
|
/** The `reticle telemetry` sub-actions. Bare `reticle telemetry` means `status`. */
|
|
134
46
|
export const TelemetryAction = {
|
|
135
47
|
STATUS: 'status',
|
|
@@ -147,7 +59,10 @@ export const DAEMON_INNER_COMMAND = '_daemon';
|
|
|
147
59
|
* defined; a second list somewhere else would drift the first time a command is added.
|
|
148
60
|
*/
|
|
149
61
|
export const UNKNOWN_COMMAND = 'unknown';
|
|
150
|
-
const
|
|
62
|
+
const HELP_COMMAND = 'help';
|
|
63
|
+
const HELP_FLAGS = new Set(['--help', '-h']);
|
|
64
|
+
/** Every command the typed parser below routes. The parser refuses any word not in this list. */
|
|
65
|
+
export const LOCAL_COMMANDS = [
|
|
151
66
|
INIT_COMMAND,
|
|
152
67
|
SERVE_COMMAND,
|
|
153
68
|
STOP_COMMAND,
|
|
@@ -158,11 +73,9 @@ const KNOWN_COMMANDS = new Set([
|
|
|
158
73
|
DRIVE_COMMAND,
|
|
159
74
|
VERIFY_COMMAND,
|
|
160
75
|
AFFECTED_COMMAND,
|
|
161
|
-
HUNT_COMMAND,
|
|
162
|
-
CAPSULES_COMMAND,
|
|
163
76
|
GATE_COMMAND,
|
|
164
77
|
REPORT_COMMAND,
|
|
165
|
-
|
|
78
|
+
CONTEXT_COMMAND,
|
|
166
79
|
UPDATE_COMMAND,
|
|
167
80
|
ROLLBACK_COMMAND,
|
|
168
81
|
MCP_COMMAND,
|
|
@@ -170,25 +83,23 @@ const KNOWN_COMMANDS = new Set([
|
|
|
170
83
|
VERSION_COMMAND,
|
|
171
84
|
TELEMETRY_COMMAND,
|
|
172
85
|
FEEDBACK_COMMAND,
|
|
173
|
-
IDENTIFY_COMMAND,
|
|
174
86
|
DAEMON_INNER_COMMAND,
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
'
|
|
188
|
-
'
|
|
189
|
-
'
|
|
190
|
-
'
|
|
191
|
-
'help',
|
|
87
|
+
DOCTOR_COMMAND,
|
|
88
|
+
SETUP_COMMAND,
|
|
89
|
+
];
|
|
90
|
+
const LOCAL_COMMAND_SET = new Set(LOCAL_COMMANDS);
|
|
91
|
+
const KNOWN_COMMANDS = new Set([
|
|
92
|
+
...LOCAL_COMMANDS,
|
|
93
|
+
...CLOUD_COMMANDS,
|
|
94
|
+
...REMOVED_COMMANDS.keys(),
|
|
95
|
+
HELP_COMMAND,
|
|
96
|
+
]);
|
|
97
|
+
/** The conventional flag spellings of two commands, reported as the command they ask for. */
|
|
98
|
+
const COMMAND_FLAG_ALIASES = new Map([
|
|
99
|
+
['--version', VERSION_COMMAND],
|
|
100
|
+
['-v', VERSION_COMMAND],
|
|
101
|
+
['--help', HELP_COMMAND],
|
|
102
|
+
['-h', HELP_COMMAND],
|
|
192
103
|
]);
|
|
193
104
|
/**
|
|
194
105
|
* A non-negative integer flag, or 0.
|
|
@@ -207,15 +118,15 @@ function numberFlag(args, name) {
|
|
|
207
118
|
/** The subcommand name if we recognize it, else `unknown`. Bare `reticle` reports `help`. */
|
|
208
119
|
export function knownCommand(arg) {
|
|
209
120
|
if (arg === undefined || '' === arg)
|
|
210
|
-
return
|
|
211
|
-
return KNOWN_COMMANDS.has(arg) ? arg : UNKNOWN_COMMAND;
|
|
121
|
+
return HELP_COMMAND;
|
|
122
|
+
return KNOWN_COMMANDS.has(arg) ? arg : (COMMAND_FLAG_ALIASES.get(arg) ?? UNKNOWN_COMMAND);
|
|
212
123
|
}
|
|
213
124
|
/**
|
|
214
125
|
* Force a hidden browser. The default is now HEADED: a run nobody can see is a run nobody trusts,
|
|
215
126
|
* and every "did it actually do anything?" question cost a round-trip. CI passes this (or just sets
|
|
216
127
|
* CI, which flips the default) because there is no display there to be headed on.
|
|
217
128
|
*/
|
|
218
|
-
const HEADLESS_FLAG = '--headless';
|
|
129
|
+
export const HEADLESS_FLAG = '--headless';
|
|
219
130
|
export const DRIVE_FLAG = '--drive';
|
|
220
131
|
const QUIET_FLAG = '--quiet';
|
|
221
132
|
const DRY_RUN_FLAG = '--dry-run';
|
|
@@ -236,6 +147,8 @@ const FLOW_FLAG = '--flow';
|
|
|
236
147
|
const FIRST_RUN_MOVED = 'onboarding wires the project, the FIRST RUN proves a flow. Drive one with reticle_verify { action: "explore", persona: "<who does what>" }, or npx @reticlehq/server verify <url> --explore --persona "<who does what>"';
|
|
237
148
|
const ENV_FLAG = '--env';
|
|
238
149
|
const FILES_ONLY_FLAG = '--files-only';
|
|
150
|
+
/** With `--app`, also start the app: naming one app of a workspace otherwise writes its files only. */
|
|
151
|
+
const START_FLAG = '--start';
|
|
239
152
|
/**
|
|
240
153
|
* Write `captureNetworkBodies: true` into the app's config. OFF unless asked (#705).
|
|
241
154
|
*
|
|
@@ -256,6 +169,8 @@ const HOOKS_FLAG = '--hooks';
|
|
|
256
169
|
const JSON_FLAG = '--json';
|
|
257
170
|
const NO_DRIVE_FLAG = '--no-drive';
|
|
258
171
|
const NO_OPEN_FLAG = '--no-open';
|
|
172
|
+
/** Connect and stop: no coverage summary and no prompt at the end. */
|
|
173
|
+
const NO_FIRST_RUN_FLAG = '--no-first-run';
|
|
259
174
|
const NO_AGENTS_FLAG = '--no-agents';
|
|
260
175
|
/**
|
|
261
176
|
* Restart the calling client so IT gets the tools.
|
|
@@ -281,12 +196,6 @@ const NO_INSTALL_FLAG = '--no-install';
|
|
|
281
196
|
export const HTTP_FLAG = '--http';
|
|
282
197
|
export const HTTP_PORT_FLAG = '--http-port';
|
|
283
198
|
export const HTTP_TOKEN_FLAG = '--http-token';
|
|
284
|
-
/**
|
|
285
|
-
* `serve` / `mcp` / `_daemon` own the browser POOL, which backs automated work — leased contexts for
|
|
286
|
-
* parallel agents, flow replay, the spec runner. Those are batch: nobody is watching, and launching
|
|
287
|
-
* them headed changed timing enough to break four e2e specs. The headed default belongs to the
|
|
288
|
-
* INTERACTIVE command (`drive`), where a human asked to see the run. `--headed` still opts in here.
|
|
289
|
-
*/
|
|
290
199
|
/**
|
|
291
200
|
* A usage error names the thing that was wrong.
|
|
292
201
|
*
|
|
@@ -307,10 +216,10 @@ const unknownCommand = (command) => ({
|
|
|
307
216
|
kind: 'error',
|
|
308
217
|
message: `unknown command '${command}'`,
|
|
309
218
|
});
|
|
310
|
-
function parseServeFlags(args, defaultPort,
|
|
219
|
+
function parseServeFlags(args, defaultPort, defaultHeadless) {
|
|
311
220
|
let port = defaultPort;
|
|
312
221
|
let driveUrl;
|
|
313
|
-
let headless =
|
|
222
|
+
let headless = defaultHeadless;
|
|
314
223
|
let http = false;
|
|
315
224
|
let httpPort;
|
|
316
225
|
let httpToken;
|
|
@@ -427,10 +336,12 @@ function parseInitFlags(args) {
|
|
|
427
336
|
// Repeatable: one variable per flag, so a value containing spaces or `=` needs no quoting rules.
|
|
428
337
|
const env = [];
|
|
429
338
|
let filesOnly = false;
|
|
339
|
+
let start = false;
|
|
430
340
|
let captureBodies = false;
|
|
431
341
|
let hooks = false;
|
|
432
342
|
let json = false;
|
|
433
343
|
let open = true;
|
|
344
|
+
let firstRun = true;
|
|
434
345
|
let relaunch = false;
|
|
435
346
|
let agents = true;
|
|
436
347
|
let url;
|
|
@@ -473,6 +384,9 @@ function parseInitFlags(args) {
|
|
|
473
384
|
else if (arg === FILES_ONLY_FLAG) {
|
|
474
385
|
filesOnly = true;
|
|
475
386
|
}
|
|
387
|
+
else if (arg === START_FLAG) {
|
|
388
|
+
start = true;
|
|
389
|
+
}
|
|
476
390
|
else if (arg === CAPTURE_BODIES_FLAG) {
|
|
477
391
|
captureBodies = true;
|
|
478
392
|
}
|
|
@@ -485,6 +399,9 @@ function parseInitFlags(args) {
|
|
|
485
399
|
else if (arg === NO_OPEN_FLAG) {
|
|
486
400
|
open = false;
|
|
487
401
|
}
|
|
402
|
+
else if (arg === NO_FIRST_RUN_FLAG) {
|
|
403
|
+
firstRun = false;
|
|
404
|
+
}
|
|
488
405
|
else if (arg === RELAUNCH_FLAG) {
|
|
489
406
|
relaunch = true;
|
|
490
407
|
}
|
|
@@ -540,11 +457,14 @@ function parseInitFlags(args) {
|
|
|
540
457
|
install,
|
|
541
458
|
app,
|
|
542
459
|
env,
|
|
543
|
-
|
|
460
|
+
// One app of a workspace, named: its files, and nothing started unless asked (`--start`). Its
|
|
461
|
+
// dev server is often run from the root, and a monorepo init started the daemon and failed it.
|
|
462
|
+
filesOnly: filesOnly || (app !== undefined && !start),
|
|
544
463
|
captureBodies,
|
|
545
464
|
hooks,
|
|
546
465
|
json,
|
|
547
466
|
open,
|
|
467
|
+
firstRun,
|
|
548
468
|
relaunch,
|
|
549
469
|
agents,
|
|
550
470
|
url,
|
|
@@ -592,8 +512,6 @@ function parseTargetArgs(rest) {
|
|
|
592
512
|
export function dialsTheDaemon(parsed) {
|
|
593
513
|
if ('init' === parsed.kind)
|
|
594
514
|
return false;
|
|
595
|
-
if ('tutorial' === parsed.kind)
|
|
596
|
-
return parsed.run;
|
|
597
515
|
return 'port' in parsed;
|
|
598
516
|
}
|
|
599
517
|
/**
|
|
@@ -603,9 +521,9 @@ export function dialsTheDaemon(parsed) {
|
|
|
603
521
|
* trustworthy, and asking people to opt into seeing their own app was backwards.
|
|
604
522
|
*/
|
|
605
523
|
export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
606
|
-
// Bare `reticle` is `serve
|
|
524
|
+
// Bare `reticle` is `serve`.
|
|
607
525
|
if (0 === argv.length)
|
|
608
|
-
return { kind: 'serve', port: defaultPort, headless:
|
|
526
|
+
return { kind: 'serve', port: defaultPort, headless: defaultHeadless, http: false };
|
|
609
527
|
const [cmd, ...rest] = argv;
|
|
610
528
|
// Guaranteed by the bare-argv check above; restated so the unknown-command error can name it.
|
|
611
529
|
if (cmd === undefined)
|
|
@@ -623,9 +541,22 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
623
541
|
// `reticle_usage_error: unknown argument '--help'` on stderr with exit 1. The usage text was
|
|
624
542
|
// printed underneath it, so the request was in fact answered; it was simply answered as a failure,
|
|
625
543
|
// which is the wrong first impression to give somebody who has just asked a tool what it does.
|
|
626
|
-
|
|
627
|
-
|
|
544
|
+
//
|
|
545
|
+
// Removed commands answer before help does: `reticle hunt --help` should say it is gone, not
|
|
546
|
+
// describe something that no longer runs.
|
|
547
|
+
const removed = REMOVED_COMMANDS.get(cmd);
|
|
548
|
+
if (removed !== undefined)
|
|
549
|
+
return { kind: 'removed', message: removedNote(cmd, removed) };
|
|
550
|
+
if (HELP_COMMAND === cmd || HELP_FLAGS.has(cmd)) {
|
|
551
|
+
// `reticle help all`, `reticle --help all`, `reticle help init`.
|
|
552
|
+
const topic = rest.find((arg) => !HELP_FLAGS.has(arg));
|
|
553
|
+
return topic === undefined ? { kind: 'help' } : { kind: 'help', topic };
|
|
628
554
|
}
|
|
555
|
+
if (argv.some((arg) => HELP_FLAGS.has(arg)))
|
|
556
|
+
return { kind: 'help', topic: cmd };
|
|
557
|
+
// The list is the gate, so a command cannot be routed without also being named in telemetry.
|
|
558
|
+
if (!LOCAL_COMMAND_SET.has(cmd))
|
|
559
|
+
return unknownCommand(cmd);
|
|
629
560
|
switch (cmd) {
|
|
630
561
|
case INIT_COMMAND: {
|
|
631
562
|
const r = parseInitFlags(rest);
|
|
@@ -644,6 +575,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
644
575
|
hooks: r.hooks,
|
|
645
576
|
json: r.json,
|
|
646
577
|
open: r.open,
|
|
578
|
+
firstRun: r.firstRun,
|
|
647
579
|
relaunch: r.relaunch,
|
|
648
580
|
agents: r.agents,
|
|
649
581
|
url: r.url,
|
|
@@ -667,6 +599,10 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
667
599
|
}
|
|
668
600
|
case STOP_COMMAND: {
|
|
669
601
|
const port = parsePortFlag(rest, defaultPort);
|
|
602
|
+
// `stop --force` is what `kill` was: free the port by its listener, which must still be a
|
|
603
|
+
// Reticle daemon. Overriding that refusal stays on `restart --force` and the old `kill --force`.
|
|
604
|
+
if (rest.includes(FORCE_FLAG))
|
|
605
|
+
return { kind: 'kill', port, force: false };
|
|
670
606
|
const quiet = rest.includes(QUIET_FLAG);
|
|
671
607
|
return { kind: 'stop', port, quiet };
|
|
672
608
|
}
|
|
@@ -685,22 +621,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
685
621
|
// parsing it knows to ask for the object.
|
|
686
622
|
return { kind: 'status', port, json: rest.includes(JSON_FLAG) };
|
|
687
623
|
}
|
|
688
|
-
case
|
|
689
|
-
// `--agent` is the opt-in, because a person typing this is the common case and should not have
|
|
690
|
-
// to ask for prose. An agent knows to pass the flag; a human would not know to avoid it.
|
|
691
|
-
const audience = argv.includes('--agent') ? TutorialAudience.AGENT : TutorialAudience.HUMAN;
|
|
692
|
-
// `--run` drives the demo instead of describing it. Opt-in rather than the default: the tour
|
|
693
|
-
// starts a daemon and opens a browser, and a command that did that to somebody who typed it
|
|
694
|
-
// expecting a page of text would be a surprise in the one place surprises are least welcome.
|
|
695
|
-
return {
|
|
696
|
-
kind: 'tutorial',
|
|
697
|
-
audience,
|
|
698
|
-
run: argv.includes('--run'),
|
|
699
|
-
port: parsePortFlag(rest, defaultPort),
|
|
700
|
-
headless: !argv.includes('--headed'),
|
|
701
|
-
};
|
|
702
|
-
}
|
|
703
|
-
case 'doctor': {
|
|
624
|
+
case DOCTOR_COMMAND: {
|
|
704
625
|
const port = parsePortFlag(rest, defaultPort);
|
|
705
626
|
return { kind: 'doctor', port };
|
|
706
627
|
}
|
|
@@ -716,7 +637,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
716
637
|
* no flag: it tells a reader a confirmation exists. What this writes is stated before it runs
|
|
717
638
|
* and printed after, which is the honest version of the same reassurance.
|
|
718
639
|
*/
|
|
719
|
-
case
|
|
640
|
+
case SETUP_COMMAND: {
|
|
720
641
|
const what = rest[0];
|
|
721
642
|
/*
|
|
722
643
|
* `setup install` — the Node half of the one-line installer.
|
|
@@ -737,7 +658,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
737
658
|
// Only `mcp` today. A bare `reticle setup` falls to help rather than guessing, because the
|
|
738
659
|
// next subcommand here will not be a synonym for this one.
|
|
739
660
|
if (what !== 'mcp')
|
|
740
|
-
return { kind: 'help' };
|
|
661
|
+
return { kind: 'help', topic: SETUP_COMMAND };
|
|
741
662
|
return { kind: 'setup-mcp' };
|
|
742
663
|
}
|
|
743
664
|
case LICENSE_COMMAND:
|
|
@@ -751,22 +672,6 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
751
672
|
}
|
|
752
673
|
return { kind: 'telemetry', action };
|
|
753
674
|
}
|
|
754
|
-
case IDENTIFY_COMMAND: {
|
|
755
|
-
const flag = (name) => {
|
|
756
|
-
const at = rest.indexOf(name);
|
|
757
|
-
return -1 === at ? undefined : rest[at + 1];
|
|
758
|
-
};
|
|
759
|
-
const context = flag(CONTEXT_FLAG);
|
|
760
|
-
const company = flag(COMPANY_FLAG);
|
|
761
|
-
const email = flag(EMAIL_FLAG);
|
|
762
|
-
return {
|
|
763
|
-
kind: 'identify',
|
|
764
|
-
...(context !== undefined ? { context } : {}),
|
|
765
|
-
...(company !== undefined ? { company } : {}),
|
|
766
|
-
...(email !== undefined ? { email } : {}),
|
|
767
|
-
forget: rest.includes(FORGET_FLAG),
|
|
768
|
-
};
|
|
769
|
-
}
|
|
770
675
|
case FEEDBACK_COMMAND:
|
|
771
676
|
return parseFeedbackArgs(rest);
|
|
772
677
|
case OPEN_COMMAND: {
|
|
@@ -812,16 +717,10 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
812
717
|
...(true === r.explore ? { explore: true } : {}),
|
|
813
718
|
...(r.persona !== undefined ? { persona: r.persona } : {}),
|
|
814
719
|
...(r.select !== undefined ? { select: r.select } : {}),
|
|
720
|
+
...(r.resultsJson !== undefined ? { resultsJson: r.resultsJson } : {}),
|
|
721
|
+
...(true === r.confirmDangerous ? { confirmDangerous: true } : {}),
|
|
815
722
|
};
|
|
816
723
|
}
|
|
817
|
-
case CAPSULES_COMMAND:
|
|
818
|
-
return { kind: 'capsules' };
|
|
819
|
-
case HUNT_COMMAND: {
|
|
820
|
-
const dir = rest.find((a) => !a.startsWith('-'));
|
|
821
|
-
return dir === undefined
|
|
822
|
-
? { kind: 'error', message: 'usage: reticle hunt <dir-of-crawl-reports>' }
|
|
823
|
-
: { kind: 'hunt', dir };
|
|
824
|
-
}
|
|
825
724
|
case AFFECTED_COMMAND: {
|
|
826
725
|
const t = parseTargetArgs(rest);
|
|
827
726
|
const since = t.since ?? implicitSince(t.files);
|
|
@@ -850,10 +749,11 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
850
749
|
...(session === undefined ? {} : { session }),
|
|
851
750
|
};
|
|
852
751
|
}
|
|
853
|
-
case
|
|
854
|
-
// `
|
|
855
|
-
const
|
|
856
|
-
|
|
752
|
+
case CONTEXT_COMMAND: {
|
|
753
|
+
// `--compact` is the only form; accepted so the hook line reads as what it does.
|
|
754
|
+
const at = rest.indexOf(SESSION_FLAG);
|
|
755
|
+
const session = -1 === at ? undefined : rest[at + 1];
|
|
756
|
+
return { kind: 'context', ...(session === undefined ? {} : { session }) };
|
|
857
757
|
}
|
|
858
758
|
case UPDATE_COMMAND:
|
|
859
759
|
return { kind: 'update' };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** `reticle update` — install the latest server version, sync the app's SDK, and restart. */
|
|
2
|
-
export declare function handleUpdate(): Promise<void>;
|
|
2
|
+
export declare function handleUpdate(cwd?: string): Promise<void>;
|
|
3
3
|
/** `reticle rollback` — restore the previous server version and restart. */
|
|
4
4
|
export declare function handleRollback(): Promise<void>;
|
|
@@ -6,15 +6,43 @@
|
|
|
6
6
|
* for entirely different reasons.
|
|
7
7
|
*/
|
|
8
8
|
import { checkForUpdate } from '../update/update-checker.js';
|
|
9
|
-
import { updateTarget } from '../update/update-nudge.js';
|
|
9
|
+
import { isNewerVersion, updateTarget } from '../update/update-nudge.js';
|
|
10
10
|
import { applyUpdate, rollback } from '../update/updater.js';
|
|
11
|
-
import { refreshAgentRules, detectPackageManager, buildNodeIo, SILENT_HOST } from '@reticlehq/init';
|
|
11
|
+
import { refreshAgentRules, detectPackageManager, buildNodeIo, enclosingWorkspaceRoot, SILENT_HOST, } from '@reticlehq/init';
|
|
12
12
|
import { SERVER_VERSION } from '../version/identity/server-version.js';
|
|
13
13
|
import { log } from '../../log.js';
|
|
14
14
|
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
15
15
|
import { join } from 'node:path';
|
|
16
16
|
import { reticleDepsOf, sdkSyncCommand } from '../update/sdk-sync.js';
|
|
17
|
+
import { installedSdkVersion, readTextFile } from './launch/sdk-version-match.js';
|
|
17
18
|
const WINDOWS_MANUAL_UPDATE = 'irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex';
|
|
19
|
+
/**
|
|
20
|
+
* What a person reads. `log` lines are JSON on stderr for the daemon's log, and a human running
|
|
21
|
+
* `reticle update` in a terminal used to see nothing else — not even that the restart was theirs.
|
|
22
|
+
*/
|
|
23
|
+
const MSG_SDK_SYNCED = (version) => `Updated this app's Reticle SDK to ${version}. Now restart your dev server and reload the tab: ` +
|
|
24
|
+
'a running dev server keeps serving the old SDK, overlay included.';
|
|
25
|
+
const MSG_SDK_SYNC_FAILED = (command) => `Could not update this app's Reticle SDK. Run \`${command}\`, then restart your dev server.`;
|
|
26
|
+
const MSG_SDK_LINKED = 'This app links its Reticle packages locally, so `reticle update` leaves them as they are.';
|
|
27
|
+
/** Dependency specs that point at a local copy, not the registry: rewriting one to a pin breaks it. */
|
|
28
|
+
const LOCAL_SPEC = /^(workspace|link|file|portal):/;
|
|
29
|
+
function linksLocally(manifest, packages) {
|
|
30
|
+
if ('object' !== typeof manifest || null === manifest)
|
|
31
|
+
return false;
|
|
32
|
+
const m = manifest;
|
|
33
|
+
return packages.some((name) => ['dependencies', 'devDependencies'].some((field) => {
|
|
34
|
+
const deps = m[field];
|
|
35
|
+
if ('object' !== typeof deps || null === deps)
|
|
36
|
+
return false;
|
|
37
|
+
const spec = deps[name];
|
|
38
|
+
return 'string' === typeof spec && LOCAL_SPEC.test(spec);
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
const MSG_NO_SDK_HERE = "No Reticle SDK in this folder, so only the CLI was checked. Run `reticle update` in your app's " +
|
|
42
|
+
'folder to bring its SDK up too.';
|
|
43
|
+
function say(line) {
|
|
44
|
+
process.stdout.write(`${line}\n`);
|
|
45
|
+
}
|
|
18
46
|
/**
|
|
19
47
|
* Bring the SDK in the CURRENT project to the version being installed.
|
|
20
48
|
*
|
|
@@ -23,41 +51,65 @@ const WINDOWS_MANUAL_UPDATE = 'irm https://raw.githubusercontent.com/reticlehq/r
|
|
|
23
51
|
* packages, simply has nothing to sync — that is a normal outcome, not a failure, and it must never
|
|
24
52
|
* stop the CLI half from happening.
|
|
25
53
|
*/
|
|
26
|
-
function syncProjectSdk(target) {
|
|
27
|
-
const cwd = process.cwd();
|
|
54
|
+
function syncProjectSdk(target, cwd) {
|
|
28
55
|
let manifest;
|
|
29
56
|
try {
|
|
30
57
|
manifest = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
|
|
31
58
|
}
|
|
32
59
|
catch {
|
|
60
|
+
say(MSG_NO_SDK_HERE);
|
|
33
61
|
return; // not an app directory
|
|
34
62
|
}
|
|
35
63
|
const packages = reticleDepsOf(manifest);
|
|
64
|
+
if (linksLocally(manifest, packages)) {
|
|
65
|
+
say(MSG_SDK_LINKED);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
36
68
|
// Nothing to trace and nothing to report: this reads the manifest and runs one package-manager
|
|
37
69
|
// command. It never enters `runInit`, so there is no init outcome for a host to carry.
|
|
38
70
|
const io = buildNodeIo(cwd, SILENT_HOST);
|
|
39
|
-
|
|
71
|
+
// A workspace member keeps its lockfile at the workspace root: read both, or an app in a pnpm
|
|
72
|
+
// workspace looks lockfile-less and is installed with npm.
|
|
73
|
+
const workspace = enclosingWorkspaceRoot(cwd, io);
|
|
74
|
+
const rootIo = workspace === undefined ? io : buildNodeIo(workspace, SILENT_HOST);
|
|
75
|
+
const pm = detectPackageManager(new Set([...io.rootFiles(), ...rootIo.rootFiles()]), new Set([...io.listDirs('node_modules'), ...rootIo.listDirs('node_modules')]));
|
|
40
76
|
const cmd = sdkSyncCommand(pm, packages, target);
|
|
41
77
|
if (null === cmd) {
|
|
42
78
|
log('reticle_update_sdk', { synced: false, reason: 'no @reticlehq packages in this project' });
|
|
79
|
+
say(MSG_NO_SDK_HERE);
|
|
43
80
|
return;
|
|
44
81
|
}
|
|
45
82
|
const ok = io.exec(cmd.command, cmd.args);
|
|
46
83
|
log('reticle_update_sdk', { synced: ok, packages, to: target, packageManager: pm });
|
|
47
84
|
if (!ok) {
|
|
85
|
+
const line = `${cmd.command} ${cmd.args.join(' ')}`;
|
|
48
86
|
log('reticle_update_sdk_failed', {
|
|
49
|
-
hint: `run \`${
|
|
87
|
+
hint: `run \`${line}\` by hand, then restart the dev server`,
|
|
50
88
|
});
|
|
89
|
+
say(MSG_SDK_SYNC_FAILED(line));
|
|
90
|
+
return;
|
|
51
91
|
}
|
|
92
|
+
say(MSG_SDK_SYNCED(target));
|
|
52
93
|
}
|
|
53
94
|
/** `reticle update` — install the latest server version, sync the app's SDK, and restart. */
|
|
54
|
-
export async function handleUpdate() {
|
|
95
|
+
export async function handleUpdate(cwd = process.cwd()) {
|
|
55
96
|
try {
|
|
56
97
|
const manifest = await checkForUpdate(SERVER_VERSION, () => Date.now());
|
|
57
98
|
// Direction, not inequality: the registry being DIFFERENT is not the registry being newer, and
|
|
58
99
|
// the old gate happily installed a downgrade — reported by a user. See updateTarget.
|
|
59
100
|
const target = updateTarget(manifest);
|
|
60
101
|
if (target === undefined) {
|
|
102
|
+
// The CLI being current says nothing about the app. A CLI from the installer or a fresh npx
|
|
103
|
+
// is on the latest release while the app keeps the SDK `init` pinned months ago, and this
|
|
104
|
+
// branch used to return before the sync — so the one command that should fix that pair
|
|
105
|
+
// answered "already on the latest version" and left the old overlay in the page.
|
|
106
|
+
const installed = installedSdkVersion(cwd, readTextFile);
|
|
107
|
+
if (installed === undefined)
|
|
108
|
+
say(MSG_NO_SDK_HERE);
|
|
109
|
+
// Only UP. A CLI that could not reach the registry also lands here, and an older one must
|
|
110
|
+
// never pin a newer app back to itself.
|
|
111
|
+
else if (isNewerVersion(SERVER_VERSION, installed))
|
|
112
|
+
syncProjectSdk(SERVER_VERSION, cwd);
|
|
61
113
|
log('reticle_update', {
|
|
62
114
|
ok: false,
|
|
63
115
|
message: 'already on the latest version',
|
|
@@ -76,7 +128,7 @@ export async function handleUpdate() {
|
|
|
76
128
|
// That is backwards: the people who most need better instructions are the ones already
|
|
77
129
|
// installed and not getting value, and this is the moment they are touching the install anyway.
|
|
78
130
|
// Only files that ALREADY carry the block are touched, and only inside the markers.
|
|
79
|
-
const refreshed = refreshAgentRules(
|
|
131
|
+
const refreshed = refreshAgentRules(cwd, {
|
|
80
132
|
read: (path) => (existsSync(path) ? readFileSync(path, 'utf8') : null),
|
|
81
133
|
write: (path, content) => {
|
|
82
134
|
writeFileSync(path, content, 'utf8');
|
|
@@ -91,7 +143,7 @@ export async function handleUpdate() {
|
|
|
91
143
|
// Before the CLI swap because `applyUpdate` never returns (it execs and exits). If this half
|
|
92
144
|
// fails the daemon is still the older one, which is the direction the HELLO check names clearly
|
|
93
145
|
// and a re-run fixes; the reverse would leave a new daemon talking to an old page.
|
|
94
|
-
syncProjectSdk(target);
|
|
146
|
+
syncProjectSdk(target, cwd);
|
|
95
147
|
await applyUpdate(target); // calls process.exit; Claude Code restarts
|
|
96
148
|
}
|
|
97
149
|
catch (error) {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `reticle` help text.
|
|
3
|
+
*
|
|
4
|
+
* `reticle --help` is short: the commands a person needs, one line each, in four groups. Every other
|
|
5
|
+
* command is still there and still works; `reticle help all` lists it, and `reticle <command> --help`
|
|
6
|
+
* carries the detail that used to sit in the one long page.
|
|
7
|
+
*
|
|
8
|
+
* The lines say `reticle <command>`, which is the bin this package installs. Copied into `npx` it is
|
|
9
|
+
* not: `npx reticle` resolves the PACKAGE named `reticle`, which belongs to somebody else, and npx
|
|
10
|
+
* will happily fetch and run it. So the npx spelling leads every page.
|
|
11
|
+
*/
|
|
12
|
+
export declare const HelpGroup: {
|
|
13
|
+
readonly START: "Get started";
|
|
14
|
+
readonly CHECK: "Check your app";
|
|
15
|
+
readonly MACHINE: "Reticle on this machine";
|
|
16
|
+
readonly ACCOUNT: "Account";
|
|
17
|
+
/** Listed only by `reticle help all`. */
|
|
18
|
+
readonly MORE: "More commands";
|
|
19
|
+
};
|
|
20
|
+
export type HelpGroup = (typeof HelpGroup)[keyof typeof HelpGroup];
|
|
21
|
+
/** `reticle help all` and `reticle --help all`. */
|
|
22
|
+
export declare const HELP_ALL_TOPIC = "all";
|
|
23
|
+
/** `reticle --help`: printed by `help`, `--help` and under every usage error. */
|
|
24
|
+
export declare const CLI_USAGE: string;
|
|
25
|
+
/** `reticle help all`. */
|
|
26
|
+
export declare const CLI_USAGE_ALL: string;
|
|
27
|
+
/** Every command the help names, for checks that each one really parses. */
|
|
28
|
+
export declare const DOCUMENTED_COMMANDS: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* The help for one topic: the short page, every command, or one command's detail. An old name
|
|
31
|
+
* answers with the page of the command that replaced it, and says so.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderHelp(topic: string | undefined, renamed?: ReadonlyMap<string, string>): string;
|