@reticlehq/server 3.6.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/SKILL.md +122 -123
- 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 +18 -2
- package/dist/command/cli/adhoc-verdict.js +70 -6
- 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/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 +28 -105
- 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 +34 -4
- package/dist/command/cli/cli-verify.js +81 -12
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +145 -333
- 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 +15 -1
- package/dist/command/cli/cloud-login.js +67 -13
- 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/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/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 +11 -2
- 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.js +1 -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 +29 -8
- 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 -178
- 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 +14 -0
- package/dist/command/cli.js +103 -83
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +9 -1
- package/dist/command/daemon/daemon-resolve.js +49 -10
- 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/dev-server-log-cap.js +2 -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 +10 -1
- package/dist/command/setup/init/init-port.js +22 -2
- package/dist/command/setup/init/init-runtime.d.ts +12 -2
- package/dist/command/setup/init/init-runtime.js +96 -37
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +36 -8
- 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 +1 -1
- package/dist/command/setup/run-setup.d.ts +29 -9
- package/dist/command/setup/run-setup.js +34 -28
- package/dist/command/setup/setup-command.d.ts +23 -0
- package/dist/command/setup/setup-command.js +57 -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 +38 -2
- package/dist/features/crawl/crawl.js +14 -1
- package/dist/features/exhaust/ledger.d.ts +14 -14
- package/dist/features/harness/drive-report.d.ts +39 -5
- package/dist/features/harness/drive-report.js +271 -54
- 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 +1 -1
- package/dist/features/harness/drivers.js +1 -1
- 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/goals.d.ts +68 -7
- package/dist/features/harness/goals.js +289 -36
- package/dist/features/harness/harness.d.ts +30 -1
- package/dist/features/harness/harness.js +141 -7
- package/dist/features/harness/platform/local-apps.d.ts +36 -3
- package/dist/features/harness/platform/local-apps.js +81 -5
- 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 +8 -2
- package/dist/features/harness/platform/remote-drive.js +22 -9
- package/dist/features/harness/platform/script.d.ts +57 -11
- package/dist/features/harness/platform/script.js +144 -12
- package/dist/features/harness/platform/server-driver.d.ts +17 -4
- package/dist/features/harness/platform/server-driver.js +29 -26
- package/dist/features/harness/platform-config.d.ts +38 -5
- package/dist/features/harness/platform-config.js +93 -8
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/script-run.d.ts +30 -1
- package/dist/features/harness/script/script-run.js +355 -48
- 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.js +22 -14
- 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 +21 -2
- package/dist/hooks/driven-by.js +42 -2
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +26 -183
- 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 +20 -4
- 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.js +25 -9
- package/dist/judgement/runs/artifact/run-store.d.ts +13 -1
- package/dist/judgement/runs/artifact/run-store.js +175 -8
- 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 +53 -5
- package/dist/judgement/runs/drive-run.js +234 -20
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +5 -2
- 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 +2 -0
- package/dist/judgement/runs/verification-sync.js +36 -15
- package/dist/language/flows/decision.js +2 -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 +7 -2
- package/dist/language/flows/flow-anchor.js +10 -3
- 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 +37 -3
- package/dist/language/flows/flow-replay-run.js +16 -18
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +18 -1
- package/dist/language/flows/flow-replay.js +22 -7
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-step-runners.d.ts +2 -0
- package/dist/language/flows/flow-step-runners.js +12 -6
- package/dist/language/flows/flow-store-for-session.js +5 -1
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +61 -62
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +69 -10
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +29 -1
- package/dist/language/flows/recording/tape/recordings.js +60 -10
- package/dist/language/flows/replay.js +29 -6
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +200 -193
- package/dist/memory/cloud/cloud-config.d.ts +10 -1
- package/dist/memory/cloud/cloud-config.js +19 -5
- package/dist/memory/cloud/cloud-sync.js +3 -3
- package/dist/memory/cloud/harness-config.d.ts +49 -0
- package/dist/memory/cloud/harness-config.js +16 -20
- package/dist/memory/cloud/memory-scope.d.ts +17 -0
- package/dist/memory/cloud/memory-scope.js +22 -0
- package/dist/memory/cloud/sync-cycle.d.ts +32 -4
- package/dist/memory/cloud/sync-cycle.js +113 -12
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +114 -4
- package/dist/memory/cloud/sync-disk.js +26 -2
- 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 +16 -1
- package/dist/memory/impact/account-watch.js +26 -1
- package/dist/memory/impact/impact-store.d.ts +1 -4
- package/dist/memory/impact/impact-store.js +32 -42
- 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 +12 -0
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +42 -2
- 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/journal-recorder.js +46 -3
- package/dist/memory/journal/on-disk/retention.d.ts +5 -0
- package/dist/memory/journal/on-disk/retention.js +27 -2
- package/dist/memory/journal/on-disk/workspace-tiers.js +2 -0
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +38 -7
- package/dist/memory/project/artifact-root-resolver.js +33 -5
- package/dist/memory/project/artifact-root.d.ts +4 -3
- package/dist/memory/project/artifact-root.js +2 -2
- package/dist/memory/project/dir/reticle-dir.d.ts +14 -0
- package/dist/memory/project/dir/reticle-dir.js +23 -2
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- 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 +2 -0
- package/dist/memory/project/session-root.js +9 -1
- package/dist/memory/project/sync-status.d.ts +46 -0
- package/dist/memory/project/sync-status.js +135 -1
- package/dist/memory/recall/memory-tools.js +46 -3
- 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.js +36 -8
- package/dist/portal/bridge/bridge.d.ts +9 -5
- package/dist/portal/bridge/bridge.js +66 -23
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -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 +2 -0
- package/dist/portal/input/real-input.js +13 -10
- package/dist/portal/pool/browser-pool.d.ts +48 -0
- package/dist/portal/pool/browser-pool.js +120 -2
- 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 +27 -5
- package/dist/portal/pool/playwright-launcher.js +59 -14
- package/dist/portal/pool/pool-contract.d.ts +21 -1
- 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.js +6 -1
- 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 +9 -0
- package/dist/portal/session/dev-server/dev-command.js +27 -1
- 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/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/live-control-tools.js +82 -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 +1 -1
- package/dist/portal/session/no-session-diagnosis.js +31 -9
- package/dist/portal/session/no-session-next-action.d.ts +20 -0
- package/dist/portal/session/no-session-next-action.js +134 -61
- package/dist/portal/session/no-session-watch.js +179 -22
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/session-health.d.ts +11 -0
- package/dist/portal/session/session-health.js +3 -1
- package/dist/portal/session/session-info.js +2 -1
- package/dist/portal/session/session-manager.d.ts +18 -0
- package/dist/portal/session/session-manager.js +54 -3
- package/dist/portal/session/session-successor.d.ts +8 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session.d.ts +15 -28
- package/dist/portal/session/session.js +60 -61
- 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 +7 -1
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +13 -1
- package/dist/status-payload.js +13 -1
- package/dist/surface/http-server.js +7 -1
- 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 +4 -0
- package/dist/surface/mcp/mcp-proxy.js +29 -8
- package/dist/surface/mcp/mcp.d.ts +23 -0
- package/dist/surface/mcp/mcp.js +34 -4
- 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.js +22 -14
- package/dist/surface/mcp/shared-params.js +1 -1
- 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/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-sequence-tool.js +136 -27
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +48 -34
- 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.js +25 -15
- package/dist/surface/tools/browser-tools.js +43 -1
- package/dist/surface/tools/chat-drives.d.ts +75 -0
- package/dist/surface/tools/chat-drives.js +265 -21
- 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 +10 -0
- package/dist/surface/tools/empty-session-list.js +45 -5
- package/dist/surface/tools/error-recovery.d.ts +8 -0
- package/dist/surface/tools/error-recovery.js +69 -5
- package/dist/surface/tools/explore-tools.d.ts +23 -2
- package/dist/surface/tools/explore-tools.js +377 -74
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +4 -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 +52 -73
- package/dist/surface/tools/harness-explore.js +177 -146
- 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 +5 -0
- package/dist/surface/tools/harness-plan.js +7 -0
- package/dist/surface/tools/harness-script.d.ts +22 -0
- package/dist/surface/tools/harness-script.js +256 -38
- 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 +8 -0
- package/dist/surface/tools/harness-toolset.js +27 -4
- 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 +220 -93
- 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 +20 -0
- package/dist/surface/tools/lease-seed.js +45 -1
- package/dist/surface/tools/lease-tools.d.ts +10 -1
- package/dist/surface/tools/lease-tools.js +119 -69
- package/dist/surface/tools/live-call-text.js +2 -2
- 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 +11 -1
- package/dist/surface/tools/next-step.js +73 -18
- package/dist/surface/tools/observe-tools.js +43 -5
- package/dist/surface/tools/platform-moment.d.ts +60 -0
- package/dist/surface/tools/platform-moment.js +132 -4
- package/dist/surface/tools/read-tools.js +65 -14
- 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 +68 -2
- package/dist/surface/tools/tool-kit.js +73 -1
- package/dist/surface/tools/tools.js +25 -13
- 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 +27 -6
- package/dist/telemetry/hud-metrics.js +99 -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 +26 -2
- package/dist/telemetry/telemetry.js +102 -21
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +12 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +16 -5
- package/docs/README.md +2 -2
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +24 -27
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +13 -12
- 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 +8 -3
- package/docs/cli/drive.mdx +12 -12
- 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 +32 -15
- 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 +13 -4
- 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 +3 -2
- package/docs/cli.mdx +110 -41
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +5 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +5 -2
- 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 +66 -64
- package/docs/human-control.md +15 -14
- package/docs/index.mdx +15 -43
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +22 -12
- 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 +8 -8
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +11 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +58 -29
- 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 +22 -24
- 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 +13 -4
- 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 +51 -45
- 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 +7 -5
- package/docs/what-is-reticle.mdx +2 -2
- package/docs/why-reticle.mdx +1 -1
- package/package.json +6 -5
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -249
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- 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/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
|
@@ -16,6 +16,7 @@ import { ProjectSize, ReticleDir } from '@reticlehq/core';
|
|
|
16
16
|
import { gitFacts } from './git-facts.js';
|
|
17
17
|
import { detectStack } from './feedback-context.js';
|
|
18
18
|
import { readProjectId } from '../command/cli/ports/resolve/cli-port.js';
|
|
19
|
+
import { DRIVE_RECORD_SUFFIX } from '../memory/project/dir/reticle-dir.js';
|
|
19
20
|
/**
|
|
20
21
|
* The feature FAMILIES, and the on-disk evidence that a project has adopted each. Named rather than
|
|
21
22
|
* counted so the vocabulary stays stable as tools are added, renamed, or merged into action-dispatched
|
|
@@ -134,9 +135,9 @@ const defaultReadDir = (dir) => {
|
|
|
134
135
|
};
|
|
135
136
|
const defaultRead = (path) => readFileSync(path, 'utf8');
|
|
136
137
|
/** How many entries a `.reticle` subdirectory holds, matching an optional extension. 0 when absent. */
|
|
137
|
-
function countIn(reticleRoot, subdir, extension) {
|
|
138
|
+
function countIn(reticleRoot, subdir, extension, except) {
|
|
138
139
|
try {
|
|
139
|
-
const names = readdirSync(join(reticleRoot, subdir));
|
|
140
|
+
const names = readdirSync(join(reticleRoot, subdir)).filter((n) => except === undefined || !n.endsWith(except));
|
|
140
141
|
return extension === undefined ? names.length : names.filter((n) => extension.test(n)).length;
|
|
141
142
|
}
|
|
142
143
|
catch {
|
|
@@ -158,7 +159,8 @@ export function profileProject(cwd, now, install) {
|
|
|
158
159
|
const baselineCount = countIn(reticleRoot, ReticleDir.BASELINES_SUBDIR);
|
|
159
160
|
// `.diff.png` files are diff OUTPUT, not baselines — counting them would double every visual user.
|
|
160
161
|
const visualBaselineCount = countIn(reticleRoot, ReticleDir.VISUAL_SUBDIR, /(?<!\.diff)\.png$/);
|
|
161
|
-
|
|
162
|
+
// A drive's own record sits beside its run and is not one.
|
|
163
|
+
const runCount = countIn(reticleRoot, ReticleDir.RUNS_SUBDIR, /\.json$/, DRIVE_RECORD_SUFFIX);
|
|
162
164
|
const capsuleCount = countIn(reticleRoot, ReticleDir.CAPSULES_SUBDIR, /\.json$/);
|
|
163
165
|
const hasContract = exists(join(reticleRoot, ReticleDir.CONTRACT_FILE));
|
|
164
166
|
const hasHistory = exists(join(reticleRoot, ReticleDir.PROJECT_FILE));
|
|
@@ -16,6 +16,9 @@ export async function flushProxySessionMetrics(telemetry = getTelemetry(), metri
|
|
|
16
16
|
if (metrics.empty)
|
|
17
17
|
return;
|
|
18
18
|
await telemetry.emit(TelemetryEventKind.SESSION_PROGRESS, {
|
|
19
|
-
|
|
19
|
+
// A window, not the final roll-up: this rides `session_progress`, which every query sums, and a
|
|
20
|
+
// final summary would also resolve calls and stamp an end reason for a process that is not the
|
|
21
|
+
// daemon whose session this is.
|
|
22
|
+
session: metrics.summarize(false),
|
|
20
23
|
});
|
|
21
24
|
}
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
* URLs, no error messages — the accumulator has no way to hold them, which is a stronger guarantee
|
|
16
16
|
* than a rule saying it shouldn't.
|
|
17
17
|
*/
|
|
18
|
-
import { BrowserLaunchKind, type ConnectFailure, type SessionSummary } from '@reticlehq/core/telemetry';
|
|
18
|
+
import { BrowserLaunchKind, type AgentNudgeKind, type ConnectFailure, type SessionSummary } from '@reticlehq/core/telemetry';
|
|
19
19
|
import type { HudUseData } from '@reticlehq/core';
|
|
20
|
+
import { type HudSignals } from './hud-metrics.js';
|
|
20
21
|
/**
|
|
21
22
|
* Mutable counters for one daemon lifetime. A plain class, not a store: it is process-local, it never
|
|
22
23
|
* persists, and it dies with the daemon.
|
|
@@ -25,8 +26,12 @@ export declare class SessionMetrics {
|
|
|
25
26
|
#private;
|
|
26
27
|
/** Clock injected — this file must stay testable without a real one, per the repo's clock rule. */
|
|
27
28
|
constructor(now: () => number);
|
|
28
|
-
/** A person used the HUD. Names only; the wire schema has already narrowed it. */
|
|
29
|
-
recordHudUse(use: HudUseData):
|
|
29
|
+
/** A person used the HUD on one tab. Names only; the wire schema has already narrowed it. */
|
|
30
|
+
recordHudUse(use: HudUseData, tab?: string): HudSignals;
|
|
31
|
+
/** A tab went into the background (true) or came back (false): its HUD time pauses meanwhile. */
|
|
32
|
+
setHudTabHidden(tab: string, hidden: boolean): void;
|
|
33
|
+
/** A tab went away: its HUD stops accruing time. */
|
|
34
|
+
closeHudTab(tab: string): void;
|
|
30
35
|
/**
|
|
31
36
|
* Record a call starting. Returns a function to call when it finishes — that closure is what makes
|
|
32
37
|
* timing correct under CONCURRENCY: several agents can be inside `runTool` at once, so a single
|
|
@@ -114,6 +119,8 @@ export declare class SessionMetrics {
|
|
|
114
119
|
* only lets a reader separate "how many distinct defects" from "how often they were hit", which
|
|
115
120
|
* are different claims and were previously indistinguishable in the data.
|
|
116
121
|
*/
|
|
122
|
+
/** The 1-based occurrence of this finding in the session, or undefined past the cap. */
|
|
123
|
+
recordBugOccurrence(fingerprint: string): number | undefined;
|
|
117
124
|
recordBug(kind: string): boolean;
|
|
118
125
|
/**
|
|
119
126
|
* One connection ATTEMPT. Call before the attempt; settle it with the outcome.
|
|
@@ -137,6 +144,10 @@ export declare class SessionMetrics {
|
|
|
137
144
|
get currentRun(): number;
|
|
138
145
|
/** Reticle invited the agent to send feedback. The denominator for feedback_submitted. */
|
|
139
146
|
recordFeedbackPrompt(): void;
|
|
147
|
+
/** An agent was shown a platform or Harness advisory. */
|
|
148
|
+
recordNudge(kind: AgentNudgeKind): void;
|
|
149
|
+
/** A Harness drive was refused because the app's coverage is below the gate. */
|
|
150
|
+
recordHarnessRefused(percent: number): void;
|
|
140
151
|
/** Which tool surface was advertised to agents this session. */
|
|
141
152
|
recordSurface(surface: string): void;
|
|
142
153
|
/**
|
|
@@ -166,6 +177,6 @@ export declare const recordSdkFailure: (failure: {
|
|
|
166
177
|
message: string;
|
|
167
178
|
}) => void;
|
|
168
179
|
/** Narrow-and-record one HUD use. Keeps the session hot path to a single call. */
|
|
169
|
-
export declare const recordHudUse: (use: HudUseData) =>
|
|
180
|
+
export declare const recordHudUse: (use: HudUseData, tab?: string) => HudSignals;
|
|
170
181
|
/** Tests only — drop the singleton so each case starts from zero. */
|
|
171
182
|
export declare const resetSessionMetrics: () => void;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* URLs, no error messages — the accumulator has no way to hold them, which is a stronger guarantee
|
|
16
16
|
* than a rule saying it shouldn't.
|
|
17
17
|
*/
|
|
18
|
-
import { BrowserLaunchKind, } from '@reticlehq/core/telemetry';
|
|
18
|
+
import { BrowserLaunchKind, coverageBucketOf, } from '@reticlehq/core/telemetry';
|
|
19
19
|
import { errorSkeleton, fingerprintError } from './error-fingerprint.js';
|
|
20
20
|
import { describeToolParams } from './argument-shape.js';
|
|
21
21
|
import { machineSnapshot } from './machine-snapshot.js';
|
|
@@ -34,6 +34,8 @@ const MAX_REPEAT_TOOLS = 64;
|
|
|
34
34
|
* not tell which one, and the outcome is identical.
|
|
35
35
|
*/
|
|
36
36
|
const NO_SESSION_ERROR = /no browser session connected|no connected session with id|multiple sessions connected/i;
|
|
37
|
+
/** Distinct findings a session numbers occurrences for. A real session finds far fewer. */
|
|
38
|
+
const MAX_BUG_FINGERPRINTS = 500;
|
|
37
39
|
/** Cap distinct MCP clients recorded; more than a handful on one daemon is already the story. */
|
|
38
40
|
const MAX_CLIENTS = 8;
|
|
39
41
|
/** Bounds on the parameter map. Our own schemas are already finite; these are a belt-and-braces cap. */
|
|
@@ -64,19 +66,12 @@ export class SessionMetrics {
|
|
|
64
66
|
#toolErrors = 0;
|
|
65
67
|
#verifications = 0;
|
|
66
68
|
/**
|
|
67
|
-
* Session-LIFETIME totals
|
|
68
|
-
*
|
|
69
|
-
* `
|
|
70
|
-
*
|
|
71
|
-
* promises "the whole session in a single event" — reports a long session containing zero tool
|
|
72
|
-
* calls, because it carries only the residue since the last flush, and anyone computing "did this
|
|
73
|
-
* session use Reticle" off the event named for the end of the session reads `no`.
|
|
74
|
-
*
|
|
75
|
-
* Window semantics are unchanged: `session_progress` still reports its own window, so nothing that
|
|
76
|
-
* already sums those events double-counts. Only `final: true` swaps in the lifetime numbers.
|
|
69
|
+
* Session-LIFETIME totals, never reset by a flush. The final summary carries them as
|
|
70
|
+
* `lifetime*` fields BESIDE its windowed counters, never in place of them: a final event whose
|
|
71
|
+
* `toolCalls` was the lifetime made every query summing a session's events count each flushed
|
|
72
|
+
* window twice.
|
|
77
73
|
*/
|
|
78
74
|
#lifetimeToolCalls = 0;
|
|
79
|
-
#lifetimeToolErrors = 0;
|
|
80
75
|
#lifetimeVerifications = 0;
|
|
81
76
|
#lifetimeBugsFound = 0;
|
|
82
77
|
#toolCounts = new Map();
|
|
@@ -95,11 +90,10 @@ export class SessionMetrics {
|
|
|
95
90
|
#peakConcurrent = 0;
|
|
96
91
|
#unknownToolCalls = 0;
|
|
97
92
|
/**
|
|
98
|
-
* Names the agent guessed at,
|
|
99
|
-
*
|
|
93
|
+
* Names the agent guessed at, this window. Reported in the window the guess was made; a lifetime
|
|
94
|
+
* map here restated every early guess on each later flush, which a sum over windows counts again.
|
|
100
95
|
*/
|
|
101
96
|
#unknownTools = new Map();
|
|
102
|
-
#lifetimeUnknownToolCalls = 0;
|
|
103
97
|
#bugsFound = 0;
|
|
104
98
|
#browserMs = 0;
|
|
105
99
|
#browserCommands = 0;
|
|
@@ -113,6 +107,11 @@ export class SessionMetrics {
|
|
|
113
107
|
* capped: the kind vocabulary is a bounded enum plus oracle names, not user data.
|
|
114
108
|
*/
|
|
115
109
|
#seenBugKinds = new Set();
|
|
110
|
+
/**
|
|
111
|
+
* Occurrences per finding fingerprint, session-lifetime like `#seenBugKinds`, so two hits of one
|
|
112
|
+
* defect are never byte-identical rows. Capped; past the cap a new fingerprint gets no index.
|
|
113
|
+
*/
|
|
114
|
+
#bugOccurrences = new Map();
|
|
116
115
|
/**
|
|
117
116
|
* Tool errors meaning "the agent could not reach an app at all" — counted as a field of its own
|
|
118
117
|
* because the alternative is unpacking `errors[]` in HogQL.
|
|
@@ -120,10 +119,8 @@ export class SessionMetrics {
|
|
|
120
119
|
#noSessionErrors = 0;
|
|
121
120
|
/** Connection-level MCP POST failures the SSE stream cannot see. See SessionSummary. */
|
|
122
121
|
#postSocketFailures = 0;
|
|
123
|
-
#lifetimePostSocketFailures = 0;
|
|
124
122
|
/** Retries of those POSTs that then delivered. */
|
|
125
123
|
#postRetriesSaved = 0;
|
|
126
|
-
#lifetimePostRetriesSaved = 0;
|
|
127
124
|
/** Longest back-to-back run per tool — a retry loop, which `toolCounts` cannot distinguish. */
|
|
128
125
|
#repeatRuns = new Map();
|
|
129
126
|
#lastTool;
|
|
@@ -143,7 +140,11 @@ export class SessionMetrics {
|
|
|
143
140
|
#clientLeft = false;
|
|
144
141
|
/** Feedback invitations shown, session-lifetime — the denominator for feedback_submitted. */
|
|
145
142
|
#feedbackPrompted = 0;
|
|
146
|
-
/**
|
|
143
|
+
/** Platform and Harness advisories shown to an agent this window, by kind. */
|
|
144
|
+
#nudges = new Map();
|
|
145
|
+
/** Harness drives refused for coverage this window, by coverage bucket. */
|
|
146
|
+
#harnessRefused = new Map();
|
|
147
|
+
/** Error buckets by whose defect, this window. */
|
|
147
148
|
#errorClasses = new Map();
|
|
148
149
|
/**
|
|
149
150
|
* The recovery hinge. A call's outcome is only known once the NEXT one starts, so the verdict for
|
|
@@ -173,9 +174,20 @@ export class SessionMetrics {
|
|
|
173
174
|
this.#startedAt = now();
|
|
174
175
|
this.#hud = new HudMetrics(now);
|
|
175
176
|
}
|
|
176
|
-
/** A person used the HUD. Names only; the wire schema has already narrowed it. */
|
|
177
|
-
recordHudUse(use) {
|
|
178
|
-
this.#hud.record(use);
|
|
177
|
+
/** A person used the HUD on one tab. Names only; the wire schema has already narrowed it. */
|
|
178
|
+
recordHudUse(use, tab) {
|
|
179
|
+
return this.#hud.record(use, tab);
|
|
180
|
+
}
|
|
181
|
+
/** A tab went into the background (true) or came back (false): its HUD time pauses meanwhile. */
|
|
182
|
+
setHudTabHidden(tab, hidden) {
|
|
183
|
+
if (hidden)
|
|
184
|
+
this.#hud.hide(tab);
|
|
185
|
+
else
|
|
186
|
+
this.#hud.show(tab);
|
|
187
|
+
}
|
|
188
|
+
/** A tab went away: its HUD stops accruing time. */
|
|
189
|
+
closeHudTab(tab) {
|
|
190
|
+
this.#hud.close(tab);
|
|
179
191
|
}
|
|
180
192
|
/**
|
|
181
193
|
* Record a call starting. Returns a function to call when it finishes — that closure is what makes
|
|
@@ -224,7 +236,6 @@ export class SessionMetrics {
|
|
|
224
236
|
*/
|
|
225
237
|
recordUnknownTool(name) {
|
|
226
238
|
this.#unknownToolCalls += 1;
|
|
227
|
-
this.#lifetimeUnknownToolCalls += 1;
|
|
228
239
|
if (name === undefined || 0 === name.length)
|
|
229
240
|
return;
|
|
230
241
|
const key = name.slice(0, 64);
|
|
@@ -285,7 +296,6 @@ export class SessionMetrics {
|
|
|
285
296
|
*/
|
|
286
297
|
recordToolError(message, tool) {
|
|
287
298
|
this.#toolErrors += 1;
|
|
288
|
-
this.#lifetimeToolErrors += 1;
|
|
289
299
|
// Whose defect. Only the `schema` bucket is fixable by writing better descriptions, and it was
|
|
290
300
|
// indistinguishable from the rest inside one `toolErrors` count.
|
|
291
301
|
bump(this.#errorClasses, classifyError(message));
|
|
@@ -340,7 +350,6 @@ export class SessionMetrics {
|
|
|
340
350
|
*/
|
|
341
351
|
recordPostSocketFailure() {
|
|
342
352
|
this.#postSocketFailures += 1;
|
|
343
|
-
this.#lifetimePostSocketFailures += 1;
|
|
344
353
|
}
|
|
345
354
|
/**
|
|
346
355
|
* A bounded retry of an unsent POST then delivered. The pair against `recordPostSocketFailure`:
|
|
@@ -348,7 +357,6 @@ export class SessionMetrics {
|
|
|
348
357
|
*/
|
|
349
358
|
recordPostRetrySaved() {
|
|
350
359
|
this.#postRetriesSaved += 1;
|
|
351
|
-
this.#lifetimePostRetriesSaved += 1;
|
|
352
360
|
}
|
|
353
361
|
/** The agent's recent approach run + the call in flight — context for a crash report. */
|
|
354
362
|
get trail() {
|
|
@@ -406,6 +414,15 @@ export class SessionMetrics {
|
|
|
406
414
|
* only lets a reader separate "how many distinct defects" from "how often they were hit", which
|
|
407
415
|
* are different claims and were previously indistinguishable in the data.
|
|
408
416
|
*/
|
|
417
|
+
/** The 1-based occurrence of this finding in the session, or undefined past the cap. */
|
|
418
|
+
recordBugOccurrence(fingerprint) {
|
|
419
|
+
const seen = this.#bugOccurrences.get(fingerprint);
|
|
420
|
+
if (seen === undefined && this.#bugOccurrences.size >= MAX_BUG_FINGERPRINTS)
|
|
421
|
+
return undefined;
|
|
422
|
+
const occurrence = (seen ?? 0) + 1;
|
|
423
|
+
this.#bugOccurrences.set(fingerprint, occurrence);
|
|
424
|
+
return occurrence;
|
|
425
|
+
}
|
|
409
426
|
recordBug(kind) {
|
|
410
427
|
this.#bugsFound += 1;
|
|
411
428
|
this.#lifetimeBugsFound += 1;
|
|
@@ -468,6 +485,14 @@ export class SessionMetrics {
|
|
|
468
485
|
recordFeedbackPrompt() {
|
|
469
486
|
this.#feedbackPrompted += 1;
|
|
470
487
|
}
|
|
488
|
+
/** An agent was shown a platform or Harness advisory. */
|
|
489
|
+
recordNudge(kind) {
|
|
490
|
+
bump(this.#nudges, kind);
|
|
491
|
+
}
|
|
492
|
+
/** A Harness drive was refused because the app's coverage is below the gate. */
|
|
493
|
+
recordHarnessRefused(percent) {
|
|
494
|
+
bump(this.#harnessRefused, coverageBucketOf(percent));
|
|
495
|
+
}
|
|
471
496
|
/** Which tool surface was advertised to agents this session. */
|
|
472
497
|
recordSurface(surface) {
|
|
473
498
|
this.#surface = surface.slice(0, 32);
|
|
@@ -482,28 +507,18 @@ export class SessionMetrics {
|
|
|
482
507
|
if (final)
|
|
483
508
|
this.#resolveRecovery();
|
|
484
509
|
const machine = machineSnapshot();
|
|
485
|
-
//
|
|
486
|
-
//
|
|
487
|
-
//
|
|
488
|
-
//
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
postRetriesSaved: this.#lifetimePostRetriesSaved,
|
|
498
|
-
}
|
|
499
|
-
: {
|
|
500
|
-
toolCalls: this.#toolCalls,
|
|
501
|
-
toolErrors: this.#toolErrors,
|
|
502
|
-
verifications: this.#verifications,
|
|
503
|
-
bugsFound: this.#bugsFound,
|
|
504
|
-
postSocketFailures: this.#postSocketFailures,
|
|
505
|
-
postRetriesSaved: this.#postRetriesSaved,
|
|
506
|
-
};
|
|
510
|
+
// EVERY event reports its own window, the final one included: summing a session's
|
|
511
|
+
// `session_progress` + `daemon_stopped` rows is then its total. The final event used to swap in
|
|
512
|
+
// the lifetime numbers, so every flushed window was counted twice by exactly that sum. The
|
|
513
|
+
// session totals ride beside them under their own names, on the final event only.
|
|
514
|
+
const scalars = {
|
|
515
|
+
toolCalls: this.#toolCalls,
|
|
516
|
+
toolErrors: this.#toolErrors,
|
|
517
|
+
verifications: this.#verifications,
|
|
518
|
+
bugsFound: this.#bugsFound,
|
|
519
|
+
postSocketFailures: this.#postSocketFailures,
|
|
520
|
+
postRetriesSaved: this.#postRetriesSaved,
|
|
521
|
+
};
|
|
507
522
|
return {
|
|
508
523
|
durationMs: Math.max(0, this.#now() - this.#startedAt),
|
|
509
524
|
toolCalls: scalars.toolCalls,
|
|
@@ -534,7 +549,7 @@ export class SessionMetrics {
|
|
|
534
549
|
browserMs: this.#browserMs,
|
|
535
550
|
browserCommands: this.#browserCommands,
|
|
536
551
|
peakConcurrentTools: this.#peakConcurrent,
|
|
537
|
-
unknownToolCalls:
|
|
552
|
+
unknownToolCalls: this.#unknownToolCalls,
|
|
538
553
|
...(this.#unknownTools.size > 0
|
|
539
554
|
? { unknownTools: Object.fromEntries(this.#unknownTools) }
|
|
540
555
|
: {}),
|
|
@@ -549,8 +564,19 @@ export class SessionMetrics {
|
|
|
549
564
|
// verification number in this payload is windowed and a reader who summed the wrong one got a
|
|
550
565
|
// different question's answer. `false` is sent, not omitted: a session that drove an app and
|
|
551
566
|
// never asked whether it worked is the whole finding.
|
|
552
|
-
...(final
|
|
567
|
+
...(final
|
|
568
|
+
? {
|
|
569
|
+
endedWithVerdict: this.#lifetimeVerifications > 0,
|
|
570
|
+
lifetimeToolCalls: this.#lifetimeToolCalls,
|
|
571
|
+
lifetimeVerifications: this.#lifetimeVerifications,
|
|
572
|
+
lifetimeBugsFound: this.#lifetimeBugsFound,
|
|
573
|
+
}
|
|
574
|
+
: {}),
|
|
553
575
|
...(this.#feedbackPrompted > 0 ? { feedbackPrompted: this.#feedbackPrompted } : {}),
|
|
576
|
+
...(this.#nudges.size > 0 ? { nudgesShown: Object.fromEntries(this.#nudges) } : {}),
|
|
577
|
+
...(this.#harnessRefused.size > 0
|
|
578
|
+
? { harnessRefusedCoverage: Object.fromEntries(this.#harnessRefused) }
|
|
579
|
+
: {}),
|
|
554
580
|
...(this.#errorClasses.size > 0
|
|
555
581
|
? { errorClasses: Object.fromEntries(this.#errorClasses) }
|
|
556
582
|
: {}),
|
|
@@ -622,6 +648,8 @@ export class SessionMetrics {
|
|
|
622
648
|
0 === this.#sdkFailures &&
|
|
623
649
|
0 === this.#postSocketFailures &&
|
|
624
650
|
0 === this.#postRetriesSaved &&
|
|
651
|
+
0 === this.#nudges.size &&
|
|
652
|
+
0 === this.#harnessRefused.size &&
|
|
625
653
|
this.#hud.empty);
|
|
626
654
|
}
|
|
627
655
|
/** Zero the counters after a non-final flush so the next flush reports the NEXT window, not a total. */
|
|
@@ -651,6 +679,16 @@ export class SessionMetrics {
|
|
|
651
679
|
this.#bugsFound = 0;
|
|
652
680
|
this.#bugKinds.clear();
|
|
653
681
|
this.#hud.reset();
|
|
682
|
+
this.#nudges.clear();
|
|
683
|
+
this.#harnessRefused.clear();
|
|
684
|
+
// These five were never cleared, so every flush restated them and a sum over a session's
|
|
685
|
+
// windows came out larger than its tool calls. Counts are windowed, all of them; only the
|
|
686
|
+
// facts below (an app ever connected, which clients, which bug kinds seen) outlive a window.
|
|
687
|
+
this.#errorClasses.clear();
|
|
688
|
+
this.#errorsRecovered = 0;
|
|
689
|
+
this.#errorsRepeated = 0;
|
|
690
|
+
this.#feedbackPrompted = 0;
|
|
691
|
+
this.#unknownTools.clear();
|
|
654
692
|
// #seenBugKinds is deliberately NOT cleared. It is not a window counter — it is the
|
|
655
693
|
// session-lifetime memory behind `repeat` on bug_found, and zeroing it made the same defect,
|
|
656
694
|
// found again after a flush, report as a newly distinct one. Sessions run to 11.5 hours in the
|
|
@@ -676,9 +714,7 @@ export const recordSdkFailure = (failure) => {
|
|
|
676
714
|
getSessionMetrics().recordSdkFailure(failure.site, failure.message);
|
|
677
715
|
};
|
|
678
716
|
/** Narrow-and-record one HUD use. Keeps the session hot path to a single call. */
|
|
679
|
-
export const recordHudUse = (use) =>
|
|
680
|
-
getSessionMetrics().recordHudUse(use);
|
|
681
|
-
};
|
|
717
|
+
export const recordHudUse = (use, tab) => getSessionMetrics().recordHudUse(use, tab);
|
|
682
718
|
/** Tests only — drop the singleton so each case starts from zero. */
|
|
683
719
|
export const resetSessionMetrics = () => {
|
|
684
720
|
current = undefined;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import { TelemetryEventKind, ProjectIdSource, type Crash, type Feedback, type Identity, type BugFound, type InitOutcome, type OnboardingStep, type InstallSource, type McpConnection, type McpOutage, type ToolRefusal, type AppInstrumentation, type ProjectProfile, type SessionSummary, type TelemetryActor, type Verification, type VersionChange } from '@reticlehq/core/telemetry';
|
|
1
|
+
import { TelemetryEventKind, ProjectIdSource, type Crash, type Feedback, type Identity, type BugFound, type InitOutcome, type OnboardingStep, type InstallSource, type McpConnection, type McpOutage, type ToolRefusal, type AppInstrumentation, type HarnessRun, type HudEvent, type PlatformLink, type ProjectProfile, type SessionSummary, type TelemetryActor, type Verification, type VersionChange } from '@reticlehq/core/telemetry';
|
|
2
|
+
/**
|
|
3
|
+
* Presence of this file marks the MACHINE as the Reticle team's own: every event carries
|
|
4
|
+
* `internal: true`. The persistent twin of `RETICLE_INTERNAL=1`, for a dev machine where setting a
|
|
5
|
+
* variable in every shell would be forgotten once and pollute the numbers for good.
|
|
6
|
+
*/
|
|
7
|
+
export declare const INTERNAL_MARKER_FILE = "telemetry-internal";
|
|
2
8
|
/**
|
|
3
9
|
* PostHog's group type for a licensed customer. Sent as `$groups` so PostHog can aggregate a whole
|
|
4
10
|
* organisation natively: per-company retention, "which orgs went quiet", one row per customer rather
|
|
@@ -21,6 +27,7 @@ export declare const POSTHOG_GROUP_ORGANIZATION = "organization";
|
|
|
21
27
|
export declare const resolveIdentity: (file?: string) => {
|
|
22
28
|
anonymousId: string;
|
|
23
29
|
firstRun: boolean;
|
|
30
|
+
ephemeral?: true;
|
|
24
31
|
};
|
|
25
32
|
/**
|
|
26
33
|
* One-way project fingerprint: distinct-count of this = "projects Reticle is used in", reveals nothing.
|
|
@@ -94,6 +101,17 @@ export interface TelemetryExtra {
|
|
|
94
101
|
instrumentation?: AppInstrumentation;
|
|
95
102
|
/** `reticle_installed` / `init_completed`: which published route brought this install in. */
|
|
96
103
|
installSource?: InstallSource;
|
|
104
|
+
/** `hud_viewed` / `hud_signin_prompted`: which HUD page or prompt. */
|
|
105
|
+
hud?: HudEvent;
|
|
106
|
+
/** `platform_linked`: how this project got linked. */
|
|
107
|
+
link?: PlatformLink;
|
|
108
|
+
/** `harness_run`: one phase of one Harness run. */
|
|
109
|
+
harness?: HarnessRun;
|
|
110
|
+
/**
|
|
111
|
+
* `platform_linked`: the workspace just linked. Overrides the envelope's own reading, which looks
|
|
112
|
+
* at the daemon's working directory and not at the project the HUD linked.
|
|
113
|
+
*/
|
|
114
|
+
workspaceId?: string;
|
|
97
115
|
}
|
|
98
116
|
export interface Telemetry {
|
|
99
117
|
/**
|
|
@@ -125,7 +143,13 @@ export declare const createTelemetry: (opts: {
|
|
|
125
143
|
cwd?: string;
|
|
126
144
|
now?: () => number;
|
|
127
145
|
fetchImpl?: typeof fetch;
|
|
128
|
-
|
|
146
|
+
/** The send a `detach: true` emit hands off; `input` is written to the child's stdin. */
|
|
147
|
+
spawnImpl?: (command: string, args: string[], input: string) => void;
|
|
148
|
+
/** The state home (`~/.reticle`). Injected so a test never touches the real one. */
|
|
149
|
+
reticleDir?: string;
|
|
150
|
+
/** Where `~/.reticle/session.json` is looked for. Injected by tests only. */
|
|
151
|
+
home?: string;
|
|
129
152
|
}) => Telemetry;
|
|
153
|
+
export declare const droppedInvalidEvents: () => number;
|
|
130
154
|
export declare const getTelemetry: () => Telemetry;
|
|
131
155
|
export { TelemetryEventKind };
|