@reticlehq/server 2.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-ENTERPRISE +37 -0
- package/README.md +5 -1
- package/dist/bridge-security.d.ts +1 -1
- package/dist/bridge-security.js +1 -1
- package/dist/bridge.d.ts +7 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +62 -6
- package/dist/bridge.js.map +1 -1
- package/dist/bridge.test-harness.d.ts +5 -0
- package/dist/bridge.test-harness.d.ts.map +1 -1
- package/dist/bridge.test-harness.js +4 -0
- package/dist/bridge.test-harness.js.map +1 -1
- package/dist/capsule/capsule-store.d.ts +66 -0
- package/dist/capsule/capsule-store.d.ts.map +1 -0
- package/dist/capsule/capsule-store.js +110 -0
- package/dist/capsule/capsule-store.js.map +1 -0
- package/dist/capsule/capsule.d.ts +19 -0
- package/dist/capsule/capsule.d.ts.map +1 -0
- package/dist/capsule/capsule.js +36 -0
- package/dist/capsule/capsule.js.map +1 -0
- package/dist/capsule/causal-summary.d.ts +36 -0
- package/dist/capsule/causal-summary.d.ts.map +1 -0
- package/dist/capsule/causal-summary.js +111 -0
- package/dist/capsule/causal-summary.js.map +1 -0
- package/dist/capsule/divergence.d.ts +31 -0
- package/dist/capsule/divergence.d.ts.map +1 -0
- package/dist/capsule/divergence.js +41 -0
- package/dist/capsule/divergence.js.map +1 -0
- package/dist/capsule/minimize.d.ts +13 -0
- package/dist/capsule/minimize.d.ts.map +1 -0
- package/dist/capsule/minimize.js +23 -0
- package/dist/capsule/minimize.js.map +1 -0
- package/dist/capsule/predicate-to-links.d.ts +9 -0
- package/dist/capsule/predicate-to-links.d.ts.map +1 -0
- package/dist/capsule/predicate-to-links.js +31 -0
- package/dist/capsule/predicate-to-links.js.map +1 -0
- package/dist/cli-flow-commands.d.ts +31 -0
- package/dist/cli-flow-commands.d.ts.map +1 -0
- package/dist/cli-flow-commands.js +207 -0
- package/dist/cli-flow-commands.js.map +1 -0
- package/dist/cli-launch.d.ts.map +1 -1
- package/dist/cli-launch.js +1 -2
- package/dist/cli-launch.js.map +1 -1
- package/dist/cli-parse.d.ts +18 -2
- package/dist/cli-parse.d.ts.map +1 -1
- package/dist/cli-parse.js +57 -0
- package/dist/cli-parse.js.map +1 -1
- package/dist/cli-port.d.ts +10 -4
- package/dist/cli-port.d.ts.map +1 -1
- package/dist/cli-port.js +32 -6
- package/dist/cli-port.js.map +1 -1
- package/dist/cli-verify.d.ts.map +1 -1
- package/dist/cli-verify.js +29 -10
- package/dist/cli-verify.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +83 -13
- package/dist/cli.js.map +1 -1
- package/dist/crawl/crawl-tools.d.ts.map +1 -1
- package/dist/crawl/crawl-tools.js +12 -0
- package/dist/crawl/crawl-tools.js.map +1 -1
- package/dist/crawl/crawl.d.ts +23 -1
- package/dist/crawl/crawl.d.ts.map +1 -1
- package/dist/crawl/crawl.js +42 -12
- package/dist/crawl/crawl.js.map +1 -1
- package/dist/daemon-resilience.d.ts +5 -5
- package/dist/daemon-resilience.js +5 -5
- package/dist/daemon.d.ts +9 -3
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +41 -8
- package/dist/daemon.js.map +1 -1
- package/dist/domain/domain-tools.d.ts.map +1 -1
- package/dist/domain/domain-tools.js +11 -1
- package/dist/domain/domain-tools.js.map +1 -1
- package/dist/domain/flow-risk.d.ts +4 -4
- package/dist/domain/flow-risk.js +4 -4
- package/dist/ee/audit-log.d.ts +2 -2
- package/dist/ee/audit-log.js +2 -2
- package/dist/events/event-filters.d.ts +35 -1
- package/dist/events/event-filters.d.ts.map +1 -1
- package/dist/events/event-filters.js +93 -6
- package/dist/events/event-filters.js.map +1 -1
- package/dist/events/predicate-eval.d.ts +15 -0
- package/dist/events/predicate-eval.d.ts.map +1 -1
- package/dist/events/predicate-eval.js +130 -9
- package/dist/events/predicate-eval.js.map +1 -1
- package/dist/events/predicate.d.ts +22 -1
- package/dist/events/predicate.d.ts.map +1 -1
- package/dist/events/predicate.js +169 -15
- package/dist/events/predicate.js.map +1 -1
- package/dist/events/ring-buffer.d.ts +10 -8
- package/dist/events/ring-buffer.d.ts.map +1 -1
- package/dist/events/ring-buffer.js +84 -25
- package/dist/events/ring-buffer.js.map +1 -1
- package/dist/flows/affected.d.ts +25 -0
- package/dist/flows/affected.d.ts.map +1 -0
- package/dist/flows/affected.js +36 -0
- package/dist/flows/affected.js.map +1 -0
- package/dist/flows/annotate.d.ts +4 -4
- package/dist/flows/annotate.js +4 -4
- package/dist/flows/assertion-integrity.d.ts +24 -0
- package/dist/flows/assertion-integrity.d.ts.map +1 -0
- package/dist/flows/assertion-integrity.js +27 -0
- package/dist/flows/assertion-integrity.js.map +1 -0
- package/dist/flows/assertion-tiers-store.d.ts +80 -0
- package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
- package/dist/flows/assertion-tiers-store.js +99 -0
- package/dist/flows/assertion-tiers-store.js.map +1 -0
- package/dist/flows/buddy-status.d.ts +25 -0
- package/dist/flows/buddy-status.d.ts.map +1 -0
- package/dist/flows/buddy-status.js +33 -0
- package/dist/flows/buddy-status.js.map +1 -0
- package/dist/flows/coverage.d.ts +28 -0
- package/dist/flows/coverage.d.ts.map +1 -0
- package/dist/flows/coverage.js +22 -0
- package/dist/flows/coverage.js.map +1 -0
- package/dist/flows/decision.d.ts.map +1 -1
- package/dist/flows/decision.js +18 -9
- package/dist/flows/decision.js.map +1 -1
- package/dist/flows/flake-store.d.ts +20 -0
- package/dist/flows/flake-store.d.ts.map +1 -0
- package/dist/flows/flake-store.js +59 -0
- package/dist/flows/flake-store.js.map +1 -0
- package/dist/flows/flake.d.ts +58 -0
- package/dist/flows/flake.d.ts.map +1 -0
- package/dist/flows/flake.js +36 -0
- package/dist/flows/flake.js.map +1 -0
- package/dist/flows/flow-classify.d.ts +8 -8
- package/dist/flows/flow-classify.d.ts.map +1 -1
- package/dist/flows/flow-classify.js +12 -20
- package/dist/flows/flow-classify.js.map +1 -1
- package/dist/flows/flow-replay-run.d.ts +6 -0
- package/dist/flows/flow-replay-run.d.ts.map +1 -1
- package/dist/flows/flow-replay-run.js +49 -0
- package/dist/flows/flow-replay-run.js.map +1 -1
- package/dist/flows/flow-replay.d.ts +9 -0
- package/dist/flows/flow-replay.d.ts.map +1 -1
- package/dist/flows/flow-replay.js +52 -18
- package/dist/flows/flow-replay.js.map +1 -1
- package/dist/flows/flow-report.d.ts +4 -4
- package/dist/flows/flow-report.d.ts.map +1 -1
- package/dist/flows/flow-report.js +2 -1
- package/dist/flows/flow-report.js.map +1 -1
- package/dist/flows/flow-sources.d.ts +20 -0
- package/dist/flows/flow-sources.d.ts.map +1 -0
- package/dist/flows/flow-sources.js +33 -0
- package/dist/flows/flow-sources.js.map +1 -0
- package/dist/flows/flow-tools.d.ts +13 -1
- package/dist/flows/flow-tools.d.ts.map +1 -1
- package/dist/flows/flow-tools.js +97 -152
- package/dist/flows/flow-tools.js.map +1 -1
- package/dist/flows/flows.d.ts +9 -4
- package/dist/flows/flows.d.ts.map +1 -1
- package/dist/flows/flows.js +39 -27
- package/dist/flows/flows.js.map +1 -1
- package/dist/flows/gate.d.ts +39 -0
- package/dist/flows/gate.d.ts.map +1 -0
- package/dist/flows/gate.js +34 -0
- package/dist/flows/gate.js.map +1 -0
- package/dist/flows/git-changed.d.ts +9 -0
- package/dist/flows/git-changed.d.ts.map +1 -0
- package/dist/flows/git-changed.js +25 -0
- package/dist/flows/git-changed.js.map +1 -0
- package/dist/flows/heal-run.d.ts +19 -0
- package/dist/flows/heal-run.d.ts.map +1 -0
- package/dist/flows/heal-run.js +137 -0
- package/dist/flows/heal-run.js.map +1 -0
- package/dist/flows/parallel-suite.d.ts +27 -0
- package/dist/flows/parallel-suite.d.ts.map +1 -0
- package/dist/flows/parallel-suite.js +51 -0
- package/dist/flows/parallel-suite.js.map +1 -0
- package/dist/flows/replay.d.ts +13 -0
- package/dist/flows/replay.d.ts.map +1 -1
- package/dist/flows/replay.js +56 -23
- package/dist/flows/replay.js.map +1 -1
- package/dist/flows/watch-batcher.d.ts +18 -0
- package/dist/flows/watch-batcher.d.ts.map +1 -0
- package/dist/flows/watch-batcher.js +20 -0
- package/dist/flows/watch-batcher.js.map +1 -0
- package/dist/honesty/blind-spots.d.ts +37 -0
- package/dist/honesty/blind-spots.d.ts.map +1 -0
- package/dist/honesty/blind-spots.js +57 -0
- package/dist/honesty/blind-spots.js.map +1 -0
- package/dist/honesty/honesty.d.ts +57 -0
- package/dist/honesty/honesty.d.ts.map +1 -0
- package/dist/honesty/honesty.js +63 -0
- package/dist/honesty/honesty.js.map +1 -0
- package/dist/http-server.d.ts +5 -9
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +5 -9
- package/dist/http-server.js.map +1 -1
- package/dist/idle-shutdown.d.ts +2 -2
- package/dist/idle-shutdown.js +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +131 -73
- package/dist/index.js.map +1 -1
- package/dist/init/agent-rules.d.ts +38 -0
- package/dist/init/agent-rules.d.ts.map +1 -0
- package/dist/init/agent-rules.js +65 -0
- package/dist/init/agent-rules.js.map +1 -0
- package/dist/init/mcp.d.ts.map +1 -1
- package/dist/init/mcp.js +4 -3
- package/dist/init/mcp.js.map +1 -1
- package/dist/init/plan.d.ts +6 -0
- package/dist/init/plan.d.ts.map +1 -1
- package/dist/init/plan.js +79 -3
- package/dist/init/plan.js.map +1 -1
- package/dist/init/run.d.ts.map +1 -1
- package/dist/init/run.js +4 -0
- package/dist/init/run.js.map +1 -1
- package/dist/init/snippets.js +1 -1
- package/dist/init/vite-config.d.ts +1 -1
- package/dist/init/vite-config.js +2 -2
- package/dist/init/vite-config.js.map +1 -1
- package/dist/input/network-detail.d.ts +74 -0
- package/dist/input/network-detail.d.ts.map +1 -0
- package/dist/input/network-detail.js +160 -0
- package/dist/input/network-detail.js.map +1 -0
- package/dist/input/network-mock-tools.d.ts.map +1 -1
- package/dist/input/network-mock-tools.js +1 -6
- package/dist/input/network-mock-tools.js.map +1 -1
- package/dist/input/network-mock.d.ts +4 -4
- package/dist/input/real-input.d.ts +44 -11
- package/dist/input/real-input.d.ts.map +1 -1
- package/dist/input/real-input.js +57 -9
- package/dist/input/real-input.js.map +1 -1
- package/dist/input/viewport-tools.d.ts.map +1 -1
- package/dist/input/viewport-tools.js +1 -6
- package/dist/input/viewport-tools.js.map +1 -1
- package/dist/journal/ambient-store.d.ts +16 -0
- package/dist/journal/ambient-store.d.ts.map +1 -0
- package/dist/journal/ambient-store.js +46 -0
- package/dist/journal/ambient-store.js.map +1 -0
- package/dist/journal/ambient.d.ts +48 -0
- package/dist/journal/ambient.d.ts.map +1 -0
- package/dist/journal/ambient.js +48 -0
- package/dist/journal/ambient.js.map +1 -0
- package/dist/journal/attach-journal.d.ts +22 -0
- package/dist/journal/attach-journal.d.ts.map +1 -0
- package/dist/journal/attach-journal.js +20 -0
- package/dist/journal/attach-journal.js.map +1 -0
- package/dist/journal/deviation-report.d.ts +28 -0
- package/dist/journal/deviation-report.d.ts.map +1 -0
- package/dist/journal/deviation-report.js +54 -0
- package/dist/journal/deviation-report.js.map +1 -0
- package/dist/journal/deviation-service.d.ts +12 -0
- package/dist/journal/deviation-service.d.ts.map +1 -0
- package/dist/journal/deviation-service.js +32 -0
- package/dist/journal/deviation-service.js.map +1 -0
- package/dist/journal/envelope-store.d.ts +19 -0
- package/dist/journal/envelope-store.d.ts.map +1 -0
- package/dist/journal/envelope-store.js +62 -0
- package/dist/journal/envelope-store.js.map +1 -0
- package/dist/journal/envelope.d.ts +232 -0
- package/dist/journal/envelope.d.ts.map +1 -0
- package/dist/journal/envelope.js +94 -0
- package/dist/journal/envelope.js.map +1 -0
- package/dist/journal/journal-query.d.ts +20 -0
- package/dist/journal/journal-query.d.ts.map +1 -0
- package/dist/journal/journal-query.js +28 -0
- package/dist/journal/journal-query.js.map +1 -0
- package/dist/journal/journal-recorder.d.ts +38 -0
- package/dist/journal/journal-recorder.d.ts.map +1 -0
- package/dist/journal/journal-recorder.js +81 -0
- package/dist/journal/journal-recorder.js.map +1 -0
- package/dist/journal/retention.d.ts +21 -0
- package/dist/journal/retention.d.ts.map +1 -0
- package/dist/journal/retention.js +50 -0
- package/dist/journal/retention.js.map +1 -0
- package/dist/journal/rollups.d.ts +49 -0
- package/dist/journal/rollups.d.ts.map +1 -0
- package/dist/journal/rollups.js +83 -0
- package/dist/journal/rollups.js.map +1 -0
- package/dist/journal/session-end.d.ts +32 -0
- package/dist/journal/session-end.d.ts.map +1 -0
- package/dist/journal/session-end.js +52 -0
- package/dist/journal/session-end.js.map +1 -0
- package/dist/journal/session-journal.d.ts +25 -0
- package/dist/journal/session-journal.d.ts.map +1 -0
- package/dist/journal/session-journal.js +168 -0
- package/dist/journal/session-journal.js.map +1 -0
- package/dist/license/license.d.ts +8 -3
- package/dist/license/license.d.ts.map +1 -1
- package/dist/license/license.js +34 -11
- package/dist/license/license.js.map +1 -1
- package/dist/mcp-proxy.d.ts +20 -0
- package/dist/mcp-proxy.d.ts.map +1 -1
- package/dist/mcp-proxy.js +52 -29
- package/dist/mcp-proxy.js.map +1 -1
- package/dist/mcp.d.ts +22 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +93 -10
- package/dist/mcp.js.map +1 -1
- package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
- package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
- package/dist/oracles/flow-instrument-gaps.js +45 -0
- package/dist/oracles/flow-instrument-gaps.js.map +1 -0
- package/dist/oracles/propose-consequences.d.ts +22 -0
- package/dist/oracles/propose-consequences.d.ts.map +1 -0
- package/dist/oracles/propose-consequences.js +93 -0
- package/dist/oracles/propose-consequences.js.map +1 -0
- package/dist/oracles/self-instrument.d.ts +32 -0
- package/dist/oracles/self-instrument.d.ts.map +1 -0
- package/dist/oracles/self-instrument.js +44 -0
- package/dist/oracles/self-instrument.js.map +1 -0
- package/dist/pairing-token.d.ts +1 -1
- package/dist/phenomena/phenomena.d.ts +27 -0
- package/dist/phenomena/phenomena.d.ts.map +1 -0
- package/dist/phenomena/phenomena.js +102 -0
- package/dist/phenomena/phenomena.js.map +1 -0
- package/dist/pool/browser-pool.d.ts +5 -3
- package/dist/pool/browser-pool.d.ts.map +1 -1
- package/dist/pool/browser-pool.js +21 -3
- package/dist/pool/browser-pool.js.map +1 -1
- package/dist/pool/playwright-launcher.d.ts +2 -2
- package/dist/pool/playwright-launcher.d.ts.map +1 -1
- package/dist/pool/playwright-launcher.js +20 -6
- package/dist/pool/playwright-launcher.js.map +1 -1
- package/dist/project/file-lock.d.ts +2 -0
- package/dist/project/file-lock.d.ts.map +1 -0
- package/dist/project/file-lock.js +24 -0
- package/dist/project/file-lock.js.map +1 -0
- package/dist/project/fs-port.d.ts +18 -0
- package/dist/project/fs-port.d.ts.map +1 -1
- package/dist/project/fs-port.js +24 -2
- package/dist/project/fs-port.js.map +1 -1
- package/dist/project/project-store.d.ts.map +1 -1
- package/dist/project/project-store.js +13 -7
- package/dist/project/project-store.js.map +1 -1
- package/dist/project/project-tools.d.ts +0 -6
- package/dist/project/project-tools.d.ts.map +1 -1
- package/dist/project/project-tools.js +25 -7
- package/dist/project/project-tools.js.map +1 -1
- package/dist/project/reticle-dir.d.ts +39 -14
- package/dist/project/reticle-dir.d.ts.map +1 -1
- package/dist/project/reticle-dir.js +30 -4
- package/dist/project/reticle-dir.js.map +1 -1
- package/dist/runs/build-verification-run.d.ts +1 -1
- package/dist/runs/build-verification-run.js +1 -1
- package/dist/runs/repair-prompt.d.ts +2 -0
- package/dist/runs/repair-prompt.d.ts.map +1 -1
- package/dist/runs/repair-prompt.js +14 -1
- package/dist/runs/repair-prompt.js.map +1 -1
- package/dist/runs/reticle-runner.d.ts +1 -1
- package/dist/runs/reticle-runner.d.ts.map +1 -1
- package/dist/runs/run-diff.d.ts +34 -0
- package/dist/runs/run-diff.d.ts.map +1 -0
- package/dist/runs/run-diff.js +71 -0
- package/dist/runs/run-diff.js.map +1 -0
- package/dist/runs/run-store.d.ts +6 -1
- package/dist/runs/run-store.d.ts.map +1 -1
- package/dist/runs/run-store.js +22 -2
- package/dist/runs/run-store.js.map +1 -1
- package/dist/runs/run-tools.d.ts.map +1 -1
- package/dist/runs/run-tools.js +16 -3
- package/dist/runs/run-tools.js.map +1 -1
- package/dist/runs/verify-server.js +1 -1
- package/dist/runs/verify-server.js.map +1 -1
- package/dist/server-version.d.ts +5 -0
- package/dist/server-version.d.ts.map +1 -1
- package/dist/server-version.js +5 -0
- package/dist/server-version.js.map +1 -1
- package/dist/session/control-envelope.d.ts +9 -1
- package/dist/session/control-envelope.d.ts.map +1 -1
- package/dist/session/control-envelope.js +13 -1
- package/dist/session/control-envelope.js.map +1 -1
- package/dist/session/live-control-tools.d.ts +1 -1
- package/dist/session/live-control-tools.d.ts.map +1 -1
- package/dist/session/live-control-tools.js +2 -7
- package/dist/session/live-control-tools.js.map +1 -1
- package/dist/session/live-control.d.ts +38 -0
- package/dist/session/live-control.d.ts.map +1 -0
- package/dist/session/live-control.js +64 -0
- package/dist/session/live-control.js.map +1 -0
- package/dist/session/observed-state.d.ts +46 -0
- package/dist/session/observed-state.d.ts.map +1 -0
- package/dist/session/observed-state.js +76 -0
- package/dist/session/observed-state.js.map +1 -0
- package/dist/session/output-budget.d.ts +9 -0
- package/dist/session/output-budget.d.ts.map +1 -1
- package/dist/session/output-budget.js +12 -1
- package/dist/session/output-budget.js.map +1 -1
- package/dist/session/review-store.d.ts +1 -1
- package/dist/session/review-store.d.ts.map +1 -1
- package/dist/session/review-store.js +2 -2
- package/dist/session/review-store.js.map +1 -1
- package/dist/session/session-manager.d.ts +9 -7
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +8 -8
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/session-readiness.js +1 -1
- package/dist/session/session-readiness.js.map +1 -1
- package/dist/session/session-reaper.d.ts +1 -1
- package/dist/session/session-reaper.js +1 -1
- package/dist/session/session-recommendation.d.ts +1 -1
- package/dist/session/session-recommendation.js +1 -1
- package/dist/session/session-tools.js +1 -1
- package/dist/session/session-tools.js.map +1 -1
- package/dist/session/session.d.ts +44 -12
- package/dist/session/session.d.ts.map +1 -1
- package/dist/session/session.js +116 -47
- package/dist/session/session.js.map +1 -1
- package/dist/tools/act-tools.d.ts.map +1 -1
- package/dist/tools/act-tools.js +257 -70
- package/dist/tools/act-tools.js.map +1 -1
- package/dist/tools/act-view.d.ts +4 -4
- package/dist/tools/act-view.js +4 -4
- package/dist/tools/assert-grade.d.ts.map +1 -1
- package/dist/tools/assert-grade.js +15 -26
- package/dist/tools/assert-grade.js.map +1 -1
- package/dist/tools/browser-tools.d.ts.map +1 -1
- package/dist/tools/browser-tools.js +32 -8
- package/dist/tools/browser-tools.js.map +1 -1
- package/dist/tools/contract-tools.d.ts.map +1 -1
- package/dist/tools/contract-tools.js +5 -0
- package/dist/tools/contract-tools.js.map +1 -1
- package/dist/tools/dynamic-tools.d.ts.map +1 -1
- package/dist/tools/dynamic-tools.js +7 -6
- package/dist/tools/dynamic-tools.js.map +1 -1
- package/dist/tools/invoke-tool.d.ts.map +1 -1
- package/dist/tools/invoke-tool.js +41 -30
- package/dist/tools/invoke-tool.js.map +1 -1
- package/dist/tools/lease-tools.d.ts +16 -0
- package/dist/tools/lease-tools.d.ts.map +1 -1
- package/dist/tools/lease-tools.js +11 -0
- package/dist/tools/lease-tools.js.map +1 -1
- package/dist/tools/merge-tools.d.ts +43 -0
- package/dist/tools/merge-tools.d.ts.map +1 -0
- package/dist/tools/merge-tools.js +66 -0
- package/dist/tools/merge-tools.js.map +1 -0
- package/dist/tools/observe-tools.d.ts.map +1 -1
- package/dist/tools/observe-tools.js +172 -29
- package/dist/tools/observe-tools.js.map +1 -1
- package/dist/tools/profiles.d.ts +18 -13
- package/dist/tools/profiles.d.ts.map +1 -1
- package/dist/tools/profiles.js +39 -33
- package/dist/tools/profiles.js.map +1 -1
- package/dist/tools/query-paginate.d.ts +9 -2
- package/dist/tools/query-paginate.d.ts.map +1 -1
- package/dist/tools/query-paginate.js +21 -4
- package/dist/tools/query-paginate.js.map +1 -1
- package/dist/tools/read-tools.d.ts.map +1 -1
- package/dist/tools/read-tools.js +95 -2
- package/dist/tools/read-tools.js.map +1 -1
- package/dist/tools/snapshot-delta.d.ts +2 -0
- package/dist/tools/snapshot-delta.d.ts.map +1 -1
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/snapshot-delta.js.map +1 -1
- package/dist/tools/tool-kit.d.ts +11 -2
- package/dist/tools/tool-kit.d.ts.map +1 -1
- package/dist/tools/tool-kit.js +24 -1
- package/dist/tools/tool-kit.js.map +1 -1
- package/dist/tools/tool-names.d.ts +19 -10
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/tools/tool-names.js +23 -13
- package/dist/tools/tool-names.js.map +1 -1
- package/dist/tools/tools-helpers.d.ts +12 -0
- package/dist/tools/tools-helpers.d.ts.map +1 -1
- package/dist/tools/tools-helpers.js +20 -0
- package/dist/tools/tools-helpers.js.map +1 -1
- package/dist/tools/tools.d.ts.map +1 -1
- package/dist/tools/tools.js +162 -12
- package/dist/tools/tools.js.map +1 -1
- package/dist/update/update-checker.d.ts +14 -1
- package/dist/update/update-checker.d.ts.map +1 -1
- package/dist/update/update-checker.js +9 -5
- package/dist/update/update-checker.js.map +1 -1
- package/dist/update/updater.d.ts +20 -2
- package/dist/update/updater.d.ts.map +1 -1
- package/dist/update/updater.js +48 -14
- package/dist/update/updater.js.map +1 -1
- package/dist/visual/visual-tools.d.ts.map +1 -1
- package/dist/visual/visual-tools.js +1 -6
- package/dist/visual/visual-tools.js.map +1 -1
- package/package.json +8 -3
- package/dist/update/update-tools.d.ts +0 -3
- package/dist/update/update-tools.d.ts.map +0 -1
- package/dist/update/update-tools.js +0 -94
- package/dist/update/update-tools.js.map +0 -1
|
@@ -5,7 +5,21 @@
|
|
|
5
5
|
export interface FileSystemPort {
|
|
6
6
|
/** Read a UTF-8 file. Rejects (ENOENT) if absent. */
|
|
7
7
|
readFile(path: string): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Read a UTF-8 file from a BYTE offset to EOF, returning the tail plus the file's total byte size.
|
|
10
|
+
* The append-only journal grows unboundedly, so re-reading the whole file per query is O(N-per-call);
|
|
11
|
+
* this reads only what was appended since the caller's tracked offset. Callers MUST pass an offset
|
|
12
|
+
* that lands on a `\n` boundary (the journal's line terminator, 1 ASCII byte) so the returned tail
|
|
13
|
+
* starts on a valid UTF-8 char boundary. Optional — a FileSystemPort that omits it makes readers fall
|
|
14
|
+
* back to a whole-file read.
|
|
15
|
+
*/
|
|
16
|
+
readFileFrom?(path: string, byteOffset: number): Promise<{
|
|
17
|
+
text: string;
|
|
18
|
+
size: number;
|
|
19
|
+
}>;
|
|
8
20
|
writeFile(path: string, data: string): Promise<void>;
|
|
21
|
+
/** Append UTF-8 text, creating the file if absent — for the append-only JSONL journal. */
|
|
22
|
+
appendFile(path: string, data: string): Promise<void>;
|
|
9
23
|
/** Read raw bytes (PNG baselines). Rejects (ENOENT) if absent. */
|
|
10
24
|
readFileBytes(path: string): Promise<Uint8Array>;
|
|
11
25
|
/** Write raw bytes (PNG screenshots/diffs). */
|
|
@@ -19,6 +33,10 @@ export interface FileSystemPort {
|
|
|
19
33
|
rename(from: string, to: string): Promise<void>;
|
|
20
34
|
/** Idempotent remove (no throw if absent) — for retention pruning + cleaning temp files. */
|
|
21
35
|
rm(path: string): Promise<void>;
|
|
36
|
+
/** Modification time in epoch ms — for recency-based retention pruning. Rejects if absent. */
|
|
37
|
+
stat(path: string): Promise<{
|
|
38
|
+
mtimeMs: number;
|
|
39
|
+
}>;
|
|
22
40
|
/** ENOENT classifier — narrows unknown without `any`, so callers can distinguish missing-file. */
|
|
23
41
|
isNotFound(error: unknown): boolean;
|
|
24
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-port.d.ts","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs-port.d.ts","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,kEAAkE;IAClE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,+CAA+C;IAC/C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,wEAAwE;IACxE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,iEAAiE;IACjE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,oFAAoF;IACpF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,4FAA4F;IAC5F,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,8FAA8F;IAC9F,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,kGAAkG;IAClG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CACrC;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,cAAc,CA+CrD"}
|
package/dist/project/fs-port.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
|
-
import { access, mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
1
|
+
import { access, appendFile, mkdir, open, readdir, readFile, rename, rm, stat, writeFile, } from 'node:fs/promises';
|
|
2
2
|
/** Production adapter — the single import site of node:fs/promises in the server. */
|
|
3
3
|
export function createNodeFileSystem() {
|
|
4
4
|
return {
|
|
5
5
|
readFile: (path) => readFile(path, 'utf8'),
|
|
6
|
+
readFileFrom: async (path, byteOffset) => {
|
|
7
|
+
const fh = await open(path, 'r');
|
|
8
|
+
try {
|
|
9
|
+
const { size } = await fh.stat();
|
|
10
|
+
if (byteOffset >= size)
|
|
11
|
+
return { text: '', size };
|
|
12
|
+
const length = size - byteOffset;
|
|
13
|
+
const buf = Buffer.allocUnsafe(length);
|
|
14
|
+
await fh.read(buf, 0, length, byteOffset);
|
|
15
|
+
return { text: buf.toString('utf8'), size };
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
await fh.close();
|
|
19
|
+
}
|
|
20
|
+
},
|
|
6
21
|
writeFile: (path, data) => writeFile(path, data, 'utf8'),
|
|
22
|
+
appendFile: (path, data) => appendFile(path, data, 'utf8'),
|
|
7
23
|
readFileBytes: async (path) => {
|
|
8
24
|
const buf = await readFile(path);
|
|
9
25
|
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
@@ -24,7 +40,13 @@ export function createNodeFileSystem() {
|
|
|
24
40
|
readdir: (path) => readdir(path),
|
|
25
41
|
rename: (from, to) => rename(from, to),
|
|
26
42
|
rm: async (path) => {
|
|
27
|
-
|
|
43
|
+
// recursive so a session-journal DIRECTORY can be pruned; force so a missing path is a no-op.
|
|
44
|
+
// recursive is harmless for the file-removal callers (run/flow artifacts).
|
|
45
|
+
await rm(path, { recursive: true, force: true });
|
|
46
|
+
},
|
|
47
|
+
stat: async (path) => {
|
|
48
|
+
const s = await stat(path);
|
|
49
|
+
return { mtimeMs: s.mtimeMs };
|
|
28
50
|
},
|
|
29
51
|
isNotFound: (error) => error?.code === 'ENOENT',
|
|
30
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-port.js","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fs-port.js","sourceRoot":"","sources":["../../src/project/fs-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-store.d.ts","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,gBAAgB,EAChB,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-store.d.ts","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,gBAAgB,EAChB,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAM/C,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAI5C;;;;GAIG;AACH,qBAAa,YAAY;;gBAKX,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAoB1D,mGAAmG;IAC7F,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA0BxC;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,iGAAiG;IAC3F,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAS5D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PROJECT_FILE_VERSION, PROJECT_RUN_CAP, ProjectFileSchema, ProjectReadError, } from '@reticlehq/core';
|
|
2
2
|
import { reticleDirPaths } from './reticle-dir.js';
|
|
3
|
+
import { withFileLock } from './file-lock.js';
|
|
3
4
|
const JSON_INDENT = 2;
|
|
4
5
|
const EMPTY_PROJECT = { version: PROJECT_FILE_VERSION, runs: [] };
|
|
5
6
|
/**
|
|
@@ -63,13 +64,18 @@ export class ProjectStore {
|
|
|
63
64
|
* (last PER_NAME of any one name, then cap to TOTAL overall) and writes byte-stably.
|
|
64
65
|
*/
|
|
65
66
|
async recordRun(record) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
const path = reticleDirPaths(this.#root).project;
|
|
68
|
+
// Serialized per file: a parallel flow_verify records N runs concurrently, and an unlocked
|
|
69
|
+
// read-append-write drops every run but the last writer's (each read the same base list).
|
|
70
|
+
await withFileLock(path, async () => {
|
|
71
|
+
const existing = await this.read();
|
|
72
|
+
const base = existing.ok ? existing.file : EMPTY_PROJECT;
|
|
73
|
+
const stamped = { ...record, at: this.#clock.now() };
|
|
74
|
+
const runs = truncate([...base.runs, stamped]);
|
|
75
|
+
const next = { ...base, runs };
|
|
76
|
+
await this.#fs.mkdir(reticleDirPaths(this.#root).root);
|
|
77
|
+
await this.#fs.writeFile(path, this.#serialize(next));
|
|
78
|
+
});
|
|
73
79
|
}
|
|
74
80
|
/** The most-recent run for `name` (undefined on missing/malformed/none). Powers diff-vs-last. */
|
|
75
81
|
async lastRun(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-store.js","sourceRoot":"","sources":["../../src/project/project-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import type { ToolDef } from '../tools/tools.js';
|
|
2
|
-
/**
|
|
3
|
-
* The cross-run memory tools. `reticle_project` reads .reticle/project.json (optionally
|
|
4
|
-
* scoped to a name, with a diff-vs-last summary); `reticle_run_record` explicitly records an outcome
|
|
5
|
-
* (the manual companion to the auto-record on reticle_flow_replay). Both keep the agent's "did this
|
|
6
|
-
* behave like last run?" question answerable without re-deriving it from raw observations.
|
|
7
|
-
*/
|
|
8
2
|
export declare const PROJECT_TOOLS: ToolDef[];
|
|
9
3
|
//# sourceMappingURL=project-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-tools.d.ts","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-tools.d.ts","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,mBAAmB,CAAC;AA4E3D,eAAO,MAAM,aAAa,EAAE,OAAO,EA4ElC,CAAC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ProjectReadError, RunKind, RunStatus } from '@reticlehq/core';
|
|
3
3
|
import { ReticleTool } from '../tools/tool-names.js';
|
|
4
|
+
import { sessionIdShape } from '../tools/tool-kit.js';
|
|
4
5
|
import { asString } from '../tools/tools-helpers.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
.string()
|
|
8
|
-
.optional()
|
|
9
|
-
.describe('Active session ID from reticle_sessions. Omit when only one browser session is open.'),
|
|
10
|
-
};
|
|
6
|
+
import { RunStore } from '../runs/run-store.js';
|
|
7
|
+
import { diffRuns as diffVerificationRuns, } from '../runs/run-diff.js';
|
|
11
8
|
const REGRESSION_STATUSES = new Set([
|
|
12
9
|
RunStatus.FAIL,
|
|
13
10
|
RunStatus.DRIFT,
|
|
@@ -49,10 +46,23 @@ function lastTwoFor(runs, name) {
|
|
|
49
46
|
* (the manual companion to the auto-record on reticle_flow_replay). Both keep the agent's "did this
|
|
50
47
|
* behave like last run?" question answerable without re-deriving it from raw observations.
|
|
51
48
|
*/
|
|
49
|
+
/**
|
|
50
|
+
* The per-flow diff between the two most-recent verification ARTIFACTS (.reticle/runs), or undefined when
|
|
51
|
+
* fewer than two exist. Never throws — a missing/unreadable artifact must not break reading run history.
|
|
52
|
+
*/
|
|
53
|
+
async function lastTwoRunArtifacts(deps) {
|
|
54
|
+
try {
|
|
55
|
+
const pair = await new RunStore(deps.fs, deps.reticleRoot).latestTwo();
|
|
56
|
+
return pair === undefined ? undefined : diffVerificationRuns(pair[0], pair[1]);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
52
62
|
export const PROJECT_TOOLS = [
|
|
53
63
|
{
|
|
54
64
|
name: ReticleTool.PROJECT,
|
|
55
|
-
description: 'Read cross-run history from .reticle/project.json — the memory of how past runs behaved. With { name } it also returns the last run for that flow plus a diff-vs-last summary (status change, regressed flag, consoleErrors/driftSteps deltas) so you can answer "did it behave like last time?". Returns { runs, learned?, lastRun?, diff? }
|
|
65
|
+
description: 'Read cross-run history from .reticle/project.json — the memory of how past runs behaved. With { name } it also returns the last run for that flow plus a diff-vs-last summary (status change, regressed flag, consoleErrors/driftSteps deltas) so you can answer "did it behave like last time?". Returns { runs, learned?, lastRun?, diff?, runDiff? } — `diff` is the lightweight status/console/drift delta vs the previous run of that NAME; `runDiff` is the per-flow duration/status delta between the two most-recent full verification artifacts ("step 3: 412ms -> 987ms (+140%), +2 requests"). Or { error, reason } when no/invalid history exists.',
|
|
56
66
|
inputSchema: {
|
|
57
67
|
name: z.string().optional().describe('Filter runs by this name. Omit to return all runs.'),
|
|
58
68
|
...sessionIdShape,
|
|
@@ -60,6 +70,7 @@ export const PROJECT_TOOLS = [
|
|
|
60
70
|
outputSchema: {
|
|
61
71
|
runs: z.array(z.unknown()),
|
|
62
72
|
diff: z.unknown().optional(),
|
|
73
|
+
runDiff: z.unknown().optional(),
|
|
63
74
|
},
|
|
64
75
|
handler: async (deps, args) => {
|
|
65
76
|
const read = await deps.project.read();
|
|
@@ -77,11 +88,18 @@ export const PROJECT_TOOLS = [
|
|
|
77
88
|
}
|
|
78
89
|
const lastRun = await deps.project.lastRun(name);
|
|
79
90
|
const pair = lastTwoFor(read.file.runs, name);
|
|
91
|
+
//: the RICH run diff (per-flow duration deltas past a noise floor, status changes, new/removed
|
|
92
|
+
// flows, verdict change) over the last two verification ARTIFACTS. That lives alongside — not
|
|
93
|
+
// instead of — the lightweight RunRecord diff above: `diff` answers "did this named run behave like
|
|
94
|
+
// last time?" from project.json, while `runDiff` answers "what changed between the last two full
|
|
95
|
+
// verification runs?" from .reticle/runs. Best-effort: no artifacts simply means no runDiff.
|
|
96
|
+
const runDiff = await lastTwoRunArtifacts(deps);
|
|
80
97
|
return {
|
|
81
98
|
runs: read.file.runs.filter((r) => r.name === name),
|
|
82
99
|
learned: read.file.learned,
|
|
83
100
|
lastRun,
|
|
84
101
|
...(pair !== undefined ? { diff: diffRuns(pair[0], pair[1]) } : {}),
|
|
102
|
+
...(runDiff === undefined ? {} : { runDiff }),
|
|
85
103
|
};
|
|
86
104
|
},
|
|
87
105
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/project/project-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,58 @@
|
|
|
1
|
+
import type { FlowName, SessionId } from '@reticlehq/core';
|
|
1
2
|
import { ContractReadError, type CapabilitiesContract, type RunId } from '@reticlehq/core';
|
|
2
3
|
import type { FileSystemPort } from './fs-port.js';
|
|
3
|
-
/** Resolved absolute paths inside a `.reticle/` root. Pure: join
|
|
4
|
+
/** Resolved absolute paths inside a `.reticle/` root. Pure: join only, no IO, no cwd. */
|
|
4
5
|
export interface ReticleDirPaths {
|
|
5
|
-
|
|
6
|
+
/**.../.reticle */
|
|
6
7
|
root: string;
|
|
7
|
-
|
|
8
|
+
/**.../.reticle/contract.json */
|
|
8
9
|
contract: string;
|
|
9
|
-
|
|
10
|
+
/**.../.reticle/flows */
|
|
10
11
|
flows: string;
|
|
11
|
-
|
|
12
|
+
/**.../.reticle/baselines */
|
|
12
13
|
baselines: string;
|
|
13
|
-
|
|
14
|
+
/**.../.reticle/project.json (cross-run outcome memory) */
|
|
14
15
|
project: string;
|
|
15
|
-
|
|
16
|
+
/**.../.reticle/visual (PNG baselines + diffs) */
|
|
16
17
|
visual: string;
|
|
17
|
-
|
|
18
|
+
/**.../.reticle/runs (verification-run artifacts) */
|
|
18
19
|
runs: string;
|
|
20
|
+
/**.../.reticle/sessions (durable causal journal, one dir per session) */
|
|
21
|
+
sessions: string;
|
|
22
|
+
/**.../.reticle/envelopes.json (learned per-route expected envelopes) */
|
|
23
|
+
envelopes: string;
|
|
24
|
+
/**.../.reticle/ambient.json (learned ambient-churn region map) */
|
|
25
|
+
ambient: string;
|
|
26
|
+
/** .../.reticle/capsules (fail-to-pass bug capsules) */
|
|
27
|
+
capsules: string;
|
|
28
|
+
/**.../.reticle/flake.json (per-flow flake ledger) */
|
|
29
|
+
flake: string;
|
|
30
|
+
/**.../.reticle/assertion-tiers.json (last-passing assertion tiers; anti-reward-hacking baseline) */
|
|
31
|
+
tiers: string;
|
|
19
32
|
}
|
|
20
33
|
export declare function reticleDirPaths(root: string): ReticleDirPaths;
|
|
21
|
-
/** The verification-run artifact path for `runId
|
|
34
|
+
/** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
|
|
22
35
|
export declare function runPath(root: string, runId: string): string;
|
|
36
|
+
/** The journal directory for `sessionId` (.reticle/sessions/<id>). Guard the id first. */
|
|
37
|
+
export declare function sessionDirPath(root: string, sessionId: string): string;
|
|
38
|
+
/** The append-only event ledger path for a session (.reticle/sessions/<id>/events.jsonl). */
|
|
39
|
+
export declare function journalEventsPath(root: string, sessionId: string): string;
|
|
40
|
+
/** The append-only action ledger path for a session (.reticle/sessions/<id>/actions.jsonl). */
|
|
41
|
+
export declare function journalActionsPath(root: string, sessionId: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* A sessionId must be a single safe path segment before it is joined into a disk path — same guard as
|
|
44
|
+
* run/flow ids (rejects '../', slashes, absolute, dotfiles). Session labels are user/tab-supplied, so
|
|
45
|
+
* this guard runs before any journal write.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isValidSessionId(sessionId: string): sessionId is SessionId;
|
|
23
48
|
/**
|
|
24
49
|
* A runId must be a single safe path segment — same guard as flow names (rejects '../', '/', '\\',
|
|
25
50
|
* absolute, dotfiles). uuid-style ids (hyphens/underscores) pass. Guards every disk op before join.
|
|
26
51
|
*/
|
|
27
52
|
export declare function isValidRunId(runId: string): runId is RunId;
|
|
28
|
-
/** The PNG baseline path for `name
|
|
53
|
+
/** The PNG baseline path for `name`.reticle/visual/<name>.png). */
|
|
29
54
|
export declare function visualPath(root: string, name: string): string;
|
|
30
|
-
/** The overlay-diff PNG path for `name
|
|
55
|
+
/** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
|
|
31
56
|
export declare function visualDiffPath(root: string, name: string): string;
|
|
32
57
|
/**
|
|
33
58
|
* Path to a flow file. With a `projectId`, the flow lives in a per-project subdir
|
|
@@ -35,16 +60,16 @@ export declare function visualDiffPath(root: string, name: string): string;
|
|
|
35
60
|
* apps' flows of the same name; without one it's the flat legacy path (`.reticle/flows/<name>.json`),
|
|
36
61
|
* which is also where pre-existing (untagged) flows stay. Callers pass ONLY a validated projectId.
|
|
37
62
|
*/
|
|
38
|
-
export declare function flowPath(root: string, name:
|
|
63
|
+
export declare function flowPath(root: string, name: FlowName, projectId?: string): string;
|
|
39
64
|
/** The directory a flow write targets: the per-project subdir, or the flat flows root for global. */
|
|
40
65
|
export declare function flowDir(root: string, projectId?: string): string;
|
|
41
66
|
/**
|
|
42
67
|
* A flow name must be a single safe path segment — rejects '../', '/', '\\', absolute, dotfiles.
|
|
43
68
|
* Guards every disk op before a path is ever joined, so a traversal name never escapes .reticle/.
|
|
44
69
|
*/
|
|
45
|
-
export declare function isValidFlowName(name: string):
|
|
70
|
+
export declare function isValidFlowName(name: string): name is FlowName;
|
|
46
71
|
export declare function baselinePath(root: string, name: string): string;
|
|
47
|
-
/** Idempotent: creates .reticle
|
|
72
|
+
/** Idempotent: creates .reticle/,.reticle/flows/,.reticle/baselines/ (recursive mkdir → safe to re-run). */
|
|
48
73
|
export declare function ensureReticleDir(fs: FileSystemPort, root: string): Promise<void>;
|
|
49
74
|
/** Write the contract to .reticle/contract.json (auto-creating .reticle/ first). */
|
|
50
75
|
export declare function writeContract(fs: FileSystemPort, root: string, capabilities: CapabilitiesContract, now: () => number): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reticle-dir.d.ts","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,iBAAiB,EAGjB,KAAK,oBAAoB,EAEzB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,
|
|
1
|
+
{"version":3,"file":"reticle-dir.d.ts","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,38 @@ export function reticleDirPaths(root) {
|
|
|
9
9
|
project: join(root, ReticleDir.PROJECT_FILE),
|
|
10
10
|
visual: join(root, ReticleDir.VISUAL_SUBDIR),
|
|
11
11
|
runs: join(root, ReticleDir.RUNS_SUBDIR),
|
|
12
|
+
sessions: join(root, ReticleDir.SESSIONS_SUBDIR),
|
|
13
|
+
envelopes: join(root, ReticleDir.ENVELOPES_FILE),
|
|
14
|
+
ambient: join(root, ReticleDir.AMBIENT_FILE),
|
|
15
|
+
capsules: join(root, ReticleDir.CAPSULES_SUBDIR),
|
|
16
|
+
flake: join(root, ReticleDir.FLAKE_FILE),
|
|
17
|
+
tiers: join(root, ReticleDir.TIERS_FILE),
|
|
12
18
|
};
|
|
13
19
|
}
|
|
14
|
-
/** The verification-run artifact path for `runId
|
|
20
|
+
/** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
|
|
15
21
|
export function runPath(root, runId) {
|
|
16
22
|
return join(root, ReticleDir.RUNS_SUBDIR, `${runId}.json`);
|
|
17
23
|
}
|
|
24
|
+
/** The journal directory for `sessionId` (.reticle/sessions/<id>). Guard the id first. */
|
|
25
|
+
export function sessionDirPath(root, sessionId) {
|
|
26
|
+
return join(root, ReticleDir.SESSIONS_SUBDIR, sessionId);
|
|
27
|
+
}
|
|
28
|
+
/** The append-only event ledger path for a session (.reticle/sessions/<id>/events.jsonl). */
|
|
29
|
+
export function journalEventsPath(root, sessionId) {
|
|
30
|
+
return join(sessionDirPath(root, sessionId), ReticleDir.JOURNAL_EVENTS_FILE);
|
|
31
|
+
}
|
|
32
|
+
/** The append-only action ledger path for a session (.reticle/sessions/<id>/actions.jsonl). */
|
|
33
|
+
export function journalActionsPath(root, sessionId) {
|
|
34
|
+
return join(sessionDirPath(root, sessionId), ReticleDir.JOURNAL_ACTIONS_FILE);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A sessionId must be a single safe path segment before it is joined into a disk path — same guard as
|
|
38
|
+
* run/flow ids (rejects '../', slashes, absolute, dotfiles). Session labels are user/tab-supplied, so
|
|
39
|
+
* this guard runs before any journal write.
|
|
40
|
+
*/
|
|
41
|
+
export function isValidSessionId(sessionId) {
|
|
42
|
+
return FLOW_NAME_PATTERN.test(sessionId) && !sessionId.includes('..');
|
|
43
|
+
}
|
|
18
44
|
/**
|
|
19
45
|
* A runId must be a single safe path segment — same guard as flow names (rejects '../', '/', '\\',
|
|
20
46
|
* absolute, dotfiles). uuid-style ids (hyphens/underscores) pass. Guards every disk op before join.
|
|
@@ -22,11 +48,11 @@ export function runPath(root, runId) {
|
|
|
22
48
|
export function isValidRunId(runId) {
|
|
23
49
|
return FLOW_NAME_PATTERN.test(runId) && !runId.includes('..');
|
|
24
50
|
}
|
|
25
|
-
/** The PNG baseline path for `name
|
|
51
|
+
/** The PNG baseline path for `name`.reticle/visual/<name>.png). */
|
|
26
52
|
export function visualPath(root, name) {
|
|
27
53
|
return join(root, ReticleDir.VISUAL_SUBDIR, `${name}.png`);
|
|
28
54
|
}
|
|
29
|
-
/** The overlay-diff PNG path for `name
|
|
55
|
+
/** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
|
|
30
56
|
export function visualDiffPath(root, name) {
|
|
31
57
|
return join(root, ReticleDir.VISUAL_SUBDIR, `${name}.diff.png`);
|
|
32
58
|
}
|
|
@@ -57,7 +83,7 @@ export function isValidFlowName(name) {
|
|
|
57
83
|
export function baselinePath(root, name) {
|
|
58
84
|
return join(root, ReticleDir.BASELINES_SUBDIR, `${name}.json`);
|
|
59
85
|
}
|
|
60
|
-
/** Idempotent: creates .reticle
|
|
86
|
+
/** Idempotent: creates .reticle/,.reticle/flows/,.reticle/baselines/ (recursive mkdir → safe to re-run). */
|
|
61
87
|
export async function ensureReticleDir(fs, root) {
|
|
62
88
|
const p = reticleDirPaths(root);
|
|
63
89
|
await fs.mkdir(p.root);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reticle-dir.js","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"reticle-dir.js","sourceRoot":"","sources":["../../src/project/reticle-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The verification-run assembler. A PURE mapping from already-produced verification results
|
|
3
3
|
* (flow-replay outcomes, standalone checks, risks, evidence, repair packets) into the stable
|
|
4
4
|
* ReticleVerificationRun artifact, with a deterministic verdict computed here. The clock is injected
|
|
5
|
-
* (the single `createdAt` site — never Date.now
|
|
5
|
+
* (the single `createdAt` site — never Date.now in logic, per rule 7). Gathering the inputs from a
|
|
6
6
|
* live session is a separate adapter concern; this file owns the shape + the verdict rules so both
|
|
7
7
|
* the MCP path and the programmatic Replay/Verify API produce byte-identical verdicts.
|
|
8
8
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The verification-run assembler. A PURE mapping from already-produced verification results
|
|
3
3
|
* (flow-replay outcomes, standalone checks, risks, evidence, repair packets) into the stable
|
|
4
4
|
* ReticleVerificationRun artifact, with a deterministic verdict computed here. The clock is injected
|
|
5
|
-
* (the single `createdAt` site — never Date.now
|
|
5
|
+
* (the single `createdAt` site — never Date.now in logic, per rule 7). Gathering the inputs from a
|
|
6
6
|
* live session is a separate adapter concern; this file owns the shape + the verdict rules so both
|
|
7
7
|
* the MCP path and the programmatic Replay/Verify API produce byte-identical verdicts.
|
|
8
8
|
*/
|
|
@@ -9,6 +9,8 @@ import { type FlowReplayResult, type RepairPacket } from '@reticlehq/core';
|
|
|
9
9
|
* Build a repair packet for a failed replay, or undefined when the flow passed. The actual cause is
|
|
10
10
|
* the decision's whatChanged, falling back to the replay error or a generic message.
|
|
11
11
|
*/
|
|
12
|
+
/** The deviation report's headline when it flagged something — narrows the replay's `unknown` deviation. */
|
|
13
|
+
export declare function deviationHeadline(deviation: unknown): string | undefined;
|
|
12
14
|
export declare function buildRepairPacket(replay: FlowReplayResult): RepairPacket | undefined;
|
|
13
15
|
/** Build the repair packets for a set of replays (failed ones only). */
|
|
14
16
|
export declare function buildRepairPackets(replays: ReadonlyArray<FlowReplayResult>): RepairPacket[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-prompt.d.ts","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAgCzB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"repair-prompt.d.ts","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAgCzB;;;GAGG;AACH,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOxE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,SAAS,CAqBpF;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,YAAY,EAAE,CAE3F"}
|
|
@@ -35,11 +35,24 @@ function suggestedPrompt(name, actual, where, nextAction) {
|
|
|
35
35
|
* Build a repair packet for a failed replay, or undefined when the flow passed. The actual cause is
|
|
36
36
|
* the decision's whatChanged, falling back to the replay error or a generic message.
|
|
37
37
|
*/
|
|
38
|
+
/** The deviation report's headline when it flagged something — narrows the replay's `unknown` deviation. */
|
|
39
|
+
export function deviationHeadline(deviation) {
|
|
40
|
+
if (typeof deviation !== 'object' || deviation === null)
|
|
41
|
+
return undefined;
|
|
42
|
+
const d = deviation;
|
|
43
|
+
if (Array.isArray(d.deviations) && d.deviations.length > 0 && typeof d.headline === 'string') {
|
|
44
|
+
return d.headline;
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
38
48
|
export function buildRepairPacket(replay) {
|
|
39
49
|
if (replay.status === ReplayStatus.OK)
|
|
40
50
|
return undefined;
|
|
41
51
|
const decision = replay.decision;
|
|
42
|
-
const
|
|
52
|
+
const baseActual = decision?.whatChanged ?? replay.error?.message ?? 'the flow failed';
|
|
53
|
+
// Compose the deviation report's headline into the packet — it names the anomalous segment.
|
|
54
|
+
const deviationNote = deviationHeadline(replay.deviation);
|
|
55
|
+
const actual = deviationNote === undefined ? baseActual : `${baseActual} — deviation: ${deviationNote}`;
|
|
43
56
|
const where = decision?.whereInSource;
|
|
44
57
|
const sourceLocation = parseSource(where);
|
|
45
58
|
const step = failingStepNumber(replay.steps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-prompt.js","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,GAKb,MAAM,iBAAiB,CAAC;AAEzB,uGAAuG;AACvG,SAAS,iBAAiB,CAAC,KAAoC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACxC,CAAC;AAED,0FAA0F;AAC1F,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,0EAA0E;AAC1E,SAAS,eAAe,CACtB,IAAY,EACZ,MAAc,EACd,KAAyB,EACzB,UAA8B;IAE9B,MAAM,KAAK,GAAG,CAAC,YAAY,IAAI,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACxF,IAAI,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,
|
|
1
|
+
{"version":3,"file":"repair-prompt.js","sourceRoot":"","sources":["../../src/runs/repair-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export interface RunnerPort {
|
|
|
23
23
|
/** Injected run-id generator (no Math.random in logic) — the live adapter supplies a branded uuid. */
|
|
24
24
|
newRunId(): RunId;
|
|
25
25
|
}
|
|
26
|
-
/** Run metadata the caller supplies; flows + verdict are produced by verify
|
|
26
|
+
/** Run metadata the caller supplies; flows + verdict are produced by verify. */
|
|
27
27
|
export interface VerifyOptions {
|
|
28
28
|
names?: string[];
|
|
29
29
|
project: VerificationRunInput['project'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reticle-runner.d.ts","sourceRoot":"","sources":["../../src/runs/reticle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG9F,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kGAAkG;IAClG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,GAAG,IAAI,MAAM,CAAC;IACd,sGAAsG;IACtG,QAAQ,IAAI,KAAK,CAAC;CACnB;AAED,
|
|
1
|
+
{"version":3,"file":"reticle-runner.d.ts","sourceRoot":"","sources":["../../src/runs/reticle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG9F,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,oGAAoG;AACpG,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kGAAkG;IAClG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,GAAG,IAAI,MAAM,CAAC;IACd,sGAAsG;IACtG,QAAQ,IAAI,KAAK,CAAC;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,qFAAqF;IACrF,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,qBAAa,aAAa;;gBAGZ,IAAI,EAAE,UAAU;IAI5B;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA+BnE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReticleVerificationRun } from '@reticlehq/core';
|
|
2
|
+
/** A per-flow change between two runs. Only flows with a meaningful change are reported. */
|
|
3
|
+
export interface FlowDelta {
|
|
4
|
+
name: string;
|
|
5
|
+
beforeMs: number;
|
|
6
|
+
afterMs: number;
|
|
7
|
+
durationDeltaMs: number;
|
|
8
|
+
durationDeltaPct: number;
|
|
9
|
+
beforeStatus: string;
|
|
10
|
+
afterStatus: string;
|
|
11
|
+
statusChanged: boolean;
|
|
12
|
+
/** Slower past the noise floor, or a status change — worth the agent's attention. */
|
|
13
|
+
regressed: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RunDiff {
|
|
16
|
+
flows: FlowDelta[];
|
|
17
|
+
newFlows: string[];
|
|
18
|
+
removedFlows: string[];
|
|
19
|
+
verdictChange?: {
|
|
20
|
+
from: string;
|
|
21
|
+
to: string;
|
|
22
|
+
};
|
|
23
|
+
headline: string;
|
|
24
|
+
}
|
|
25
|
+
/** Below this percent, a duration change is noise (machine jitter), not a regression. */
|
|
26
|
+
export declare const DEFAULT_NOISE_FLOOR_PCT = 10;
|
|
27
|
+
/**
|
|
28
|
+
* Compare two verification runs — the concrete answer to "what changed between run A and B". Flow
|
|
29
|
+
* durations are diffed with a noise floor (jitter below it is ignored); status changes and new/removed
|
|
30
|
+
* flows are always surfaced. Deterministic and pure; flows are matched by name. Per-step deltas + net/
|
|
31
|
+
* console diffs land once runs persist per-step detail.
|
|
32
|
+
*/
|
|
33
|
+
export declare function diffRuns(before: ReticleVerificationRun, after: ReticleVerificationRun, noiseFloorPct?: number): RunDiff;
|
|
34
|
+
//# sourceMappingURL=run-diff.d.ts.map
|