@reticlehq/server 2.2.1 → 2.3.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/dist/bridge-security.d.ts +0 -1
- package/dist/bridge-security.js +0 -1
- package/dist/bridge.d.ts +0 -1
- package/dist/bridge.js +60 -10
- package/dist/bridge.test-harness.d.ts +0 -1
- package/dist/bridge.test-harness.js +0 -1
- package/dist/capsule/capsule-store.d.ts +2 -3
- package/dist/capsule/capsule-store.js +0 -1
- package/dist/capsule/capsule.d.ts +0 -1
- package/dist/capsule/capsule.js +0 -1
- package/dist/capsule/causal-summary.d.ts +21 -1
- package/dist/capsule/causal-summary.js +20 -2
- package/dist/capsule/divergence.d.ts +0 -1
- package/dist/capsule/divergence.js +0 -1
- package/dist/capsule/minimize.d.ts +0 -1
- package/dist/capsule/minimize.js +0 -1
- package/dist/capsule/predicate-to-links.d.ts +0 -1
- package/dist/capsule/predicate-to-links.js +0 -1
- package/dist/cli-doctor.d.ts +6 -0
- package/dist/cli-doctor.js +60 -0
- package/dist/cli-flow-commands.d.ts +0 -1
- package/dist/cli-flow-commands.js +0 -1
- package/dist/cli-launch.d.ts +0 -1
- package/dist/cli-launch.js +7 -3
- package/dist/cli-parse.d.ts +34 -2
- package/dist/cli-parse.js +107 -1
- package/dist/cli-port.d.ts +0 -1
- package/dist/cli-port.js +0 -1
- package/dist/cli-verify.d.ts +0 -1
- package/dist/cli-verify.js +1 -2
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +79 -67
- package/dist/cloud/cloud-config.d.ts +0 -1
- package/dist/cloud/cloud-config.js +0 -1
- package/dist/cloud/cloud-sync.d.ts +4 -5
- package/dist/cloud/cloud-sync.js +0 -1
- package/dist/cloud-cli.d.ts +0 -1
- package/dist/cloud-cli.js +9 -2
- package/dist/crawl/crawl-tools.d.ts +0 -1
- package/dist/crawl/crawl-tools.js +1 -2
- package/dist/crawl/crawl.d.ts +17 -3
- package/dist/crawl/crawl.js +43 -4
- package/dist/daemon-resilience.d.ts +6 -1
- package/dist/daemon-resilience.js +63 -1
- package/dist/daemon.d.ts +23 -3
- package/dist/daemon.js +36 -24
- package/dist/domain/domain-model.d.ts +0 -1
- package/dist/domain/domain-model.js +1 -2
- package/dist/domain/domain-tools.d.ts +0 -7
- package/dist/domain/domain-tools.js +21 -4
- package/dist/domain/flow-risk.d.ts +0 -1
- package/dist/domain/flow-risk.js +0 -1
- package/dist/ee/audit-log.d.ts +0 -1
- package/dist/ee/audit-log.js +0 -1
- package/dist/events/body-failures.d.ts +4 -0
- package/dist/events/body-failures.js +113 -0
- package/dist/events/contradictions.d.ts +53 -0
- package/dist/events/contradictions.js +282 -0
- package/dist/events/echo-mismatch.d.ts +4 -0
- package/dist/events/echo-mismatch.js +138 -0
- package/dist/events/event-filters.d.ts +17 -3
- package/dist/events/event-filters.js +13 -3
- package/dist/events/json-salvage.d.ts +32 -0
- package/dist/events/json-salvage.js +96 -0
- package/dist/events/predicate-eval.d.ts +2 -1
- package/dist/events/predicate-eval.js +56 -9
- package/dist/events/predicate.d.ts +0 -1
- package/dist/events/predicate.js +56 -2
- package/dist/events/reaction.d.ts +0 -1
- package/dist/events/reaction.js +0 -1
- package/dist/events/reconcile.d.ts +39 -0
- package/dist/events/reconcile.js +211 -0
- package/dist/events/ring-buffer.d.ts +0 -1
- package/dist/events/ring-buffer.js +0 -1
- package/dist/events/stale-response.d.ts +4 -0
- package/dist/events/stale-response.js +139 -0
- package/dist/events/unit-mismatch.d.ts +16 -0
- package/dist/events/unit-mismatch.js +167 -0
- package/dist/flows/affected-tools.d.ts +18 -0
- package/dist/flows/affected-tools.js +52 -0
- package/dist/flows/affected.d.ts +0 -1
- package/dist/flows/affected.js +0 -1
- package/dist/flows/annotate-tools.d.ts +0 -1
- package/dist/flows/annotate-tools.js +21 -3
- package/dist/flows/annotate.d.ts +0 -1
- package/dist/flows/annotate.js +0 -1
- package/dist/flows/annotation-store.d.ts +0 -1
- package/dist/flows/annotation-store.js +0 -1
- package/dist/flows/assertion-integrity.d.ts +0 -1
- package/dist/flows/assertion-integrity.js +0 -1
- package/dist/flows/assertion-tiers-store.d.ts +0 -1
- package/dist/flows/assertion-tiers-store.js +0 -1
- package/dist/flows/buddy-status.d.ts +0 -1
- package/dist/flows/buddy-status.js +0 -1
- package/dist/flows/coverage.d.ts +0 -1
- package/dist/flows/coverage.js +0 -1
- package/dist/flows/decision.d.ts +0 -1
- package/dist/flows/decision.js +0 -1
- package/dist/flows/flake-store.d.ts +0 -1
- package/dist/flows/flake-store.js +0 -1
- package/dist/flows/flake.d.ts +0 -1
- package/dist/flows/flake.js +0 -1
- package/dist/flows/flow-classify.d.ts +0 -1
- package/dist/flows/flow-classify.js +0 -1
- package/dist/flows/flow-replay-run.d.ts +0 -1
- package/dist/flows/flow-replay-run.js +2 -3
- package/dist/flows/flow-replay.d.ts +20 -4
- package/dist/flows/flow-replay.js +9 -43
- package/dist/flows/flow-report.d.ts +0 -1
- package/dist/flows/flow-report.js +0 -1
- package/dist/flows/flow-scope.d.ts +0 -1
- package/dist/flows/flow-scope.js +0 -1
- package/dist/flows/flow-sources.d.ts +0 -1
- package/dist/flows/flow-sources.js +0 -1
- package/dist/flows/flow-step-runners.d.ts +23 -0
- package/dist/flows/flow-step-runners.js +102 -0
- package/dist/flows/flow-success.d.ts +0 -1
- package/dist/flows/flow-success.js +0 -1
- package/dist/flows/flow-tools.d.ts +0 -1
- package/dist/flows/flow-tools.js +30 -8
- package/dist/flows/flows.d.ts +6 -2
- package/dist/flows/flows.js +15 -2
- package/dist/flows/gate.d.ts +0 -1
- package/dist/flows/gate.js +0 -1
- package/dist/flows/git-changed.d.ts +0 -1
- package/dist/flows/git-changed.js +0 -1
- package/dist/flows/heal-run.d.ts +0 -1
- package/dist/flows/heal-run.js +0 -1
- package/dist/flows/heal.d.ts +0 -1
- package/dist/flows/heal.js +0 -1
- package/dist/flows/parallel-suite.d.ts +0 -1
- package/dist/flows/parallel-suite.js +0 -1
- package/dist/flows/recordings.d.ts +0 -1
- package/dist/flows/recordings.js +0 -1
- package/dist/flows/replay.d.ts +0 -1
- package/dist/flows/replay.js +71 -4
- package/dist/flows/server-verify.d.ts +0 -1
- package/dist/flows/server-verify.js +0 -1
- package/dist/flows/verify-change-tools.d.ts +2 -0
- package/dist/flows/verify-change-tools.js +187 -0
- package/dist/flows/watch-batcher.d.ts +0 -1
- package/dist/flows/watch-batcher.js +0 -1
- package/dist/honesty/accepted-write.d.ts +14 -0
- package/dist/honesty/accepted-write.js +17 -0
- package/dist/honesty/blind-spots.d.ts +18 -1
- package/dist/honesty/blind-spots.js +47 -5
- package/dist/honesty/honesty.d.ts +0 -1
- package/dist/honesty/honesty.js +0 -1
- package/dist/honesty/uncaptured-bodies.d.ts +19 -0
- package/dist/honesty/uncaptured-bodies.js +30 -0
- package/dist/honesty/unread-outcome.d.ts +2 -0
- package/dist/honesty/unread-outcome.js +50 -0
- package/dist/honesty/verified.d.ts +40 -0
- package/dist/honesty/verified.js +86 -0
- package/dist/http-server.d.ts +0 -1
- package/dist/http-server.js +5 -1
- package/dist/hunt/hunt-report.d.ts +50 -0
- package/dist/hunt/hunt-report.js +84 -0
- package/dist/idle-shutdown.d.ts +0 -1
- package/dist/idle-shutdown.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/init/agent-rules.d.ts +0 -1
- package/dist/init/agent-rules.js +4 -2
- package/dist/init/cursor.d.ts +0 -1
- package/dist/init/cursor.js +0 -1
- package/dist/init/desktop-doctor.d.ts +40 -0
- package/dist/init/desktop-doctor.js +198 -0
- package/dist/init/detect.d.ts +0 -1
- package/dist/init/detect.js +0 -1
- package/dist/init/mcp.d.ts +0 -1
- package/dist/init/mcp.js +0 -1
- package/dist/init/node-io.d.ts +0 -1
- package/dist/init/node-io.js +0 -1
- package/dist/init/plan.d.ts +4 -1
- package/dist/init/plan.js +23 -5
- package/dist/init/project-id.d.ts +0 -1
- package/dist/init/project-id.js +0 -1
- package/dist/init/run.d.ts +0 -1
- package/dist/init/run.js +31 -3
- package/dist/init/snippets.d.ts +5 -1
- package/dist/init/snippets.js +5 -1
- package/dist/init/vite-config.d.ts +0 -1
- package/dist/init/vite-config.js +0 -1
- package/dist/input/network-detail.d.ts +0 -1
- package/dist/input/network-detail.js +0 -1
- package/dist/input/network-mock-tools.d.ts +0 -1
- package/dist/input/network-mock-tools.js +3 -4
- package/dist/input/network-mock.d.ts +0 -1
- package/dist/input/network-mock.js +0 -1
- package/dist/input/real-input.d.ts +14 -1
- package/dist/input/real-input.js +45 -3
- package/dist/input/scroll-find.d.ts +0 -1
- package/dist/input/scroll-find.js +0 -1
- package/dist/input/scroll-tools.d.ts +0 -1
- package/dist/input/scroll-tools.js +0 -1
- package/dist/input/viewport-tools.d.ts +0 -1
- package/dist/input/viewport-tools.js +3 -4
- package/dist/journal/ambient-store.d.ts +0 -1
- package/dist/journal/ambient-store.js +0 -1
- package/dist/journal/ambient.d.ts +0 -1
- package/dist/journal/ambient.js +0 -1
- package/dist/journal/attach-journal.d.ts +0 -1
- package/dist/journal/attach-journal.js +0 -1
- package/dist/journal/deviation-report.d.ts +0 -1
- package/dist/journal/deviation-report.js +0 -1
- package/dist/journal/deviation-service.d.ts +0 -1
- package/dist/journal/deviation-service.js +0 -1
- package/dist/journal/envelope-store.d.ts +0 -1
- package/dist/journal/envelope-store.js +0 -1
- package/dist/journal/envelope.d.ts +8 -9
- package/dist/journal/envelope.js +0 -1
- package/dist/journal/journal-query.d.ts +0 -1
- package/dist/journal/journal-query.js +0 -1
- package/dist/journal/journal-recorder.d.ts +0 -1
- package/dist/journal/journal-recorder.js +0 -1
- package/dist/journal/retention.d.ts +0 -1
- package/dist/journal/retention.js +0 -1
- package/dist/journal/rollups.d.ts +0 -1
- package/dist/journal/rollups.js +0 -1
- package/dist/journal/session-end.d.ts +0 -1
- package/dist/journal/session-end.js +0 -1
- package/dist/journal/session-journal.d.ts +0 -1
- package/dist/journal/session-journal.js +0 -1
- package/dist/license/license.d.ts +0 -1
- package/dist/license/license.js +0 -1
- package/dist/log.d.ts +0 -1
- package/dist/log.js +0 -1
- package/dist/mcp-proxy.d.ts +0 -1
- package/dist/mcp-proxy.js +0 -1
- package/dist/mcp.d.ts +15 -1
- package/dist/mcp.js +145 -17
- package/dist/oracles/flow-instrument-gaps.d.ts +0 -1
- package/dist/oracles/flow-instrument-gaps.js +0 -1
- package/dist/oracles/propose-consequences.d.ts +0 -1
- package/dist/oracles/propose-consequences.js +0 -1
- package/dist/oracles/self-instrument.d.ts +0 -1
- package/dist/oracles/self-instrument.js +0 -1
- package/dist/pairing-token.d.ts +0 -1
- package/dist/pairing-token.js +0 -1
- package/dist/phenomena/phenomena.d.ts +0 -1
- package/dist/phenomena/phenomena.js +0 -1
- package/dist/pool/browser-pool.d.ts +0 -1
- package/dist/pool/browser-pool.js +0 -1
- package/dist/pool/lease-reaper.d.ts +0 -1
- package/dist/pool/lease-reaper.js +0 -1
- package/dist/pool/playwright-launcher.d.ts +0 -1
- package/dist/pool/playwright-launcher.js +10 -2
- package/dist/project/baselines.d.ts +0 -1
- package/dist/project/baselines.js +0 -1
- package/dist/project/file-lock.d.ts +2 -1
- package/dist/project/file-lock.js +12 -2
- package/dist/project/fs-port.d.ts +0 -1
- package/dist/project/fs-port.js +0 -1
- package/dist/project/project-store.d.ts +0 -1
- package/dist/project/project-store.js +0 -1
- package/dist/project/project-tools.d.ts +0 -1
- package/dist/project/project-tools.js +29 -4
- package/dist/project/reticle-dir.d.ts +0 -1
- package/dist/project/reticle-dir.js +0 -1
- package/dist/runs/build-verification-run.d.ts +0 -1
- package/dist/runs/build-verification-run.js +0 -1
- package/dist/runs/profile-redact.d.ts +0 -1
- package/dist/runs/profile-redact.js +0 -1
- package/dist/runs/render-report.d.ts +0 -1
- package/dist/runs/render-report.js +0 -1
- package/dist/runs/repair-prompt.d.ts +0 -1
- package/dist/runs/repair-prompt.js +0 -1
- package/dist/runs/replay-mapping.d.ts +0 -1
- package/dist/runs/replay-mapping.js +0 -1
- package/dist/runs/reticle-runner.d.ts +0 -1
- package/dist/runs/reticle-runner.js +4 -2
- package/dist/runs/risk-classify.d.ts +0 -1
- package/dist/runs/risk-classify.js +0 -1
- package/dist/runs/run-diff.d.ts +0 -1
- package/dist/runs/run-diff.js +0 -1
- package/dist/runs/run-store.d.ts +0 -1
- package/dist/runs/run-store.js +0 -1
- package/dist/runs/run-tools.d.ts +0 -1
- package/dist/runs/run-tools.js +0 -1
- package/dist/runs/runner-port.d.ts +0 -1
- package/dist/runs/runner-port.js +0 -1
- package/dist/runs/verification-sync.d.ts +0 -1
- package/dist/runs/verification-sync.js +0 -1
- package/dist/runs/verify-http.d.ts +0 -1
- package/dist/runs/verify-http.js +0 -1
- package/dist/runs/verify-server.d.ts +0 -1
- package/dist/runs/verify-server.js +0 -1
- package/dist/server-version.d.ts +0 -1
- package/dist/server-version.js +0 -1
- package/dist/session/command-timeout.d.ts +35 -0
- package/dist/session/command-timeout.js +41 -0
- package/dist/session/control-envelope.d.ts +2 -3
- package/dist/session/control-envelope.js +2 -3
- package/dist/session/last-act.d.ts +31 -0
- package/dist/session/last-act.js +24 -0
- package/dist/session/live-control-tools.d.ts +0 -1
- package/dist/session/live-control-tools.js +3 -4
- package/dist/session/live-control.d.ts +0 -1
- package/dist/session/live-control.js +0 -1
- package/dist/session/observed-state.d.ts +12 -2
- package/dist/session/observed-state.js +29 -2
- package/dist/session/output-budget.d.ts +0 -1
- package/dist/session/output-budget.js +0 -1
- package/dist/session/pending-commands.d.ts +12 -0
- package/dist/session/pending-commands.js +36 -0
- package/dist/session/presenter-args.d.ts +0 -1
- package/dist/session/presenter-args.js +0 -1
- package/dist/session/review-store.d.ts +0 -1
- package/dist/session/review-store.js +0 -1
- package/dist/session/session-health.d.ts +26 -2
- package/dist/session/session-health.js +13 -1
- package/dist/session/session-info.d.ts +29 -0
- package/dist/session/session-info.js +1 -0
- package/dist/session/session-lease.d.ts +25 -0
- package/dist/session/session-lease.js +14 -0
- package/dist/session/session-manager.d.ts +7 -19
- package/dist/session/session-manager.js +29 -2
- package/dist/session/session-readiness.d.ts +0 -1
- package/dist/session/session-readiness.js +3 -4
- package/dist/session/session-reaper.d.ts +0 -1
- package/dist/session/session-reaper.js +0 -1
- package/dist/session/session-recommendation.d.ts +0 -1
- package/dist/session/session-recommendation.js +0 -1
- package/dist/session/session-tools.d.ts +0 -1
- package/dist/session/session-tools.js +2 -3
- package/dist/session/session.d.ts +27 -53
- package/dist/session/session.js +95 -66
- package/dist/session/state-select.d.ts +0 -1
- package/dist/session/state-select.js +0 -1
- package/dist/telemetry/argument-shape.d.ts +41 -0
- package/dist/telemetry/argument-shape.js +87 -0
- package/dist/telemetry/bug-found.d.ts +33 -0
- package/dist/telemetry/bug-found.js +95 -0
- package/dist/telemetry/cli-telemetry.d.ts +13 -0
- package/dist/telemetry/cli-telemetry.js +43 -0
- package/dist/telemetry/connect-failure.d.ts +16 -0
- package/dist/telemetry/connect-failure.js +44 -0
- package/dist/telemetry/daemon-telemetry.d.ts +19 -0
- package/dist/telemetry/daemon-telemetry.js +76 -0
- package/dist/telemetry/dev-repo.d.ts +10 -0
- package/dist/telemetry/dev-repo.js +80 -0
- package/dist/telemetry/error-fingerprint.d.ts +24 -0
- package/dist/telemetry/error-fingerprint.js +88 -0
- package/dist/telemetry/feedback-cli.d.ts +31 -0
- package/dist/telemetry/feedback-cli.js +102 -0
- package/dist/telemetry/feedback-context.d.ts +32 -0
- package/dist/telemetry/feedback-context.js +143 -0
- package/dist/telemetry/feedback.d.ts +66 -0
- package/dist/telemetry/feedback.js +175 -0
- package/dist/telemetry/git-facts.d.ts +21 -0
- package/dist/telemetry/git-facts.js +109 -0
- package/dist/telemetry/identify.d.ts +22 -0
- package/dist/telemetry/identify.js +73 -0
- package/dist/telemetry/init-telemetry.d.ts +26 -0
- package/dist/telemetry/init-telemetry.js +33 -0
- package/dist/telemetry/machine-snapshot.d.ts +6 -0
- package/dist/telemetry/machine-snapshot.js +39 -0
- package/dist/telemetry/mcp-connection.d.ts +5 -0
- package/dist/telemetry/mcp-connection.js +44 -0
- package/dist/telemetry/project-profile.d.ts +44 -0
- package/dist/telemetry/project-profile.js +205 -0
- package/dist/telemetry/run-telemetry.d.ts +21 -0
- package/dist/telemetry/run-telemetry.js +62 -0
- package/dist/telemetry/session-metrics.d.ts +103 -0
- package/dist/telemetry/session-metrics.js +329 -0
- package/dist/telemetry/telemetry.d.ts +35 -8
- package/dist/telemetry/telemetry.js +105 -12
- package/dist/token-auth.d.ts +0 -1
- package/dist/token-auth.js +0 -1
- package/dist/tools/act-capsule.d.ts +23 -0
- package/dist/tools/act-capsule.js +47 -0
- package/dist/tools/act-danger.d.ts +7 -0
- package/dist/tools/act-danger.js +44 -0
- package/dist/tools/act-helpers.d.ts +17 -0
- package/dist/tools/act-helpers.js +40 -0
- package/dist/tools/act-tools.d.ts +8 -1
- package/dist/tools/act-tools.js +96 -98
- package/dist/tools/act-view.d.ts +7 -1
- package/dist/tools/act-view.js +13 -1
- package/dist/tools/assert-grade.d.ts +22 -1
- package/dist/tools/assert-grade.js +46 -1
- package/dist/tools/assert-verdict.d.ts +21 -0
- package/dist/tools/assert-verdict.js +62 -0
- package/dist/tools/browser-tools.d.ts +0 -1
- package/dist/tools/browser-tools.js +2 -2
- package/dist/tools/contract-tools.d.ts +0 -1
- package/dist/tools/contract-tools.js +0 -1
- package/dist/tools/coverage-tools.d.ts +9 -0
- package/dist/tools/coverage-tools.js +92 -0
- package/dist/tools/dynamic-tools.d.ts +0 -1
- package/dist/tools/dynamic-tools.js +21 -2
- package/dist/tools/error-recovery.d.ts +18 -2
- package/dist/tools/error-recovery.js +42 -7
- package/dist/tools/feedback-tools.d.ts +24 -0
- package/dist/tools/feedback-tools.js +180 -0
- package/dist/tools/invoke-tool.d.ts +0 -1
- package/dist/tools/invoke-tool.js +115 -5
- package/dist/tools/lease-tools.d.ts +0 -1
- package/dist/tools/lease-tools.js +6 -5
- package/dist/tools/merge-tools.d.ts +0 -1
- package/dist/tools/merge-tools.js +0 -1
- package/dist/tools/observe-tools.d.ts +0 -1
- package/dist/tools/observe-tools.js +91 -39
- package/dist/tools/profiles.d.ts +1 -2
- package/dist/tools/profiles.js +43 -16
- package/dist/tools/query-paginate.d.ts +0 -1
- package/dist/tools/query-paginate.js +0 -1
- package/dist/tools/read-tools.d.ts +0 -1
- package/dist/tools/read-tools.js +10 -8
- package/dist/tools/reconcile-tools.d.ts +2 -0
- package/dist/tools/reconcile-tools.js +111 -0
- package/dist/tools/snapshot-delta.d.ts +0 -1
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/tool-invoker.d.ts +0 -1
- package/dist/tools/tool-invoker.js +0 -1
- package/dist/tools/tool-kit.d.ts +16 -1
- package/dist/tools/tool-kit.js +8 -2
- package/dist/tools/tool-names.d.ts +6 -1
- package/dist/tools/tool-names.js +6 -1
- package/dist/tools/tools-helpers.d.ts +0 -1
- package/dist/tools/tools-helpers.js +0 -1
- package/dist/tools/tools.d.ts +0 -1
- package/dist/tools/tools.js +24 -4
- package/dist/update/update-checker.d.ts +0 -1
- package/dist/update/update-checker.js +0 -1
- package/dist/update/update-nudge.d.ts +20 -0
- package/dist/update/update-nudge.js +72 -0
- package/dist/update/updater.d.ts +14 -1
- package/dist/update/updater.js +33 -2
- package/dist/visual/visual-diff.d.ts +0 -1
- package/dist/visual/visual-diff.js +0 -1
- package/dist/visual/visual-store.d.ts +0 -1
- package/dist/visual/visual-store.js +0 -1
- package/dist/visual/visual-tools.d.ts +0 -1
- package/dist/visual/visual-tools.js +103 -16
- package/package.json +2 -2
- package/dist/bridge-security.d.ts.map +0 -1
- package/dist/bridge-security.js.map +0 -1
- package/dist/bridge.d.ts.map +0 -1
- package/dist/bridge.js.map +0 -1
- package/dist/bridge.test-harness.d.ts.map +0 -1
- package/dist/bridge.test-harness.js.map +0 -1
- package/dist/capsule/capsule-store.d.ts.map +0 -1
- package/dist/capsule/capsule-store.js.map +0 -1
- package/dist/capsule/capsule.d.ts.map +0 -1
- package/dist/capsule/capsule.js.map +0 -1
- package/dist/capsule/causal-summary.d.ts.map +0 -1
- package/dist/capsule/causal-summary.js.map +0 -1
- package/dist/capsule/divergence.d.ts.map +0 -1
- package/dist/capsule/divergence.js.map +0 -1
- package/dist/capsule/minimize.d.ts.map +0 -1
- package/dist/capsule/minimize.js.map +0 -1
- package/dist/capsule/predicate-to-links.d.ts.map +0 -1
- package/dist/capsule/predicate-to-links.js.map +0 -1
- package/dist/cli-flow-commands.d.ts.map +0 -1
- package/dist/cli-flow-commands.js.map +0 -1
- package/dist/cli-launch.d.ts.map +0 -1
- package/dist/cli-launch.js.map +0 -1
- package/dist/cli-parse.d.ts.map +0 -1
- package/dist/cli-parse.js.map +0 -1
- package/dist/cli-port.d.ts.map +0 -1
- package/dist/cli-port.js.map +0 -1
- package/dist/cli-verify.d.ts.map +0 -1
- package/dist/cli-verify.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cloud/cloud-config.d.ts.map +0 -1
- package/dist/cloud/cloud-config.js.map +0 -1
- package/dist/cloud/cloud-sync.d.ts.map +0 -1
- package/dist/cloud/cloud-sync.js.map +0 -1
- package/dist/cloud-cli.d.ts.map +0 -1
- package/dist/cloud-cli.js.map +0 -1
- package/dist/crawl/crawl-tools.d.ts.map +0 -1
- package/dist/crawl/crawl-tools.js.map +0 -1
- package/dist/crawl/crawl.d.ts.map +0 -1
- package/dist/crawl/crawl.js.map +0 -1
- package/dist/daemon-resilience.d.ts.map +0 -1
- package/dist/daemon-resilience.js.map +0 -1
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js.map +0 -1
- package/dist/domain/domain-model.d.ts.map +0 -1
- package/dist/domain/domain-model.js.map +0 -1
- package/dist/domain/domain-tools.d.ts.map +0 -1
- package/dist/domain/domain-tools.js.map +0 -1
- package/dist/domain/flow-risk.d.ts.map +0 -1
- package/dist/domain/flow-risk.js.map +0 -1
- package/dist/ee/audit-log.d.ts.map +0 -1
- package/dist/ee/audit-log.js.map +0 -1
- package/dist/events/event-filters.d.ts.map +0 -1
- package/dist/events/event-filters.js.map +0 -1
- package/dist/events/predicate-eval.d.ts.map +0 -1
- package/dist/events/predicate-eval.js.map +0 -1
- package/dist/events/predicate.d.ts.map +0 -1
- package/dist/events/predicate.js.map +0 -1
- package/dist/events/reaction.d.ts.map +0 -1
- package/dist/events/reaction.js.map +0 -1
- package/dist/events/ring-buffer.d.ts.map +0 -1
- package/dist/events/ring-buffer.js.map +0 -1
- package/dist/flows/affected.d.ts.map +0 -1
- package/dist/flows/affected.js.map +0 -1
- package/dist/flows/annotate-tools.d.ts.map +0 -1
- package/dist/flows/annotate-tools.js.map +0 -1
- package/dist/flows/annotate.d.ts.map +0 -1
- package/dist/flows/annotate.js.map +0 -1
- package/dist/flows/annotation-store.d.ts.map +0 -1
- package/dist/flows/annotation-store.js.map +0 -1
- package/dist/flows/assertion-integrity.d.ts.map +0 -1
- package/dist/flows/assertion-integrity.js.map +0 -1
- package/dist/flows/assertion-tiers-store.d.ts.map +0 -1
- package/dist/flows/assertion-tiers-store.js.map +0 -1
- package/dist/flows/buddy-status.d.ts.map +0 -1
- package/dist/flows/buddy-status.js.map +0 -1
- package/dist/flows/coverage.d.ts.map +0 -1
- package/dist/flows/coverage.js.map +0 -1
- package/dist/flows/decision.d.ts.map +0 -1
- package/dist/flows/decision.js.map +0 -1
- package/dist/flows/flake-store.d.ts.map +0 -1
- package/dist/flows/flake-store.js.map +0 -1
- package/dist/flows/flake.d.ts.map +0 -1
- package/dist/flows/flake.js.map +0 -1
- package/dist/flows/flow-classify.d.ts.map +0 -1
- package/dist/flows/flow-classify.js.map +0 -1
- package/dist/flows/flow-replay-run.d.ts.map +0 -1
- package/dist/flows/flow-replay-run.js.map +0 -1
- package/dist/flows/flow-replay.d.ts.map +0 -1
- package/dist/flows/flow-replay.js.map +0 -1
- package/dist/flows/flow-report.d.ts.map +0 -1
- package/dist/flows/flow-report.js.map +0 -1
- package/dist/flows/flow-scope.d.ts.map +0 -1
- package/dist/flows/flow-scope.js.map +0 -1
- package/dist/flows/flow-sources.d.ts.map +0 -1
- package/dist/flows/flow-sources.js.map +0 -1
- package/dist/flows/flow-success.d.ts.map +0 -1
- package/dist/flows/flow-success.js.map +0 -1
- package/dist/flows/flow-tools.d.ts.map +0 -1
- package/dist/flows/flow-tools.js.map +0 -1
- package/dist/flows/flows.d.ts.map +0 -1
- package/dist/flows/flows.js.map +0 -1
- package/dist/flows/gate.d.ts.map +0 -1
- package/dist/flows/gate.js.map +0 -1
- package/dist/flows/git-changed.d.ts.map +0 -1
- package/dist/flows/git-changed.js.map +0 -1
- package/dist/flows/heal-run.d.ts.map +0 -1
- package/dist/flows/heal-run.js.map +0 -1
- package/dist/flows/heal.d.ts.map +0 -1
- package/dist/flows/heal.js.map +0 -1
- package/dist/flows/parallel-suite.d.ts.map +0 -1
- package/dist/flows/parallel-suite.js.map +0 -1
- package/dist/flows/recordings.d.ts.map +0 -1
- package/dist/flows/recordings.js.map +0 -1
- package/dist/flows/replay.d.ts.map +0 -1
- package/dist/flows/replay.js.map +0 -1
- package/dist/flows/server-verify.d.ts.map +0 -1
- package/dist/flows/server-verify.js.map +0 -1
- package/dist/flows/watch-batcher.d.ts.map +0 -1
- package/dist/flows/watch-batcher.js.map +0 -1
- package/dist/honesty/blind-spots.d.ts.map +0 -1
- package/dist/honesty/blind-spots.js.map +0 -1
- package/dist/honesty/honesty.d.ts.map +0 -1
- package/dist/honesty/honesty.js.map +0 -1
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js.map +0 -1
- package/dist/idle-shutdown.d.ts.map +0 -1
- package/dist/idle-shutdown.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init/agent-rules.d.ts.map +0 -1
- package/dist/init/agent-rules.js.map +0 -1
- package/dist/init/cursor.d.ts.map +0 -1
- package/dist/init/cursor.js.map +0 -1
- package/dist/init/detect.d.ts.map +0 -1
- package/dist/init/detect.js.map +0 -1
- package/dist/init/mcp.d.ts.map +0 -1
- package/dist/init/mcp.js.map +0 -1
- package/dist/init/node-io.d.ts.map +0 -1
- package/dist/init/node-io.js.map +0 -1
- package/dist/init/plan.d.ts.map +0 -1
- package/dist/init/plan.js.map +0 -1
- package/dist/init/project-id.d.ts.map +0 -1
- package/dist/init/project-id.js.map +0 -1
- package/dist/init/run.d.ts.map +0 -1
- package/dist/init/run.js.map +0 -1
- package/dist/init/snippets.d.ts.map +0 -1
- package/dist/init/snippets.js.map +0 -1
- package/dist/init/vite-config.d.ts.map +0 -1
- package/dist/init/vite-config.js.map +0 -1
- package/dist/input/network-detail.d.ts.map +0 -1
- package/dist/input/network-detail.js.map +0 -1
- package/dist/input/network-mock-tools.d.ts.map +0 -1
- package/dist/input/network-mock-tools.js.map +0 -1
- package/dist/input/network-mock.d.ts.map +0 -1
- package/dist/input/network-mock.js.map +0 -1
- package/dist/input/real-input.d.ts.map +0 -1
- package/dist/input/real-input.js.map +0 -1
- package/dist/input/scroll-find.d.ts.map +0 -1
- package/dist/input/scroll-find.js.map +0 -1
- package/dist/input/scroll-tools.d.ts.map +0 -1
- package/dist/input/scroll-tools.js.map +0 -1
- package/dist/input/viewport-tools.d.ts.map +0 -1
- package/dist/input/viewport-tools.js.map +0 -1
- package/dist/journal/ambient-store.d.ts.map +0 -1
- package/dist/journal/ambient-store.js.map +0 -1
- package/dist/journal/ambient.d.ts.map +0 -1
- package/dist/journal/ambient.js.map +0 -1
- package/dist/journal/attach-journal.d.ts.map +0 -1
- package/dist/journal/attach-journal.js.map +0 -1
- package/dist/journal/deviation-report.d.ts.map +0 -1
- package/dist/journal/deviation-report.js.map +0 -1
- package/dist/journal/deviation-service.d.ts.map +0 -1
- package/dist/journal/deviation-service.js.map +0 -1
- package/dist/journal/envelope-store.d.ts.map +0 -1
- package/dist/journal/envelope-store.js.map +0 -1
- package/dist/journal/envelope.d.ts.map +0 -1
- package/dist/journal/envelope.js.map +0 -1
- package/dist/journal/journal-query.d.ts.map +0 -1
- package/dist/journal/journal-query.js.map +0 -1
- package/dist/journal/journal-recorder.d.ts.map +0 -1
- package/dist/journal/journal-recorder.js.map +0 -1
- package/dist/journal/retention.d.ts.map +0 -1
- package/dist/journal/retention.js.map +0 -1
- package/dist/journal/rollups.d.ts.map +0 -1
- package/dist/journal/rollups.js.map +0 -1
- package/dist/journal/session-end.d.ts.map +0 -1
- package/dist/journal/session-end.js.map +0 -1
- package/dist/journal/session-journal.d.ts.map +0 -1
- package/dist/journal/session-journal.js.map +0 -1
- package/dist/license/license.d.ts.map +0 -1
- package/dist/license/license.js.map +0 -1
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js.map +0 -1
- package/dist/mcp-proxy.d.ts.map +0 -1
- package/dist/mcp-proxy.js.map +0 -1
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js.map +0 -1
- package/dist/oracles/flow-instrument-gaps.d.ts.map +0 -1
- package/dist/oracles/flow-instrument-gaps.js.map +0 -1
- package/dist/oracles/propose-consequences.d.ts.map +0 -1
- package/dist/oracles/propose-consequences.js.map +0 -1
- package/dist/oracles/self-instrument.d.ts.map +0 -1
- package/dist/oracles/self-instrument.js.map +0 -1
- package/dist/pairing-token.d.ts.map +0 -1
- package/dist/pairing-token.js.map +0 -1
- package/dist/phenomena/phenomena.d.ts.map +0 -1
- package/dist/phenomena/phenomena.js.map +0 -1
- package/dist/pool/browser-pool.d.ts.map +0 -1
- package/dist/pool/browser-pool.js.map +0 -1
- package/dist/pool/lease-reaper.d.ts.map +0 -1
- package/dist/pool/lease-reaper.js.map +0 -1
- package/dist/pool/playwright-launcher.d.ts.map +0 -1
- package/dist/pool/playwright-launcher.js.map +0 -1
- package/dist/project/baselines.d.ts.map +0 -1
- package/dist/project/baselines.js.map +0 -1
- package/dist/project/file-lock.d.ts.map +0 -1
- package/dist/project/file-lock.js.map +0 -1
- package/dist/project/fs-port.d.ts.map +0 -1
- package/dist/project/fs-port.js.map +0 -1
- package/dist/project/project-store.d.ts.map +0 -1
- package/dist/project/project-store.js.map +0 -1
- package/dist/project/project-tools.d.ts.map +0 -1
- package/dist/project/project-tools.js.map +0 -1
- package/dist/project/reticle-dir.d.ts.map +0 -1
- package/dist/project/reticle-dir.js.map +0 -1
- package/dist/runs/build-verification-run.d.ts.map +0 -1
- package/dist/runs/build-verification-run.js.map +0 -1
- package/dist/runs/profile-redact.d.ts.map +0 -1
- package/dist/runs/profile-redact.js.map +0 -1
- package/dist/runs/render-report.d.ts.map +0 -1
- package/dist/runs/render-report.js.map +0 -1
- package/dist/runs/repair-prompt.d.ts.map +0 -1
- package/dist/runs/repair-prompt.js.map +0 -1
- package/dist/runs/replay-mapping.d.ts.map +0 -1
- package/dist/runs/replay-mapping.js.map +0 -1
- package/dist/runs/reticle-runner.d.ts.map +0 -1
- package/dist/runs/reticle-runner.js.map +0 -1
- package/dist/runs/risk-classify.d.ts.map +0 -1
- package/dist/runs/risk-classify.js.map +0 -1
- package/dist/runs/run-diff.d.ts.map +0 -1
- package/dist/runs/run-diff.js.map +0 -1
- package/dist/runs/run-store.d.ts.map +0 -1
- package/dist/runs/run-store.js.map +0 -1
- package/dist/runs/run-tools.d.ts.map +0 -1
- package/dist/runs/run-tools.js.map +0 -1
- package/dist/runs/runner-port.d.ts.map +0 -1
- package/dist/runs/runner-port.js.map +0 -1
- package/dist/runs/verification-sync.d.ts.map +0 -1
- package/dist/runs/verification-sync.js.map +0 -1
- package/dist/runs/verify-http.d.ts.map +0 -1
- package/dist/runs/verify-http.js.map +0 -1
- package/dist/runs/verify-server.d.ts.map +0 -1
- package/dist/runs/verify-server.js.map +0 -1
- package/dist/server-version.d.ts.map +0 -1
- package/dist/server-version.js.map +0 -1
- package/dist/session/control-envelope.d.ts.map +0 -1
- package/dist/session/control-envelope.js.map +0 -1
- package/dist/session/live-control-tools.d.ts.map +0 -1
- package/dist/session/live-control-tools.js.map +0 -1
- package/dist/session/live-control.d.ts.map +0 -1
- package/dist/session/live-control.js.map +0 -1
- package/dist/session/observed-state.d.ts.map +0 -1
- package/dist/session/observed-state.js.map +0 -1
- package/dist/session/output-budget.d.ts.map +0 -1
- package/dist/session/output-budget.js.map +0 -1
- package/dist/session/presenter-args.d.ts.map +0 -1
- package/dist/session/presenter-args.js.map +0 -1
- package/dist/session/review-store.d.ts.map +0 -1
- package/dist/session/review-store.js.map +0 -1
- package/dist/session/session-health.d.ts.map +0 -1
- package/dist/session/session-health.js.map +0 -1
- package/dist/session/session-manager.d.ts.map +0 -1
- package/dist/session/session-manager.js.map +0 -1
- package/dist/session/session-readiness.d.ts.map +0 -1
- package/dist/session/session-readiness.js.map +0 -1
- package/dist/session/session-reaper.d.ts.map +0 -1
- package/dist/session/session-reaper.js.map +0 -1
- package/dist/session/session-recommendation.d.ts.map +0 -1
- package/dist/session/session-recommendation.js.map +0 -1
- package/dist/session/session-tools.d.ts.map +0 -1
- package/dist/session/session-tools.js.map +0 -1
- package/dist/session/session.d.ts.map +0 -1
- package/dist/session/session.js.map +0 -1
- package/dist/session/state-select.d.ts.map +0 -1
- package/dist/session/state-select.js.map +0 -1
- package/dist/telemetry/telemetry.d.ts.map +0 -1
- package/dist/telemetry/telemetry.js.map +0 -1
- package/dist/token-auth.d.ts.map +0 -1
- package/dist/token-auth.js.map +0 -1
- package/dist/tools/act-tools.d.ts.map +0 -1
- package/dist/tools/act-tools.js.map +0 -1
- package/dist/tools/act-view.d.ts.map +0 -1
- package/dist/tools/act-view.js.map +0 -1
- package/dist/tools/assert-grade.d.ts.map +0 -1
- package/dist/tools/assert-grade.js.map +0 -1
- package/dist/tools/browser-tools.d.ts.map +0 -1
- package/dist/tools/browser-tools.js.map +0 -1
- package/dist/tools/contract-tools.d.ts.map +0 -1
- package/dist/tools/contract-tools.js.map +0 -1
- package/dist/tools/dynamic-tools.d.ts.map +0 -1
- package/dist/tools/dynamic-tools.js.map +0 -1
- package/dist/tools/error-recovery.d.ts.map +0 -1
- package/dist/tools/error-recovery.js.map +0 -1
- package/dist/tools/invoke-tool.d.ts.map +0 -1
- package/dist/tools/invoke-tool.js.map +0 -1
- package/dist/tools/lease-tools.d.ts.map +0 -1
- package/dist/tools/lease-tools.js.map +0 -1
- package/dist/tools/merge-tools.d.ts.map +0 -1
- package/dist/tools/merge-tools.js.map +0 -1
- package/dist/tools/observe-tools.d.ts.map +0 -1
- package/dist/tools/observe-tools.js.map +0 -1
- package/dist/tools/profiles.d.ts.map +0 -1
- package/dist/tools/profiles.js.map +0 -1
- package/dist/tools/query-paginate.d.ts.map +0 -1
- package/dist/tools/query-paginate.js.map +0 -1
- package/dist/tools/read-tools.d.ts.map +0 -1
- package/dist/tools/read-tools.js.map +0 -1
- package/dist/tools/snapshot-delta.d.ts.map +0 -1
- package/dist/tools/snapshot-delta.js.map +0 -1
- package/dist/tools/tool-invoker.d.ts.map +0 -1
- package/dist/tools/tool-invoker.js.map +0 -1
- package/dist/tools/tool-kit.d.ts.map +0 -1
- package/dist/tools/tool-kit.js.map +0 -1
- package/dist/tools/tool-names.d.ts.map +0 -1
- package/dist/tools/tool-names.js.map +0 -1
- package/dist/tools/tools-helpers.d.ts.map +0 -1
- package/dist/tools/tools-helpers.js.map +0 -1
- package/dist/tools/tools.d.ts.map +0 -1
- package/dist/tools/tools.js.map +0 -1
- package/dist/update/update-checker.d.ts.map +0 -1
- package/dist/update/update-checker.js.map +0 -1
- package/dist/update/updater.d.ts.map +0 -1
- package/dist/update/updater.js.map +0 -1
- package/dist/visual/visual-diff.d.ts.map +0 -1
- package/dist/visual/visual-diff.js.map +0 -1
- package/dist/visual/visual-store.d.ts.map +0 -1
- package/dist/visual/visual-store.js.map +0 -1
- package/dist/visual/visual-tools.d.ts.map +0 -1
- package/dist/visual/visual-tools.js.map +0 -1
|
@@ -19,7 +19,7 @@ import { randomUUID, createHash } from 'node:crypto';
|
|
|
19
19
|
import { readFileSync, writeFileSync, mkdirSync, existsSync, rmSync } from 'node:fs';
|
|
20
20
|
import { homedir, platform } from 'node:os';
|
|
21
21
|
import { join } from 'node:path';
|
|
22
|
-
import { TelemetryEventKind, TELEMETRY_EVENT_VERSION } from '@reticlehq/core';
|
|
22
|
+
import { TelemetryEventKind, TELEMETRY_EVENT_VERSION, ProjectIdSource, } from '@reticlehq/core';
|
|
23
23
|
import { SERVER_VERSION } from '../server-version.js';
|
|
24
24
|
const RETICLE_DIR = join(homedir(), '.reticle');
|
|
25
25
|
const ID_FILE = join(RETICLE_DIR, 'telemetry-id');
|
|
@@ -53,6 +53,8 @@ const DETACHED_SEND_SCRIPT = "fetch(process.argv[1],{method:'POST',headers:{'con
|
|
|
53
53
|
`body:process.argv[2],signal:AbortSignal.timeout(${SEND_TIMEOUT_MS})})` +
|
|
54
54
|
'.catch(()=>{}).finally(()=>process.exit(0))';
|
|
55
55
|
/** Env var names — mirror cloud-sync's `RETICLE_*` convention. */
|
|
56
|
+
import { isReticleSourceCheckout } from './dev-repo.js';
|
|
57
|
+
import { gitFacts } from './git-facts.js';
|
|
56
58
|
const Env = {
|
|
57
59
|
DISABLE: 'RETICLE_TELEMETRY', // "0" / "false" / "off" → disabled
|
|
58
60
|
DO_NOT_TRACK: 'DO_NOT_TRACK', // the cross-tool opt-out convention (any truthy value)
|
|
@@ -61,12 +63,17 @@ const Env = {
|
|
|
61
63
|
CI: 'CI', // presence marks a CI environment
|
|
62
64
|
VITEST: 'VITEST', // set by vitest — unit tests must never phone home
|
|
63
65
|
};
|
|
64
|
-
const isDisabled = (env) => {
|
|
66
|
+
const isDisabled = (env, cwd = process.cwd()) => {
|
|
65
67
|
const off = new Set(['0', 'false', 'off', 'no']);
|
|
66
68
|
if (off.has((env[Env.DISABLE] ?? '').toLowerCase()))
|
|
67
69
|
return true;
|
|
68
70
|
if (env[Env.VITEST] !== undefined)
|
|
69
71
|
return true; // a test run is not a user
|
|
72
|
+
// Developing Reticle is not using Reticle. The `.env` carrying RETICLE_TELEMETRY=0 is gitignored,
|
|
73
|
+
// so it only exists on the machine that made it — a fresh clone would phone home on a
|
|
74
|
+
// contributor's first `reticle serve`. The repo marker is committed, so this guarantee travels.
|
|
75
|
+
if (isReticleSourceCheckout(cwd))
|
|
76
|
+
return true;
|
|
70
77
|
const dnt = env[Env.DO_NOT_TRACK];
|
|
71
78
|
return typeof dnt === 'string' && dnt !== '' && dnt !== '0';
|
|
72
79
|
};
|
|
@@ -88,8 +95,31 @@ const resolveIdentity = () => {
|
|
|
88
95
|
return { anonymousId: randomUUID(), firstRun: false };
|
|
89
96
|
}
|
|
90
97
|
};
|
|
91
|
-
/**
|
|
92
|
-
|
|
98
|
+
/**
|
|
99
|
+
* One-way project fingerprint: distinct-count of this = "projects Reticle is used in", reveals nothing.
|
|
100
|
+
*
|
|
101
|
+
* Prefers a hash of the git ORIGIN over a hash of the cwd. The contract in `@reticlehq/core` always
|
|
102
|
+
* said "one-way hash of the git remote (or cwd)", but the implementation only ever hashed the path —
|
|
103
|
+
* which meant the same repo cloned by four teammates, or checked out twice on one machine, counted as
|
|
104
|
+
* four separate projects. That inflates the project count and, worse, makes team adoption look like
|
|
105
|
+
* unrelated individuals. Hashing the origin dedupes a real project down to one id across every clone.
|
|
106
|
+
*
|
|
107
|
+
* Still one-way, still non-reversible, and still exactly what the published policy describes: the
|
|
108
|
+
* remote URL itself never leaves the machine, only its SHA-256. The URL is normalized first (scheme,
|
|
109
|
+
* credentials, `.git` suffix and case removed) so `git@github.com:acme/web.git` and
|
|
110
|
+
* `https://github.com/Acme/web` are recognized as the same project rather than two.
|
|
111
|
+
*/
|
|
112
|
+
const projectFingerprint = (cwd) => {
|
|
113
|
+
const { origin } = gitFacts(cwd);
|
|
114
|
+
return {
|
|
115
|
+
projectId: createHash('sha256')
|
|
116
|
+
.update(origin ?? cwd)
|
|
117
|
+
.digest('hex')
|
|
118
|
+
.slice(0, 32),
|
|
119
|
+
// Reported alongside so the analytics knows whether this id is comparable to another machine's.
|
|
120
|
+
source: origin !== undefined ? ProjectIdSource.GIT_ORIGIN : ProjectIdSource.CWD,
|
|
121
|
+
};
|
|
122
|
+
};
|
|
93
123
|
/** Print the opt-out notice exactly once per machine (honest disclosure, the OSS-trust bar). */
|
|
94
124
|
const showNoticeOnce = () => {
|
|
95
125
|
try {
|
|
@@ -106,8 +136,17 @@ const showNoticeOnce = () => {
|
|
|
106
136
|
}
|
|
107
137
|
};
|
|
108
138
|
/** The current telemetry state and which control set it — what `reticle telemetry status` prints. */
|
|
109
|
-
export const describeTelemetry = (env = process.env, dir = RETICLE_DIR) => {
|
|
110
|
-
|
|
139
|
+
export const describeTelemetry = (env = process.env, dir = RETICLE_DIR, cwd = process.cwd()) => {
|
|
140
|
+
// Report the reason that ACTUALLY applies. Saying "environment variable" when the real cause is
|
|
141
|
+
// the source-checkout guard would send a contributor hunting for a variable that is not set.
|
|
142
|
+
if (isReticleSourceCheckout(cwd)) {
|
|
143
|
+
return {
|
|
144
|
+
enabled: false,
|
|
145
|
+
reason: 'this is a Reticle source checkout — developing it is not using it',
|
|
146
|
+
policyUrl: POLICY_URL,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (isDisabled(env, cwd)) {
|
|
111
150
|
return { enabled: false, reason: 'disabled by environment variable', policyUrl: POLICY_URL };
|
|
112
151
|
}
|
|
113
152
|
if (existsSync(join(dir, 'telemetry-opt-out'))) {
|
|
@@ -142,7 +181,8 @@ const NOOP = { emit: async () => { }, enabled: false, firstRun: false };
|
|
|
142
181
|
*/
|
|
143
182
|
export const createTelemetry = (opts) => {
|
|
144
183
|
const env = opts.env ?? process.env;
|
|
145
|
-
|
|
184
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
185
|
+
if (isDisabled(env, cwd))
|
|
146
186
|
return NOOP;
|
|
147
187
|
try {
|
|
148
188
|
if (existsSync(OPT_OUT_FILE))
|
|
@@ -160,7 +200,13 @@ export const createTelemetry = (opts) => {
|
|
|
160
200
|
const ci = env[Env.CI] !== undefined && env[Env.CI] !== '';
|
|
161
201
|
const os = platform();
|
|
162
202
|
const { anonymousId, firstRun } = resolveIdentity();
|
|
163
|
-
|
|
203
|
+
/**
|
|
204
|
+
* One id per PROCESS, minted in memory and never persisted — which is exactly right: a daemon run
|
|
205
|
+
* IS the session, and a restarted daemon is genuinely a new one. Ephemeral by construction, so it
|
|
206
|
+
* adds no durable identifier to the machine.
|
|
207
|
+
*/
|
|
208
|
+
const sessionId = randomUUID();
|
|
209
|
+
const { projectId, source: projectIdSource } = projectFingerprint(opts.cwd ?? process.cwd());
|
|
164
210
|
showNoticeOnce();
|
|
165
211
|
const spawnDetached = opts.spawnImpl ??
|
|
166
212
|
((command, args) => {
|
|
@@ -170,17 +216,65 @@ export const createTelemetry = (opts) => {
|
|
|
170
216
|
const event = {
|
|
171
217
|
v: TELEMETRY_EVENT_VERSION,
|
|
172
218
|
anonymousId,
|
|
219
|
+
sessionId,
|
|
173
220
|
projectId,
|
|
174
221
|
event: kind,
|
|
175
222
|
ts: now(),
|
|
176
223
|
version: opts.version,
|
|
177
224
|
ci,
|
|
178
225
|
os,
|
|
179
|
-
|
|
180
|
-
...(extra?.
|
|
226
|
+
projectIdSource,
|
|
227
|
+
...(extra?.actor !== undefined ? { actor: extra.actor } : {}),
|
|
228
|
+
...(extra?.command !== undefined ? { command: extra.command } : {}),
|
|
229
|
+
...(extra?.flags !== undefined ? { flags: extra.flags } : {}),
|
|
230
|
+
...(extra?.session !== undefined ? { session: extra.session } : {}),
|
|
231
|
+
...(extra?.project !== undefined ? { project: extra.project } : {}),
|
|
232
|
+
...(extra?.verification !== undefined ? { verification: extra.verification } : {}),
|
|
233
|
+
...(extra?.versionChange !== undefined ? { versionChange: extra.versionChange } : {}),
|
|
234
|
+
...(extra?.crash !== undefined ? { crash: extra.crash } : {}),
|
|
235
|
+
...(extra?.feedback !== undefined ? { feedback: extra.feedback } : {}),
|
|
236
|
+
...(extra?.identity !== undefined ? { identity: extra.identity } : {}),
|
|
237
|
+
...(extra?.connection !== undefined ? { connection: extra.connection } : {}),
|
|
238
|
+
...(extra?.init !== undefined ? { init: extra.init } : {}),
|
|
239
|
+
...(extra?.bug !== undefined ? { bug: extra.bug } : {}),
|
|
181
240
|
};
|
|
182
241
|
// Map the core contract onto PostHog's capture shape: id/name/time move up, the rest are properties.
|
|
183
|
-
|
|
242
|
+
// The feedback body is FLATTENED into `feedback_*` properties rather than sent as a nested object:
|
|
243
|
+
// PostHog filters and breakdowns operate on top-level properties, so a nested `feedback.stack`
|
|
244
|
+
// would be invisible to the exact "which stacks report the most bugs" question this exists to
|
|
245
|
+
// answer. One prefix keeps them grouped in the UI without a nested path.
|
|
246
|
+
const { anonymousId: distinctId, event: name, ts, sessionId: eventSessionId, feedback, session, project, verification, versionChange, crash, identity, connection, init, bug, ...rest } = event;
|
|
247
|
+
// `$session_id` is PostHog's OWN session property, so sending ours under that name lights up
|
|
248
|
+
// its built-in session views and funnels for free rather than requiring custom HogQL everywhere.
|
|
249
|
+
const properties = {
|
|
250
|
+
...rest,
|
|
251
|
+
sessionId: eventSessionId,
|
|
252
|
+
$session_id: eventSessionId,
|
|
253
|
+
};
|
|
254
|
+
// Each block is flattened under its own prefix rather than nested. PostHog filters, breakdowns and
|
|
255
|
+
// insight builders all operate on TOP-LEVEL properties, so a nested `project.stack` is invisible to
|
|
256
|
+
// the exact "which stacks retain best" question these exist to answer — you would have to drop to
|
|
257
|
+
// raw HogQL for every chart. One prefix per block keeps them grouped in the property list without
|
|
258
|
+
// paying that cost. The two genuine maps (`toolCounts`, `errorKinds`) stay objects: their keys are
|
|
259
|
+
// open-ended, so flattening them would mint an unbounded number of property names, which is the one
|
|
260
|
+
// thing that actually degrades a PostHog project.
|
|
261
|
+
const blocks = {
|
|
262
|
+
feedback,
|
|
263
|
+
session,
|
|
264
|
+
project,
|
|
265
|
+
verification,
|
|
266
|
+
version: versionChange,
|
|
267
|
+
crash,
|
|
268
|
+
identity,
|
|
269
|
+
connection,
|
|
270
|
+
init,
|
|
271
|
+
bug,
|
|
272
|
+
};
|
|
273
|
+
for (const [prefix, block] of Object.entries(blocks)) {
|
|
274
|
+
for (const [key, value] of Object.entries(block ?? {})) {
|
|
275
|
+
properties[`${prefix}_${key}`] = value;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
184
278
|
const body = JSON.stringify({
|
|
185
279
|
api_key: apiKey,
|
|
186
280
|
batch: [
|
|
@@ -217,4 +311,3 @@ export const createTelemetry = (opts) => {
|
|
|
217
311
|
let singleton;
|
|
218
312
|
export const getTelemetry = () => (singleton ??= createTelemetry({ version: SERVER_VERSION }));
|
|
219
313
|
export { TelemetryEventKind };
|
|
220
|
-
//# sourceMappingURL=telemetry.js.map
|
package/dist/token-auth.d.ts
CHANGED
|
@@ -21,4 +21,3 @@ export declare function isLoopbackHost(hostHeader: string | undefined): boolean;
|
|
|
21
21
|
* non-loopback value fails, which is what kills a rebound `http://evil.com` page reading the plane.
|
|
22
22
|
*/
|
|
23
23
|
export declare function isLocalWebOrigin(origin: string | undefined, referer: string | undefined): boolean;
|
|
24
|
-
//# sourceMappingURL=token-auth.d.ts.map
|
package/dist/token-auth.js
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ExpectedLink } from '../capsule/divergence.js';
|
|
2
|
+
import type { DivergenceCapsule } from '../capsule/capsule.js';
|
|
3
|
+
import type { ToolDeps } from './tool-kit.js';
|
|
4
|
+
interface CapsuleSaveInputs {
|
|
5
|
+
deps: ToolDeps;
|
|
6
|
+
verdict: {
|
|
7
|
+
pass: boolean;
|
|
8
|
+
failureReason?: string;
|
|
9
|
+
};
|
|
10
|
+
capsule?: DivergenceCapsule | undefined;
|
|
11
|
+
links: readonly ExpectedLink[];
|
|
12
|
+
args: Record<string, unknown>;
|
|
13
|
+
actResult: {
|
|
14
|
+
result?: unknown;
|
|
15
|
+
};
|
|
16
|
+
actedSource?: {
|
|
17
|
+
file: string;
|
|
18
|
+
line: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Returns the capsule id when one was written, or undefined when there was nothing to save. */
|
|
22
|
+
export declare function saveFailedAssertCapsule(inputs: CapsuleSaveInputs): Promise<string | undefined>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persist a failed assertion as a replayable fail-to-pass capsule.
|
|
3
|
+
*
|
|
4
|
+
* : a red assertion is the ONE moment the evidence explaining it is in hand. Persist it as a
|
|
5
|
+
// replayable fail-to-pass capsule so the bug survives the turn — and becomes a regression flow
|
|
6
|
+
// the moment it goes green. Best-effort: capturing evidence must never fail the run that found it.
|
|
7
|
+
*
|
|
8
|
+
* Split out of act-tools.ts when it crossed the 600-line cap. The seam is real: this is the only
|
|
9
|
+
* part of the act path that writes to disk, and it is best-effort by design — capturing evidence
|
|
10
|
+
* must never fail the run that found it.
|
|
11
|
+
*/
|
|
12
|
+
import { ActionType, AnchorKind } from '@reticlehq/core';
|
|
13
|
+
import { CapsuleStore, capsuleId } from '../capsule/capsule-store.js';
|
|
14
|
+
import { ReticleTool } from './tool-names.js';
|
|
15
|
+
import { asRecord, asString } from './tools-helpers.js';
|
|
16
|
+
/** Returns the capsule id when one was written, or undefined when there was nothing to save. */
|
|
17
|
+
export async function saveFailedAssertCapsule(inputs) {
|
|
18
|
+
const { deps, verdict, capsule, links, args, actResult, actedSource } = inputs;
|
|
19
|
+
if (verdict.pass || capsule === undefined)
|
|
20
|
+
return undefined;
|
|
21
|
+
const id = capsuleId(deps.now(), asString(args['ref']) ?? 'assert');
|
|
22
|
+
const expectedText = links
|
|
23
|
+
.map((l) => ('name' in l ? `${l.kind} ${String(l.name)}` : l.kind))
|
|
24
|
+
.join(' AND ');
|
|
25
|
+
const saved = await new CapsuleStore(deps.fs, deps.reticleRoot).save({
|
|
26
|
+
version: 1,
|
|
27
|
+
id,
|
|
28
|
+
createdAt: deps.now(),
|
|
29
|
+
origin: 'failed-assert',
|
|
30
|
+
expected: expectedText.length > 0 ? expectedText : 'declared consequence',
|
|
31
|
+
observed: capsule.firstDivergence?.observed ?? verdict.failureReason ?? 'not observed',
|
|
32
|
+
steps: [
|
|
33
|
+
{
|
|
34
|
+
tool: ReticleTool.ACT,
|
|
35
|
+
anchor: {
|
|
36
|
+
kind: AnchorKind.TESTID,
|
|
37
|
+
value: asString(asRecord(actResult.result)['testid']) ?? asString(args['ref']) ?? '',
|
|
38
|
+
// Carried so the saved capsule — which outlives this turn and becomes a regression flow
|
|
39
|
+
// when it goes green — still knows which file the failure came from.
|
|
40
|
+
...(actedSource === undefined ? {} : { source: actedSource }),
|
|
41
|
+
},
|
|
42
|
+
action: (asString(args['action']) ?? ActionType.CLICK),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
return saved ? id : undefined;
|
|
47
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ActionType } from '@reticlehq/core';
|
|
2
|
+
export declare function assertNotDestructive(action: ActionType, innerArgs: Record<string, unknown>, inspected: unknown): void;
|
|
3
|
+
/**
|
|
4
|
+
* A drag is judged on BOTH ends. Dropping a harmless row onto "Delete" is destructive, and the
|
|
5
|
+
* source alone never says so.
|
|
6
|
+
*/
|
|
7
|
+
export declare function assertDragNotDestructive(innerArgs: Record<string, unknown>, from: unknown, to: unknown): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ActionType, DANGEROUS_ACTION_CONFIRM_ARG, isDangerousActionText } from '@reticlehq/core';
|
|
2
|
+
import { asRecord, asString } from './tools-helpers.js';
|
|
3
|
+
/**
|
|
4
|
+
* Refuse to drive a money-moving or destructive control by accident.
|
|
5
|
+
*
|
|
6
|
+
* A native click is indistinguishable from a user's, so an agent exploring an unfamiliar app can
|
|
7
|
+
* refund a payment or delete an account while "just looking". The guard reads every text surface the
|
|
8
|
+
* control exposes — its name, its text, its value, where it points, and the form it submits — because
|
|
9
|
+
* a button labelled only with an icon still says what it does through its `formAction`.
|
|
10
|
+
*
|
|
11
|
+
* Opt in per action with `args.confirmDangerous: true`. Deliberately a THROW rather than a warning:
|
|
12
|
+
* a caller that has not thought about it must not proceed by ignoring a field.
|
|
13
|
+
*/
|
|
14
|
+
function descriptorText(value) {
|
|
15
|
+
const descriptor = asRecord(value);
|
|
16
|
+
return [
|
|
17
|
+
asString(descriptor['name']) ?? '',
|
|
18
|
+
asString(descriptor['text']) ?? '',
|
|
19
|
+
asString(descriptor['value']) ?? '',
|
|
20
|
+
asString(descriptor['href']) ?? '',
|
|
21
|
+
asString(descriptor['formAction']) ?? '',
|
|
22
|
+
asString(descriptor['formText']) ?? '',
|
|
23
|
+
].join(' ');
|
|
24
|
+
}
|
|
25
|
+
export function assertNotDestructive(action, innerArgs, inspected) {
|
|
26
|
+
if (action !== ActionType.CLICK && action !== ActionType.DBLCLICK)
|
|
27
|
+
return;
|
|
28
|
+
if (innerArgs[DANGEROUS_ACTION_CONFIRM_ARG] === true)
|
|
29
|
+
return;
|
|
30
|
+
if (!isDangerousActionText(descriptorText(inspected)))
|
|
31
|
+
return;
|
|
32
|
+
throw new Error(`potentially destructive native action blocked; retry with args.${DANGEROUS_ACTION_CONFIRM_ARG}=true`);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A drag is judged on BOTH ends. Dropping a harmless row onto "Delete" is destructive, and the
|
|
36
|
+
* source alone never says so.
|
|
37
|
+
*/
|
|
38
|
+
export function assertDragNotDestructive(innerArgs, from, to) {
|
|
39
|
+
if (innerArgs[DANGEROUS_ACTION_CONFIRM_ARG] === true)
|
|
40
|
+
return;
|
|
41
|
+
if (!isDangerousActionText(`${descriptorText(from)} ${descriptorText(to)}`))
|
|
42
|
+
return;
|
|
43
|
+
throw new Error(`potentially destructive native action blocked; retry with args.${DANGEROUS_ACTION_CONFIRM_ARG}=true`);
|
|
44
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure coercion + grading helpers behind the act tools.
|
|
3
|
+
*
|
|
4
|
+
* Split out when act-tools.ts crossed the 600-line cap. The seam is that nothing here touches a
|
|
5
|
+
* session, a command, or a tool definition — these are total functions over their arguments, which
|
|
6
|
+
* is why they can be tested without a browser and why they were the right thing to move.
|
|
7
|
+
*/
|
|
8
|
+
import { ActionType } from '@reticlehq/core';
|
|
9
|
+
import type { ElementBox } from '../input/real-input.js';
|
|
10
|
+
import { HonestyGrade } from '../honesty/honesty.js';
|
|
11
|
+
import type { ExpectedLink } from '../capsule/divergence.js';
|
|
12
|
+
/** The strongest consequence grade a set of expected links proves (signal > net > state > presence). */
|
|
13
|
+
export declare function gradeOf(links: readonly ExpectedLink[]): HonestyGrade;
|
|
14
|
+
/** Narrow an INSPECT result's `box` into a positive-area ElementBox (else undefined). */
|
|
15
|
+
export declare function asBox(value: unknown): ElementBox | undefined;
|
|
16
|
+
/** Outcome of a real-input attempt — real success (result set) or synthetic with a reason. */
|
|
17
|
+
export declare function asActionType(value: unknown): ActionType | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure coercion + grading helpers behind the act tools.
|
|
3
|
+
*
|
|
4
|
+
* Split out when act-tools.ts crossed the 600-line cap. The seam is that nothing here touches a
|
|
5
|
+
* session, a command, or a tool definition — these are total functions over their arguments, which
|
|
6
|
+
* is why they can be tested without a browser and why they were the right thing to move.
|
|
7
|
+
*/
|
|
8
|
+
import { ActionType } from '@reticlehq/core';
|
|
9
|
+
import { HonestyGrade } from '../honesty/honesty.js';
|
|
10
|
+
import { asNumber, asRecord, asString } from './tools-helpers.js';
|
|
11
|
+
/** The strongest consequence grade a set of expected links proves (signal > net > state > presence). */
|
|
12
|
+
export function gradeOf(links) {
|
|
13
|
+
if (links.some((l) => l.kind === 'signal'))
|
|
14
|
+
return HonestyGrade.SIGNAL;
|
|
15
|
+
if (links.some((l) => l.kind === 'net'))
|
|
16
|
+
return HonestyGrade.NET;
|
|
17
|
+
if (links.some((l) => l.kind === 'state'))
|
|
18
|
+
return HonestyGrade.STATE;
|
|
19
|
+
return HonestyGrade.PRESENCE;
|
|
20
|
+
}
|
|
21
|
+
/** Narrow an INSPECT result's `box` into a positive-area ElementBox (else undefined). */
|
|
22
|
+
export function asBox(value) {
|
|
23
|
+
const b = asRecord(asRecord(value)['box']);
|
|
24
|
+
const x = asNumber(b['x']);
|
|
25
|
+
const y = asNumber(b['y']);
|
|
26
|
+
const w = asNumber(b['width']);
|
|
27
|
+
const h = asNumber(b['height']);
|
|
28
|
+
if (x === undefined || y === undefined || w === undefined || h === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (w <= 0 || h <= 0)
|
|
31
|
+
return undefined; // zero-area (display:none) ⇒ native click would miss
|
|
32
|
+
return { x, y, width: w, height: h };
|
|
33
|
+
}
|
|
34
|
+
/** Outcome of a real-input attempt — real success (result set) or synthetic with a reason. */
|
|
35
|
+
export function asActionType(value) {
|
|
36
|
+
const raw = asString(value);
|
|
37
|
+
if (raw === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
return Object.values(ActionType).includes(raw) ? raw : undefined;
|
|
40
|
+
}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import { type ToolDef } from './tool-kit.js';
|
|
2
|
+
/**
|
|
3
|
+
* Narrow the wire's `action` to a real ActionType, or undefined.
|
|
4
|
+
*
|
|
5
|
+
* It used to be `asString(args['action']) ?? ''`, so an unknown or missing action became the empty
|
|
6
|
+
* string and travelled on — reaching the browser as a command it could not perform, and reported back
|
|
7
|
+
* as a generic failure rather than "that is not an action". Validate at the boundary, per the project's
|
|
8
|
+
* unknown-plus-narrowing rule, so a typo is rejected where it can still be explained.
|
|
9
|
+
*/
|
|
2
10
|
export declare const ACT_TOOLS: ToolDef[];
|
|
3
|
-
//# sourceMappingURL=act-tools.d.ts.map
|