@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
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
* pay for it; the type-only import is elided by `tsc`, so the build stays green without it.
|
|
11
11
|
*/
|
|
12
12
|
import type { Browser, Page } from 'playwright';
|
|
13
|
-
import { DriveErrorCode } from '@reticlehq/core';
|
|
13
|
+
import { ActionType, DriveErrorCode } from '@reticlehq/core';
|
|
14
14
|
import { type MockRule } from './network-mock.js';
|
|
15
|
+
import { type NetworkDetail } from './network-detail.js';
|
|
15
16
|
/** Viewport CSS-px box as returned by the INSPECT command (getBoundingClientRect). */
|
|
16
17
|
export interface ElementBox {
|
|
17
18
|
x: number;
|
|
@@ -47,7 +48,7 @@ export interface RealInputProvider {
|
|
|
47
48
|
/** Whether a Playwright Page currently matches this SDK session URL. */
|
|
48
49
|
isAvailableFor(sessionUrl: string): Promise<boolean>;
|
|
49
50
|
/** Drive a native gesture for `action` at the element `box`. */
|
|
50
|
-
perform(sessionUrl: string, action:
|
|
51
|
+
perform(sessionUrl: string, action: ActionType, box: ElementBox, args: RealInputArgs): Promise<RealInputResult>;
|
|
51
52
|
/**
|
|
52
53
|
* Capture a PNG of the correlated page, or undefined if no page matches. Optional
|
|
53
54
|
* so the visual layer stays opt-in — a provider that cannot screenshot simply omits it.
|
|
@@ -94,14 +95,14 @@ export declare function boxCenter(box: ElementBox): {
|
|
|
94
95
|
* Which actions are driven by native pointer input. fill/type stay synthetic unless a
|
|
95
96
|
* provider explicitly runs them.
|
|
96
97
|
*/
|
|
97
|
-
export declare function isPointerAction(action:
|
|
98
|
+
export declare function isPointerAction(action: ActionType): boolean;
|
|
98
99
|
type SleepFn = (ms: number) => Promise<void>;
|
|
99
100
|
type ConnectFn = (url: string) => Promise<Browser>;
|
|
100
101
|
/**
|
|
101
102
|
* Shared gesture executor: drive a native gesture on an already-resolved Page. Used by both the
|
|
102
103
|
* CDP-attached and the launched (drive) providers so the pointer logic lives in one place.
|
|
103
104
|
*/
|
|
104
|
-
export declare function performGesture(page: Page, action:
|
|
105
|
+
export declare function performGesture(page: Page, action: ActionType, box: ElementBox, args: RealInputArgs, sleep: SleepFn): Promise<RealInputResult>;
|
|
105
106
|
/**
|
|
106
107
|
* Capture a PNG from a Playwright page. Shared by the CDP + launched providers so the
|
|
107
108
|
* screenshot path lives in one place (mirrors performGesture). Returns the raw PNG bytes.
|
|
@@ -111,15 +112,24 @@ interface CdpProviderOptions {
|
|
|
111
112
|
cdpUrl: string;
|
|
112
113
|
/** Injected so the settle delay is deterministic in tests; defaults to a real Node timer. */
|
|
113
114
|
sleep?: SleepFn;
|
|
114
|
-
/** Injected connector so unit tests can stub Playwright without import
|
|
115
|
+
/** Injected connector so unit tests can stub Playwright without import. */
|
|
115
116
|
connect?: ConnectFn;
|
|
117
|
+
/**
|
|
118
|
+
* Sink for CDP-authoritative network detail. Optional, so the capture stays opt-in.
|
|
119
|
+
*
|
|
120
|
+
* This used to exist only on the LAUNCHED provider, which gated wire-level network visibility on
|
|
121
|
+
* whether Reticle happened to open the browser. That is the wrong axis: owning the browser says
|
|
122
|
+
* nothing about being able to see its network, and both providers speak CDP. The authoritative
|
|
123
|
+
* request body is the one thing an in-page fetch wrapper structurally cannot get.
|
|
124
|
+
*/
|
|
125
|
+
onNetworkDetail?: (detail: NetworkDetail) => void;
|
|
116
126
|
}
|
|
117
127
|
/** CDP-backed real-input provider. Lazily connects on first availability check / perform. */
|
|
118
128
|
export declare class CdpRealInputProvider implements RealInputProvider {
|
|
119
129
|
#private;
|
|
120
130
|
constructor(options: CdpProviderOptions);
|
|
121
131
|
isAvailableFor(sessionUrl: string): Promise<boolean>;
|
|
122
|
-
perform(sessionUrl: string, action:
|
|
132
|
+
perform(sessionUrl: string, action: ActionType, box: ElementBox, args: RealInputArgs): Promise<RealInputResult>;
|
|
123
133
|
/** PNG of the correlated page, or undefined if none matches. */
|
|
124
134
|
screenshot(sessionUrl: string, opts: ScreenshotOpts): Promise<Uint8Array | undefined>;
|
|
125
135
|
/** Apply network-mock rules to the correlated page; false when no driven page matches. */
|
|
@@ -132,12 +142,12 @@ export declare class CdpRealInputProvider implements RealInputProvider {
|
|
|
132
142
|
/** Best-effort cleanup; idempotent. */
|
|
133
143
|
dispose(): Promise<void>;
|
|
134
144
|
}
|
|
135
|
-
/** Injected launcher so unit tests stub Playwright without import
|
|
145
|
+
/** Injected launcher so unit tests stub Playwright without import. */
|
|
136
146
|
export type LaunchFn = (headless: boolean) => Promise<Browser>;
|
|
137
147
|
/**
|
|
138
148
|
* Force a driven page's already-loaded SDK to connect to our loopback bridge with a pairing token,
|
|
139
|
-
* overriding the app's own (often localhost-only) reticle.connect
|
|
140
|
-
* no app redeploy. connect
|
|
149
|
+
* overriding the app's own (often localhost-only) reticle.connect — so a hosted preview verifies with
|
|
150
|
+
* no app redeploy. connect is a no-op once connected, so re-invoking it is safe.
|
|
141
151
|
*/
|
|
142
152
|
export interface InjectConnectOptions {
|
|
143
153
|
token: string;
|
|
@@ -150,10 +160,16 @@ export interface LaunchedProviderOptions {
|
|
|
150
160
|
sleep?: SleepFn;
|
|
151
161
|
/** Injected launcher so unit tests can stub Playwright; defaults to dynamic import('playwright'). */
|
|
152
162
|
launch?: LaunchFn;
|
|
153
|
-
/** When set, re-invoke the page's reticle.connect
|
|
163
|
+
/** When set, re-invoke the page's reticle.connect with these after load (drive-a-hosted-preview). */
|
|
154
164
|
injectConnect?: InjectConnectOptions;
|
|
155
165
|
/** Path to a Playwright storageState JSON (cookies/localStorage) — starts the page authenticated. */
|
|
156
166
|
storageState?: string;
|
|
167
|
+
/**
|
|
168
|
+
* Sink for CDP-authoritative network detail. When set, every driven-page response is captured
|
|
169
|
+
* as a NET_DETAIL and handed here — the daemon routes it onto the driven session's journal so the
|
|
170
|
+
* inside-app view never loses fidelity to the outside-in view. Omitted → no network detail captured.
|
|
171
|
+
*/
|
|
172
|
+
onNetworkDetail?: (detail: NetworkDetail) => void;
|
|
157
173
|
}
|
|
158
174
|
/**
|
|
159
175
|
* Launches and OWNS a Playwright Chromium, navigates it to `driveUrl`, then drives native
|
|
@@ -164,11 +180,28 @@ export declare class LaunchedRealInputProvider implements OwnedRealInputProvider
|
|
|
164
180
|
constructor(options: LaunchedProviderOptions);
|
|
165
181
|
navigate(): Promise<void>;
|
|
166
182
|
isAvailableFor(sessionUrl: string): Promise<boolean>;
|
|
167
|
-
perform(_sessionUrl: string, action:
|
|
183
|
+
perform(_sessionUrl: string, action: ActionType, box: ElementBox, args: RealInputArgs): Promise<RealInputResult>;
|
|
168
184
|
/** PNG of the owned page, or undefined before navigate / after dispose. */
|
|
169
185
|
screenshot(_sessionUrl: string, opts: ScreenshotOpts): Promise<Uint8Array | undefined>;
|
|
170
186
|
/** Close the owned browser once. Idempotent and safe before navigate. */
|
|
171
187
|
dispose(): Promise<void>;
|
|
172
188
|
}
|
|
189
|
+
/** Drop hash/query so a page whose URL drifted by fragment still correlates to the session. */
|
|
190
|
+
/**
|
|
191
|
+
* Correlate a session URL to one driven page, or refuse.
|
|
192
|
+
*
|
|
193
|
+
* Exact match first, query string included — that is the only fully reliable signal. The stripped
|
|
194
|
+
* fallback exists for a real case (an app pushState's to /overview, so the page's URL no longer
|
|
195
|
+
* equals the session's) but it is only sound when UNAMBIGUOUS.
|
|
196
|
+
*
|
|
197
|
+
* Returning the first loose match was a false-green generator: the benchmark fixture selects a bug
|
|
198
|
+
* purely by query string, so two pages differing only there stripped to the same key, and a visual
|
|
199
|
+
* diff happily compared the wrong page to itself and reported "0.00% changed, matched" for pixels
|
|
200
|
+
* that demonstrably differed. Ambiguity now yields undefined, which callers already surface as
|
|
201
|
+
* "no driven page" rather than as a passing comparison.
|
|
202
|
+
*/
|
|
203
|
+
export declare function selectPage<T extends {
|
|
204
|
+
url(): string;
|
|
205
|
+
}>(pages: readonly T[], sessionUrl: string): T | undefined;
|
|
173
206
|
export {};
|
|
174
207
|
//# sourceMappingURL=real-input.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-input.d.ts","sourceRoot":"","sources":["../../src/input/real-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"real-input.d.ts","sourceRoot":"","sources":["../../src/input/real-input.ts"],"names":[],"mappings":"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"}
|
package/dist/input/real-input.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ActionType, DriveErrorCode, DRIVE_PLAYWRIGHT_MISSING_MSG } from '@reticlehq/core';
|
|
2
2
|
import { installNetworkMocks } from './network-mock.js';
|
|
3
|
+
import { attachNetworkDetail } from './network-detail.js';
|
|
3
4
|
/** Structured, code-tagged failure so callers branch on cause, not message text. */
|
|
4
5
|
export class DriveError extends Error {
|
|
5
6
|
code;
|
|
@@ -106,20 +107,43 @@ export class CdpRealInputProvider {
|
|
|
106
107
|
#cdpUrl;
|
|
107
108
|
#sleep;
|
|
108
109
|
#connect;
|
|
110
|
+
#onNetworkDetail;
|
|
111
|
+
/** Pages already listening. #pageFor resolves on EVERY call, so without this each action would add
|
|
112
|
+
* another listener and every response would be emitted once per action taken so far. */
|
|
113
|
+
#listening = new WeakSet();
|
|
109
114
|
#browser;
|
|
110
115
|
constructor(options) {
|
|
111
116
|
this.#cdpUrl = options.cdpUrl;
|
|
112
117
|
this.#sleep = options.sleep ?? nodeSleep;
|
|
113
118
|
this.#connect = options.connect ?? cdpConnect;
|
|
119
|
+
this.#onNetworkDetail = options.onNetworkDetail;
|
|
120
|
+
}
|
|
121
|
+
/** Attach the response listener the first time we see a page; a no-op afterwards. */
|
|
122
|
+
#listen(page) {
|
|
123
|
+
const sink = this.#onNetworkDetail;
|
|
124
|
+
if (sink === undefined || this.#listening.has(page))
|
|
125
|
+
return;
|
|
126
|
+
this.#listening.add(page);
|
|
127
|
+
attachNetworkDetail(page, sink);
|
|
114
128
|
}
|
|
115
129
|
async #ensureBrowser() {
|
|
116
|
-
if (this.#browser !== undefined)
|
|
117
|
-
|
|
130
|
+
if (this.#browser !== undefined) {
|
|
131
|
+
// A cached browser can be DEAD: CDP dropped (the page was closed, the debugged Chrome exited,
|
|
132
|
+
// the network blipped). The old code cached it forever, so every later call handed back a
|
|
133
|
+
// corpse and the whole drive path went silently unavailable until the daemon restarted.
|
|
134
|
+
// Playwright's Browser exposes isConnected(); a test fake may not, so only an EXPLICIT false
|
|
135
|
+
// drops the cache — a fake without the method is assumed live.
|
|
136
|
+
const alive = this.#browser.isConnected?.() ?? true;
|
|
137
|
+
if (alive)
|
|
138
|
+
return this.#browser;
|
|
139
|
+
this.#browser = undefined; // fall through and reconnect
|
|
140
|
+
}
|
|
118
141
|
try {
|
|
119
142
|
this.#browser = await this.#connect(this.#cdpUrl);
|
|
120
143
|
return this.#browser;
|
|
121
144
|
}
|
|
122
145
|
catch {
|
|
146
|
+
this.#browser = undefined; // a failed reconnect must not leave a stale handle behind
|
|
123
147
|
return undefined;
|
|
124
148
|
}
|
|
125
149
|
}
|
|
@@ -127,12 +151,10 @@ export class CdpRealInputProvider {
|
|
|
127
151
|
const browser = await this.#ensureBrowser();
|
|
128
152
|
if (browser === undefined)
|
|
129
153
|
return undefined;
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const target = stripVolatile(sessionUrl);
|
|
135
|
-
return pages.find((p) => stripVolatile(p.url()) === target);
|
|
154
|
+
const page = selectPage(browser.contexts().flatMap((c) => c.pages()), sessionUrl);
|
|
155
|
+
if (page !== undefined)
|
|
156
|
+
this.#listen(page);
|
|
157
|
+
return page;
|
|
136
158
|
}
|
|
137
159
|
async isAvailableFor(sessionUrl) {
|
|
138
160
|
try {
|
|
@@ -207,6 +229,7 @@ export class LaunchedRealInputProvider {
|
|
|
207
229
|
#launch;
|
|
208
230
|
#injectConnect;
|
|
209
231
|
#storageState;
|
|
232
|
+
#onNetworkDetail;
|
|
210
233
|
#browser;
|
|
211
234
|
#page;
|
|
212
235
|
constructor(options) {
|
|
@@ -216,11 +239,15 @@ export class LaunchedRealInputProvider {
|
|
|
216
239
|
this.#launch = options.launch ?? launchedChromium;
|
|
217
240
|
this.#injectConnect = options.injectConnect;
|
|
218
241
|
this.#storageState = options.storageState;
|
|
242
|
+
this.#onNetworkDetail = options.onNetworkDetail;
|
|
219
243
|
}
|
|
220
244
|
async navigate() {
|
|
221
245
|
this.#browser = await this.#launch(this.#headless);
|
|
222
246
|
const page = await this.#browser.newPage(this.#storageState !== undefined ? { storageState: this.#storageState } : undefined);
|
|
223
247
|
this.#page = page;
|
|
248
|
+
// Capture CDP-authoritative response detail into the driven session's journal (best-effort).
|
|
249
|
+
if (this.#onNetworkDetail !== undefined)
|
|
250
|
+
attachNetworkDetail(page, this.#onNetworkDetail);
|
|
224
251
|
try {
|
|
225
252
|
await page.goto(this.#driveUrl);
|
|
226
253
|
}
|
|
@@ -230,7 +257,7 @@ export class LaunchedRealInputProvider {
|
|
|
230
257
|
await this.#tryInjectConnect(page);
|
|
231
258
|
}
|
|
232
259
|
/**
|
|
233
|
-
* Wait for the page's Reticle singleton to exist, then re-invoke connect
|
|
260
|
+
* Wait for the page's Reticle singleton to exist, then re-invoke connect with our token + loopback
|
|
234
261
|
* URL so a hosted (non-localhost) preview pairs to our bridge without the app being reconfigured.
|
|
235
262
|
* Best-effort: a page with no SDK simply never exposes the global, and we move on.
|
|
236
263
|
*/
|
|
@@ -280,6 +307,27 @@ export class LaunchedRealInputProvider {
|
|
|
280
307
|
}
|
|
281
308
|
}
|
|
282
309
|
/** Drop hash/query so a page whose URL drifted by fragment still correlates to the session. */
|
|
310
|
+
/**
|
|
311
|
+
* Correlate a session URL to one driven page, or refuse.
|
|
312
|
+
*
|
|
313
|
+
* Exact match first, query string included — that is the only fully reliable signal. The stripped
|
|
314
|
+
* fallback exists for a real case (an app pushState's to /overview, so the page's URL no longer
|
|
315
|
+
* equals the session's) but it is only sound when UNAMBIGUOUS.
|
|
316
|
+
*
|
|
317
|
+
* Returning the first loose match was a false-green generator: the benchmark fixture selects a bug
|
|
318
|
+
* purely by query string, so two pages differing only there stripped to the same key, and a visual
|
|
319
|
+
* diff happily compared the wrong page to itself and reported "0.00% changed, matched" for pixels
|
|
320
|
+
* that demonstrably differed. Ambiguity now yields undefined, which callers already surface as
|
|
321
|
+
* "no driven page" rather than as a passing comparison.
|
|
322
|
+
*/
|
|
323
|
+
export function selectPage(pages, sessionUrl) {
|
|
324
|
+
const exact = pages.find((p) => p.url() === sessionUrl);
|
|
325
|
+
if (exact !== undefined)
|
|
326
|
+
return exact;
|
|
327
|
+
const target = stripVolatile(sessionUrl);
|
|
328
|
+
const loose = pages.filter((p) => stripVolatile(p.url()) === target);
|
|
329
|
+
return loose.length === 1 ? loose[0] : undefined;
|
|
330
|
+
}
|
|
283
331
|
function stripVolatile(url) {
|
|
284
332
|
const hash = url.indexOf('#');
|
|
285
333
|
const base = hash >= 0 ? url.slice(0, hash) : url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-input.js","sourceRoot":"","sources":["../../src/input/real-input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"real-input.js","sourceRoot":"","sources":["../../src/input/real-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FileSystemPort } from '../project/fs-port.js';
|
|
2
|
+
import { type AmbientCounts } from './ambient.js';
|
|
3
|
+
/** Bumped on any breaking change to the persisted ambient-map shape. */
|
|
4
|
+
export declare const AMBIENT_FILE_VERSION = 1;
|
|
5
|
+
/**
|
|
6
|
+
* Persists the learned ambient-churn region map at `.reticle/ambient.json`. Local, single-project
|
|
7
|
+
* memory (stays OSS — OSS-VS-SERVER). Loads never throw: missing/malformed/wrong-version degrades to
|
|
8
|
+
* an empty map, so a bad file never breaks a drive — the layer just re-learns the ambient regions.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AmbientStore {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(fs: FileSystemPort, root: string);
|
|
13
|
+
load(): Promise<AmbientCounts>;
|
|
14
|
+
save(counts: AmbientCounts): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ambient-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient-store.d.ts","sourceRoot":"","sources":["../../src/journal/ambient-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAErE,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;;GAIG;AACH,qBAAa,YAAY;;gBAIX,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM;IAKtC,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAkB9B,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { dirname } from 'node:path';
|
|
2
|
+
import { reticleDirPaths } from '../project/reticle-dir.js';
|
|
3
|
+
import { AmbientFileSchema } from './ambient.js';
|
|
4
|
+
/** Bumped on any breaking change to the persisted ambient-map shape. */
|
|
5
|
+
export const AMBIENT_FILE_VERSION = 1;
|
|
6
|
+
/**
|
|
7
|
+
* Persists the learned ambient-churn region map at `.reticle/ambient.json`. Local, single-project
|
|
8
|
+
* memory (stays OSS — OSS-VS-SERVER). Loads never throw: missing/malformed/wrong-version degrades to
|
|
9
|
+
* an empty map, so a bad file never breaks a drive — the layer just re-learns the ambient regions.
|
|
10
|
+
*/
|
|
11
|
+
export class AmbientStore {
|
|
12
|
+
#fs;
|
|
13
|
+
#path;
|
|
14
|
+
constructor(fs, root) {
|
|
15
|
+
this.#fs = fs;
|
|
16
|
+
this.#path = reticleDirPaths(root).ambient;
|
|
17
|
+
}
|
|
18
|
+
async load() {
|
|
19
|
+
let text;
|
|
20
|
+
try {
|
|
21
|
+
text = await this.#fs.readFile(this.#path);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (this.#fs.isNotFound(error))
|
|
25
|
+
return {};
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
let parsed;
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(text);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
const result = AmbientFileSchema.safeParse(parsed);
|
|
36
|
+
return result.success ? result.data.regions : {};
|
|
37
|
+
}
|
|
38
|
+
async save(counts) {
|
|
39
|
+
await this.#fs.mkdir(dirname(this.#path));
|
|
40
|
+
const body = `${JSON.stringify({ version: AMBIENT_FILE_VERSION, regions: counts }, null, 2)}\n`;
|
|
41
|
+
const tmp = `${this.#path}.tmp`;
|
|
42
|
+
await this.#fs.writeFile(tmp, body);
|
|
43
|
+
await this.#fs.rename(tmp, this.#path);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ambient-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient-store.js","sourceRoot":"","sources":["../../src/journal/ambient-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAsB,MAAM,cAAc,CAAC;AAErE,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACd,GAAG,CAAiB;IACpB,KAAK,CAAS;IAEvB,YAAY,EAAkB,EAAE,IAAY;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC1C,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAChG,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC;QAChC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ReticleEvent } from '@reticlehq/core';
|
|
3
|
+
/**
|
|
4
|
+
* Ambient-region learning. On a real-time app (chat, tickers, presence) whole DOM regions churn with
|
|
5
|
+
* NO action driving them — an event with no `actionId`. Left unlearned, they make `settled` never fire
|
|
6
|
+
* and flood every summary. This learns, per element ref, how often it churns ambiently; a ref past the
|
|
7
|
+
* threshold is treated as ambient and excluded from the settle oracle, summaries, and envelopes. The
|
|
8
|
+
* map is a learned, persisted per-app fact (like the contract) — confirmable, not silent.
|
|
9
|
+
*
|
|
10
|
+
* Global, not per-flow: the journal already sees the churn across every session, so the map sharpens
|
|
11
|
+
* over time. Only UNATTRIBUTED churn counts — an event caused by an action is signal, never ambient.
|
|
12
|
+
*/
|
|
13
|
+
/** Per-region ambient churn counts. */
|
|
14
|
+
export type AmbientCounts = Record<string, number>;
|
|
15
|
+
/**
|
|
16
|
+
* The identity ambient learning counts against. Prefer the emitted `region` (the stable CONTAINER of a
|
|
17
|
+
* mutation) over the element ref: a churning feed appends a NEW element every tick (fresh ref) and a
|
|
18
|
+
* removed element has no ref at all, so per-ref counts never accumulate and the region is never learned.
|
|
19
|
+
* The container persists, so it is the only key that converges. Falls back to the ref for events that
|
|
20
|
+
* mutate a single stable element (a ticker's text).
|
|
21
|
+
*/
|
|
22
|
+
export declare function ambientKeyOf(event: {
|
|
23
|
+
ref?: string | undefined;
|
|
24
|
+
data?: Record<string, unknown>;
|
|
25
|
+
}): string | undefined;
|
|
26
|
+
export declare const AmbientFileSchema: z.ZodObject<{
|
|
27
|
+
version: z.ZodLiteral<1>;
|
|
28
|
+
regions: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
29
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
|
+
version: 1;
|
|
31
|
+
regions: Record<string, number>;
|
|
32
|
+
}, {
|
|
33
|
+
version: 1;
|
|
34
|
+
regions: Record<string, number>;
|
|
35
|
+
}>;
|
|
36
|
+
/** A ref must churn ambiently at least this many times before it is treated as ambient. */
|
|
37
|
+
export declare const DEFAULT_AMBIENT_THRESHOLD = 20;
|
|
38
|
+
/** Fold a batch of events into the running ambient counts. Only unattributed, ref-bearing events count. */
|
|
39
|
+
export declare function accumulateAmbient(counts: AmbientCounts, events: readonly ReticleEvent[]): AmbientCounts;
|
|
40
|
+
/** Whether a ref has churned ambiently often enough to be excluded from oracles/summaries. */
|
|
41
|
+
export declare function isAmbient(counts: AmbientCounts, ref: string | undefined, threshold?: number): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Drop events on learned-ambient regions — the exclusion the settle oracle and summaries apply. An
|
|
44
|
+
* action-attributed event is ALWAYS kept, even on an ambient ref: if an action caused a change there,
|
|
45
|
+
* it is signal, not background churn.
|
|
46
|
+
*/
|
|
47
|
+
export declare function excludeAmbient(counts: AmbientCounts, events: readonly ReticleEvent[], threshold?: number): ReticleEvent[];
|
|
48
|
+
//# sourceMappingURL=ambient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient.d.ts","sourceRoot":"","sources":["../../src/journal/ambient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;GASG;AAEH,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,MAAM,GAAG,SAAS,CAIrB;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,2GAA2G;AAC3G,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,SAAS,YAAY,EAAE,GAC9B,aAAa,CASf;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAGT;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,EAAE,CAIhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The identity ambient learning counts against. Prefer the emitted `region` (the stable CONTAINER of a
|
|
4
|
+
* mutation) over the element ref: a churning feed appends a NEW element every tick (fresh ref) and a
|
|
5
|
+
* removed element has no ref at all, so per-ref counts never accumulate and the region is never learned.
|
|
6
|
+
* The container persists, so it is the only key that converges. Falls back to the ref for events that
|
|
7
|
+
* mutate a single stable element (a ticker's text).
|
|
8
|
+
*/
|
|
9
|
+
export function ambientKeyOf(event) {
|
|
10
|
+
const region = event.data?.['region'];
|
|
11
|
+
if (typeof region === 'string' && region.length > 0)
|
|
12
|
+
return region;
|
|
13
|
+
return event.ref;
|
|
14
|
+
}
|
|
15
|
+
export const AmbientFileSchema = z.object({
|
|
16
|
+
version: z.literal(1),
|
|
17
|
+
regions: z.record(z.number()),
|
|
18
|
+
});
|
|
19
|
+
/** A ref must churn ambiently at least this many times before it is treated as ambient. */
|
|
20
|
+
export const DEFAULT_AMBIENT_THRESHOLD = 20;
|
|
21
|
+
/** Fold a batch of events into the running ambient counts. Only unattributed, ref-bearing events count. */
|
|
22
|
+
export function accumulateAmbient(counts, events) {
|
|
23
|
+
const next = { ...counts };
|
|
24
|
+
for (const event of events) {
|
|
25
|
+
if (event.actionId !== undefined)
|
|
26
|
+
continue; // attributed to an action → signal, not ambient
|
|
27
|
+
const key = ambientKeyOf(event);
|
|
28
|
+
if (key === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
next[key] = (next[key] ?? 0) + 1;
|
|
31
|
+
}
|
|
32
|
+
return next;
|
|
33
|
+
}
|
|
34
|
+
/** Whether a ref has churned ambiently often enough to be excluded from oracles/summaries. */
|
|
35
|
+
export function isAmbient(counts, ref, threshold = DEFAULT_AMBIENT_THRESHOLD) {
|
|
36
|
+
if (ref === undefined)
|
|
37
|
+
return false;
|
|
38
|
+
return (counts[ref] ?? 0) >= threshold;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Drop events on learned-ambient regions — the exclusion the settle oracle and summaries apply. An
|
|
42
|
+
* action-attributed event is ALWAYS kept, even on an ambient ref: if an action caused a change there,
|
|
43
|
+
* it is signal, not background churn.
|
|
44
|
+
*/
|
|
45
|
+
export function excludeAmbient(counts, events, threshold) {
|
|
46
|
+
return events.filter((event) => event.actionId !== undefined || !isAmbient(counts, event.ref, threshold));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ambient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ambient.js","sourceRoot":"","sources":["../../src/journal/ambient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAG5B;IACC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnE,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC;AAEH,2FAA2F;AAC3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,2GAA2G;AAC3G,MAAM,UAAU,iBAAiB,CAC/B,MAAqB,EACrB,MAA+B;IAE/B,MAAM,IAAI,GAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS,CAAC,gDAAgD;QAC5F,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,SAAS,CACvB,MAAqB,EACrB,GAAuB,EACvB,YAAoB,yBAAyB;IAE7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,MAA+B,EAC/B,SAAkB;IAElB,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CACpF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FileSystemPort } from '../project/fs-port.js';
|
|
2
|
+
import { JournalRecorder, type JournalReader } from './journal-recorder.js';
|
|
3
|
+
/** The minimal Session surface the journal attachment needs (Session satisfies it structurally). */
|
|
4
|
+
export interface JournalTarget {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
/** Milliseconds since the session connected — the recorder's injected clock. */
|
|
7
|
+
elapsed(): number;
|
|
8
|
+
setJournal(recorder: JournalRecorder, reader?: JournalReader): void;
|
|
9
|
+
}
|
|
10
|
+
export interface JournalAttachDeps {
|
|
11
|
+
fs: FileSystemPort;
|
|
12
|
+
reticleRoot: string;
|
|
13
|
+
/** Journaling is on by default; the opt-out (`.reticle.json` journal:false / env) sets this false. */
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build the per-session journal attachment the bridge fires on session creation. Off when disabled;
|
|
18
|
+
* silently skips a session whose id is not a safe path segment (never crashes the live session over a
|
|
19
|
+
* journaling concern). The recorder's clock is the session's own elapsed time.
|
|
20
|
+
*/
|
|
21
|
+
export declare function makeJournalAttach(deps: JournalAttachDeps): (session: JournalTarget) => void;
|
|
22
|
+
//# sourceMappingURL=attach-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-journal.d.ts","sourceRoot":"","sources":["../../src/journal/attach-journal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,oGAAoG;AACpG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,OAAO,IAAI,MAAM,CAAC;IAClB,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,cAAc,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sGAAsG;IACtG,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAQ3F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isValidSessionId } from '../project/reticle-dir.js';
|
|
2
|
+
import { JournalRecorder } from './journal-recorder.js';
|
|
3
|
+
import { SessionJournal } from './session-journal.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build the per-session journal attachment the bridge fires on session creation. Off when disabled;
|
|
6
|
+
* silently skips a session whose id is not a safe path segment (never crashes the live session over a
|
|
7
|
+
* journaling concern). The recorder's clock is the session's own elapsed time.
|
|
8
|
+
*/
|
|
9
|
+
export function makeJournalAttach(deps) {
|
|
10
|
+
return (session) => {
|
|
11
|
+
if (!deps.enabled)
|
|
12
|
+
return;
|
|
13
|
+
if (!isValidSessionId(session.id))
|
|
14
|
+
return;
|
|
15
|
+
const journal = new SessionJournal(deps.fs, deps.reticleRoot, session.id);
|
|
16
|
+
// Same SessionJournal is both the write sink and the read fall-through for queries after eviction.
|
|
17
|
+
session.setJournal(new JournalRecorder(journal, { now: () => session.elapsed() }), journal);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=attach-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-journal.js","sourceRoot":"","sources":["../../src/journal/attach-journal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiBtD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO;QAC1C,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1E,mGAAmG;QACnG,OAAO,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SegmentRollup } from './rollups.js';
|
|
2
|
+
import { type Deviation, type RouteEnvelope } from './envelope.js';
|
|
3
|
+
/**
|
|
4
|
+
* The deviation report — the push default. After any drive or replay, this is what the agent gets
|
|
5
|
+
* instead of a raw event dump: the segments that ran outside their learned envelope, ranked, with the
|
|
6
|
+
* in-envelope segments compressed to a single count. When no segment has a mature enough envelope to
|
|
7
|
+
* judge (all below MIN_ENVELOPE_SAMPLES), it says so and the caller falls back to the causal summary.
|
|
8
|
+
*/
|
|
9
|
+
export interface DeviationReport {
|
|
10
|
+
/** Every flagged metric across all judged segments, ranked most-severe first. */
|
|
11
|
+
deviations: Deviation[];
|
|
12
|
+
/** Judged segments with zero deviations (the "11 segments nominal" line). */
|
|
13
|
+
nominalSegments: number;
|
|
14
|
+
/** Segments whose envelope was mature enough to judge. */
|
|
15
|
+
judgedSegments: number;
|
|
16
|
+
/** Segments skipped because a cap truncated them — counts understate, so they are not judged. */
|
|
17
|
+
truncatedSegments: number;
|
|
18
|
+
/** True when nothing could be judged — the caller shows the causal summary instead. */
|
|
19
|
+
insufficientSamples: boolean;
|
|
20
|
+
/** One-line human/agent headline. */
|
|
21
|
+
headline: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Judge observed segments against their per-route envelopes. Segments without a route, or whose
|
|
25
|
+
* envelope is too green, are counted as unjudged rather than silently passed.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildDeviationReport(envelopes: ReadonlyMap<string, RouteEnvelope>, segments: readonly SegmentRollup[], zThreshold?: number): DeviationReport;
|
|
28
|
+
//# sourceMappingURL=deviation-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation-report.d.ts","sourceRoot":"","sources":["../../src/journal/deviation-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAEnB,MAAM,eAAe,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAC7C,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,UAAU,CAAC,EAAE,MAAM,GAClB,eAAe,CA4BjB"}
|