@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
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which tools this session called, and how reachable each one was.
|
|
3
|
-
*
|
|
4
|
-
* The generalisation of the capture ledger: it recorded a short list of read tools to answer one
|
|
5
|
-
* feature's disproof, and the question that followed is the same question asked of the whole table —
|
|
6
|
-
* most of the surface has never been observed being called at all, and a decision about what to cut
|
|
7
|
-
* or consolidate is about to be made. This is the instrument for that decision, and nothing else.
|
|
8
|
-
*
|
|
9
|
-
* ## Why the count alone is not enough
|
|
10
|
-
*
|
|
11
|
-
* A tool that goes uncalled because nobody was told it exists and a tool that goes uncalled because
|
|
12
|
-
* nobody wants it look identical in a call count. They are opposite conclusions. So every count is
|
|
13
|
-
* reported beside the tool's REACHABILITY — advertised on the default surface, advertised only on
|
|
14
|
-
* the extended one, or reachable solely by naming it to `reticle_run` — and the interesting cell is
|
|
15
|
-
* the one where an agent found a run-only tool anyway.
|
|
16
|
-
*
|
|
17
|
-
* ## The tiers are derived, never restated
|
|
18
|
-
*
|
|
19
|
-
* `tierOfTool` reads `CORE_TOOL_NAMES` and `EXTENDED_TOOL_NAMES` directly. A tool promoted or
|
|
20
|
-
* demoted between surfaces changes tier here with nothing edited. A local copy of either list would
|
|
21
|
-
* go stale on the first move and would then be wrong about the exact axis this exists to measure —
|
|
22
|
-
* and it would be wrong silently, in a report used to justify deleting things.
|
|
23
|
-
*
|
|
24
|
-
* ## What these numbers do NOT establish
|
|
25
|
-
*
|
|
26
|
-
* - **One session is not a hit rate.** This is evidence about ONE run by ONE agent against ONE app.
|
|
27
|
-
* A hit rate is a distribution over many sessions; a single session quoted as one is an anecdote
|
|
28
|
-
* with a denominator drawn on it.
|
|
29
|
-
* - **Never-called is not useless.** A tool one team reaches for once a month in an emergency and a
|
|
30
|
-
* tool nobody has ever called are the same zero here. Frequency alone cannot separate them, so a
|
|
31
|
-
* cut decided on frequency alone will delete the wrong things.
|
|
32
|
-
* - **Absent is not zero.** A session with no ledger reports `observed: false`. It has not
|
|
33
|
-
* established that no tools were called; it has established that nothing was watching.
|
|
34
|
-
* - The tools that ran BEFORE this instrument existed in the process, or against a session this
|
|
35
|
-
* daemon adopted after the fact, are simply missing rather than counted low.
|
|
36
|
-
*/
|
|
37
|
-
/** How an agent could have reached a tool. Derived from the surface sets — see above. */
|
|
38
|
-
export declare const ToolTier: {
|
|
39
|
-
/** Advertised directly on the surface every user gets. */
|
|
40
|
-
readonly DEFAULT: "default";
|
|
41
|
-
/** Advertised only when the full schema-carrying surface is switched on. */
|
|
42
|
-
readonly EXTENDED: "extended";
|
|
43
|
-
/** Advertised nowhere: reachable only by naming it to `reticle_run`. */
|
|
44
|
-
readonly RUN_ONLY: "run-only";
|
|
45
|
-
};
|
|
46
|
-
export type ToolTier = (typeof ToolTier)[keyof typeof ToolTier];
|
|
47
|
-
/** Which surface would have put this tool in front of an agent, read off that surface's own set. */
|
|
48
|
-
export declare function tierOfTool(tool: string): ToolTier;
|
|
49
|
-
/** How many tools fell in each tier on one side of the called/never-called split. */
|
|
50
|
-
interface TierCounts {
|
|
51
|
-
default: number;
|
|
52
|
-
extended: number;
|
|
53
|
-
runOnly: number;
|
|
54
|
-
}
|
|
55
|
-
interface ToolHitRate {
|
|
56
|
-
/** False when this session carries no ledger — "not watched", never "nothing was called". */
|
|
57
|
-
observed: boolean;
|
|
58
|
-
/** The four-plus-two cells: every tier, called and never-called. Omitted when not observed. */
|
|
59
|
-
cells?: {
|
|
60
|
-
called: TierCounts;
|
|
61
|
-
neverCalled: TierCounts;
|
|
62
|
-
};
|
|
63
|
-
/** Each tool called this session, most-called first. */
|
|
64
|
-
called?: readonly {
|
|
65
|
-
tool: string;
|
|
66
|
-
tier: ToolTier;
|
|
67
|
-
calls: number;
|
|
68
|
-
}[];
|
|
69
|
-
/** Each tool in the table this session never called, by name. */
|
|
70
|
-
neverCalled?: readonly {
|
|
71
|
-
tool: string;
|
|
72
|
-
tier: ToolTier;
|
|
73
|
-
}[];
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Cross one session's per-tool counts with the tool table.
|
|
77
|
-
*
|
|
78
|
-
* `allTools` is the DISPATCHABLE table — the names `reticle_run` will accept — passed in rather than
|
|
79
|
-
* imported, because the table is assembled in the module that owns this tool and importing it back
|
|
80
|
-
* would close a cycle. A tool counted but absent from the table still appears, so a name the table
|
|
81
|
-
* lost is visible rather than dropped.
|
|
82
|
-
*/
|
|
83
|
-
export declare function foldToolHitRate(input: {
|
|
84
|
-
calls: ReadonlyMap<string, number> | undefined;
|
|
85
|
-
allTools: readonly string[];
|
|
86
|
-
}): ToolHitRate;
|
|
87
|
-
export {};
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { CORE_TOOL_NAMES, EXTENDED_TOOL_NAMES } from './tool-surface.js';
|
|
2
|
-
/**
|
|
3
|
-
* Which tools this session called, and how reachable each one was.
|
|
4
|
-
*
|
|
5
|
-
* The generalisation of the capture ledger: it recorded a short list of read tools to answer one
|
|
6
|
-
* feature's disproof, and the question that followed is the same question asked of the whole table —
|
|
7
|
-
* most of the surface has never been observed being called at all, and a decision about what to cut
|
|
8
|
-
* or consolidate is about to be made. This is the instrument for that decision, and nothing else.
|
|
9
|
-
*
|
|
10
|
-
* ## Why the count alone is not enough
|
|
11
|
-
*
|
|
12
|
-
* A tool that goes uncalled because nobody was told it exists and a tool that goes uncalled because
|
|
13
|
-
* nobody wants it look identical in a call count. They are opposite conclusions. So every count is
|
|
14
|
-
* reported beside the tool's REACHABILITY — advertised on the default surface, advertised only on
|
|
15
|
-
* the extended one, or reachable solely by naming it to `reticle_run` — and the interesting cell is
|
|
16
|
-
* the one where an agent found a run-only tool anyway.
|
|
17
|
-
*
|
|
18
|
-
* ## The tiers are derived, never restated
|
|
19
|
-
*
|
|
20
|
-
* `tierOfTool` reads `CORE_TOOL_NAMES` and `EXTENDED_TOOL_NAMES` directly. A tool promoted or
|
|
21
|
-
* demoted between surfaces changes tier here with nothing edited. A local copy of either list would
|
|
22
|
-
* go stale on the first move and would then be wrong about the exact axis this exists to measure —
|
|
23
|
-
* and it would be wrong silently, in a report used to justify deleting things.
|
|
24
|
-
*
|
|
25
|
-
* ## What these numbers do NOT establish
|
|
26
|
-
*
|
|
27
|
-
* - **One session is not a hit rate.** This is evidence about ONE run by ONE agent against ONE app.
|
|
28
|
-
* A hit rate is a distribution over many sessions; a single session quoted as one is an anecdote
|
|
29
|
-
* with a denominator drawn on it.
|
|
30
|
-
* - **Never-called is not useless.** A tool one team reaches for once a month in an emergency and a
|
|
31
|
-
* tool nobody has ever called are the same zero here. Frequency alone cannot separate them, so a
|
|
32
|
-
* cut decided on frequency alone will delete the wrong things.
|
|
33
|
-
* - **Absent is not zero.** A session with no ledger reports `observed: false`. It has not
|
|
34
|
-
* established that no tools were called; it has established that nothing was watching.
|
|
35
|
-
* - The tools that ran BEFORE this instrument existed in the process, or against a session this
|
|
36
|
-
* daemon adopted after the fact, are simply missing rather than counted low.
|
|
37
|
-
*/
|
|
38
|
-
/** How an agent could have reached a tool. Derived from the surface sets — see above. */
|
|
39
|
-
export const ToolTier = {
|
|
40
|
-
/** Advertised directly on the surface every user gets. */
|
|
41
|
-
DEFAULT: 'default',
|
|
42
|
-
/** Advertised only when the full schema-carrying surface is switched on. */
|
|
43
|
-
EXTENDED: 'extended',
|
|
44
|
-
/** Advertised nowhere: reachable only by naming it to `reticle_run`. */
|
|
45
|
-
RUN_ONLY: 'run-only',
|
|
46
|
-
};
|
|
47
|
-
/** Which surface would have put this tool in front of an agent, read off that surface's own set. */
|
|
48
|
-
export function tierOfTool(tool) {
|
|
49
|
-
if (CORE_TOOL_NAMES.has(tool))
|
|
50
|
-
return ToolTier.DEFAULT;
|
|
51
|
-
if (EXTENDED_TOOL_NAMES.has(tool))
|
|
52
|
-
return ToolTier.EXTENDED;
|
|
53
|
-
return ToolTier.RUN_ONLY;
|
|
54
|
-
}
|
|
55
|
-
function tally(tools) {
|
|
56
|
-
return {
|
|
57
|
-
default: tools.filter((tier) => ToolTier.DEFAULT === tier).length,
|
|
58
|
-
extended: tools.filter((tier) => ToolTier.EXTENDED === tier).length,
|
|
59
|
-
runOnly: tools.filter((tier) => ToolTier.RUN_ONLY === tier).length,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Cross one session's per-tool counts with the tool table.
|
|
64
|
-
*
|
|
65
|
-
* `allTools` is the DISPATCHABLE table — the names `reticle_run` will accept — passed in rather than
|
|
66
|
-
* imported, because the table is assembled in the module that owns this tool and importing it back
|
|
67
|
-
* would close a cycle. A tool counted but absent from the table still appears, so a name the table
|
|
68
|
-
* lost is visible rather than dropped.
|
|
69
|
-
*/
|
|
70
|
-
export function foldToolHitRate(input) {
|
|
71
|
-
const { calls } = input;
|
|
72
|
-
if (calls === undefined)
|
|
73
|
-
return { observed: false };
|
|
74
|
-
const called = [...calls]
|
|
75
|
-
.map(([tool, count]) => ({ tool, tier: tierOfTool(tool), calls: count }))
|
|
76
|
-
.sort((a, b) => b.calls - a.calls || a.tool.localeCompare(b.tool));
|
|
77
|
-
const neverCalled = input.allTools
|
|
78
|
-
.filter((tool) => !calls.has(tool))
|
|
79
|
-
.map((tool) => ({ tool, tier: tierOfTool(tool) }))
|
|
80
|
-
.sort((a, b) => a.tool.localeCompare(b.tool));
|
|
81
|
-
return {
|
|
82
|
-
observed: true,
|
|
83
|
-
cells: {
|
|
84
|
-
called: tally(called.map((entry) => entry.tier)),
|
|
85
|
-
neverCalled: tally(neverCalled.map((entry) => entry.tier)),
|
|
86
|
-
},
|
|
87
|
-
called,
|
|
88
|
-
neverCalled,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Whether the tool call running right now belongs to one of OUR drives.
|
|
3
|
-
*
|
|
4
|
-
* `reticle_verify { action: "explore" }` hands the app to a model inside the daemon, which drives
|
|
5
|
-
* through the same dispatch chokepoint every agent uses. That is the right design — the inner
|
|
6
|
-
* `act_and_wait` and `assert` calls are real verifications and must be counted — but it left every
|
|
7
|
-
* verdict a drive produced indistinguishable from one the user's own agent earned, under the same
|
|
8
|
-
* session and the same `actor: agent`. So "did this install ever verify anything by itself" had no
|
|
9
|
-
* answer, and any per-session rate read high by however much we drove.
|
|
10
|
-
*
|
|
11
|
-
* Module state, one flag, set for the span of the drive. The same one-hop pattern `tool-refused.ts`
|
|
12
|
-
* already uses for its pending reason, and for the same reason: the fact is produced in one place
|
|
13
|
-
* and needed in another, with a chokepoint in between that has no business taking an extra argument
|
|
14
|
-
* for a metric.
|
|
15
|
-
*
|
|
16
|
-
* A COUNTER rather than a boolean, so a drive nested inside a drive cannot clear the flag on its way
|
|
17
|
-
* out and leave the outer one unmarked.
|
|
18
|
-
*/
|
|
19
|
-
let depth = 0;
|
|
20
|
-
/** Run `drive` with every verdict underneath it attributed to the harness. */
|
|
21
|
-
export async function withHarnessDrive(drive) {
|
|
22
|
-
depth += 1;
|
|
23
|
-
try {
|
|
24
|
-
return await drive();
|
|
25
|
-
}
|
|
26
|
-
finally {
|
|
27
|
-
// In a `finally` because a drive that THREW still drove: leaving the flag raised would attribute
|
|
28
|
-
// the user's own next verdict to a harness that is no longer running.
|
|
29
|
-
depth -= 1;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/** True while a harness drive is in progress. */
|
|
33
|
-
export function harnessDriving() {
|
|
34
|
-
return depth > 0;
|
|
35
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { UsageContextKind, type Identity } from '@reticlehq/core/telemetry';
|
|
2
|
-
/** Re-exported so the CLI has one import for the whole feature; the shape itself lives in core. */
|
|
3
|
-
export { UsageContextKind };
|
|
4
|
-
export type { Identity };
|
|
5
|
-
export declare function readIdentity(file?: string): Identity | undefined;
|
|
6
|
-
export declare function saveIdentity(identity: Identity, file?: string): void;
|
|
7
|
-
export declare function clearIdentity(file?: string): void;
|
|
8
|
-
/**
|
|
9
|
-
* What identifying yourself actually does, in plain words, shown BEFORE anything is sent.
|
|
10
|
-
*
|
|
11
|
-
* The second sentence is the one that matters and the one a consent notice usually omits: the
|
|
12
|
-
* identity is keyed to the same anonymous id the previous events carried, so opting in links the
|
|
13
|
-
* usage history that was already collected. That is exactly what makes it useful to us, which is
|
|
14
|
-
* exactly why the user has to be told before they choose, not after.
|
|
15
|
-
*/
|
|
16
|
-
export declare const IDENTIFY_NOTICE: string;
|
|
17
|
-
/**
|
|
18
|
-
* Report an identity. Emitted as its own event so it is trivially separable from the anonymous
|
|
19
|
-
* stream — a distinct name is what lets the analytics side hold it under a different retention rule,
|
|
20
|
-
* or drop it entirely, without touching the adoption metrics.
|
|
21
|
-
*/
|
|
22
|
-
export declare function submitIdentity(identity: Identity): Promise<boolean>;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `reticle identify` — the ONLY way Reticle ever learns who you are, and it is a thing you type.
|
|
3
|
-
*
|
|
4
|
-
* The product question behind this is real: which of these anonymous ids are companies who would pay
|
|
5
|
-
* for support, an enterprise licence, or a design-partner slot? The tempting answer is to infer it —
|
|
6
|
-
* match a git remote against a company domain, sniff an email out of `git config`, resolve an npm org.
|
|
7
|
-
* Reticle does none of that, and the refusal is deliberate rather than squeamish:
|
|
8
|
-
*
|
|
9
|
-
* - it would contradict a promise made in four places (README, usage, enterprise FAQ, telemetry
|
|
10
|
-
* policy) that project names, git remotes and account identifiers are never sent;
|
|
11
|
-
* - covert identification of a data subject is not "anonymous usage metrics", so it would also
|
|
12
|
-
* break the legal basis the policy states — legitimate interest, minimized to the listed fields;
|
|
13
|
-
* - and it is worse at the actual job. A scraped lead is a cold email from a tool the recipient
|
|
14
|
-
* trusted, which is the fastest way to turn an advocate into someone who runs
|
|
15
|
-
* `reticle telemetry disable` and tells their team to do the same. A self-identified one already
|
|
16
|
-
* wants to talk to you.
|
|
17
|
-
*
|
|
18
|
-
* So this is opt-in, explicit, reversible, and it tells the user exactly what it links before it
|
|
19
|
-
* sends anything.
|
|
20
|
-
*/
|
|
21
|
-
import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
22
|
-
import { homedir } from 'node:os';
|
|
23
|
-
import { join } from 'node:path';
|
|
24
|
-
import { TelemetryEventKind, UsageContextKind } from '@reticlehq/core/telemetry';
|
|
25
|
-
import { getTelemetry } from './telemetry.js';
|
|
26
|
-
const RETICLE_DIR = join(homedir(), '.reticle');
|
|
27
|
-
/** Persisted so the identity survives shells and is attached to later sessions — and so it can be shown back. */
|
|
28
|
-
const IDENTITY_FILE = join(RETICLE_DIR, 'identity.json');
|
|
29
|
-
/** Re-exported so the CLI has one import for the whole feature; the shape itself lives in core. */
|
|
30
|
-
export { UsageContextKind };
|
|
31
|
-
export function readIdentity(file = IDENTITY_FILE) {
|
|
32
|
-
try {
|
|
33
|
-
return JSON.parse(readFileSync(file, 'utf8'));
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export function saveIdentity(identity, file = IDENTITY_FILE) {
|
|
40
|
-
mkdirSync(RETICLE_DIR, { recursive: true });
|
|
41
|
-
writeFileSync(file, JSON.stringify(identity, null, 2), 'utf8');
|
|
42
|
-
}
|
|
43
|
-
export function clearIdentity(file = IDENTITY_FILE) {
|
|
44
|
-
rmSync(file, { force: true });
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* What identifying yourself actually does, in plain words, shown BEFORE anything is sent.
|
|
48
|
-
*
|
|
49
|
-
* The second sentence is the one that matters and the one a consent notice usually omits: the
|
|
50
|
-
* identity is keyed to the same anonymous id the previous events carried, so opting in links the
|
|
51
|
-
* usage history that was already collected. That is exactly what makes it useful to us, which is
|
|
52
|
-
* exactly why the user has to be told before they choose, not after.
|
|
53
|
-
*/
|
|
54
|
-
export const IDENTIFY_NOTICE = [
|
|
55
|
-
'This sends the details you type here to the Reticle maintainers, so we can contact you and',
|
|
56
|
-
"understand how teams use Reticle. It is linked to this machine's anonymous id, which means it",
|
|
57
|
-
'also connects the anonymous usage already recorded from this machine to what you enter now.',
|
|
58
|
-
'Nothing about your app, your code, or your repository is included, and nothing else changes.',
|
|
59
|
-
'Undo it any time with `reticle identify --forget` (that stops future sends and deletes the local file;',
|
|
60
|
-
'email support@reticlehq.com to have what was already sent removed).',
|
|
61
|
-
].join('\n');
|
|
62
|
-
/**
|
|
63
|
-
* Report an identity. Emitted as its own event so it is trivially separable from the anonymous
|
|
64
|
-
* stream — a distinct name is what lets the analytics side hold it under a different retention rule,
|
|
65
|
-
* or drop it entirely, without touching the adoption metrics.
|
|
66
|
-
*/
|
|
67
|
-
export async function submitIdentity(identity) {
|
|
68
|
-
const telemetry = getTelemetry();
|
|
69
|
-
if (!telemetry.enabled)
|
|
70
|
-
return false;
|
|
71
|
-
await telemetry.emit(TelemetryEventKind.IDENTIFIED, { identity });
|
|
72
|
-
return true;
|
|
73
|
-
}
|
package/docs/cli/capsules.mdx
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: reticle capsules
|
|
3
|
-
description: List the saved fail-to-pass bug capsules recorded from failed assertions.
|
|
4
|
-
icon: capsules
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`reticle capsules` lists what is in `.reticle/capsules`. A capsule is a minimal failing reproduction plus the consequence that should have held. Replay one with the `reticle_flow_replay` tool.
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx @reticlehq/server capsules
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
No flags.
|
|
14
|
-
|
|
15
|
-
## What it prints
|
|
16
|
-
|
|
17
|
-
One `reticle_capsules` line: a `count` and an array. Real capture from this repository, trimmed to three of the seventy-nine entries and pretty-printed (the CLI prints it as a single line):
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"t": "2026-08-15T18:42:48.790Z",
|
|
22
|
-
"event": "reticle_capsules",
|
|
23
|
-
"count": 79,
|
|
24
|
-
"capsules": [
|
|
25
|
-
{
|
|
26
|
-
"id": "1786793143459-e5",
|
|
27
|
-
"origin": "failed-assert",
|
|
28
|
-
"expected": "signal auth:granted",
|
|
29
|
-
"observed": "signal \"auth:granted\" never fired",
|
|
30
|
-
"steps": 1
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"id": "1786791565180-e12",
|
|
34
|
-
"origin": "failed-assert",
|
|
35
|
-
"expected": "declared consequence",
|
|
36
|
-
"observed": "route is '/actions', expected '/server-actions'",
|
|
37
|
-
"steps": 1
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"id": "1785653101906-e3",
|
|
41
|
-
"origin": "failed-assert",
|
|
42
|
-
"expected": "declared consequence",
|
|
43
|
-
"observed": "not settled: 236 request(s) still in flight",
|
|
44
|
-
"steps": 1
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
| Field | Meaning |
|
|
51
|
-
| ---------- | ------------------------------------------------ |
|
|
52
|
-
| `id` | Capsule id, timestamp plus a cursor |
|
|
53
|
-
| `flow` | Present when the capsule came from a named flow |
|
|
54
|
-
| `origin` | How it was captured, for example `failed-assert` |
|
|
55
|
-
| `expected` | The consequence that was declared |
|
|
56
|
-
| `observed` | What actually happened |
|
|
57
|
-
| `steps` | How many steps the reproduction is |
|
|
58
|
-
|
|
59
|
-
## Exit codes
|
|
60
|
-
|
|
61
|
-
| Code | Meaning |
|
|
62
|
-
| ---- | ------------------------------------------------------------------------ |
|
|
63
|
-
| `0` | Listed, even when the count is zero |
|
|
64
|
-
| `1` | The capsule store could not be read. Logged as `reticle_capsules_failed` |
|
|
65
|
-
|
|
66
|
-
## Worked example
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
npx @reticlehq/server capsules | jq '.capsules[] | select(.origin == "failed-assert") | .observed'
|
|
70
|
-
```
|
package/docs/cli/hunt.mdx
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: reticle hunt
|
|
3
|
-
description: Aggregate many crawl reports into one false-green rate across already-merged changes.
|
|
4
|
-
icon: crosshairs
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`reticle hunt` is arithmetic, not driving. You point it at a directory of crawl reports (one JSON file per checkout, each produced by `reticle_verify {action:"crawl"}`) and it turns the pile into the one number the core claim needs: across N already-merged, already-green changes, how many carried a candidate false green?
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx @reticlehq/server hunt <dir-of-crawl-reports>
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
No control arm is needed. Those changes shipped, so the counterfactual is already established.
|
|
14
|
-
|
|
15
|
-
## Arguments
|
|
16
|
-
|
|
17
|
-
| Argument | Type | Default | What it does |
|
|
18
|
-
| --- | --- | --- | --- |
|
|
19
|
-
| `<dir>` | string, positional, **required** | none | Directory of `*.json` crawl reports. Each file is one crawl over one checkout |
|
|
20
|
-
|
|
21
|
-
Each input file is read for `label` (falling back to the filename), `anomalies[]`, and `stepsRun`.
|
|
22
|
-
|
|
23
|
-
## What it prints
|
|
24
|
-
|
|
25
|
-
One `reticle_hunt` line with the summary. Real capture over a directory of two reports, one of them carrying a contradiction and a console error, with the `headline` sentence trimmed at the ellipsis:
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"t": "2026-08-15T18:43:18.333Z",
|
|
30
|
-
"event": "reticle_hunt",
|
|
31
|
-
"runs": 2,
|
|
32
|
-
"runsWithCoverage": 2,
|
|
33
|
-
"runsWithContradictions": 1,
|
|
34
|
-
"contradictions": 1,
|
|
35
|
-
"singleChannelFaults": 1,
|
|
36
|
-
"byKind": { "ui-advanced-request-failed": 1, "console-error": 1 },
|
|
37
|
-
"flagged": ["abc123"],
|
|
38
|
-
"headline": "1 of 2 merged, already-green changes carried a candidate false green (1 contradictions) ..."
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
| Field | Meaning |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `runs` | Report files read |
|
|
45
|
-
| `runsWithCoverage` | Runs that drove at least one control. The only honest denominator: a run that drove nothing is not evidence of cleanliness |
|
|
46
|
-
| `runsWithContradictions` | Runs with at least one cross-channel contradiction |
|
|
47
|
-
| `contradictions` | Total contradictions. The kinds are `ui-advanced-request-failed`, `signal-contradicted`, `response-ignored`, `duplicate-request`, `request-never-settled`, `failure-misattributed` |
|
|
48
|
-
| `singleChannelFaults` | Everything else: console errors, failed requests, dead controls. Context, not the claim |
|
|
49
|
-
| `byKind` | Counts per anomaly kind |
|
|
50
|
-
| `flagged` | The labels with contradictions, so each can be confirmed by hand |
|
|
51
|
-
| `headline` | A sentence phrased so it cannot overstate itself. It says "candidate", because every flag still needs manual confirmation |
|
|
52
|
-
|
|
53
|
-
## Exit codes
|
|
54
|
-
|
|
55
|
-
Always `0`. A read failure is logged as `reticle_hunt_failed`. Omitting the directory is a usage error:
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
{"t":"2026-08-15T18:43:06.525Z","event":"reticle_usage_error","message":"usage: reticle hunt <dir-of-crawl-reports>"}
|
|
59
|
-
usage: reticle hunt <dir-of-crawl-reports>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
That path exits `1`.
|
|
63
|
-
|
|
64
|
-
## Worked example
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
for sha in $(git log --format=%H -n 30 main); do
|
|
68
|
-
git checkout "$sha" && npm run dev &
|
|
69
|
-
# drive reticle_verify {action:"crawl"} over the app, write the JSON:
|
|
70
|
-
# .../reports/$sha.json
|
|
71
|
-
done
|
|
72
|
-
npx @reticlehq/server hunt ./reports
|
|
73
|
-
```
|
package/docs/cli/identify.mdx
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: reticle identify
|
|
3
|
-
description: Opt in to telling the Reticle maintainers who you are, and undo it at any time.
|
|
4
|
-
icon: id-card
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`reticle identify` attaches a name, a company, an email and a usage context to this machine's Reticle install and sends them to the maintainers, so support or an enterprise trial has someone to talk to. It is off unless you run it, and `reticle identify --forget` undoes it.
|
|
8
|
-
|
|
9
|
-
It is opt-in and deliberately not interactive. A prompt in the middle of someone's work is pressure, and this is the one command where the choice has to be free. You type what you want to share, or you never run it at all.
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx @reticlehq/server identify --context <company|side_project|open_source|learning> [--company "Acme"] [--email you@acme.com] [--forget]
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Flags
|
|
16
|
-
|
|
17
|
-
| Flag | Type | Default | What it does |
|
|
18
|
-
| --- | --- | --- | --- |
|
|
19
|
-
| `--context K` | one of `company`, `side_project`, `open_source`, `learning` | none. Required unless `--forget` | What Reticle is being used for |
|
|
20
|
-
| `--company N` | string | unset | Your company name. Optional |
|
|
21
|
-
| `--email E` | string | unset | An address to reach you on. Optional |
|
|
22
|
-
| `--forget` | boolean | `false` | Delete the local identity file and stop sending it |
|
|
23
|
-
|
|
24
|
-
Every field except the context is optional, so you can say "this is a company" without saying which, or name the company without leaving an address.
|
|
25
|
-
|
|
26
|
-
## What it prints
|
|
27
|
-
|
|
28
|
-
The consent notice, then the exact payload, then the result:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
sending {"context":"company","company":"Acme","email":"you@acme.com"}
|
|
32
|
-
thanks saved and sent. we may reach out; `reticle identify --forget` undoes this.
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
`not sent` replaces the last line when telemetry is disabled on the machine, in which case the identity is saved locally only.
|
|
36
|
-
|
|
37
|
-
With `--forget`:
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
forgotten the local identity file is deleted; nothing further is sent.
|
|
41
|
-
to have what was already sent removed, email support@reticlehq.com
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Run with no valid `--context`, it prints the current identity (if any), the usage, and the full consent notice, and exits `1`. Real capture on a machine with no identity on file:
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
usage: reticle identify --context <company|side_project|open_source|learning>
|
|
48
|
-
[--company "Acme"] [--email you@acme.com] [--forget]
|
|
49
|
-
|
|
50
|
-
This sends the details you type here to the Reticle maintainers, so we can contact you and
|
|
51
|
-
understand how teams use Reticle. It is linked to this machine's anonymous id, which means it
|
|
52
|
-
also connects the anonymous usage already recorded from this machine to what you enter now.
|
|
53
|
-
Nothing about your app, your code, or your repository is included, and nothing else changes.
|
|
54
|
-
Undo it any time with `reticle identify --forget` (that stops future sends and deletes the local file;
|
|
55
|
-
email support@reticlehq.com to have what was already sent removed).
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
<Warning>
|
|
59
|
-
Identifying links this machine's anonymous id to what you type, which also connects the anonymous
|
|
60
|
-
usage already recorded from this machine to that identity. The command says so before it sends
|
|
61
|
-
anything. Nothing about your app, your code, or your repository is ever included.
|
|
62
|
-
</Warning>
|
|
63
|
-
|
|
64
|
-
## Exit codes
|
|
65
|
-
|
|
66
|
-
| Code | Meaning |
|
|
67
|
-
| ---- | ------------------------------------------------------------------------------ |
|
|
68
|
-
| `0` | Identity saved, or forgotten, or usage printed when an identity already exists |
|
|
69
|
-
| `1` | No valid `--context` and no identity on file |
|
|
70
|
-
|
|
71
|
-
## Worked example
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npx @reticlehq/server identify --context open_source --email maintainer@example.com
|
|
75
|
-
npx @reticlehq/server identify --forget
|
|
76
|
-
```
|
package/docs/cli/kill.mdx
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: reticle kill
|
|
3
|
-
description: Free the bridge port by killing its listener, without touching the agent's own MCP proxy.
|
|
4
|
-
icon: skull
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`reticle kill` frees the bridge port. It asks **who is listening** on the port and signals that one process, which is the whole difference between this command and the shell pipeline everybody reaches for.
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx @reticlehq/server kill [--port N] [--force]
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
<Warning>
|
|
14
|
-
Never free the port with `lsof -ti tcp:4400 | xargs kill -9`. `reticle mcp` holds a **client**
|
|
15
|
-
socket on that port, so `-ti` lists the proxy right beside the daemon and the pipeline kills both.
|
|
16
|
-
When the proxy dies, the agent's next tool calls get no reply at all: not an error, not a timeout.
|
|
17
|
-
Nothing is written to the proxy log either, because the process that writes it is the one that
|
|
18
|
-
died. That is the mechanism behind most "my MCP disconnected" reports.
|
|
19
|
-
</Warning>
|
|
20
|
-
|
|
21
|
-
## Flags
|
|
22
|
-
|
|
23
|
-
| Flag | Type | Default | What it does |
|
|
24
|
-
| --- | --- | --- | --- |
|
|
25
|
-
| `--port N` | number | `4400` (or `RETICLE_PORT`, or the port in `.reticle.json`) | Which port to free |
|
|
26
|
-
| `--force` | boolean | `false` | Kill the listener even when it is not a Reticle daemon |
|
|
27
|
-
|
|
28
|
-
## kill or stop?
|
|
29
|
-
|
|
30
|
-
They target different things, and the distinction matters exactly when you are stuck.
|
|
31
|
-
|
|
32
|
-
| | `reticle stop` | `reticle kill` |
|
|
33
|
-
| --- | --- | --- |
|
|
34
|
-
| Finds the process by | the pid recorded in Reticle's own state | the **listener** on the port |
|
|
35
|
-
| Works when the pid file is stale or was never written | no | yes |
|
|
36
|
-
| Works on a daemon from another checkout | no | yes |
|
|
37
|
-
| Works without `lsof` (Windows, slim containers) | yes | yes, falling back to the recorded pid and saying so |
|
|
38
|
-
|
|
39
|
-
Reach for `stop` in a script that shuts down a daemon it started. Reach for `kill` when the port is held and you want it back.
|
|
40
|
-
|
|
41
|
-
## How it decides
|
|
42
|
-
|
|
43
|
-
1. Look up the listener with `lsof -nP -iTCP:<port> -sTCP:LISTEN`. Client sockets are excluded by construction, so the proxy is never a candidate.
|
|
44
|
-
2. It is Reticle's if it answers `/status`, **or** if it is the pid Reticle recorded for the port. `/status` outranks the pid file, so a daemon started from another checkout is still recognised as ours.
|
|
45
|
-
3. Anything else is refused, by name, unless `--force`.
|
|
46
|
-
4. `SIGTERM`, then `SIGKILL` after 5 seconds, then report that it survived and exit `1`.
|
|
47
|
-
|
|
48
|
-
## What it prints
|
|
49
|
-
|
|
50
|
-
Real captures, taken against a daemon started on a scratch port. The long `note` and `reason` strings are trimmed at the ellipsis. Measured exit codes: `0` for killed and nothing-to-do, `1` for refused.
|
|
51
|
-
|
|
52
|
-
Killed:
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
{"t":"2026-08-15T18:43:43.590Z","event":"reticle_killed","port":4499,"pid":78621,"escalated":false,"listenerIdentified":true,"note":"only the listener was signalled. Any `reticle mcp` proxy on this port holds a client connection, not the port, and was left alone ..."}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Refused, because the listener is not ours. This one was captured with `python3 -m http.server 4498` holding the port:
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
{"t":"2026-08-15T18:43:57.128Z","event":"reticle_kill_refused","port":4498,"reason":"pid 78795 (\"Python\") is listening, and it is not a Reticle daemon ... it never answered /status and it is not the pid Reticle recorded. Killing it would be killing someone else's process. Run it again with --force if that is what you meant, or start Reticle on another port.","holder":"Python"}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Nothing to free:
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
{"t":"2026-08-15T18:43:43.784Z","event":"reticle_kill_nothing_to_do","port":4499,"presence":"free"}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
| Event | When |
|
|
71
|
-
| --- | --- |
|
|
72
|
-
| `reticle_killed` | The listener is gone. `escalated: true` means it took a `SIGKILL`; `forced: true` means `--force` overrode a refusal |
|
|
73
|
-
| `reticle_kill_refused` | The listener is not a Reticle daemon and `--force` was not given. Exits `1` |
|
|
74
|
-
| `reticle_kill_survived` | It survived `SIGKILL`. The port is still held. Exits `1` |
|
|
75
|
-
| `reticle_kill_nothing_to_do` | No listener, and no live recorded pid |
|
|
76
|
-
|
|
77
|
-
`listenerIdentified: false` means `lsof` could not run and the pid came from Reticle's records rather than from an observed listener. Those are different claims, so the field says which one you got.
|
|
78
|
-
|
|
79
|
-
## Exit codes
|
|
80
|
-
|
|
81
|
-
| Code | Meaning |
|
|
82
|
-
| ---- | ------------------------------------------------------------------ |
|
|
83
|
-
| `0` | The port is free |
|
|
84
|
-
| `1` | The port is still held: refused, or the process survived `SIGKILL` |
|
|
85
|
-
|
|
86
|
-
## Worked example
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
npx @reticlehq/server kill # free 4400
|
|
90
|
-
npx @reticlehq/server status # confirm
|
|
91
|
-
```
|