@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
|
@@ -19,6 +19,13 @@
|
|
|
19
19
|
* never quietly start forwarding free text.
|
|
20
20
|
*/
|
|
21
21
|
export declare const OTHER_VALUE = "other";
|
|
22
|
+
/**
|
|
23
|
+
* Add values WE define to a parameter's allow-list. The merged tools call this for their `action`
|
|
24
|
+
* values (`reticle_look`'s `page` / `find` / ...): those are keys of a plan in this repository, not
|
|
25
|
+
* input, and without them every grouped call reported `action:other`. Only for a parameter already
|
|
26
|
+
* listed above, so this can widen an enum and never start forwarding a free-text parameter.
|
|
27
|
+
*/
|
|
28
|
+
export declare function allowParamValues(name: string, values: Iterable<string>): void;
|
|
22
29
|
/**
|
|
23
30
|
* The reportable form of one parameter: `name` on its own, or `name:value` when the parameter is a
|
|
24
31
|
* known enum. Never the raw value of anything else.
|
|
@@ -41,6 +41,19 @@ const SAFE_ENUM_PARAMS = new Map([
|
|
|
41
41
|
['level', new Set(['error', 'warn', 'info', 'log', 'debug'])],
|
|
42
42
|
]);
|
|
43
43
|
export const OTHER_VALUE = 'other';
|
|
44
|
+
/**
|
|
45
|
+
* Add values WE define to a parameter's allow-list. The merged tools call this for their `action`
|
|
46
|
+
* values (`reticle_look`'s `page` / `find` / ...): those are keys of a plan in this repository, not
|
|
47
|
+
* input, and without them every grouped call reported `action:other`. Only for a parameter already
|
|
48
|
+
* listed above, so this can widen an enum and never start forwarding a free-text parameter.
|
|
49
|
+
*/
|
|
50
|
+
export function allowParamValues(name, values) {
|
|
51
|
+
const allowed = SAFE_ENUM_PARAMS.get(name);
|
|
52
|
+
if (allowed === undefined)
|
|
53
|
+
return;
|
|
54
|
+
for (const value of values)
|
|
55
|
+
allowed.add(value);
|
|
56
|
+
}
|
|
44
57
|
/**
|
|
45
58
|
* The reportable form of one parameter: `name` on its own, or `name:value` when the parameter is a
|
|
46
59
|
* known enum. Never the raw value of anything else.
|
|
@@ -82,11 +95,83 @@ export function describeToolParams(args) {
|
|
|
82
95
|
export function describeCliFlags(argv) {
|
|
83
96
|
const flags = new Set();
|
|
84
97
|
for (const arg of argv) {
|
|
98
|
+
// A bare `--` ends the options: everything after it is passed through to something else.
|
|
99
|
+
if (END_OF_OPTIONS === arg)
|
|
100
|
+
break;
|
|
85
101
|
if (!arg.startsWith('--'))
|
|
86
102
|
continue;
|
|
87
103
|
// `--port=9000` — split so the NAME is reported and the value is discarded with everything else.
|
|
88
104
|
const name = arg.split('=')[0] ?? arg;
|
|
89
|
-
flags.add(name);
|
|
105
|
+
flags.add(KNOWN_CLI_FLAGS.has(name) ? name : OTHER_VALUE);
|
|
90
106
|
}
|
|
91
107
|
return [...flags].sort();
|
|
92
108
|
}
|
|
109
|
+
const END_OF_OPTIONS = '--';
|
|
110
|
+
/**
|
|
111
|
+
* The flags the CLI defines. Anything else is reported as `other`: a flag NAME the user typed can
|
|
112
|
+
* carry their own word as easily as a value can. Hand-listed because the CLI parses its flags in
|
|
113
|
+
* many places with no shared table; a flag missing here reports `other`, which loses a count and
|
|
114
|
+
* leaks nothing.
|
|
115
|
+
*/
|
|
116
|
+
const KNOWN_CLI_FLAGS = new Set([
|
|
117
|
+
'--accept-coverage',
|
|
118
|
+
'--agent',
|
|
119
|
+
'--app',
|
|
120
|
+
'--bug',
|
|
121
|
+
'--capture-bodies',
|
|
122
|
+
'--confirm-dangerous',
|
|
123
|
+
'--dir',
|
|
124
|
+
'--drive',
|
|
125
|
+
'--drive-model',
|
|
126
|
+
'--dry-run',
|
|
127
|
+
'--email',
|
|
128
|
+
'--env',
|
|
129
|
+
'--expect',
|
|
130
|
+
'--expect-file',
|
|
131
|
+
'--explore',
|
|
132
|
+
'--files-only',
|
|
133
|
+
'--fix',
|
|
134
|
+
'--flow',
|
|
135
|
+
'--force',
|
|
136
|
+
'--headed',
|
|
137
|
+
'--headless',
|
|
138
|
+
'--help',
|
|
139
|
+
'--hook',
|
|
140
|
+
'--hooks',
|
|
141
|
+
'--http',
|
|
142
|
+
'--http-port',
|
|
143
|
+
'--http-token',
|
|
144
|
+
'--install-secs',
|
|
145
|
+
'--json',
|
|
146
|
+
'--kind',
|
|
147
|
+
'--license',
|
|
148
|
+
'--move-history',
|
|
149
|
+
'--no-agents',
|
|
150
|
+
'--no-drive',
|
|
151
|
+
'--no-first-run',
|
|
152
|
+
'--no-install',
|
|
153
|
+
'--no-mcp',
|
|
154
|
+
'--no-open',
|
|
155
|
+
'--persona',
|
|
156
|
+
'--porcelain',
|
|
157
|
+
'--port',
|
|
158
|
+
'--project',
|
|
159
|
+
'--quiet',
|
|
160
|
+
'--rating',
|
|
161
|
+
'--relaunch',
|
|
162
|
+
'--results-json',
|
|
163
|
+
'--runtime-secs',
|
|
164
|
+
'--select',
|
|
165
|
+
'--session',
|
|
166
|
+
'--session-id',
|
|
167
|
+
'--since',
|
|
168
|
+
'--start',
|
|
169
|
+
'--storage-state',
|
|
170
|
+
'--subject',
|
|
171
|
+
'--timeout',
|
|
172
|
+
'--url',
|
|
173
|
+
'--version',
|
|
174
|
+
'--watch',
|
|
175
|
+
'--workspace',
|
|
176
|
+
'--yes',
|
|
177
|
+
]);
|
|
@@ -2,13 +2,12 @@ import { AutomationHint } from '@reticlehq/core/telemetry';
|
|
|
2
2
|
interface AutomationInput {
|
|
3
3
|
env: NodeJS.ProcessEnv;
|
|
4
4
|
fileExists: (path: string) => boolean;
|
|
5
|
-
hasTty: boolean;
|
|
6
5
|
}
|
|
7
6
|
/**
|
|
8
7
|
* The most specific signal that fires, or undefined.
|
|
9
8
|
*
|
|
10
|
-
* Ordered most specific first:
|
|
11
|
-
*
|
|
9
|
+
* Ordered most specific first: an agent sandbox runs in a container, and a container inside a
|
|
10
|
+
* Codespace is one fact about the run; sending the weaker signal would waste the field. Omitted rather than sent as a
|
|
12
11
|
* "none" value, so its presence is itself the signal — the convention every other advisory field
|
|
13
12
|
* here follows.
|
|
14
13
|
*/
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
* - `npm_config_user_agent`. Says which package manager ran us, which every route shares.
|
|
24
24
|
* - An absent `$DISPLAY`. Every Linux server, every ssh session, and a large share of genuine
|
|
25
25
|
* developer machines trip it; it separates nothing.
|
|
26
|
+
* - No terminal on stdin/stdout. It was the third signal here, and every MCP stdio server has no
|
|
27
|
+
* terminal, so it fired on nearly every daemon a person's agent started and separated nothing.
|
|
26
28
|
*/
|
|
27
29
|
import { existsSync } from 'node:fs';
|
|
28
30
|
import { AutomationHint } from '@reticlehq/core/telemetry';
|
|
@@ -35,21 +37,47 @@ const HOSTED_WORKSPACE_ENV = [
|
|
|
35
37
|
'CLOUD_SHELL',
|
|
36
38
|
'REMOTE_CONTAINERS',
|
|
37
39
|
];
|
|
40
|
+
/**
|
|
41
|
+
* CI vendors' own variables, for the runners and self-hosted agents that do not set `CI`. Each is
|
|
42
|
+
* set by the runner itself; a person's shell does not carry them.
|
|
43
|
+
*/
|
|
44
|
+
const CI_VENDOR_ENV = [
|
|
45
|
+
'GITHUB_ACTIONS',
|
|
46
|
+
'GITLAB_CI',
|
|
47
|
+
'BUILDKITE',
|
|
48
|
+
'CIRCLECI',
|
|
49
|
+
'JENKINS_URL',
|
|
50
|
+
'TF_BUILD',
|
|
51
|
+
'TEAMCITY_VERSION',
|
|
52
|
+
'BITBUCKET_BUILD_NUMBER',
|
|
53
|
+
'CODEBUILD_BUILD_ID',
|
|
54
|
+
'DRONE',
|
|
55
|
+
'TRAVIS',
|
|
56
|
+
];
|
|
57
|
+
/**
|
|
58
|
+
* Hosted coding-agent sandboxes that declare themselves to what they spawn. Only markers the agent
|
|
59
|
+
* sets on purpose for a REMOTE session: a local agent's own marker (`CLAUDECODE`) is a person at a
|
|
60
|
+
* laptop and belongs to `client`, not here.
|
|
61
|
+
*/
|
|
62
|
+
const AGENT_SANDBOX_ENV = ['CLAUDE_CODE_REMOTE'];
|
|
63
|
+
const declared = (env, keys) => keys.some((k) => (env[k] ?? '') !== '' && 'false' !== env[k]);
|
|
38
64
|
/**
|
|
39
65
|
* The most specific signal that fires, or undefined.
|
|
40
66
|
*
|
|
41
|
-
* Ordered most specific first:
|
|
42
|
-
*
|
|
67
|
+
* Ordered most specific first: an agent sandbox runs in a container, and a container inside a
|
|
68
|
+
* Codespace is one fact about the run; sending the weaker signal would waste the field. Omitted rather than sent as a
|
|
43
69
|
* "none" value, so its presence is itself the signal — the convention every other advisory field
|
|
44
70
|
* here follows.
|
|
45
71
|
*/
|
|
46
72
|
export function resolveAutomationHint(input) {
|
|
73
|
+
if (declared(input.env, AGENT_SANDBOX_ENV))
|
|
74
|
+
return AutomationHint.AGENT_SANDBOX;
|
|
75
|
+
if (declared(input.env, CI_VENDOR_ENV))
|
|
76
|
+
return AutomationHint.CI_RUNNER;
|
|
47
77
|
if (CONTAINER_MARKERS.some((m) => input.fileExists(m)))
|
|
48
78
|
return AutomationHint.CONTAINER;
|
|
49
|
-
if (
|
|
79
|
+
if (declared(input.env, HOSTED_WORKSPACE_ENV))
|
|
50
80
|
return AutomationHint.HOSTED_WORKSPACE;
|
|
51
|
-
if (!input.hasTty)
|
|
52
|
-
return AutomationHint.NO_TTY;
|
|
53
81
|
return undefined;
|
|
54
82
|
}
|
|
55
83
|
/** The real reading, taken once per process. */
|
|
@@ -64,8 +92,5 @@ export function currentAutomationHint(env) {
|
|
|
64
92
|
return false; // an unreadable root is not evidence of anything
|
|
65
93
|
}
|
|
66
94
|
},
|
|
67
|
-
// Both ends, because a piped stdout alone is how `reticle status | jq` looks, and that is a
|
|
68
|
-
// person typing.
|
|
69
|
-
hasTty: true === process.stdout.isTTY || true === process.stdin.isTTY,
|
|
70
95
|
});
|
|
71
96
|
}
|
|
@@ -13,7 +13,8 @@ import { join } from 'node:path';
|
|
|
13
13
|
/** Where the installer left its breadcrumbs. Same directory the telemetry id and opt-out live in. */
|
|
14
14
|
const RETICLE_STATE_DIR = process.env['RETICLE_STATE_DIR'] ?? join(homedir(), '.reticle');
|
|
15
15
|
import { describeCliFlags } from './argument-shape.js';
|
|
16
|
-
import { resolveInstallSource } from './install-source.js';
|
|
16
|
+
import { rememberInstallSource, resolveInstallSource } from './install-source.js';
|
|
17
|
+
import { installPlatformLinkTelemetry } from './platform-linked.js';
|
|
17
18
|
/**
|
|
18
19
|
* Report that a person ran a `reticle` subcommand.
|
|
19
20
|
*
|
|
@@ -53,7 +54,11 @@ export function reportCliRun(argv) {
|
|
|
53
54
|
* second invocation finds nothing. A flag would have to live somewhere, and somewhere is another
|
|
54
55
|
* file that can disagree with this one.
|
|
55
56
|
*/
|
|
57
|
+
// Every process that may link a project, the daemon included, reports it.
|
|
58
|
+
installPlatformLinkTelemetry();
|
|
56
59
|
drainInstallTrace(RETICLE_STATE_DIR);
|
|
60
|
+
// Before anything reads it: a channel declared on THIS command outlives it.
|
|
61
|
+
rememberInstallSource(process.env, RETICLE_STATE_DIR);
|
|
57
62
|
if (firstArg === DAEMON_INNER_COMMAND)
|
|
58
63
|
return;
|
|
59
64
|
const command = knownCommand(firstArg);
|
|
@@ -67,7 +72,7 @@ export function reportCliRun(argv) {
|
|
|
67
72
|
detach: true,
|
|
68
73
|
// WHICH published route brought this machine in. Self-declared by the channel, never inferred
|
|
69
74
|
// — see install-source.ts for which of the four routes can actually carry the marker.
|
|
70
|
-
installSource: resolveInstallSource(),
|
|
75
|
+
installSource: resolveInstallSource(process.env, RETICLE_STATE_DIR),
|
|
71
76
|
});
|
|
72
77
|
if (!isHumanCliCommand(command))
|
|
73
78
|
return;
|
|
@@ -15,6 +15,7 @@ import { reticleStateHome } from '../command/daemon/daemon.js';
|
|
|
15
15
|
import { startUpdateCheck, updateNudgeState } from '../command/update/update-nudge.js';
|
|
16
16
|
import { markDaemonStart } from './mcp-connection.js';
|
|
17
17
|
import { markInstrumentationClock } from './app-instrumented.js';
|
|
18
|
+
import { drainFeedbackOutbox } from './feedback.js';
|
|
18
19
|
import { markStallClock, STALL_AFTER_MS, stallUptime } from '../portal/session/stall-clock.js';
|
|
19
20
|
/**
|
|
20
21
|
* Whether an app for this project has ever reached Reticle, read from the same durable memory the
|
|
@@ -91,6 +92,8 @@ export function installDaemonTelemetry(cwd, now = () => Date.now(),
|
|
|
91
92
|
port) {
|
|
92
93
|
const metrics = getSessionMetrics(now);
|
|
93
94
|
void getTelemetry().emit(TelemetryEventKind.DAEMON_STARTED);
|
|
95
|
+
// Reports a past send could not deliver. Off the boot path, and never able to throw into it.
|
|
96
|
+
void drainFeedbackOutbox().catch(() => undefined);
|
|
94
97
|
// Ask npm whether a newer Reticle exists, so the agent can tell the human. Nothing checked before
|
|
95
98
|
// this, so a published fix was invisible until someone manually ran `reticle update`.
|
|
96
99
|
startUpdateCheck(now);
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* What an error message may say on the wire, and it is ALLOW-listed: a sentence Reticle authors
|
|
3
|
+
* (sent as our own fixed label), else the bare Node error code or built-in class plus the
|
|
4
|
+
* fingerprint, else the fingerprint alone.
|
|
5
|
+
*
|
|
6
|
+
* It used to be the message with known-variable parts blanked, which is a deny-list, and a
|
|
7
|
+
* deny-list loses: a hostname after `getaddrinfo ENOTFOUND`, a Windows home directory with a space
|
|
8
|
+
* in it, a `~` path and a person's name in free text all reached the wire. Nothing written by
|
|
9
|
+
* anybody else survives this function, because it never echoes its input.
|
|
10
|
+
*/
|
|
2
11
|
export declare function errorSkeleton(message: string): string;
|
|
3
12
|
/** A stable, opaque group key for an error message. Same defect ⇒ same key, on every machine. */
|
|
4
13
|
export declare function fingerprintError(message: string): string;
|
|
@@ -40,8 +40,13 @@ const VARIABLE_PARTS = [
|
|
|
40
40
|
// ── Then the grouping rules ──────────────────────────────────────────────────────────────────
|
|
41
41
|
/"[^"]*"|'[^']*'|`[^`]*`/g, // quoted values — names, selectors, snippets
|
|
42
42
|
/\b[a-z][a-z0-9+.-]*:\/\/\S+/gi, // URLs
|
|
43
|
+
// Windows paths run to the end of the message: a directory name may hold a space, and
|
|
44
|
+
// `C:\Users\Jane Doe\…` cut at the first space sent the surname.
|
|
45
|
+
/(?:\\\\\?\\)?[A-Za-z]:[\\/].*$/g,
|
|
46
|
+
/~[\\/]\S*/g, // home-relative paths
|
|
43
47
|
/(?:\/[\w.-]+){2,}\/?/g, // POSIX-ish paths
|
|
44
|
-
/
|
|
48
|
+
/\b\d{1,3}(?:\.\d{1,3}){3}(?::\d+)?\b/g, // IPv4 (+ port)
|
|
49
|
+
/\b[\w-]+(?:\.[\w-]+)+\b/g, // hostnames and other dotted names
|
|
45
50
|
/\b[0-9a-f]{8,}\b/gi, // hex ids, hashes, uuids-without-dashes
|
|
46
51
|
/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi, // uuids
|
|
47
52
|
/\d+/g, // any remaining number — ports, counts, timeouts
|
|
@@ -71,16 +76,67 @@ const VARIABLE_PARTS = [
|
|
|
71
76
|
* for a reason unrelated to this one.
|
|
72
77
|
*/
|
|
73
78
|
const MAX_SKELETON_INPUT = 1024;
|
|
74
|
-
/**
|
|
75
|
-
|
|
79
|
+
/** Variable parts blanked, whitespace collapsed, length bounded. The GROUPING basis; never sent. */
|
|
80
|
+
function redactedShape(message) {
|
|
76
81
|
let skeleton = message.slice(0, MAX_SKELETON_INPUT);
|
|
77
82
|
for (const pattern of VARIABLE_PARTS)
|
|
78
83
|
skeleton = skeleton.replace(pattern, '*');
|
|
79
84
|
return skeleton.replace(/\s+/g, ' ').trim().slice(0, 200);
|
|
80
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Sentences Reticle itself authors, and the fixed text sent for each. The OUTPUT is always the
|
|
88
|
+
* label, never the matched message, so text appended to one of ours cannot ride along.
|
|
89
|
+
*/
|
|
90
|
+
const RETICLE_MESSAGES = [
|
|
91
|
+
{ match: /^no browser session connected\b/i, label: 'no browser session connected' },
|
|
92
|
+
{ match: /^multiple sessions connected\b/i, label: 'multiple sessions connected' },
|
|
93
|
+
{ match: /^no connected session with id\b/i, label: 'no connected session with id *' },
|
|
94
|
+
{ match: /^no baseline named\b/i, label: 'no baseline named *' },
|
|
95
|
+
{ match: /^no (?:active|compiled) recording named\b/i, label: 'no recording named *' },
|
|
96
|
+
{ match: /no longer resolves to an element/i, label: 'ref * no longer resolves to an element' },
|
|
97
|
+
{ match: /^session disconnected$/i, label: 'session disconnected' },
|
|
98
|
+
{ match: /^command '[^']*' timed out after\b/i, label: 'command * timed out after *' },
|
|
99
|
+
{
|
|
100
|
+
match: /did not resolve in current page/i,
|
|
101
|
+
label: 'flow step * did not resolve in current page',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
match: /potentially destructive (?:\w+ )*(?:action|tool) blocked/i,
|
|
105
|
+
label: 'potentially destructive action blocked',
|
|
106
|
+
},
|
|
107
|
+
{ match: /^pairing token is required\b/i, label: 'pairing token is required' },
|
|
108
|
+
{ match: /no <option> with value/i, label: 'no <option> with value *' },
|
|
109
|
+
{ match: /cannot hover without a real pointer/i, label: 'cannot hover without a real pointer' },
|
|
110
|
+
{ match: /browser pool (?:unavailable|is shut down)/i, label: 'browser pool unavailable' },
|
|
111
|
+
{ match: /Chromium is not installed/i, label: 'Chromium is not installed' },
|
|
112
|
+
{ match: /^act failed$/i, label: 'act failed' },
|
|
113
|
+
];
|
|
114
|
+
/** A Node error code (`ENOENT`, `ERR_INVALID_ARG_TYPE`): an identifier Node defines, never data. */
|
|
115
|
+
const NODE_ERROR_CODE = /\b(?:E[A-Z]{2,}|ERR_[A-Z_]{2,})\b/;
|
|
116
|
+
/** The built-in error classes. A custom class name is the app's own word, so it is not kept. */
|
|
117
|
+
const BUILTIN_ERROR_CLASS = /^(?:Error|TypeError|RangeError|SyntaxError|ReferenceError|EvalError|URIError|AggregateError|AbortError|TimeoutError|DOMException|ZodError)\b/;
|
|
118
|
+
/**
|
|
119
|
+
* What an error message may say on the wire, and it is ALLOW-listed: a sentence Reticle authors
|
|
120
|
+
* (sent as our own fixed label), else the bare Node error code or built-in class plus the
|
|
121
|
+
* fingerprint, else the fingerprint alone.
|
|
122
|
+
*
|
|
123
|
+
* It used to be the message with known-variable parts blanked, which is a deny-list, and a
|
|
124
|
+
* deny-list loses: a hostname after `getaddrinfo ENOTFOUND`, a Windows home directory with a space
|
|
125
|
+
* in it, a `~` path and a person's name in free text all reached the wire. Nothing written by
|
|
126
|
+
* anybody else survives this function, because it never echoes its input.
|
|
127
|
+
*/
|
|
128
|
+
export function errorSkeleton(message) {
|
|
129
|
+
const head = message.slice(0, MAX_SKELETON_INPUT).trim();
|
|
130
|
+
for (const { match, label } of RETICLE_MESSAGES)
|
|
131
|
+
if (match.test(head))
|
|
132
|
+
return label;
|
|
133
|
+
const fingerprint = `#${fingerprintError(message)}`;
|
|
134
|
+
const code = BUILTIN_ERROR_CLASS.exec(head)?.[0] ?? NODE_ERROR_CODE.exec(head)?.[0];
|
|
135
|
+
return code === undefined ? fingerprint : `${code} ${fingerprint}`;
|
|
136
|
+
}
|
|
81
137
|
/** A stable, opaque group key for an error message. Same defect ⇒ same key, on every machine. */
|
|
82
138
|
export function fingerprintError(message) {
|
|
83
|
-
return createHash('sha256').update(
|
|
139
|
+
return createHash('sha256').update(redactedShape(message)).digest('hex').slice(0, 12);
|
|
84
140
|
}
|
|
85
141
|
/**
|
|
86
142
|
* Frames from a stack trace that belong to RETICLE, reduced to `basename:line`.
|
|
@@ -121,7 +177,7 @@ export function fingerprintCrash(errorType, stack, message) {
|
|
|
121
177
|
const frames = reticleFrames(stack);
|
|
122
178
|
const basis = frames.length > 0
|
|
123
179
|
? `${errorType}|${frames.join('|')}`
|
|
124
|
-
: `${errorType}|${
|
|
180
|
+
: `${errorType}|${redactedShape(message)}`;
|
|
125
181
|
return createHash('sha256').update(basis).digest('hex').slice(0, 12);
|
|
126
182
|
}
|
|
127
183
|
/** The error's constructor name (`TypeError`), or `Unknown` for a thrown non-Error. */
|
|
@@ -15,19 +15,6 @@ import { TelemetryAction } from '../command/cli/cli-parse.js';
|
|
|
15
15
|
* show you the payload is asking for trust it has not earned.
|
|
16
16
|
*/
|
|
17
17
|
export declare function handleFeedback(text: string, rating: number | undefined, bug: boolean, feedbackKind?: string, agent?: boolean): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* `reticle identify` — opt-in, and it shows the consent notice before it sends anything.
|
|
20
|
-
*
|
|
21
|
-
* Deliberately NOT interactive: a prompt that appears in the middle of someone's work is pressure,
|
|
22
|
-
* and this is the one command where the user must be choosing freely. They type what they want to
|
|
23
|
-
* share, or they never run it at all.
|
|
24
|
-
*/
|
|
25
|
-
export declare function handleIdentify(parsed: {
|
|
26
|
-
context?: string;
|
|
27
|
-
company?: string;
|
|
28
|
-
email?: string;
|
|
29
|
-
forget: boolean;
|
|
30
|
-
}): Promise<void>;
|
|
31
18
|
/**
|
|
32
19
|
* `reticle telemetry [status|enable|disable]` — the user-facing control for anonymous usage metrics.
|
|
33
20
|
* `disable` persists a machine-wide opt-out (survives shells, unlike RETICLE_TELEMETRY=0); `status`
|
|
@@ -3,7 +3,6 @@ import { AGENT_FLAG, BUG_FLAG, FEEDBACK_KINDS, KIND_FLAG, RATING_FLAG, } from '.
|
|
|
3
3
|
import { describeFeedbackPayload, submitFeedback } from './feedback.js';
|
|
4
4
|
import { describeTelemetry, setTelemetryEnabled } from './telemetry.js';
|
|
5
5
|
import { TelemetryAction } from '../command/cli/cli-parse.js';
|
|
6
|
-
import { clearIdentity, IDENTIFY_NOTICE, readIdentity, saveIdentity, submitIdentity, UsageContextKind, } from './identify.js';
|
|
7
6
|
/**
|
|
8
7
|
* `reticle feedback [--rating 1-5] [--bug] "what happened"` — the feedback channel as a command.
|
|
9
8
|
*
|
|
@@ -49,82 +48,6 @@ export async function handleFeedback(text, rating, bug, feedbackKind, agent = fa
|
|
|
49
48
|
line(receipt.sent
|
|
50
49
|
? 'thanks your feedback is in. it genuinely changes what gets built next.'
|
|
51
50
|
: `not sent ${receipt.reason ?? 'unknown reason'}`);
|
|
52
|
-
for (const extra of identifyInvite(agent))
|
|
53
|
-
line(extra);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Offer a HUMAN a way to be replied to — printed after the receipt, never as a prompt.
|
|
57
|
-
*
|
|
58
|
-
* Feedback is anonymous by design and stays that way: the report has already been sent by the time
|
|
59
|
-
* this prints, so nothing here gates or delays it. This is an offer, not a question.
|
|
60
|
-
*
|
|
61
|
-
* It routes through `reticle identify`, which already does consented identity properly — it prints
|
|
62
|
-
* what it will send, states that identifying links this machine's prior anonymous history to that
|
|
63
|
-
* identity, and has `--forget`. Capturing an address inline on `feedback_submitted` instead would
|
|
64
|
-
* put PII on the anonymous event stream and break what `docs/telemetry.md` promises in public:
|
|
65
|
-
* "no domain sniffing, no email inference" and "no personal data is collected".
|
|
66
|
-
*
|
|
67
|
-
* Only for humans (an agent has no email), and only when nobody has identified yet — so somebody
|
|
68
|
-
* who declined is never asked twice.
|
|
69
|
-
*/
|
|
70
|
-
function identifyInvite(agent) {
|
|
71
|
-
if (agent)
|
|
72
|
-
return [];
|
|
73
|
-
try {
|
|
74
|
-
if (readIdentity() !== undefined)
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
return []; // unreadable identity file: say nothing rather than risk asking twice
|
|
79
|
-
}
|
|
80
|
-
return [
|
|
81
|
-
'',
|
|
82
|
-
'want a reply? `reticle identify --context <company|side_project|oss|learning> --email you@example.com`',
|
|
83
|
-
' optional, and it tells you exactly what it sends before sending it.',
|
|
84
|
-
];
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* `reticle identify` — opt-in, and it shows the consent notice before it sends anything.
|
|
88
|
-
*
|
|
89
|
-
* Deliberately NOT interactive: a prompt that appears in the middle of someone's work is pressure,
|
|
90
|
-
* and this is the one command where the user must be choosing freely. They type what they want to
|
|
91
|
-
* share, or they never run it at all.
|
|
92
|
-
*/
|
|
93
|
-
export async function handleIdentify(parsed) {
|
|
94
|
-
const line = (s) => {
|
|
95
|
-
process.stdout.write(`${s}\n`);
|
|
96
|
-
};
|
|
97
|
-
if (parsed.forget) {
|
|
98
|
-
clearIdentity();
|
|
99
|
-
line('forgotten the local identity file is deleted; nothing further is sent.');
|
|
100
|
-
line(' to have what was already sent removed, email support@reticlehq.com');
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const context = Object.values(UsageContextKind).find((k) => k === parsed.context);
|
|
104
|
-
if (context === undefined) {
|
|
105
|
-
const existing = readIdentity();
|
|
106
|
-
if (existing !== undefined)
|
|
107
|
-
line(`current ${JSON.stringify(existing)}`);
|
|
108
|
-
line(`usage: reticle identify --context <${Object.values(UsageContextKind).join('|')}>`);
|
|
109
|
-
line(' [--company "Acme"] [--email you@acme.com] [--forget]');
|
|
110
|
-
line('');
|
|
111
|
-
line(IDENTIFY_NOTICE);
|
|
112
|
-
process.exitCode = existing === undefined ? 1 : 0;
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const identity = {
|
|
116
|
-
context,
|
|
117
|
-
...(parsed.company !== undefined ? { company: parsed.company } : {}),
|
|
118
|
-
...(parsed.email !== undefined ? { email: parsed.email } : {}),
|
|
119
|
-
};
|
|
120
|
-
line(IDENTIFY_NOTICE);
|
|
121
|
-
line('');
|
|
122
|
-
line(`sending ${JSON.stringify(identity)}`);
|
|
123
|
-
saveIdentity(identity);
|
|
124
|
-
const sent = await submitIdentity(identity);
|
|
125
|
-
line(sent
|
|
126
|
-
? 'thanks saved and sent. we may reach out; `reticle identify --forget` undoes this.'
|
|
127
|
-
: 'not sent telemetry is disabled on this machine, so it was saved locally only.');
|
|
128
51
|
}
|
|
129
52
|
/**
|
|
130
53
|
* `reticle telemetry [status|enable|disable]` — the user-facing control for anonymous usage metrics.
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* disables it too, since it rides the same emitter.
|
|
23
23
|
*/
|
|
24
24
|
import { type Feedback } from '@reticlehq/core/telemetry';
|
|
25
|
+
import { type Telemetry } from './telemetry.js';
|
|
25
26
|
import { type SessionFacts } from './feedback-context.js';
|
|
26
27
|
/** Kills the feedback channel ONLY — adoption counters keep flowing. */
|
|
27
28
|
export declare const FEEDBACK_ENV = "RETICLE_FEEDBACK";
|
|
@@ -34,6 +35,12 @@ interface Redaction {
|
|
|
34
35
|
}
|
|
35
36
|
/** Strip credential/PII shapes and cap the length. Pure — the tests read like a spec of what leaks. */
|
|
36
37
|
export declare function redactFeedbackText(input: string, max: number): Redaction;
|
|
38
|
+
/**
|
|
39
|
+
* A trace reduced to Reticle's own words, in order: which tools were called and what verdict each
|
|
40
|
+
* gave. The raw trace is the call/response trail, and the responses carry the page's text and what
|
|
41
|
+
* was typed into it, which no redaction rule can tell from prose. So nothing else is kept.
|
|
42
|
+
*/
|
|
43
|
+
export declare function summarizeTrace(trace: string): string;
|
|
37
44
|
/** True when the feedback channel is switched off on its own (the emitter's switches apply as well). */
|
|
38
45
|
export declare function feedbackDisabled(env?: NodeJS.ProcessEnv): boolean;
|
|
39
46
|
/** What the author supplies; the environment context is detected, never asked for. */
|
|
@@ -89,6 +96,12 @@ export declare function submitFeedback(input: FeedbackInput, opts?: {
|
|
|
89
96
|
*/
|
|
90
97
|
background?: boolean;
|
|
91
98
|
}): Promise<FeedbackReceipt>;
|
|
99
|
+
/**
|
|
100
|
+
* Retry what the outbox holds: the receipt for an undelivered report promises "It will be retried",
|
|
101
|
+
* and until this ran on daemon start nothing ever read the outbox back. Bounded, sequential, and
|
|
102
|
+
* best-effort; a report the endpoint does not accept stays queued. Returns how many were delivered.
|
|
103
|
+
*/
|
|
104
|
+
export declare function drainFeedbackOutbox(telemetry?: Telemetry, home?: string): Promise<number>;
|
|
92
105
|
/**
|
|
93
106
|
* The receipt's context PLUS the fields the emitter stamps on every event regardless of kind — the
|
|
94
107
|
* reticle version, the OS, and whether this is CI. They are the single most-asked question of any bug
|