@reticlehq/server 2.1.0 → 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 +22 -3
- 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-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 +81 -2
- 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 +36 -9
- 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 +1 -1
- package/dist/daemon.js +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 +29 -1
- package/dist/events/event-filters.d.ts.map +1 -1
- package/dist/events/event-filters.js +75 -1
- 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 +97 -18
- 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 +154 -20
- package/dist/events/predicate.js.map +1 -1
- package/dist/events/ring-buffer.d.ts +3 -3
- package/dist/events/ring-buffer.d.ts.map +1 -1
- package/dist/events/ring-buffer.js +54 -8
- 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 +16 -8
- 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.js +8 -8
- package/dist/flows/flow-replay-run.d.ts.map +1 -1
- package/dist/flows/flow-replay-run.js +36 -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 +48 -13
- package/dist/flows/flow-replay.js.map +1 -1
- package/dist/flows/flow-report.d.ts +4 -4
- 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 +92 -5
- 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 +38 -21
- 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 +1 -1
- package/dist/flows/heal-run.js +1 -1
- 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.map +1 -1
- package/dist/flows/replay.js +33 -11
- 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 -5
- package/dist/http-server.js +4 -4
- package/dist/idle-shutdown.d.ts +2 -2
- package/dist/idle-shutdown.js +2 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -13
- 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/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.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/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 +45 -27
- package/dist/mcp-proxy.js.map +1 -1
- package/dist/mcp.d.ts +14 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +79 -9
- 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.map +1 -1
- package/dist/pool/playwright-launcher.js +9 -2
- 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 +24 -1
- 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/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.js +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 +9 -0
- 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 +43 -11
- package/dist/session/session.d.ts.map +1 -1
- package/dist/session/session.js +115 -46
- package/dist/session/session.js.map +1 -1
- package/dist/tools/act-tools.d.ts.map +1 -1
- package/dist/tools/act-tools.js +252 -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/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 +32 -29
- 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 +30 -1
- 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 +3 -2
- package/dist/tools/tool-kit.d.ts.map +1 -1
- package/dist/tools/tool-kit.js +11 -1
- package/dist/tools/tool-kit.js.map +1 -1
- package/dist/tools/tool-names.d.ts +18 -10
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/tools/tool-names.js +22 -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/updater.d.ts +1 -1
- package/dist/update/updater.js +2 -2
- package/dist/update/updater.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
|
@@ -67,8 +67,16 @@ function num(value) {
|
|
|
67
67
|
export function matchValue(got, want) {
|
|
68
68
|
if (want === '*')
|
|
69
69
|
return got !== undefined;
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
// An object is an OPERATOR container only if it actually carries a `$`-prefixed operator. An empty
|
|
71
|
+
// `{}` (or an object with no `$` key) used to enter this branch, iterate zero recognized operators,
|
|
72
|
+
// and `return true` — so `equals: {}` / `dataMatches: {status: {}}` was a green assertion that
|
|
73
|
+
// passed against ANYTHING, undefined included: the exact false green the oracle exists to catch.
|
|
74
|
+
// Without an operator it is a literal to compare, and falls through to strict equality below.
|
|
75
|
+
const ops = typeof want === 'object' && want !== null && !Array.isArray(want)
|
|
76
|
+
? Object.entries(want)
|
|
77
|
+
: undefined;
|
|
78
|
+
if (ops !== undefined && ops.some(([op]) => op.startsWith('$'))) {
|
|
79
|
+
for (const [op, val] of ops) {
|
|
72
80
|
const n = typeof got === 'number' ? got : NaN;
|
|
73
81
|
switch (op) {
|
|
74
82
|
case '$gte':
|
|
@@ -146,25 +154,52 @@ export function evalNet(events, p) {
|
|
|
146
154
|
: {
|
|
147
155
|
pass: false,
|
|
148
156
|
failureReason: `expected ${String(p.count)} network call(s) matching ${JSON.stringify({ method: p.method, urlContains: p.urlContains, status: p.status })}, saw ${String(matches.length)}`,
|
|
157
|
+
observed: `${String(matches.length)} matching network call(s)`,
|
|
158
|
+
expected: `exactly ${String(p.count)} matching ${JSON.stringify({ method: p.method, urlContains: p.urlContains, status: p.status })}`,
|
|
159
|
+
assertion: 'net.count',
|
|
149
160
|
};
|
|
150
161
|
}
|
|
151
162
|
const hit = matches[0];
|
|
152
163
|
return hit !== undefined
|
|
153
164
|
? { pass: true, evidence: hit.data }
|
|
154
|
-
: {
|
|
165
|
+
: {
|
|
166
|
+
pass: false,
|
|
167
|
+
failureReason: `no network call matched ${JSON.stringify(p)}`,
|
|
168
|
+
observed: 'no matching network call in the window',
|
|
169
|
+
expected: `at least one call matching ${JSON.stringify(p)}`,
|
|
170
|
+
assertion: 'net.present',
|
|
171
|
+
};
|
|
155
172
|
}
|
|
156
173
|
export function evalRoute(events, p) {
|
|
157
174
|
const routes = events.filter((e) => e.type === EventType.ROUTE_CHANGE);
|
|
158
175
|
const last = routes.at(-1);
|
|
159
176
|
if (last === undefined) {
|
|
160
|
-
return {
|
|
177
|
+
return {
|
|
178
|
+
pass: false,
|
|
179
|
+
failureReason: 'no route change observed',
|
|
180
|
+
observed: 'no route change in the window',
|
|
181
|
+
expected: `a route change to ${p.pathname ?? p.contains ?? 'any route'}`,
|
|
182
|
+
assertion: 'route.changed',
|
|
183
|
+
};
|
|
161
184
|
}
|
|
162
185
|
const pathname = str(last.data['pathname']) ?? str(last.data['to']) ?? '';
|
|
163
186
|
if (p.pathname !== undefined && pathname !== p.pathname) {
|
|
164
|
-
return {
|
|
187
|
+
return {
|
|
188
|
+
pass: false,
|
|
189
|
+
failureReason: `route is '${pathname}', expected '${p.pathname}'`,
|
|
190
|
+
observed: `route '${pathname}'`,
|
|
191
|
+
expected: `route '${p.pathname}'`,
|
|
192
|
+
assertion: 'route.pathname',
|
|
193
|
+
};
|
|
165
194
|
}
|
|
166
195
|
if (p.contains !== undefined && !pathname.includes(p.contains)) {
|
|
167
|
-
return {
|
|
196
|
+
return {
|
|
197
|
+
pass: false,
|
|
198
|
+
failureReason: `route '${pathname}' does not contain '${p.contains}'`,
|
|
199
|
+
observed: `route '${pathname}'`,
|
|
200
|
+
expected: `a route containing '${p.contains}'`,
|
|
201
|
+
assertion: 'route.contains',
|
|
202
|
+
};
|
|
168
203
|
}
|
|
169
204
|
return { pass: true, evidence: last.data };
|
|
170
205
|
}
|
|
@@ -183,6 +218,9 @@ export function evalConsole(events, p) {
|
|
|
183
218
|
return {
|
|
184
219
|
pass: false,
|
|
185
220
|
failureReason: `console level '${p.level}' is not captured — Reticle instruments console.log, console.warn, console.error only`,
|
|
221
|
+
observed: `level '${p.level}' is not instrumented, so no event of it can ever exist`,
|
|
222
|
+
expected: 'a level Reticle captures: log, warn, or error',
|
|
223
|
+
assertion: 'console.uninstrumented-level',
|
|
186
224
|
};
|
|
187
225
|
}
|
|
188
226
|
const matches = events.filter((e) => {
|
|
@@ -205,12 +243,21 @@ export function evalConsole(events, p) {
|
|
|
205
243
|
: {
|
|
206
244
|
pass: false,
|
|
207
245
|
failureReason: `expected no ${p.level ?? 'console'} entries but found ${String(matches.length)}`,
|
|
246
|
+
observed: `${String(matches.length)} ${p.level ?? 'console'} entr${matches.length === 1 ? 'y' : 'ies'}`,
|
|
247
|
+
expected: `no ${p.level ?? 'console'} entries`,
|
|
248
|
+
assertion: 'console.absent',
|
|
208
249
|
evidence: matches.map((e) => e.data),
|
|
209
250
|
};
|
|
210
251
|
}
|
|
211
252
|
return matches.length > 0
|
|
212
253
|
? { pass: true, evidence: matches.map((e) => e.data) }
|
|
213
|
-
: {
|
|
254
|
+
: {
|
|
255
|
+
pass: false,
|
|
256
|
+
failureReason: `no ${p.level ?? 'console'} entries found`,
|
|
257
|
+
observed: `no ${p.level ?? 'console'} entries in the window`,
|
|
258
|
+
expected: `at least one ${p.level ?? 'console'} entry`,
|
|
259
|
+
assertion: 'console.present',
|
|
260
|
+
};
|
|
214
261
|
}
|
|
215
262
|
export function evalAnimation(events, p) {
|
|
216
263
|
const wantType = p.completed === true ? EventType.ANIM_END : EventType.ANIM_START;
|
|
@@ -225,7 +272,13 @@ export function evalAnimation(events, p) {
|
|
|
225
272
|
});
|
|
226
273
|
return hit !== undefined
|
|
227
274
|
? { pass: true, evidence: hit.data }
|
|
228
|
-
: {
|
|
275
|
+
: {
|
|
276
|
+
pass: false,
|
|
277
|
+
failureReason: `no animation matched ${JSON.stringify(p)}`,
|
|
278
|
+
observed: 'no matching animation in the window',
|
|
279
|
+
expected: `an animation matching ${JSON.stringify(p)}`,
|
|
280
|
+
assertion: 'animation.present',
|
|
281
|
+
};
|
|
229
282
|
}
|
|
230
283
|
export function evalSignal(events, p) {
|
|
231
284
|
const hit = events.find((e) => {
|
|
@@ -251,6 +304,16 @@ export function evalSignal(events, p) {
|
|
|
251
304
|
failureReason: sameName.length > 0
|
|
252
305
|
? `signal '${p.name ?? '(any)'}' fired ${String(sameName.length)}x but data didn't match`
|
|
253
306
|
: `no signal matched ${JSON.stringify(p)}`,
|
|
307
|
+
observed: sameName.length > 0
|
|
308
|
+
? `signal '${p.name ?? '(any)'}' fired ${String(sameName.length)}x, payload: ${JSON.stringify(sameName[0])}`
|
|
309
|
+
: `signal '${p.name ?? '(any)'}' never fired in the window`,
|
|
310
|
+
expected: p.dataMatches === undefined
|
|
311
|
+
? `signal '${p.name ?? '(any)'}' to fire`
|
|
312
|
+
: `signal '${p.name ?? '(any)'}' with payload matching ${JSON.stringify(p.dataMatches)}`,
|
|
313
|
+
// Two distinct failures behind one prose line: never fired at all, versus fired with the wrong
|
|
314
|
+
// payload. They call for different fixes, so the agent should not have to tell them apart by
|
|
315
|
+
// reading the sentence.
|
|
316
|
+
assertion: sameName.length > 0 ? 'signal.payload' : 'signal.absent',
|
|
254
317
|
evidence: sameName.length > 0 ? { nearMiss: sameName } : undefined,
|
|
255
318
|
};
|
|
256
319
|
}
|
|
@@ -291,26 +354,39 @@ export function evalSettled(events, p, now) {
|
|
|
291
354
|
// still in flight — the page is NOT settled no matter how quiet the DOM has gone. Without this,
|
|
292
355
|
// a slow save reads as "settled" the instant its spinner stops mutating the DOM: the exact
|
|
293
356
|
// false-green `settled` exists to prevent.
|
|
294
|
-
|
|
357
|
+
//
|
|
358
|
+
// COUNT per id, don't just set-membership: a retry that reuses a request id (two NET_PENDING, one
|
|
359
|
+
// NET_REQUEST) would mark the id "done" and hide the second, still-flying request — an in-flight
|
|
360
|
+
// UNDERCOUNT that greens settle while a request is live. In-flight for an id is pendings minus
|
|
361
|
+
// completions (floored at 0); unkeyed pendings each count as one.
|
|
362
|
+
const pendingById = new Map();
|
|
363
|
+
const doneById = new Map();
|
|
364
|
+
let unkeyedPending = 0;
|
|
295
365
|
for (const e of events) {
|
|
296
|
-
if (e.type === EventType.
|
|
366
|
+
if (e.type === EventType.NET_PENDING) {
|
|
297
367
|
const id = str(e.data['id']);
|
|
298
|
-
if (id
|
|
299
|
-
|
|
368
|
+
if (id === undefined)
|
|
369
|
+
unkeyedPending += 1;
|
|
370
|
+
else
|
|
371
|
+
pendingById.set(id, (pendingById.get(id) ?? 0) + 1);
|
|
300
372
|
}
|
|
301
|
-
|
|
302
|
-
let inFlight = 0;
|
|
303
|
-
for (const e of events) {
|
|
304
|
-
if (e.type === EventType.NET_PENDING) {
|
|
373
|
+
else if (e.type === EventType.NET_REQUEST) {
|
|
305
374
|
const id = str(e.data['id']);
|
|
306
|
-
if (id
|
|
307
|
-
|
|
375
|
+
if (id !== undefined)
|
|
376
|
+
doneById.set(id, (doneById.get(id) ?? 0) + 1);
|
|
308
377
|
}
|
|
309
378
|
}
|
|
379
|
+
let inFlight = unkeyedPending;
|
|
380
|
+
for (const [id, pending] of pendingById) {
|
|
381
|
+
inFlight += Math.max(0, pending - (doneById.get(id) ?? 0));
|
|
382
|
+
}
|
|
310
383
|
if (inFlight > 0) {
|
|
311
384
|
return {
|
|
312
385
|
pass: false,
|
|
313
386
|
failureReason: `not settled: ${String(inFlight)} request(s) still in flight`,
|
|
387
|
+
observed: `${String(inFlight)} request(s) still in flight`,
|
|
388
|
+
expected: 'no requests in flight',
|
|
389
|
+
assertion: 'settled.in-flight',
|
|
314
390
|
evidence: { settled: false, inFlight },
|
|
315
391
|
};
|
|
316
392
|
}
|
|
@@ -335,6 +411,9 @@ export function evalSettled(events, p, now) {
|
|
|
335
411
|
return {
|
|
336
412
|
pass: false,
|
|
337
413
|
failureReason: `not settled: last activity (${String(lastType)}) ${String(quietForMs)}ms ago, need ${String(quietMs)}ms quiet`,
|
|
414
|
+
observed: `last activity was ${String(lastType)}, ${String(quietForMs)}ms ago`,
|
|
415
|
+
expected: `${String(quietMs)}ms of quiet`,
|
|
416
|
+
assertion: 'settled.quiet',
|
|
338
417
|
evidence: { quietForMs, lastActivity: lastType },
|
|
339
418
|
};
|
|
340
419
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate-eval.js","sourceRoot":"","sources":["../../src/events/predicate-eval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"predicate-eval.js","sourceRoot":"","sources":["../../src/events/predicate-eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type CommandResult, type ReticleEvent } from '@reticlehq/core';
|
|
2
|
+
import type { ExpectedLink } from '../capsule/divergence.js';
|
|
3
|
+
import { type AmbientCounts } from '../journal/ambient.js';
|
|
2
4
|
import { PredicateSchema, type Predicate, type EvalResult } from './predicate-eval.js';
|
|
3
5
|
export { PredicateSchema };
|
|
4
6
|
export type { Predicate, EvalResult };
|
|
@@ -9,11 +11,30 @@ export interface PredicateSession {
|
|
|
9
11
|
onEvent(listener: (event: ReticleEvent) => void): () => void;
|
|
10
12
|
/** Milliseconds since connect — the same clock that stamps event `t` (injected, testable). */
|
|
11
13
|
elapsed(): number;
|
|
14
|
+
/**
|
|
15
|
+
* Learned per-ref ambient-churn counts (real-time regions that churn with no action driving them).
|
|
16
|
+
* The settle oracle drops events on learned-ambient refs so a chat/ticker page can still go quiet.
|
|
17
|
+
* Optional: a session without ambient learning simply omits it and settle behaves as before.
|
|
18
|
+
*/
|
|
19
|
+
ambientCounts?(): AmbientCounts;
|
|
12
20
|
}
|
|
13
|
-
export declare function evaluatePredicate(session: PredicateSession, predicate: Predicate, since?: number): Promise<EvalResult>;
|
|
21
|
+
export declare function evaluatePredicate(session: PredicateSession, predicate: Predicate, since?: number, diagnose?: boolean): Promise<EvalResult>;
|
|
14
22
|
/**
|
|
15
23
|
* Evaluate now, else wait for it to become true (on each event + a poll) until timeout. `since` is
|
|
16
24
|
* the event-time floor (see evaluatePredicate) so a waiter cannot resolve on a stale buffered event.
|
|
17
25
|
*/
|
|
18
26
|
export declare function waitForPredicate(session: PredicateSession, predicate: Predicate, timeoutMs: number, since?: number): Promise<EvalResult>;
|
|
27
|
+
/**
|
|
28
|
+
* The ExpectedLinks a GREEN verdict actually PROVED — not merely the ones it declared. Identical to
|
|
29
|
+
* predicateToExpectedLinks except for `anyOf`: an OR greens on a SINGLE branch, so only the branch that
|
|
30
|
+
* held may contribute its link. Grading a green anyOf off the declared links would let the honesty grade
|
|
31
|
+
* claim a signal/net consequence that was only one of the options and never fired — and a `minGrade:net`
|
|
32
|
+
* gate would then trust a verdict that proved nothing but presence. That is the exact false green the
|
|
33
|
+
* grade exists to prevent, sitting inside the grade itself.
|
|
34
|
+
*
|
|
35
|
+
* Call ONLY on a green verdict: a leaf and every `allOf` branch are returned unconditionally because a
|
|
36
|
+
* green top verdict guarantees they held (allOf needs all; a bare leaf IS the verdict). Only anyOf, where
|
|
37
|
+
* green ⇏ this-branch-held, re-checks each branch and keeps the winners.
|
|
38
|
+
*/
|
|
39
|
+
export declare function provenExpectedLinks(session: PredicateSession, predicate: Predicate, since?: number): Promise<ExpectedLink[]>;
|
|
19
40
|
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../src/events/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../src/events/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EACL,eAAe,EAQf,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAEtC,wFAAwF;AACxF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC5C,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7D,8FAA8F;IAC9F,OAAO,IAAI,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,IAAI,aAAa,CAAC;CACjC;AA6KD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,EACpB,KAAK,SAAI,EAKT,QAAQ,UAAO,GACd,OAAO,CAAC,UAAU,CAAC,CAuErB;AASD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAI,GACR,OAAO,CAAC,UAAU,CAAC,CAqFrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,SAAS,EACpB,KAAK,SAAI,GACR,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBzB"}
|
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,23 +238,34 @@ 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
|
};
|
|
158
245
|
// Coalesce re-checks: at most ONE evaluatePredicate is ever in flight (each can be a browser
|
|
159
246
|
// MATCH/STATE_READ round-trip). Events that arrive while one is running set a single trailing
|
|
160
247
|
// re-check instead of each firing their own command — otherwise a page emitting an event per
|
|
161
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.
|
|
162
255
|
let inFlight = false;
|
|
256
|
+
let cooling = false;
|
|
163
257
|
let pendingRecheck = false;
|
|
164
258
|
const check = () => {
|
|
165
259
|
if (done)
|
|
166
260
|
return;
|
|
167
|
-
if (inFlight) {
|
|
261
|
+
if (inFlight || cooling) {
|
|
168
262
|
pendingRecheck = true;
|
|
169
263
|
return;
|
|
170
264
|
}
|
|
171
265
|
inFlight = true;
|
|
172
|
-
|
|
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)
|
|
173
269
|
.then((r) => {
|
|
174
270
|
if (r.pass)
|
|
175
271
|
finish(r);
|
|
@@ -179,22 +275,35 @@ export function waitForPredicate(session, predicate, timeoutMs, since = 0) {
|
|
|
179
275
|
})
|
|
180
276
|
.finally(() => {
|
|
181
277
|
inFlight = false;
|
|
182
|
-
if (
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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);
|
|
186
290
|
});
|
|
187
291
|
};
|
|
188
292
|
const unsub = session.onEvent(() => {
|
|
189
293
|
check();
|
|
190
294
|
});
|
|
191
|
-
const interval = setInterval(check,
|
|
295
|
+
const interval = setInterval(check, POLL_INTERVAL_MS);
|
|
192
296
|
const timer = setTimeout(() => {
|
|
193
297
|
void evaluatePredicate(session, predicate, since)
|
|
194
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.
|
|
195
304
|
finish({
|
|
305
|
+
...r,
|
|
196
306
|
pass: false,
|
|
197
|
-
evidence: r.evidence,
|
|
198
307
|
failureReason: r.failureReason ?? 'timed out waiting for predicate',
|
|
199
308
|
});
|
|
200
309
|
})
|
|
@@ -205,4 +314,29 @@ export function waitForPredicate(session, predicate, timeoutMs, since = 0) {
|
|
|
205
314
|
check();
|
|
206
315
|
});
|
|
207
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
|
+
}
|
|
208
342
|
//# sourceMappingURL=predicate.js.map
|