@reticlehq/server 2.0.1 → 2.2.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/LICENSE-ENTERPRISE +37 -0
- package/README.md +5 -1
- package/dist/bridge-security.d.ts +1 -1
- package/dist/bridge-security.js +1 -1
- package/dist/bridge.d.ts +7 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +62 -6
- package/dist/bridge.js.map +1 -1
- package/dist/bridge.test-harness.d.ts +5 -0
- package/dist/bridge.test-harness.d.ts.map +1 -1
- package/dist/bridge.test-harness.js +4 -0
- package/dist/bridge.test-harness.js.map +1 -1
- package/dist/capsule/capsule-store.d.ts +66 -0
- package/dist/capsule/capsule-store.d.ts.map +1 -0
- package/dist/capsule/capsule-store.js +110 -0
- package/dist/capsule/capsule-store.js.map +1 -0
- package/dist/capsule/capsule.d.ts +19 -0
- package/dist/capsule/capsule.d.ts.map +1 -0
- package/dist/capsule/capsule.js +36 -0
- package/dist/capsule/capsule.js.map +1 -0
- package/dist/capsule/causal-summary.d.ts +36 -0
- package/dist/capsule/causal-summary.d.ts.map +1 -0
- package/dist/capsule/causal-summary.js +111 -0
- package/dist/capsule/causal-summary.js.map +1 -0
- package/dist/capsule/divergence.d.ts +31 -0
- package/dist/capsule/divergence.d.ts.map +1 -0
- package/dist/capsule/divergence.js +41 -0
- package/dist/capsule/divergence.js.map +1 -0
- package/dist/capsule/minimize.d.ts +13 -0
- package/dist/capsule/minimize.d.ts.map +1 -0
- package/dist/capsule/minimize.js +23 -0
- package/dist/capsule/minimize.js.map +1 -0
- package/dist/capsule/predicate-to-links.d.ts +9 -0
- package/dist/capsule/predicate-to-links.d.ts.map +1 -0
- package/dist/capsule/predicate-to-links.js +31 -0
- package/dist/capsule/predicate-to-links.js.map +1 -0
- package/dist/cli-flow-commands.d.ts +31 -0
- package/dist/cli-flow-commands.d.ts.map +1 -0
- package/dist/cli-flow-commands.js +207 -0
- package/dist/cli-flow-commands.js.map +1 -0
- package/dist/cli-launch.d.ts.map +1 -1
- package/dist/cli-launch.js +1 -2
- package/dist/cli-launch.js.map +1 -1
- package/dist/cli-parse.d.ts +18 -2
- package/dist/cli-parse.d.ts.map +1 -1
- package/dist/cli-parse.js +57 -0
- package/dist/cli-parse.js.map +1 -1
- package/dist/cli-port.d.ts +10 -4
- package/dist/cli-port.d.ts.map +1 -1
- package/dist/cli-port.js +32 -6
- package/dist/cli-port.js.map +1 -1
- package/dist/cli-verify.d.ts.map +1 -1
- package/dist/cli-verify.js +29 -10
- package/dist/cli-verify.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +83 -13
- package/dist/cli.js.map +1 -1
- package/dist/crawl/crawl-tools.d.ts.map +1 -1
- package/dist/crawl/crawl-tools.js +12 -0
- package/dist/crawl/crawl-tools.js.map +1 -1
- package/dist/crawl/crawl.d.ts +23 -1
- package/dist/crawl/crawl.d.ts.map +1 -1
- package/dist/crawl/crawl.js +42 -12
- package/dist/crawl/crawl.js.map +1 -1
- package/dist/daemon-resilience.d.ts +5 -5
- package/dist/daemon-resilience.js +5 -5
- package/dist/daemon.d.ts +9 -3
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +41 -8
- package/dist/daemon.js.map +1 -1
- package/dist/domain/domain-tools.d.ts.map +1 -1
- package/dist/domain/domain-tools.js +11 -1
- package/dist/domain/domain-tools.js.map +1 -1
- package/dist/domain/flow-risk.d.ts +4 -4
- package/dist/domain/flow-risk.js +4 -4
- package/dist/ee/audit-log.d.ts +2 -2
- package/dist/ee/audit-log.js +2 -2
- package/dist/events/event-filters.d.ts +35 -1
- package/dist/events/event-filters.d.ts.map +1 -1
- package/dist/events/event-filters.js +93 -6
- package/dist/events/event-filters.js.map +1 -1
- package/dist/events/predicate-eval.d.ts +15 -0
- package/dist/events/predicate-eval.d.ts.map +1 -1
- package/dist/events/predicate-eval.js +130 -9
- package/dist/events/predicate-eval.js.map +1 -1
- package/dist/events/predicate.d.ts +22 -1
- package/dist/events/predicate.d.ts.map +1 -1
- package/dist/events/predicate.js +169 -15
- package/dist/events/predicate.js.map +1 -1
- package/dist/events/ring-buffer.d.ts +10 -8
- package/dist/events/ring-buffer.d.ts.map +1 -1
- package/dist/events/ring-buffer.js +84 -25
- package/dist/events/ring-buffer.js.map +1 -1
- package/dist/flows/affected.d.ts +25 -0
- package/dist/flows/affected.d.ts.map +1 -0
- package/dist/flows/affected.js +36 -0
- package/dist/flows/affected.js.map +1 -0
- package/dist/flows/annotate.d.ts +4 -4
- package/dist/flows/annotate.js +4 -4
- package/dist/flows/assertion-integrity.d.ts +24 -0
- package/dist/flows/assertion-integrity.d.ts.map +1 -0
- package/dist/flows/assertion-integrity.js +27 -0
- package/dist/flows/assertion-integrity.js.map +1 -0
- package/dist/flows/assertion-tiers-store.d.ts +80 -0
- package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
- package/dist/flows/assertion-tiers-store.js +99 -0
- package/dist/flows/assertion-tiers-store.js.map +1 -0
- package/dist/flows/buddy-status.d.ts +25 -0
- package/dist/flows/buddy-status.d.ts.map +1 -0
- package/dist/flows/buddy-status.js +33 -0
- package/dist/flows/buddy-status.js.map +1 -0
- package/dist/flows/coverage.d.ts +28 -0
- package/dist/flows/coverage.d.ts.map +1 -0
- package/dist/flows/coverage.js +22 -0
- package/dist/flows/coverage.js.map +1 -0
- package/dist/flows/decision.d.ts.map +1 -1
- package/dist/flows/decision.js +18 -9
- package/dist/flows/decision.js.map +1 -1
- package/dist/flows/flake-store.d.ts +20 -0
- package/dist/flows/flake-store.d.ts.map +1 -0
- package/dist/flows/flake-store.js +59 -0
- package/dist/flows/flake-store.js.map +1 -0
- package/dist/flows/flake.d.ts +58 -0
- package/dist/flows/flake.d.ts.map +1 -0
- package/dist/flows/flake.js +36 -0
- package/dist/flows/flake.js.map +1 -0
- package/dist/flows/flow-classify.d.ts +8 -8
- package/dist/flows/flow-classify.d.ts.map +1 -1
- package/dist/flows/flow-classify.js +12 -20
- package/dist/flows/flow-classify.js.map +1 -1
- package/dist/flows/flow-replay-run.d.ts +6 -0
- package/dist/flows/flow-replay-run.d.ts.map +1 -1
- package/dist/flows/flow-replay-run.js +49 -0
- package/dist/flows/flow-replay-run.js.map +1 -1
- package/dist/flows/flow-replay.d.ts +9 -0
- package/dist/flows/flow-replay.d.ts.map +1 -1
- package/dist/flows/flow-replay.js +52 -18
- package/dist/flows/flow-replay.js.map +1 -1
- package/dist/flows/flow-report.d.ts +4 -4
- package/dist/flows/flow-report.d.ts.map +1 -1
- package/dist/flows/flow-report.js +2 -1
- package/dist/flows/flow-report.js.map +1 -1
- package/dist/flows/flow-sources.d.ts +20 -0
- package/dist/flows/flow-sources.d.ts.map +1 -0
- package/dist/flows/flow-sources.js +33 -0
- package/dist/flows/flow-sources.js.map +1 -0
- package/dist/flows/flow-tools.d.ts +13 -1
- package/dist/flows/flow-tools.d.ts.map +1 -1
- package/dist/flows/flow-tools.js +97 -152
- package/dist/flows/flow-tools.js.map +1 -1
- package/dist/flows/flows.d.ts +9 -4
- package/dist/flows/flows.d.ts.map +1 -1
- package/dist/flows/flows.js +39 -27
- package/dist/flows/flows.js.map +1 -1
- package/dist/flows/gate.d.ts +39 -0
- package/dist/flows/gate.d.ts.map +1 -0
- package/dist/flows/gate.js +34 -0
- package/dist/flows/gate.js.map +1 -0
- package/dist/flows/git-changed.d.ts +9 -0
- package/dist/flows/git-changed.d.ts.map +1 -0
- package/dist/flows/git-changed.js +25 -0
- package/dist/flows/git-changed.js.map +1 -0
- package/dist/flows/heal-run.d.ts +19 -0
- package/dist/flows/heal-run.d.ts.map +1 -0
- package/dist/flows/heal-run.js +137 -0
- package/dist/flows/heal-run.js.map +1 -0
- package/dist/flows/parallel-suite.d.ts +27 -0
- package/dist/flows/parallel-suite.d.ts.map +1 -0
- package/dist/flows/parallel-suite.js +51 -0
- package/dist/flows/parallel-suite.js.map +1 -0
- package/dist/flows/replay.d.ts +13 -0
- package/dist/flows/replay.d.ts.map +1 -1
- package/dist/flows/replay.js +56 -23
- package/dist/flows/replay.js.map +1 -1
- package/dist/flows/watch-batcher.d.ts +18 -0
- package/dist/flows/watch-batcher.d.ts.map +1 -0
- package/dist/flows/watch-batcher.js +20 -0
- package/dist/flows/watch-batcher.js.map +1 -0
- package/dist/honesty/blind-spots.d.ts +37 -0
- package/dist/honesty/blind-spots.d.ts.map +1 -0
- package/dist/honesty/blind-spots.js +57 -0
- package/dist/honesty/blind-spots.js.map +1 -0
- package/dist/honesty/honesty.d.ts +57 -0
- package/dist/honesty/honesty.d.ts.map +1 -0
- package/dist/honesty/honesty.js +63 -0
- package/dist/honesty/honesty.js.map +1 -0
- package/dist/http-server.d.ts +5 -9
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +5 -9
- package/dist/http-server.js.map +1 -1
- package/dist/idle-shutdown.d.ts +2 -2
- package/dist/idle-shutdown.js +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +131 -73
- package/dist/index.js.map +1 -1
- package/dist/init/agent-rules.d.ts +38 -0
- package/dist/init/agent-rules.d.ts.map +1 -0
- package/dist/init/agent-rules.js +65 -0
- package/dist/init/agent-rules.js.map +1 -0
- package/dist/init/mcp.d.ts.map +1 -1
- package/dist/init/mcp.js +4 -3
- package/dist/init/mcp.js.map +1 -1
- package/dist/init/plan.d.ts +6 -0
- package/dist/init/plan.d.ts.map +1 -1
- package/dist/init/plan.js +79 -3
- package/dist/init/plan.js.map +1 -1
- package/dist/init/run.d.ts.map +1 -1
- package/dist/init/run.js +4 -0
- package/dist/init/run.js.map +1 -1
- package/dist/init/snippets.js +1 -1
- package/dist/init/vite-config.d.ts +1 -1
- package/dist/init/vite-config.js +2 -2
- package/dist/init/vite-config.js.map +1 -1
- package/dist/input/network-detail.d.ts +74 -0
- package/dist/input/network-detail.d.ts.map +1 -0
- package/dist/input/network-detail.js +160 -0
- package/dist/input/network-detail.js.map +1 -0
- package/dist/input/network-mock-tools.d.ts.map +1 -1
- package/dist/input/network-mock-tools.js +1 -6
- package/dist/input/network-mock-tools.js.map +1 -1
- package/dist/input/network-mock.d.ts +4 -4
- package/dist/input/real-input.d.ts +44 -11
- package/dist/input/real-input.d.ts.map +1 -1
- package/dist/input/real-input.js +57 -9
- package/dist/input/real-input.js.map +1 -1
- package/dist/input/viewport-tools.d.ts.map +1 -1
- package/dist/input/viewport-tools.js +1 -6
- package/dist/input/viewport-tools.js.map +1 -1
- package/dist/journal/ambient-store.d.ts +16 -0
- package/dist/journal/ambient-store.d.ts.map +1 -0
- package/dist/journal/ambient-store.js +46 -0
- package/dist/journal/ambient-store.js.map +1 -0
- package/dist/journal/ambient.d.ts +48 -0
- package/dist/journal/ambient.d.ts.map +1 -0
- package/dist/journal/ambient.js +48 -0
- package/dist/journal/ambient.js.map +1 -0
- package/dist/journal/attach-journal.d.ts +22 -0
- package/dist/journal/attach-journal.d.ts.map +1 -0
- package/dist/journal/attach-journal.js +20 -0
- package/dist/journal/attach-journal.js.map +1 -0
- package/dist/journal/deviation-report.d.ts +28 -0
- package/dist/journal/deviation-report.d.ts.map +1 -0
- package/dist/journal/deviation-report.js +54 -0
- package/dist/journal/deviation-report.js.map +1 -0
- package/dist/journal/deviation-service.d.ts +12 -0
- package/dist/journal/deviation-service.d.ts.map +1 -0
- package/dist/journal/deviation-service.js +32 -0
- package/dist/journal/deviation-service.js.map +1 -0
- package/dist/journal/envelope-store.d.ts +19 -0
- package/dist/journal/envelope-store.d.ts.map +1 -0
- package/dist/journal/envelope-store.js +62 -0
- package/dist/journal/envelope-store.js.map +1 -0
- package/dist/journal/envelope.d.ts +232 -0
- package/dist/journal/envelope.d.ts.map +1 -0
- package/dist/journal/envelope.js +94 -0
- package/dist/journal/envelope.js.map +1 -0
- package/dist/journal/journal-query.d.ts +20 -0
- package/dist/journal/journal-query.d.ts.map +1 -0
- package/dist/journal/journal-query.js +28 -0
- package/dist/journal/journal-query.js.map +1 -0
- package/dist/journal/journal-recorder.d.ts +38 -0
- package/dist/journal/journal-recorder.d.ts.map +1 -0
- package/dist/journal/journal-recorder.js +81 -0
- package/dist/journal/journal-recorder.js.map +1 -0
- package/dist/journal/retention.d.ts +21 -0
- package/dist/journal/retention.d.ts.map +1 -0
- package/dist/journal/retention.js +50 -0
- package/dist/journal/retention.js.map +1 -0
- package/dist/journal/rollups.d.ts +49 -0
- package/dist/journal/rollups.d.ts.map +1 -0
- package/dist/journal/rollups.js +83 -0
- package/dist/journal/rollups.js.map +1 -0
- package/dist/journal/session-end.d.ts +32 -0
- package/dist/journal/session-end.d.ts.map +1 -0
- package/dist/journal/session-end.js +52 -0
- package/dist/journal/session-end.js.map +1 -0
- package/dist/journal/session-journal.d.ts +25 -0
- package/dist/journal/session-journal.d.ts.map +1 -0
- package/dist/journal/session-journal.js +168 -0
- package/dist/journal/session-journal.js.map +1 -0
- package/dist/license/license.d.ts +8 -3
- package/dist/license/license.d.ts.map +1 -1
- package/dist/license/license.js +34 -11
- package/dist/license/license.js.map +1 -1
- package/dist/mcp-proxy.d.ts +20 -0
- package/dist/mcp-proxy.d.ts.map +1 -1
- package/dist/mcp-proxy.js +52 -29
- package/dist/mcp-proxy.js.map +1 -1
- package/dist/mcp.d.ts +22 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +93 -10
- package/dist/mcp.js.map +1 -1
- package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
- package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
- package/dist/oracles/flow-instrument-gaps.js +45 -0
- package/dist/oracles/flow-instrument-gaps.js.map +1 -0
- package/dist/oracles/propose-consequences.d.ts +22 -0
- package/dist/oracles/propose-consequences.d.ts.map +1 -0
- package/dist/oracles/propose-consequences.js +93 -0
- package/dist/oracles/propose-consequences.js.map +1 -0
- package/dist/oracles/self-instrument.d.ts +32 -0
- package/dist/oracles/self-instrument.d.ts.map +1 -0
- package/dist/oracles/self-instrument.js +44 -0
- package/dist/oracles/self-instrument.js.map +1 -0
- package/dist/pairing-token.d.ts +1 -1
- package/dist/phenomena/phenomena.d.ts +27 -0
- package/dist/phenomena/phenomena.d.ts.map +1 -0
- package/dist/phenomena/phenomena.js +102 -0
- package/dist/phenomena/phenomena.js.map +1 -0
- package/dist/pool/browser-pool.d.ts +5 -3
- package/dist/pool/browser-pool.d.ts.map +1 -1
- package/dist/pool/browser-pool.js +21 -3
- package/dist/pool/browser-pool.js.map +1 -1
- package/dist/pool/playwright-launcher.d.ts +2 -2
- package/dist/pool/playwright-launcher.d.ts.map +1 -1
- package/dist/pool/playwright-launcher.js +20 -6
- package/dist/pool/playwright-launcher.js.map +1 -1
- package/dist/project/file-lock.d.ts +2 -0
- package/dist/project/file-lock.d.ts.map +1 -0
- package/dist/project/file-lock.js +24 -0
- package/dist/project/file-lock.js.map +1 -0
- package/dist/project/fs-port.d.ts +18 -0
- package/dist/project/fs-port.d.ts.map +1 -1
- package/dist/project/fs-port.js +24 -2
- package/dist/project/fs-port.js.map +1 -1
- package/dist/project/project-store.d.ts.map +1 -1
- package/dist/project/project-store.js +13 -7
- package/dist/project/project-store.js.map +1 -1
- package/dist/project/project-tools.d.ts +0 -6
- package/dist/project/project-tools.d.ts.map +1 -1
- package/dist/project/project-tools.js +25 -7
- package/dist/project/project-tools.js.map +1 -1
- package/dist/project/reticle-dir.d.ts +39 -14
- package/dist/project/reticle-dir.d.ts.map +1 -1
- package/dist/project/reticle-dir.js +30 -4
- package/dist/project/reticle-dir.js.map +1 -1
- package/dist/runs/build-verification-run.d.ts +1 -1
- package/dist/runs/build-verification-run.js +1 -1
- package/dist/runs/repair-prompt.d.ts +2 -0
- package/dist/runs/repair-prompt.d.ts.map +1 -1
- package/dist/runs/repair-prompt.js +14 -1
- package/dist/runs/repair-prompt.js.map +1 -1
- package/dist/runs/reticle-runner.d.ts +1 -1
- package/dist/runs/reticle-runner.d.ts.map +1 -1
- package/dist/runs/run-diff.d.ts +34 -0
- package/dist/runs/run-diff.d.ts.map +1 -0
- package/dist/runs/run-diff.js +71 -0
- package/dist/runs/run-diff.js.map +1 -0
- package/dist/runs/run-store.d.ts +6 -1
- package/dist/runs/run-store.d.ts.map +1 -1
- package/dist/runs/run-store.js +22 -2
- package/dist/runs/run-store.js.map +1 -1
- package/dist/runs/run-tools.d.ts.map +1 -1
- package/dist/runs/run-tools.js +16 -3
- package/dist/runs/run-tools.js.map +1 -1
- package/dist/runs/verify-server.js +1 -1
- package/dist/runs/verify-server.js.map +1 -1
- package/dist/server-version.d.ts +5 -0
- package/dist/server-version.d.ts.map +1 -1
- package/dist/server-version.js +5 -0
- package/dist/server-version.js.map +1 -1
- package/dist/session/control-envelope.d.ts +9 -1
- package/dist/session/control-envelope.d.ts.map +1 -1
- package/dist/session/control-envelope.js +13 -1
- package/dist/session/control-envelope.js.map +1 -1
- package/dist/session/live-control-tools.d.ts +1 -1
- package/dist/session/live-control-tools.d.ts.map +1 -1
- package/dist/session/live-control-tools.js +2 -7
- package/dist/session/live-control-tools.js.map +1 -1
- package/dist/session/live-control.d.ts +38 -0
- package/dist/session/live-control.d.ts.map +1 -0
- package/dist/session/live-control.js +64 -0
- package/dist/session/live-control.js.map +1 -0
- package/dist/session/observed-state.d.ts +46 -0
- package/dist/session/observed-state.d.ts.map +1 -0
- package/dist/session/observed-state.js +76 -0
- package/dist/session/observed-state.js.map +1 -0
- package/dist/session/output-budget.d.ts +9 -0
- package/dist/session/output-budget.d.ts.map +1 -1
- package/dist/session/output-budget.js +12 -1
- package/dist/session/output-budget.js.map +1 -1
- package/dist/session/review-store.d.ts +1 -1
- package/dist/session/review-store.d.ts.map +1 -1
- package/dist/session/review-store.js +2 -2
- package/dist/session/review-store.js.map +1 -1
- package/dist/session/session-manager.d.ts +9 -7
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +8 -8
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-readiness.js +1 -1
- package/dist/session/session-readiness.js.map +1 -1
- package/dist/session/session-reaper.d.ts +1 -1
- package/dist/session/session-reaper.js +1 -1
- package/dist/session/session-recommendation.d.ts +1 -1
- package/dist/session/session-recommendation.js +1 -1
- package/dist/session/session-tools.js +1 -1
- package/dist/session/session-tools.js.map +1 -1
- package/dist/session/session.d.ts +44 -12
- package/dist/session/session.d.ts.map +1 -1
- package/dist/session/session.js +116 -47
- package/dist/session/session.js.map +1 -1
- package/dist/tools/act-tools.d.ts.map +1 -1
- package/dist/tools/act-tools.js +257 -70
- package/dist/tools/act-tools.js.map +1 -1
- package/dist/tools/act-view.d.ts +4 -4
- package/dist/tools/act-view.js +4 -4
- package/dist/tools/assert-grade.d.ts.map +1 -1
- package/dist/tools/assert-grade.js +15 -26
- package/dist/tools/assert-grade.js.map +1 -1
- package/dist/tools/browser-tools.d.ts.map +1 -1
- package/dist/tools/browser-tools.js +32 -8
- package/dist/tools/browser-tools.js.map +1 -1
- package/dist/tools/contract-tools.d.ts.map +1 -1
- package/dist/tools/contract-tools.js +5 -0
- package/dist/tools/contract-tools.js.map +1 -1
- package/dist/tools/dynamic-tools.d.ts.map +1 -1
- package/dist/tools/dynamic-tools.js +7 -6
- package/dist/tools/dynamic-tools.js.map +1 -1
- package/dist/tools/invoke-tool.d.ts.map +1 -1
- package/dist/tools/invoke-tool.js +41 -30
- package/dist/tools/invoke-tool.js.map +1 -1
- package/dist/tools/lease-tools.d.ts +16 -0
- package/dist/tools/lease-tools.d.ts.map +1 -1
- package/dist/tools/lease-tools.js +11 -0
- package/dist/tools/lease-tools.js.map +1 -1
- package/dist/tools/merge-tools.d.ts +43 -0
- package/dist/tools/merge-tools.d.ts.map +1 -0
- package/dist/tools/merge-tools.js +66 -0
- package/dist/tools/merge-tools.js.map +1 -0
- package/dist/tools/observe-tools.d.ts.map +1 -1
- package/dist/tools/observe-tools.js +172 -29
- package/dist/tools/observe-tools.js.map +1 -1
- package/dist/tools/profiles.d.ts +18 -13
- package/dist/tools/profiles.d.ts.map +1 -1
- package/dist/tools/profiles.js +39 -33
- package/dist/tools/profiles.js.map +1 -1
- package/dist/tools/query-paginate.d.ts +9 -2
- package/dist/tools/query-paginate.d.ts.map +1 -1
- package/dist/tools/query-paginate.js +21 -4
- package/dist/tools/query-paginate.js.map +1 -1
- package/dist/tools/read-tools.d.ts.map +1 -1
- package/dist/tools/read-tools.js +95 -2
- package/dist/tools/read-tools.js.map +1 -1
- package/dist/tools/snapshot-delta.d.ts +2 -0
- package/dist/tools/snapshot-delta.d.ts.map +1 -1
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/snapshot-delta.js.map +1 -1
- package/dist/tools/tool-kit.d.ts +11 -2
- package/dist/tools/tool-kit.d.ts.map +1 -1
- package/dist/tools/tool-kit.js +24 -1
- package/dist/tools/tool-kit.js.map +1 -1
- package/dist/tools/tool-names.d.ts +19 -10
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/tools/tool-names.js +23 -13
- package/dist/tools/tool-names.js.map +1 -1
- package/dist/tools/tools-helpers.d.ts +12 -0
- package/dist/tools/tools-helpers.d.ts.map +1 -1
- package/dist/tools/tools-helpers.js +20 -0
- package/dist/tools/tools-helpers.js.map +1 -1
- package/dist/tools/tools.d.ts.map +1 -1
- package/dist/tools/tools.js +162 -12
- package/dist/tools/tools.js.map +1 -1
- package/dist/update/update-checker.d.ts +14 -1
- package/dist/update/update-checker.d.ts.map +1 -1
- package/dist/update/update-checker.js +9 -5
- package/dist/update/update-checker.js.map +1 -1
- package/dist/update/updater.d.ts +20 -2
- package/dist/update/updater.d.ts.map +1 -1
- package/dist/update/updater.js +48 -14
- package/dist/update/updater.js.map +1 -1
- package/dist/visual/visual-tools.d.ts.map +1 -1
- package/dist/visual/visual-tools.js +1 -6
- package/dist/visual/visual-tools.js.map +1 -1
- package/package.json +8 -3
- package/dist/update/update-tools.d.ts +0 -3
- package/dist/update/update-tools.d.ts.map +0 -1
- package/dist/update/update-tools.js +0 -94
- package/dist/update/update-tools.js.map +0 -1
package/dist/events/predicate.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ElementState, ReticleCommand, } from '@reticlehq/core';
|
|
2
2
|
import { selectPath, capDepth } from '../session/state-select.js';
|
|
3
|
+
import { predicateToExpectedLinks } from '../capsule/predicate-to-links.js';
|
|
4
|
+
import { isAmbient, ambientKeyOf } from '../journal/ambient.js';
|
|
3
5
|
import { PredicateSchema, matchValue, evalNet, evalRoute, evalConsole, evalAnimation, evalSignal, evalSettled, } from './predicate-eval.js';
|
|
4
6
|
export { PredicateSchema };
|
|
5
7
|
async function matchOnce(session, query, state) {
|
|
@@ -8,19 +10,59 @@ async function matchOnce(session, query, state) {
|
|
|
8
10
|
return { matched: false, count: 0, elements: [] };
|
|
9
11
|
return (res.result ?? { matched: false, count: 0, elements: [] });
|
|
10
12
|
}
|
|
11
|
-
async function evalElement(session, query, state, absent) {
|
|
13
|
+
async function evalElement(session, query, state, absent, diagnose) {
|
|
12
14
|
const match = await matchOnce(session, query, state);
|
|
15
|
+
const subject = JSON.stringify(query);
|
|
16
|
+
// A given-but-missing scope is handled ASYMMETRICALLY, because "absent" and "present" ask different
|
|
17
|
+
// questions of a scope that no longer exists:
|
|
18
|
+
// - ABSENT: an element is trivially absent from a container that isn't there. This is also the
|
|
19
|
+
// everyday "wait for the #overlay/#spinner/#modal to disappear" pattern (scope the wait to the
|
|
20
|
+
// node being removed) — treating scopeMissing as a hard fail there burned the whole timeout and
|
|
21
|
+
// flipped a correct green to red. So scopeMissing satisfies an absence check.
|
|
22
|
+
// - PRESENT: you cannot confirm an element is present inside a scope that resolved to nothing, and
|
|
23
|
+
// silently widening to the whole page is the original false green. So scopeMissing FAILS presence
|
|
24
|
+
// (on the wait_for path this just keeps polling until the scope appears).
|
|
13
25
|
if (absent) {
|
|
26
|
+
if (match.scopeMissing === true) {
|
|
27
|
+
return { pass: true, evidence: { absent: true, scopeMissing: true } };
|
|
28
|
+
}
|
|
14
29
|
return match.matched
|
|
15
30
|
? {
|
|
16
31
|
pass: false,
|
|
17
32
|
failureReason: `expected element to be absent but found ${String(match.count)}`,
|
|
33
|
+
observed: `${String(match.count)} element(s) matching ${subject}`,
|
|
34
|
+
expected: `no element matching ${subject}`,
|
|
35
|
+
assertion: 'element.absent',
|
|
18
36
|
evidence: match.elements,
|
|
19
37
|
}
|
|
20
38
|
: { pass: true, evidence: { absent: true } };
|
|
21
39
|
}
|
|
40
|
+
if (match.scopeMissing === true) {
|
|
41
|
+
return {
|
|
42
|
+
pass: false,
|
|
43
|
+
failureReason: `scope resolved to no element — cannot confirm ${subject} is present`,
|
|
44
|
+
observed: 'the requested scope is not on the page (unmounted or selector matched nothing)',
|
|
45
|
+
expected: `an element matching ${subject} within an existing scope`,
|
|
46
|
+
assertion: 'element.present',
|
|
47
|
+
evidence: { scopeMissing: true },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
22
50
|
if (match.matched)
|
|
23
51
|
return { pass: true, evidence: match.elements };
|
|
52
|
+
// The near-miss diagnostic below costs one or two EXTRA MATCH round-trips. It only enriches a FAILED
|
|
53
|
+
// verdict, and a wait loop's interim rechecks read nothing but `pass` — so on the poll path (diagnose
|
|
54
|
+
// false) skip straight to the plain fail. Under an event flood a role+name element wait was firing
|
|
55
|
+
// two live-DOM scans per recheck for a diagnostic no interim eval ever reads; the final timeout eval
|
|
56
|
+
// still runs with diagnose=true and produces the full near-miss.
|
|
57
|
+
if (!diagnose) {
|
|
58
|
+
return {
|
|
59
|
+
pass: false,
|
|
60
|
+
failureReason: `no element matched ${subject}${state === undefined ? '' : ` in state '${state}'`}`,
|
|
61
|
+
observed: 'no matching element on the page',
|
|
62
|
+
expected: `an element matching ${subject}${state === undefined ? '' : ` in state '${state}'`}`,
|
|
63
|
+
assertion: 'element.present',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
24
66
|
// Diagnostic near-miss: was it there but in the wrong state, or a similar element present?
|
|
25
67
|
if (state !== undefined) {
|
|
26
68
|
const relaxed = await matchOnce(session, query, undefined);
|
|
@@ -28,6 +70,9 @@ async function evalElement(session, query, state, absent) {
|
|
|
28
70
|
return {
|
|
29
71
|
pass: false,
|
|
30
72
|
failureReason: `element exists but not in state '${state}'`,
|
|
73
|
+
observed: `element matching ${subject} is present, states: ${relaxed.elements[0]?.states.join(', ') ?? 'unknown'}`,
|
|
74
|
+
expected: `element matching ${subject} in state '${state}'`,
|
|
75
|
+
assertion: 'element.state',
|
|
31
76
|
evidence: { nearMiss: relaxed.elements },
|
|
32
77
|
};
|
|
33
78
|
}
|
|
@@ -41,19 +86,35 @@ async function evalElement(session, query, state, absent) {
|
|
|
41
86
|
.map((e) => e.name)
|
|
42
87
|
.filter((n) => n.length > 0)
|
|
43
88
|
.join(', ')}`,
|
|
89
|
+
observed: `${String(roleOnly.count)} '${query.role}' element(s), named: ${roleOnly.elements
|
|
90
|
+
.map((e) => e.name)
|
|
91
|
+
.filter((n) => n.length > 0)
|
|
92
|
+
.join(', ')}`,
|
|
93
|
+
expected: `a '${query.role}' named '${query.name}'`,
|
|
94
|
+
assertion: 'element.role+name',
|
|
44
95
|
evidence: { nearMiss: roleOnly.elements },
|
|
45
96
|
};
|
|
46
97
|
}
|
|
47
98
|
}
|
|
48
99
|
return {
|
|
49
100
|
pass: false,
|
|
50
|
-
failureReason: `no element matched ${
|
|
101
|
+
failureReason: `no element matched ${subject}${state === undefined ? '' : ` in state '${state}'`}`,
|
|
102
|
+
observed: 'no matching element on the page',
|
|
103
|
+
expected: `an element matching ${subject}${state === undefined ? '' : ` in state '${state}'`}`,
|
|
104
|
+
assertion: 'element.present',
|
|
51
105
|
};
|
|
52
106
|
}
|
|
53
107
|
async function evalState(session, p) {
|
|
54
108
|
const res = await session.command(ReticleCommand.STATE_READ, p.store !== undefined ? { store: p.store } : {});
|
|
55
|
-
if (!res.ok)
|
|
56
|
-
return {
|
|
109
|
+
if (!res.ok) {
|
|
110
|
+
return {
|
|
111
|
+
pass: false,
|
|
112
|
+
failureReason: 'state read failed',
|
|
113
|
+
observed: 'the store could not be read',
|
|
114
|
+
expected: 'a readable registered store',
|
|
115
|
+
assertion: 'state.unreadable',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
57
118
|
const stores = (res.result ?? {}).stores ?? {};
|
|
58
119
|
const names = Object.keys(stores);
|
|
59
120
|
const storeName = p.store ?? (names.length === 1 ? names[0] : undefined);
|
|
@@ -70,6 +131,9 @@ async function evalState(session, p) {
|
|
|
70
131
|
return {
|
|
71
132
|
pass: false,
|
|
72
133
|
failureReason: `state path '${p.path}' not found in store '${storeName}'`,
|
|
134
|
+
observed: `no path '${p.path}' in store '${storeName}'`,
|
|
135
|
+
expected: `store '${storeName}' to expose '${p.path}'`,
|
|
136
|
+
assertion: 'state.path-missing',
|
|
73
137
|
evidence: { availableKeys: selection.availableKeys },
|
|
74
138
|
};
|
|
75
139
|
}
|
|
@@ -83,16 +147,24 @@ async function evalState(session, p) {
|
|
|
83
147
|
return {
|
|
84
148
|
pass: false,
|
|
85
149
|
failureReason: `state '${p.path}' is ${JSON.stringify(capDepth(selection.value, 0))}, expected ${JSON.stringify(want)}`,
|
|
150
|
+
observed: `${p.path} = ${JSON.stringify(capDepth(selection.value, 0))}`,
|
|
151
|
+
expected: `${p.path} = ${JSON.stringify(want)}`,
|
|
152
|
+
assertion: 'state.equals',
|
|
86
153
|
evidence: { store: storeName, path: p.path, value: capDepth(selection.value, 1) },
|
|
87
154
|
};
|
|
88
155
|
}
|
|
89
|
-
export async function evaluatePredicate(session, predicate, since = 0
|
|
156
|
+
export async function evaluatePredicate(session, predicate, since = 0,
|
|
157
|
+
// Compute the (extra-round-trip) near-miss diagnostics on element failures. Default true so a
|
|
158
|
+
// one-shot assert is fully diagnostic; the wait loop passes false on its interim polls (which read
|
|
159
|
+
// only `pass`) and true on the final timeout eval, so a flood no longer pays for a diagnostic nobody
|
|
160
|
+
// reads. Only element/text failures have a near-miss; everything else ignores this.
|
|
161
|
+
diagnose = true) {
|
|
90
162
|
const events = session.eventsSince(since);
|
|
91
163
|
switch (predicate.kind) {
|
|
92
164
|
case 'element':
|
|
93
|
-
return evalElement(session, predicate.query, predicate.state, predicate.absent ?? false);
|
|
165
|
+
return evalElement(session, predicate.query, predicate.state, predicate.absent ?? false, diagnose);
|
|
94
166
|
case 'text':
|
|
95
|
-
return evalElement(session, { text: predicate.contains }, predicate.visible === true ? ElementState.VISIBLE : undefined, predicate.absent ?? false);
|
|
167
|
+
return evalElement(session, { text: predicate.contains }, predicate.visible === true ? ElementState.VISIBLE : undefined, predicate.absent ?? false, diagnose);
|
|
96
168
|
case 'net':
|
|
97
169
|
return evalNet(events, predicate);
|
|
98
170
|
case 'route':
|
|
@@ -105,10 +177,16 @@ export async function evaluatePredicate(session, predicate, since = 0) {
|
|
|
105
177
|
return evalSignal(events, predicate);
|
|
106
178
|
case 'state':
|
|
107
179
|
return evalState(session, predicate);
|
|
108
|
-
case 'settled':
|
|
109
|
-
|
|
180
|
+
case 'settled': {
|
|
181
|
+
// Drop events on learned-ambient regions (chat/ticker churn) before the settle check — by ref
|
|
182
|
+
// alone, NOT by attribution: window-attribution ("happened during the action window") is a time
|
|
183
|
+
// heuristic, never causation, so a chat message arriving mid-window must not hold settle open.
|
|
184
|
+
const counts = session.ambientCounts?.();
|
|
185
|
+
const settleEvents = counts === undefined ? events : events.filter((e) => !isAmbient(counts, ambientKeyOf(e)));
|
|
186
|
+
return evalSettled(settleEvents, predicate, session.elapsed());
|
|
187
|
+
}
|
|
110
188
|
case 'allOf': {
|
|
111
|
-
const results = await Promise.all(predicate.predicates.map((p) => evaluatePredicate(session, p, since)));
|
|
189
|
+
const results = await Promise.all(predicate.predicates.map((p) => evaluatePredicate(session, p, since, diagnose)));
|
|
112
190
|
const failed = results.find((r) => !r.pass);
|
|
113
191
|
return failed === undefined
|
|
114
192
|
? { pass: true, evidence: results.map((r) => r.evidence) }
|
|
@@ -119,14 +197,14 @@ export async function evaluatePredicate(session, predicate, since = 0) {
|
|
|
119
197
|
};
|
|
120
198
|
}
|
|
121
199
|
case 'anyOf': {
|
|
122
|
-
const results = await Promise.all(predicate.predicates.map((p) => evaluatePredicate(session, p, since)));
|
|
200
|
+
const results = await Promise.all(predicate.predicates.map((p) => evaluatePredicate(session, p, since, diagnose)));
|
|
123
201
|
const passed = results.find((r) => r.pass);
|
|
124
202
|
return passed !== undefined
|
|
125
203
|
? { pass: true, evidence: passed.evidence }
|
|
126
204
|
: { pass: false, failureReason: 'no sub-predicate of anyOf matched', evidence: results };
|
|
127
205
|
}
|
|
128
206
|
case 'not': {
|
|
129
|
-
const inner = await evaluatePredicate(session, predicate.predicate, since);
|
|
207
|
+
const inner = await evaluatePredicate(session, predicate.predicate, since, diagnose);
|
|
130
208
|
return inner.pass
|
|
131
209
|
? { pass: false, failureReason: 'negated predicate unexpectedly held', evidence: inner }
|
|
132
210
|
: { pass: true };
|
|
@@ -135,6 +213,12 @@ export async function evaluatePredicate(session, predicate, since = 0) {
|
|
|
135
213
|
return { pass: false, failureReason: 'unknown predicate' };
|
|
136
214
|
}
|
|
137
215
|
}
|
|
216
|
+
/** Backstop poll cadence — guarantees a re-check even if no event fires (e.g. a `settled` wait). */
|
|
217
|
+
const POLL_INTERVAL_MS = 150;
|
|
218
|
+
/** Minimum gap between consecutive event-driven rechecks, so an event flood can't drive back-to-back
|
|
219
|
+
* DOM/STATE round-trips. Small enough that added pass-detection latency is negligible next to the
|
|
220
|
+
* poll cadence, large enough to collapse a per-frame event storm into a bounded recheck rate. */
|
|
221
|
+
const MIN_RECHECK_GAP_MS = 25;
|
|
138
222
|
/**
|
|
139
223
|
* Evaluate now, else wait for it to become true (on each event + a poll) until timeout. `since` is
|
|
140
224
|
* the event-time floor (see evaluatePredicate) so a waiter cannot resolve on a stale buffered event.
|
|
@@ -146,6 +230,7 @@ export function waitForPredicate(session, predicate, timeoutMs, since = 0) {
|
|
|
146
230
|
pass: false,
|
|
147
231
|
failureReason: error instanceof Error ? error.message : String(error),
|
|
148
232
|
});
|
|
233
|
+
let cooldownTimer;
|
|
149
234
|
const finish = (result) => {
|
|
150
235
|
if (done)
|
|
151
236
|
return;
|
|
@@ -153,28 +238,72 @@ export function waitForPredicate(session, predicate, timeoutMs, since = 0) {
|
|
|
153
238
|
unsub();
|
|
154
239
|
clearInterval(interval);
|
|
155
240
|
clearTimeout(timer);
|
|
241
|
+
if (cooldownTimer !== undefined)
|
|
242
|
+
clearTimeout(cooldownTimer);
|
|
156
243
|
resolve(result);
|
|
157
244
|
};
|
|
245
|
+
// Coalesce re-checks: at most ONE evaluatePredicate is ever in flight (each can be a browser
|
|
246
|
+
// MATCH/STATE_READ round-trip). Events that arrive while one is running set a single trailing
|
|
247
|
+
// re-check instead of each firing their own command — otherwise a page emitting an event per
|
|
248
|
+
// animation frame fans out hundreds of concurrent round-trips and collapses under backpressure.
|
|
249
|
+
//
|
|
250
|
+
// Beyond coalescing, PACE the trailing rechecks: without a gap the next eval fired the instant the
|
|
251
|
+
// previous finished, so under an event flood one round-trip was permanently in flight (~184/sec at
|
|
252
|
+
// 5ms RTT) — each a live-DOM scan on the app's main thread, the "the dashboard is janky while the
|
|
253
|
+
// agent waits" case. The FIRST check on an idle loop still runs immediately (leading edge, so fast
|
|
254
|
+
// detection is unchanged); only back-to-back rechecks under sustained load wait MIN_RECHECK_GAP_MS.
|
|
255
|
+
let inFlight = false;
|
|
256
|
+
let cooling = false;
|
|
257
|
+
let pendingRecheck = false;
|
|
158
258
|
const check = () => {
|
|
159
|
-
|
|
259
|
+
if (done)
|
|
260
|
+
return;
|
|
261
|
+
if (inFlight || cooling) {
|
|
262
|
+
pendingRecheck = true;
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
inFlight = true;
|
|
266
|
+
// Interim poll: read only `pass`, so skip the extra near-miss round-trips (diagnose=false). The
|
|
267
|
+
// final timeout eval below runs with full diagnostics.
|
|
268
|
+
void evaluatePredicate(session, predicate, since, false)
|
|
160
269
|
.then((r) => {
|
|
161
270
|
if (r.pass)
|
|
162
271
|
finish(r);
|
|
163
272
|
})
|
|
164
273
|
.catch((error) => {
|
|
165
274
|
finish(failed(error));
|
|
275
|
+
})
|
|
276
|
+
.finally(() => {
|
|
277
|
+
inFlight = false;
|
|
278
|
+
if (done)
|
|
279
|
+
return;
|
|
280
|
+
// Enter a short cooldown; process a coalesced recheck when it ends. The 150ms poll is the
|
|
281
|
+
// backstop, so a missed trailing edge is caught within one interval regardless.
|
|
282
|
+
cooling = true;
|
|
283
|
+
cooldownTimer = setTimeout(() => {
|
|
284
|
+
cooling = false;
|
|
285
|
+
if (pendingRecheck && !done) {
|
|
286
|
+
pendingRecheck = false;
|
|
287
|
+
check();
|
|
288
|
+
}
|
|
289
|
+
}, MIN_RECHECK_GAP_MS);
|
|
166
290
|
});
|
|
167
291
|
};
|
|
168
292
|
const unsub = session.onEvent(() => {
|
|
169
293
|
check();
|
|
170
294
|
});
|
|
171
|
-
const interval = setInterval(check,
|
|
295
|
+
const interval = setInterval(check, POLL_INTERVAL_MS);
|
|
172
296
|
const timer = setTimeout(() => {
|
|
173
297
|
void evaluatePredicate(session, predicate, since)
|
|
174
298
|
.then((r) => {
|
|
299
|
+
// Spread the near-miss, do NOT hand-copy two fields. The oracle computes observed / expected
|
|
300
|
+
// / assertion — the structured cause the repair literature ranks above prose — and the old
|
|
301
|
+
// `{ pass, evidence, failureReason }` construction DISCARDED them on every timed-out wait and
|
|
302
|
+
// assert. So the highest-value localization signal was computed and then thrown away exactly
|
|
303
|
+
// on the failure path where it matters, no matter what the schema declared.
|
|
175
304
|
finish({
|
|
305
|
+
...r,
|
|
176
306
|
pass: false,
|
|
177
|
-
evidence: r.evidence,
|
|
178
307
|
failureReason: r.failureReason ?? 'timed out waiting for predicate',
|
|
179
308
|
});
|
|
180
309
|
})
|
|
@@ -185,4 +314,29 @@ export function waitForPredicate(session, predicate, timeoutMs, since = 0) {
|
|
|
185
314
|
check();
|
|
186
315
|
});
|
|
187
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* The ExpectedLinks a GREEN verdict actually PROVED — not merely the ones it declared. Identical to
|
|
319
|
+
* predicateToExpectedLinks except for `anyOf`: an OR greens on a SINGLE branch, so only the branch that
|
|
320
|
+
* held may contribute its link. Grading a green anyOf off the declared links would let the honesty grade
|
|
321
|
+
* claim a signal/net consequence that was only one of the options and never fired — and a `minGrade:net`
|
|
322
|
+
* gate would then trust a verdict that proved nothing but presence. That is the exact false green the
|
|
323
|
+
* grade exists to prevent, sitting inside the grade itself.
|
|
324
|
+
*
|
|
325
|
+
* Call ONLY on a green verdict: a leaf and every `allOf` branch are returned unconditionally because a
|
|
326
|
+
* green top verdict guarantees they held (allOf needs all; a bare leaf IS the verdict). Only anyOf, where
|
|
327
|
+
* green ⇏ this-branch-held, re-checks each branch and keeps the winners.
|
|
328
|
+
*/
|
|
329
|
+
export async function provenExpectedLinks(session, predicate, since = 0) {
|
|
330
|
+
if (predicate.kind === 'allOf') {
|
|
331
|
+
const per = await Promise.all(predicate.predicates.map((p) => provenExpectedLinks(session, p, since)));
|
|
332
|
+
return per.flat();
|
|
333
|
+
}
|
|
334
|
+
if (predicate.kind === 'anyOf') {
|
|
335
|
+
const per = await Promise.all(predicate.predicates.map(async (p) => (await evaluatePredicate(session, p, since)).pass
|
|
336
|
+
? provenExpectedLinks(session, p, since)
|
|
337
|
+
: []));
|
|
338
|
+
return per.flat();
|
|
339
|
+
}
|
|
340
|
+
return predicateToExpectedLinks(predicate);
|
|
341
|
+
}
|
|
188
342
|
//# sourceMappingURL=predicate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../src/events/predicate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../src/events/predicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,27 +6,29 @@ interface RingBufferOptions {
|
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Bounded, time-aware event store per session. The single data structure that powers
|
|
9
|
-
* observe
|
|
10
|
-
* forward (await new events).
|
|
9
|
+
* observe/wait_for/assert — it lets us look both backward (recent buffer) and
|
|
10
|
+
* forward (await new events).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Eviction advances a HEAD index instead of shift/splice — O(1) per dropped event (was O(n) per
|
|
13
|
+
* shift, i.e. O(n) per push at steady state under the DOM/animation floods). The dead prefix is
|
|
14
|
+
* compacted away once it dominates, so the backing arrays stay bounded (amortized O(1)).
|
|
15
|
+
*
|
|
16
|
+
* `now` is injected so the buffer is deterministically testable (inject the clock, never call
|
|
17
|
+
* Date.now inside logic).
|
|
14
18
|
*/
|
|
15
19
|
export declare class RingBuffer {
|
|
16
20
|
#private;
|
|
17
21
|
constructor(options?: RingBufferOptions);
|
|
18
|
-
push(event: ReticleEvent, now: number): void;
|
|
22
|
+
push(event: ReticleEvent, now: number, byteSize?: number): void;
|
|
19
23
|
/** Events at or after a given timestamp cursor. */
|
|
20
24
|
since(cursor: number): ReticleEvent[];
|
|
21
25
|
/** Events within the last `windowMs`, relative to `now`. */
|
|
22
26
|
window(windowMs: number, now: number): ReticleEvent[];
|
|
23
|
-
/** Snapshot of buffer health for the agent —
|
|
27
|
+
/** Snapshot of buffer health for the agent — live events held and cumulative drops since connect. */
|
|
24
28
|
bufferHealth(): {
|
|
25
29
|
total: number;
|
|
26
30
|
dropped: number;
|
|
27
31
|
};
|
|
28
|
-
/** Reset the drop counter and return the count that was cleared (for per-observe accounting). */
|
|
29
|
-
resetDropped(): number;
|
|
30
32
|
}
|
|
31
33
|
export {};
|
|
32
34
|
//# sourceMappingURL=ring-buffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAqBrF,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;gBAWT,OAAO,GAAE,iBAAsB;IAU3C,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAU/D,mDAAmD;IACnD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAIrC,4DAA4D;IAC5D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE;IAqErD,qGAAqG;IACrG,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAGnD"}
|
|
@@ -1,11 +1,32 @@
|
|
|
1
|
-
import { RING_BUFFER_DEFAULTS } from '@reticlehq/core';
|
|
1
|
+
import { EventType, RING_BUFFER_DEFAULTS } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* The high-volume, low-signal floor. These fire continuously on any live page (count-up text, CSS
|
|
4
|
+
* animation frames, React commits, health heartbeats, scroll) and are the ONLY thing that should be
|
|
5
|
+
* sacrificed when the buffer is full. Everything else — a failed request, a console error, a domain
|
|
6
|
+
* signal, a truncation/blind-spot marker — is scarce evidence a verdict depends on, and a churning
|
|
7
|
+
* region must never be able to push it out of the window.
|
|
8
|
+
*/
|
|
9
|
+
const CHURN_TYPES = new Set([
|
|
10
|
+
EventType.DOM_TEXT,
|
|
11
|
+
EventType.ANIM_START,
|
|
12
|
+
EventType.ANIM_END,
|
|
13
|
+
EventType.RENDER_COMMIT,
|
|
14
|
+
EventType.PAGE_HEALTH,
|
|
15
|
+
EventType.SCROLL_POSITION,
|
|
16
|
+
]);
|
|
17
|
+
/** How far forward to look for a churn event to sacrifice before falling back to plain FIFO. */
|
|
18
|
+
const CHURN_SCAN_LIMIT = 256;
|
|
2
19
|
/**
|
|
3
20
|
* Bounded, time-aware event store per session. The single data structure that powers
|
|
4
|
-
* observe
|
|
5
|
-
* forward (await new events).
|
|
21
|
+
* observe/wait_for/assert — it lets us look both backward (recent buffer) and
|
|
22
|
+
* forward (await new events).
|
|
6
23
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
24
|
+
* Eviction advances a HEAD index instead of shift/splice — O(1) per dropped event (was O(n) per
|
|
25
|
+
* shift, i.e. O(n) per push at steady state under the DOM/animation floods). The dead prefix is
|
|
26
|
+
* compacted away once it dominates, so the backing arrays stay bounded (amortized O(1)).
|
|
27
|
+
*
|
|
28
|
+
* `now` is injected so the buffer is deterministically testable (inject the clock, never call
|
|
29
|
+
* Date.now inside logic).
|
|
9
30
|
*/
|
|
10
31
|
export class RingBuffer {
|
|
11
32
|
#maxEvents;
|
|
@@ -13,6 +34,8 @@ export class RingBuffer {
|
|
|
13
34
|
#maxBytes;
|
|
14
35
|
#events = [];
|
|
15
36
|
#eventBytes = [];
|
|
37
|
+
/** Index of the first LIVE event; [0, #head) are evicted but not yet compacted out of the arrays. */
|
|
38
|
+
#head = 0;
|
|
16
39
|
#totalBytes = 0;
|
|
17
40
|
#droppedCount = 0;
|
|
18
41
|
constructor(options = {}) {
|
|
@@ -20,9 +43,14 @@ export class RingBuffer {
|
|
|
20
43
|
this.#maxAgeMs = options.maxAgeMs ?? RING_BUFFER_DEFAULTS.MAX_AGE_MS;
|
|
21
44
|
this.#maxBytes = options.maxBytes ?? RING_BUFFER_DEFAULTS.MAX_BYTES;
|
|
22
45
|
}
|
|
23
|
-
|
|
46
|
+
#liveCount() {
|
|
47
|
+
return this.#events.length - this.#head;
|
|
48
|
+
}
|
|
49
|
+
push(event, now, byteSize) {
|
|
24
50
|
this.#events.push(event);
|
|
25
|
-
|
|
51
|
+
// Prefer the size measured at the parse boundary (the raw wire frame the bridge already has) over
|
|
52
|
+
// re-serializing here — a JSON.stringify per pushed event was the buffer's highest constant cost.
|
|
53
|
+
const bytes = byteSize ?? Buffer.byteLength(JSON.stringify(event), 'utf8');
|
|
26
54
|
this.#eventBytes.push(bytes);
|
|
27
55
|
this.#totalBytes += bytes;
|
|
28
56
|
this.#evict(now);
|
|
@@ -35,8 +63,9 @@ export class RingBuffer {
|
|
|
35
63
|
window(windowMs, now) {
|
|
36
64
|
return this.#events.slice(this.#lowerBound(now - windowMs));
|
|
37
65
|
}
|
|
66
|
+
/** Binary search over the LIVE window [#head, length) for the first event at/after `target`. */
|
|
38
67
|
#lowerBound(target) {
|
|
39
|
-
let lo =
|
|
68
|
+
let lo = this.#head;
|
|
40
69
|
let hi = this.#events.length;
|
|
41
70
|
while (lo < hi) {
|
|
42
71
|
const mid = (lo + hi) >>> 1;
|
|
@@ -48,28 +77,58 @@ export class RingBuffer {
|
|
|
48
77
|
return lo;
|
|
49
78
|
}
|
|
50
79
|
#evict(now) {
|
|
51
|
-
const before = this.#events.length;
|
|
52
80
|
const cutoff = now - this.#maxAgeMs;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
81
|
+
const before = this.#liveCount();
|
|
82
|
+
// Cap/byte pressure: sacrifice the CHURN floor before scarce evidence. The head is usually churn on
|
|
83
|
+
// a busy page, so this stays the O(1) head-advance; only when the oldest event is worth keeping do we
|
|
84
|
+
// look forward (bounded) for a churn event to drop instead.
|
|
85
|
+
// Byte pressure keeps at least ONE event: a single event larger than the whole byte budget would
|
|
86
|
+
// otherwise be pushed and then immediately self-evicted, so a waiter for it never saw it and only
|
|
87
|
+
// `dropped` moved. Bytes is a soft cap and per-value serialization already bounds any one event, so
|
|
88
|
+
// keeping the sole survivor over the budget is the correct trade. The count cap (maxEvents, ~2000)
|
|
89
|
+
// is a hard bound and stays `> maxEvents`.
|
|
90
|
+
while (this.#liveCount() > this.#maxEvents ||
|
|
91
|
+
(this.#totalBytes > this.#maxBytes && this.#liveCount() > 1)) {
|
|
92
|
+
if (CHURN_TYPES.has(this.#events[this.#head]?.type ?? '')) {
|
|
93
|
+
this.#totalBytes -= this.#eventBytes[this.#head] ?? 0;
|
|
94
|
+
this.#head += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const victim = this.#findChurnAfterHead();
|
|
98
|
+
if (victim === -1) {
|
|
99
|
+
// Buffer genuinely full of high-signal events — fall back to FIFO so it stays bounded.
|
|
100
|
+
this.#totalBytes -= this.#eventBytes[this.#head] ?? 0;
|
|
101
|
+
this.#head += 1;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
this.#totalBytes -= this.#eventBytes[victim] ?? 0;
|
|
105
|
+
this.#events.splice(victim, 1); // order preserved; victim > #head so the head stays valid
|
|
106
|
+
this.#eventBytes.splice(victim, 1);
|
|
57
107
|
}
|
|
58
|
-
while ((this.#events[
|
|
59
|
-
this.#
|
|
60
|
-
this.#
|
|
108
|
+
while (this.#liveCount() > 0 && (this.#events[this.#head]?.t ?? cutoff) < cutoff) {
|
|
109
|
+
this.#totalBytes -= this.#eventBytes[this.#head] ?? 0;
|
|
110
|
+
this.#head += 1;
|
|
111
|
+
}
|
|
112
|
+
this.#droppedCount += before - this.#liveCount();
|
|
113
|
+
// Reclaim the dead prefix once it dominates the backing arrays (amortized O(1) compaction).
|
|
114
|
+
if (this.#head > 1024 && this.#head * 2 >= this.#events.length) {
|
|
115
|
+
this.#events = this.#events.slice(this.#head);
|
|
116
|
+
this.#eventBytes = this.#eventBytes.slice(this.#head);
|
|
117
|
+
this.#head = 0;
|
|
61
118
|
}
|
|
62
|
-
this.#droppedCount += before - this.#events.length;
|
|
63
119
|
}
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
120
|
+
/** First churn event after the head, or -1 if none within the bounded scan (keeps eviction cheap). */
|
|
121
|
+
#findChurnAfterHead() {
|
|
122
|
+
const end = Math.min(this.#events.length, this.#head + CHURN_SCAN_LIMIT);
|
|
123
|
+
for (let i = this.#head + 1; i < end; i++) {
|
|
124
|
+
if (CHURN_TYPES.has(this.#events[i]?.type ?? ''))
|
|
125
|
+
return i;
|
|
126
|
+
}
|
|
127
|
+
return -1;
|
|
67
128
|
}
|
|
68
|
-
/**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.#droppedCount = 0;
|
|
72
|
-
return n;
|
|
129
|
+
/** Snapshot of buffer health for the agent — live events held and cumulative drops since connect. */
|
|
130
|
+
bufferHealth() {
|
|
131
|
+
return { total: this.#liveCount(), dropped: this.#droppedCount };
|
|
73
132
|
}
|
|
74
133
|
}
|
|
75
134
|
//# sourceMappingURL=ring-buffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-buffer.js","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAqB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ring-buffer.js","sourceRoot":"","sources":["../../src/events/ring-buffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The file→flow reverse index — the heart of the unavoidable loop. When a file changes, which flows must
|
|
3
|
+
* re-verify? A flow persists the source files its anchors were stamped from (its "sources manifest"); a
|
|
4
|
+
* changed file that appears in a flow's manifest makes that flow affected. A flow with NO manifest
|
|
5
|
+
* (recorded before v2.2, or un-stampable) is `unknown` — and unknown always means affected, never
|
|
6
|
+
* silently skipped: the loop fails safe toward re-verifying.
|
|
7
|
+
*/
|
|
8
|
+
export interface FlowSources {
|
|
9
|
+
name: string;
|
|
10
|
+
/** Repo-relative source files this flow's anchors came from. Empty/absent ⇒ unknown provenance. */
|
|
11
|
+
sources?: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export interface AffectedResult {
|
|
14
|
+
/** Flows to re-verify: those touching a changed file, plus all unknown-provenance flows. */
|
|
15
|
+
affected: string[];
|
|
16
|
+
/** Of the affected, which were included only because their provenance is unknown (fail-safe). */
|
|
17
|
+
unknownProvenance: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Which flows are affected by a set of changed files. Deterministic; a flow with no sources manifest is
|
|
21
|
+
* always affected (fail-safe). `changedFiles` and flow sources are matched by normalized path suffix so
|
|
22
|
+
* a repo-relative change matches an absolute stamp and vice-versa.
|
|
23
|
+
*/
|
|
24
|
+
export declare function affectedFlows(flows: readonly FlowSources[], changedFiles: readonly string[]): AffectedResult;
|
|
25
|
+
//# sourceMappingURL=affected.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../src/flows/affected.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iGAAiG;IACjG,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,cAAc,CAkBhB"}
|