@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
package/dist/crawl/crawl.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ export interface CrawlSession {
|
|
|
4
4
|
command(name: string, args?: Record<string, unknown>): Promise<CommandResult>;
|
|
5
5
|
elapsed(): number;
|
|
6
6
|
eventsSince(cursor: number): ReticleEvent[];
|
|
7
|
+
/**
|
|
8
|
+
* Attribution window around each click. Optional so a caller can supply a minimal session, but a real
|
|
9
|
+
* session MUST provide it: without a window the click's own effects carry no actionId, and an
|
|
10
|
+
* unattributed ref-bearing event is learned as ambient background churn. A crawl clicks up to 25
|
|
11
|
+
* controls, so it can single-handedly teach the settle oracle to ignore the regions the app actually
|
|
12
|
+
* reacts in — turning a later `{kind:"settled"}` into a false green.
|
|
13
|
+
*/
|
|
14
|
+
beginAction?(tool: string, args: Record<string, unknown>): void;
|
|
15
|
+
finishAction?(error?: string, settled?: boolean, settleMs?: number): void;
|
|
7
16
|
}
|
|
8
17
|
type CrawlSleep = (ms: number) => Promise<void>;
|
|
9
18
|
export interface CrawlAnomaly {
|
|
@@ -12,7 +21,18 @@ export interface CrawlAnomaly {
|
|
|
12
21
|
ref: string;
|
|
13
22
|
desc: string;
|
|
14
23
|
detail: string;
|
|
24
|
+
/**
|
|
25
|
+
* Where the control is written, as `file:line`.
|
|
26
|
+
*
|
|
27
|
+
* A crawl reports problems across a whole app, so it is the output most likely to be read as a
|
|
28
|
+
* work list — and "e42 does nothing" is a work list item that starts with a search. The location
|
|
29
|
+
* comes free: the crawl already clicks each control, and an act result carries the source captured
|
|
30
|
+
* alongside its anchor. Absent in production builds and apps without the build plugin.
|
|
31
|
+
*/
|
|
32
|
+
source?: string;
|
|
15
33
|
}
|
|
34
|
+
/** Said out loud when the page was larger than one snapshot, so a clean sweep cannot mean "all clear". */
|
|
35
|
+
export declare const CAPPED_SNAPSHOT_NOTE = "the page exceeded one snapshot, so controls past the cap were never seen \u2014 interactiveFound is a floor, not a total; re-run with a narrower `scope` to cover the rest";
|
|
16
36
|
export interface CrawlReport {
|
|
17
37
|
interactiveFound: number;
|
|
18
38
|
stepsRun: number;
|
|
@@ -24,8 +44,10 @@ export interface CrawlReport {
|
|
|
24
44
|
};
|
|
25
45
|
/** Descriptions of the controls actually clicked. */
|
|
26
46
|
visited: string[];
|
|
27
|
-
/** True when
|
|
47
|
+
/** True when coverage was bounded — by the step budget, or by the page exceeding one snapshot. */
|
|
28
48
|
truncated: boolean;
|
|
49
|
+
/** Present only when the snapshot itself was capped, i.e. controls exist that were never listed. */
|
|
50
|
+
coverageNote?: string;
|
|
29
51
|
}
|
|
30
52
|
export interface CrawlOptions {
|
|
31
53
|
maxSteps?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/crawl/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAIhB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/crawl/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAIhB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAUzB,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9E,OAAO,IAAI,MAAM,CAAC;IAClB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAC5C;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3E;AAED,KAAK,UAAU,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB,+KACwI,CAAC;AAE1K,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kGAAkG;IAClG,SAAS,EAAE,OAAO,CAAC;IACnB,oGAAoG;IACpG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA6BD;;;;;;GAMG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,WAAW,CAAC,CAwGtB"}
|
package/dist/crawl/crawl.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { ActionType, CRAWL_DEFAULTS, CrawlAnomalyKind, DANGEROUS_ACTION_CONFIRM_ARG, EventType, ReticleCommand, } from '@reticlehq/core';
|
|
2
|
-
import { parseInteractive, asRecord, asNumber, asString } from '../tools/tools-helpers.js';
|
|
2
|
+
import { parseInteractive, asRecord, asNumber, asString, sourceOf, } from '../tools/tools-helpers.js';
|
|
3
|
+
import { ReticleTool } from '../tools/tool-names.js';
|
|
4
|
+
/** Said out loud when the page was larger than one snapshot, so a clean sweep cannot mean "all clear". */
|
|
5
|
+
export const CAPPED_SNAPSHOT_NOTE = 'the page exceeded one snapshot, so controls past the cap were never seen — interactiveFound is a floor, not a total; re-run with a narrower `scope` to cover the rest';
|
|
3
6
|
/** Any buffer event that proves the app reacted to a click (vs a dead/no-op control). */
|
|
4
7
|
function isActivity(e) {
|
|
5
8
|
return (e.type === EventType.NET_REQUEST ||
|
|
@@ -37,8 +40,14 @@ export async function crawl(session, opts, sleep) {
|
|
|
37
40
|
mode: 'interactive',
|
|
38
41
|
...(opts.scope !== undefined ? { scope: opts.scope } : {}),
|
|
39
42
|
});
|
|
40
|
-
const
|
|
43
|
+
const snapshot = snap.ok ? (snap.result ?? {}) : {};
|
|
44
|
+
const tree = snapshot.tree ?? '';
|
|
41
45
|
const items = parseInteractive(tree);
|
|
46
|
+
// The snapshot walk stops at its node cap and returns a DOCUMENT-ORDER PREFIX, so on a large page
|
|
47
|
+
// the controls it never reached are not merely unclicked — they were never seen. Reporting
|
|
48
|
+
// `interactiveFound` without this would state a control count that is really a cap, and
|
|
49
|
+
// `truncated:false` would positively assert that nothing was cut.
|
|
50
|
+
const coverageCapped = snapshot.truncated === true;
|
|
42
51
|
const anomalies = [];
|
|
43
52
|
const visited = [];
|
|
44
53
|
const counts = { consoleErrors: 0, failedRequests: 0, deadControls: 0 };
|
|
@@ -56,13 +65,24 @@ export async function crawl(session, opts, sleep) {
|
|
|
56
65
|
stepsRun += 1;
|
|
57
66
|
visited.push(item.desc);
|
|
58
67
|
const since = session.elapsed();
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
session.beginAction?.(ReticleTool.CRAWL, { ref: item.ref, action: ActionType.CLICK });
|
|
69
|
+
let act;
|
|
70
|
+
try {
|
|
71
|
+
act = await session.command(ReticleCommand.ACT, {
|
|
72
|
+
ref: item.ref,
|
|
73
|
+
action: ActionType.CLICK,
|
|
74
|
+
args: opts.confirmDangerous === true ? { [DANGEROUS_ACTION_CONFIRM_ARG]: true } : {},
|
|
75
|
+
});
|
|
76
|
+
await sleep(settleMs);
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
// Close on every exit so a throw cannot leak the window onto the next control's events.
|
|
80
|
+
session.finishAction?.();
|
|
81
|
+
}
|
|
65
82
|
const events = session.eventsSince(since);
|
|
83
|
+
// Captured at act time, so it survives a click that unmounts its own control.
|
|
84
|
+
const src = sourceOf(asRecord(act?.result)['source']);
|
|
85
|
+
const source = src === undefined ? {} : { source: `${src.file}:${String(src.line)}` };
|
|
66
86
|
const errs = events.filter(isConsoleError);
|
|
67
87
|
for (const e of errs) {
|
|
68
88
|
counts.consoleErrors += 1;
|
|
@@ -71,6 +91,7 @@ export async function crawl(session, opts, sleep) {
|
|
|
71
91
|
ref: item.ref,
|
|
72
92
|
desc: item.desc,
|
|
73
93
|
detail: asString(e.data['message']) ?? e.type,
|
|
94
|
+
...source,
|
|
74
95
|
});
|
|
75
96
|
}
|
|
76
97
|
for (const e of failedRequests(events, CRAWL_DEFAULTS.FAILED_STATUS)) {
|
|
@@ -83,6 +104,7 @@ export async function crawl(session, opts, sleep) {
|
|
|
83
104
|
ref: item.ref,
|
|
84
105
|
desc: item.desc,
|
|
85
106
|
detail: `${method} ${url} → ${status ?? ''}`.trim(),
|
|
107
|
+
...source,
|
|
86
108
|
});
|
|
87
109
|
}
|
|
88
110
|
// DEAD: the click dispatched but the app produced no activity and no error to explain it.
|
|
@@ -94,6 +116,7 @@ export async function crawl(session, opts, sleep) {
|
|
|
94
116
|
ref: item.ref,
|
|
95
117
|
desc: item.desc,
|
|
96
118
|
detail: 'clicked but the app did nothing (no DOM/network/route/signal change)',
|
|
119
|
+
...source,
|
|
97
120
|
});
|
|
98
121
|
}
|
|
99
122
|
}
|
|
@@ -103,7 +126,11 @@ export async function crawl(session, opts, sleep) {
|
|
|
103
126
|
anomalies,
|
|
104
127
|
counts,
|
|
105
128
|
visited,
|
|
106
|
-
|
|
129
|
+
// True when coverage was bounded for EITHER reason: the step budget ran out, or the page was
|
|
130
|
+
// bigger than one snapshot. Conflating "I stopped early" with "I saw everything" is what turns a
|
|
131
|
+
// partial sweep into "all controls healthy".
|
|
132
|
+
truncated: items.length > stepsRun || coverageCapped,
|
|
133
|
+
...(coverageCapped ? { coverageNote: CAPPED_SNAPSHOT_NOTE } : {}),
|
|
107
134
|
};
|
|
108
135
|
}
|
|
109
136
|
//# sourceMappingURL=crawl.js.map
|
package/dist/crawl/crawl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/crawl/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,4BAA4B,EAC5B,SAAS,EACT,cAAc,GAGf,MAAM,iBAAiB,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/crawl/crawl.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Process-level resilience for the long-running daemon. The daemon serves many agents at once, so a
|
|
3
3
|
* single stray error must not take the whole fleet down:
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* - unhandledRejection (a fire-and-forget promise nobody awaited — the common case in async WS/pool
|
|
6
|
+
* code) → LOG and keep running. One agent's async slip-up can't crash the daemon for everyone.
|
|
7
|
+
* - uncaughtException (a synchronous throw escaped all try/catch) → the process state is undefined
|
|
8
|
+
* per Node's guidance, so LOG a clear reason and exit cleanly; the next `reticle mcp` respawns a fresh
|
|
9
|
+
* daemon, which beats crashing silently or limping along corrupt.
|
|
10
10
|
*/
|
|
11
11
|
export interface ProcessLike {
|
|
12
12
|
on(event: string, listener: (arg: unknown) => void): unknown;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Process-level resilience for the long-running daemon. The daemon serves many agents at once, so a
|
|
3
3
|
* single stray error must not take the whole fleet down:
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* - unhandledRejection (a fire-and-forget promise nobody awaited — the common case in async WS/pool
|
|
6
|
+
* code) → LOG and keep running. One agent's async slip-up can't crash the daemon for everyone.
|
|
7
|
+
* - uncaughtException (a synchronous throw escaped all try/catch) → the process state is undefined
|
|
8
|
+
* per Node's guidance, so LOG a clear reason and exit cleanly; the next `reticle mcp` respawns a fresh
|
|
9
|
+
* daemon, which beats crashing silently or limping along corrupt.
|
|
10
10
|
*/
|
|
11
11
|
function describe(value) {
|
|
12
12
|
return value instanceof Error ? value.message : String(value);
|
package/dist/daemon.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export declare function discoverDaemonPort(): number | null;
|
|
|
43
43
|
export declare function reclaimStaleDaemons(home?: string, pidAlive?: (pid: number) => boolean): number[];
|
|
44
44
|
/**
|
|
45
45
|
* Spawn the reticle daemon as a detached background process, redirecting output to the log file.
|
|
46
|
-
* Writes the PID file from the parent before returning so callers can call isRunning
|
|
46
|
+
* Writes the PID file from the parent before returning so callers can call isRunning
|
|
47
47
|
* immediately without a race window.
|
|
48
48
|
*/
|
|
49
49
|
export declare function spawnDaemon(nodeExec: string, scriptPath: string, args: string[], port: number): boolean;
|
package/dist/daemon.js
CHANGED
|
@@ -182,7 +182,7 @@ export function reclaimStaleDaemons(home = RETICLE_HOME, pidAlive = isAlive) {
|
|
|
182
182
|
}
|
|
183
183
|
/**
|
|
184
184
|
* Spawn the reticle daemon as a detached background process, redirecting output to the log file.
|
|
185
|
-
* Writes the PID file from the parent before returning so callers can call isRunning
|
|
185
|
+
* Writes the PID file from the parent before returning so callers can call isRunning
|
|
186
186
|
* immediately without a race window.
|
|
187
187
|
*/
|
|
188
188
|
export function spawnDaemon(nodeExec, scriptPath, args, port) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-tools.d.ts","sourceRoot":"","sources":["../../src/domain/domain-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domain-tools.d.ts","sourceRoot":"","sources":["../../src/domain/domain-tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,EAwEjC,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { z } from 'zod';
|
|
|
2
2
|
import { ReticleTool } from '../tools/tool-names.js';
|
|
3
3
|
import { readContract } from '../project/reticle-dir.js';
|
|
4
4
|
import { buildDomainModel } from './domain-model.js';
|
|
5
|
+
import { proposeInstrumentation } from '../oracles/self-instrument.js';
|
|
6
|
+
import { instrumentationGapsForFlows } from '../oracles/flow-instrument-gaps.js';
|
|
5
7
|
/**
|
|
6
8
|
* reticle_domain — the "learn the app before testing it" tool. Synthesizes every saved flow + the
|
|
7
9
|
* registered capabilities into a compact domain model: the journeys, what each asserts, and the
|
|
@@ -47,6 +49,10 @@ export const DOMAIN_TOOLS = [
|
|
|
47
49
|
.array(z.string())
|
|
48
50
|
.describe('Flow names worst-risk first (run history + assertion quality). Test these first.'),
|
|
49
51
|
summary: z.string(),
|
|
52
|
+
instrumentation: z
|
|
53
|
+
.array(z.unknown())
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Ready-to-apply instrumentation proposals for gaps that have a source location — { file, line, insert, rationale }. Apply, re-verify, and the app’s observability compounds.'),
|
|
50
56
|
},
|
|
51
57
|
handler: async (deps) => {
|
|
52
58
|
const names = await deps.flows.list();
|
|
@@ -59,7 +65,11 @@ export const DOMAIN_TOOLS = [
|
|
|
59
65
|
const contract = await readContract(deps.fs, deps.reticleRoot);
|
|
60
66
|
const project = await deps.project.read();
|
|
61
67
|
const runs = project.ok ? project.file.runs : [];
|
|
62
|
-
|
|
68
|
+
const model = buildDomainModel(flows, contract.ok ? contract.capabilities : null, runs);
|
|
69
|
+
// Self-instrumentation: turn located gaps (unasserted flows with a source stamp) into apply-ready diffs.
|
|
70
|
+
const stepsByName = new Map(flows.map((f) => [f.name, f.steps]));
|
|
71
|
+
const instrumentation = proposeInstrumentation(instrumentationGapsForFlows(model.gaps.unassertedFlows, stepsByName));
|
|
72
|
+
return instrumentation.length > 0 ? { ...model, instrumentation } : model;
|
|
63
73
|
},
|
|
64
74
|
},
|
|
65
75
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-tools.js","sourceRoot":"","sources":["../../src/domain/domain-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"domain-tools.js","sourceRoot":"","sources":["../../src/domain/domain-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Risk-rank flows so an agent tests the riskiest first. Risk combines two signals:
|
|
3
3
|
* - run history (.reticle/project.json): a flow whose last run errored/drifted, or passed but with
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* console/network errors, is riskier than one that passed clean; a never-run flow is unknown.
|
|
5
|
+
* - assertion quality (flow-classify): a flow that asserts no consequence is risky EVEN when it
|
|
6
|
+
* "passes" — a green assertion-free flow is false confidence (Fowler/Dodds), so it can't be
|
|
7
|
+
* trusted to catch a regression.
|
|
8
8
|
*
|
|
9
9
|
* Taking the worse of the two means "passed clean last time" never hides "but it asserts nothing".
|
|
10
10
|
* Pure: no IO, no clock.
|
package/dist/domain/flow-risk.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Risk-rank flows so an agent tests the riskiest first. Risk combines two signals:
|
|
3
3
|
* - run history (.reticle/project.json): a flow whose last run errored/drifted, or passed but with
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* console/network errors, is riskier than one that passed clean; a never-run flow is unknown.
|
|
5
|
+
* - assertion quality (flow-classify): a flow that asserts no consequence is risky EVEN when it
|
|
6
|
+
* "passes" — a green assertion-free flow is false confidence (Fowler/Dodds), so it can't be
|
|
7
|
+
* trusted to catch a regression.
|
|
8
8
|
*
|
|
9
9
|
* Taking the worse of the two means "passed clean last time" never hides "but it asserts nothing".
|
|
10
10
|
* Pure: no IO, no clock.
|
package/dist/ee/audit-log.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Example enterprise feature (Reticle Enterprise License — see
|
|
3
|
-
* ee feature follows: call assertEnterprise
|
|
2
|
+
* Example enterprise feature (Reticle Enterprise License — see./LICENSE). Demonstrates the pattern every
|
|
3
|
+
* ee feature follows: call assertEnterprise...) first, then do the privileged work. The body here is a
|
|
4
4
|
* stub — the real audit sink is the hosted control plane. It exists now to prove the gate.
|
|
5
5
|
*/
|
|
6
6
|
import { type GateContext } from '../license/license.js';
|
package/dist/ee/audit-log.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Example enterprise feature (Reticle Enterprise License — see
|
|
3
|
-
* ee feature follows: call assertEnterprise
|
|
2
|
+
* Example enterprise feature (Reticle Enterprise License — see./LICENSE). Demonstrates the pattern every
|
|
3
|
+
* ee feature follows: call assertEnterprise...) first, then do the privileged work. The body here is a
|
|
4
4
|
* stub — the real audit sink is the hosted control plane. It exists now to prove the gate.
|
|
5
5
|
*/
|
|
6
6
|
import { assertEnterprise } from '../license/license.js';
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { type ReticleEvent } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* The friendly bucket names reticle_observe's `filters` param advertises → the real event types.
|
|
4
|
+
*
|
|
5
|
+
* The schema promised `dom | net | route | console | animation | signal`, but the handler filtered
|
|
6
|
+
* with `filters.includes(e.type)` against types like `net.request` and `dom.added` — so every
|
|
7
|
+
* documented value matched nothing, and an agent passing `filters:['net']` to trim its payload got an
|
|
8
|
+
* EMPTY timeline instead. Empty reads as "the app did nothing" — a false green produced by using the
|
|
9
|
+
* feature exactly as documented. Mapping the bucket to its member types makes the documented values
|
|
10
|
+
* work; raw types are still accepted (see eventMatchesFilters) so neither spelling surprises a caller.
|
|
11
|
+
*/
|
|
12
|
+
export declare const OBSERVE_FILTER_BUCKETS: Record<string, readonly string[]>;
|
|
13
|
+
/**
|
|
14
|
+
* True when an event passes an observe `filters` allowlist. A filter entry matches either as a bucket
|
|
15
|
+
* name (`net` keeps every net.* type) or as a raw event type (`net.request`). Unknown entries match
|
|
16
|
+
* nothing rather than throwing — a typo narrows the result, it never crashes the observe.
|
|
17
|
+
*/
|
|
18
|
+
export declare function eventMatchesFilters(e: ReticleEvent, filters: readonly string[]): boolean;
|
|
2
19
|
/** Match a net.request event against optional method/url/status filters (reticle_network). */
|
|
3
20
|
export declare function matchNet(e: ReticleEvent, method: string | undefined, urlContains: string | undefined, status: number | undefined): boolean;
|
|
4
21
|
/**
|
|
@@ -22,12 +39,23 @@ interface NetCallView {
|
|
|
22
39
|
responseBody?: string;
|
|
23
40
|
bodyTruncated?: boolean;
|
|
24
41
|
ms?: number;
|
|
42
|
+
/** Authoritative response headers merged from the driven (CDP) path — present only when driven. */
|
|
43
|
+
headers?: Record<string, string>;
|
|
25
44
|
}
|
|
26
45
|
export declare function projectNetCall(e: ReticleEvent): NetCallView;
|
|
27
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Compact console-log summary for reticle_console output.
|
|
48
|
+
*
|
|
49
|
+
* `stack`/`source` are the only localization signal a console failure carries — there is no element
|
|
50
|
+
* to map to a component here, so without them "an error was logged" is the whole report and the agent
|
|
51
|
+
* has to go find the origin itself. The browser already keeps this lean by capturing a stack for
|
|
52
|
+
* console.error only; the projection used to discard even that.
|
|
53
|
+
*/
|
|
28
54
|
interface ConsoleLogView {
|
|
29
55
|
level: string;
|
|
30
56
|
text: string;
|
|
57
|
+
stack?: string;
|
|
58
|
+
source?: string;
|
|
31
59
|
}
|
|
32
60
|
export declare function projectConsoleLog(e: ReticleEvent): ConsoleLogView;
|
|
33
61
|
/** True for any console.* / uncaught-error event (the reticle_console universe). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-filters.d.ts","sourceRoot":"","sources":["../../src/events/event-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-filters.d.ts","sourceRoot":"","sources":["../../src/events/event-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/D;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAapE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAUxF;AAED,8FAA8F;AAC9F,wBAAgB,QAAQ,CACtB,CAAC,EAAE,YAAY,EACf,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAUT;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAgBnE;AAED;;4FAE4F;AAC5F,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CA2B3D;AAgBD;;;;;;;GAOG;AACH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAajE;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CASvD;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAMhF;AAKD,iEAAiE;AACjE,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAUjE;AAED,sFAAsF;AACtF,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAU7E"}
|
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
import { EventType } from '@reticlehq/core';
|
|
2
2
|
import { asString, asNumber } from '../tools/tools-helpers.js';
|
|
3
|
+
import { mergeNetworkDetail } from '../input/network-detail.js';
|
|
4
|
+
/**
|
|
5
|
+
* The friendly bucket names reticle_observe's `filters` param advertises → the real event types.
|
|
6
|
+
*
|
|
7
|
+
* The schema promised `dom | net | route | console | animation | signal`, but the handler filtered
|
|
8
|
+
* with `filters.includes(e.type)` against types like `net.request` and `dom.added` — so every
|
|
9
|
+
* documented value matched nothing, and an agent passing `filters:['net']` to trim its payload got an
|
|
10
|
+
* EMPTY timeline instead. Empty reads as "the app did nothing" — a false green produced by using the
|
|
11
|
+
* feature exactly as documented. Mapping the bucket to its member types makes the documented values
|
|
12
|
+
* work; raw types are still accepted (see eventMatchesFilters) so neither spelling surprises a caller.
|
|
13
|
+
*/
|
|
14
|
+
export const OBSERVE_FILTER_BUCKETS = {
|
|
15
|
+
dom: [EventType.DOM_ADDED, EventType.DOM_REMOVED, EventType.DOM_ATTR, EventType.DOM_TEXT],
|
|
16
|
+
net: [EventType.NET_REQUEST, EventType.NET_PENDING, EventType.NET_STREAM],
|
|
17
|
+
route: [EventType.ROUTE_CHANGE],
|
|
18
|
+
console: [EventType.CONSOLE_ERROR, EventType.ERROR_UNCAUGHT],
|
|
19
|
+
animation: [EventType.ANIM_START, EventType.ANIM_END],
|
|
20
|
+
signal: [EventType.SIGNAL],
|
|
21
|
+
// perf/state/storage are single-type buckets. They resolve through the raw-type fallback anyway,
|
|
22
|
+
// but naming them keeps the advertised vocabulary and the real one identical — the mismatch between
|
|
23
|
+
// those two is the bug this map exists to fix, so leaving observable types out of it would reopen it.
|
|
24
|
+
perf: [EventType.PERF],
|
|
25
|
+
state: [EventType.STATE_CHANGE],
|
|
26
|
+
storage: [EventType.STORAGE_CHANGE],
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* True when an event passes an observe `filters` allowlist. A filter entry matches either as a bucket
|
|
30
|
+
* name (`net` keeps every net.* type) or as a raw event type (`net.request`). Unknown entries match
|
|
31
|
+
* nothing rather than throwing — a typo narrows the result, it never crashes the observe.
|
|
32
|
+
*/
|
|
33
|
+
export function eventMatchesFilters(e, filters) {
|
|
34
|
+
for (const f of filters) {
|
|
35
|
+
// `Object.hasOwn`, not a bare index: a plain-object map inherits from Object.prototype, so a
|
|
36
|
+
// filter value like "toString" or "hasOwnProperty" would resolve to the inherited FUNCTION and
|
|
37
|
+
// then `.includes` would throw — a crash on an odd-but-harmless agent input. Only an OWN key is a
|
|
38
|
+
// real bucket; anything else falls through to the raw-type comparison.
|
|
39
|
+
const bucket = Object.hasOwn(OBSERVE_FILTER_BUCKETS, f) ? OBSERVE_FILTER_BUCKETS[f] : undefined;
|
|
40
|
+
if (bucket !== undefined ? bucket.includes(e.type) : e.type === f)
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
3
45
|
/** Match a net.request event against optional method/url/status filters (reticle_network). */
|
|
4
46
|
export function matchNet(e, method, urlContains, status) {
|
|
5
47
|
const d = e.data;
|
|
@@ -20,6 +62,9 @@ export function matchNet(e, method, urlContains, status) {
|
|
|
20
62
|
* pending: true }` so a numeric `status` filter excludes them but `urlContains`/`method` match.
|
|
21
63
|
*/
|
|
22
64
|
export function reconcileNet(events) {
|
|
65
|
+
// Fold CDP-authoritative detail (driven path) onto the matching in-page request first, so the driven
|
|
66
|
+
// view carries the full headers/status the page-side wrapper couldn't see (no-op when none present).
|
|
67
|
+
events = mergeNetworkDetail(events);
|
|
23
68
|
const completed = events.filter((e) => e.type === EventType.NET_REQUEST);
|
|
24
69
|
const doneIds = new Set(completed.map((e) => asString(e.data['id'])).filter((id) => id !== undefined));
|
|
25
70
|
const unresolved = events
|
|
@@ -61,17 +106,46 @@ export function projectNetCall(e) {
|
|
|
61
106
|
}
|
|
62
107
|
if (ms !== undefined)
|
|
63
108
|
view.ms = ms;
|
|
109
|
+
const headers = e.data['headers'];
|
|
110
|
+
if (headers !== null && typeof headers === 'object') {
|
|
111
|
+
view.headers = headers;
|
|
112
|
+
}
|
|
64
113
|
return view;
|
|
65
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* How many stack frames reach the agent.
|
|
117
|
+
*
|
|
118
|
+
* A raw stack is mostly framework internals, and padding a failure report with them is not free —
|
|
119
|
+
* the frames that identify the origin are the first few, and everything after is context the agent
|
|
120
|
+
* has to read past. Four keeps the error line plus the app frames that actually called it.
|
|
121
|
+
*/
|
|
122
|
+
const MAX_STACK_FRAMES = 4;
|
|
123
|
+
/** Trim a stack to the frames that locate the fault. */
|
|
124
|
+
function topFrames(stack) {
|
|
125
|
+
return stack.split('\n').slice(0, MAX_STACK_FRAMES).join('\n');
|
|
126
|
+
}
|
|
66
127
|
export function projectConsoleLog(e) {
|
|
67
128
|
const level = e.type === EventType.ERROR_UNCAUGHT ? 'error' : e.type.replace('console.', '');
|
|
68
|
-
|
|
129
|
+
const view = { level, text: asString(e.data['message']) ?? '' };
|
|
130
|
+
const stack = asString(e.data['stack']);
|
|
131
|
+
if (stack !== undefined && stack.length > 0)
|
|
132
|
+
view.stack = topFrames(stack);
|
|
133
|
+
// An uncaught error reports its origin as discrete fields rather than in a stack; render them in
|
|
134
|
+
// the same file:line form the element descriptors use so the agent reads one shape everywhere.
|
|
135
|
+
const source = asString(e.data['source']);
|
|
136
|
+
const line = e.data['line'];
|
|
137
|
+
if (source !== undefined && source.length > 0) {
|
|
138
|
+
view.source = typeof line === 'number' ? `${source}:${String(line)}` : source;
|
|
139
|
+
}
|
|
140
|
+
return view;
|
|
69
141
|
}
|
|
70
142
|
/** True for any console.* / uncaught-error event (the reticle_console universe). */
|
|
71
143
|
export function isConsoleEvent(e) {
|
|
72
144
|
return (e.type === EventType.CONSOLE_LOG ||
|
|
73
145
|
e.type === EventType.CONSOLE_WARN ||
|
|
74
146
|
e.type === EventType.CONSOLE_ERROR ||
|
|
147
|
+
e.type === EventType.CONSOLE_INFO ||
|
|
148
|
+
e.type === EventType.CONSOLE_DEBUG ||
|
|
75
149
|
e.type === EventType.ERROR_UNCAUGHT);
|
|
76
150
|
}
|
|
77
151
|
/** Match a console/error event against an optional level filter (reticle_console). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-filters.js","sourceRoot":"","sources":["../../src/events/event-filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"event-filters.js","sourceRoot":"","sources":["../../src/events/event-filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,21 @@ export interface EvalResult {
|
|
|
58
58
|
pass: boolean;
|
|
59
59
|
evidence?: unknown;
|
|
60
60
|
failureReason?: string;
|
|
61
|
+
/**
|
|
62
|
+
* The failure, structured — what was seen, what was required, and which oracle judged it.
|
|
63
|
+
*
|
|
64
|
+
* `failureReason` says the same thing in prose, and prose is the WRONG shape for this: measured on
|
|
65
|
+
* three seeded bugs, an agent handed observed/expected/assertion alongside the source pointer used
|
|
66
|
+
* fewer tool calls than one handed the pointer alone, and the repair literature has structured
|
|
67
|
+
* feedback beating rich natural-language feedback by 10.5pp. The prose stays for humans reading a
|
|
68
|
+
* log; these three fields are for the agent.
|
|
69
|
+
*
|
|
70
|
+
* Optional because they are populated per oracle, not globally — see the note in predicate.ts on
|
|
71
|
+
* which classes carry them today.
|
|
72
|
+
*/
|
|
73
|
+
observed?: string;
|
|
74
|
+
expected?: string;
|
|
75
|
+
assertion?: string;
|
|
61
76
|
}
|
|
62
77
|
/**
|
|
63
78
|
* Match one value against a pattern. Supports `*` (present), strict equality, and operators:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate-eval.d.ts","sourceRoot":"","sources":["../../src/events/predicate-eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACvE;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1C,eAAO,MAAM,eAAe,EAuDZ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"predicate-eval.d.ts","sourceRoot":"","sources":["../../src/events/predicate-eval.ts"],"names":[],"mappings":"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"}
|