@reticlehq/server 2.14.0 → 3.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/SKILL.md +54 -136
- package/bin/reticle.js +1 -1
- package/dist/command/cli/adhoc-verdict.d.ts +64 -0
- package/dist/command/cli/adhoc-verdict.js +144 -0
- package/dist/command/cli/answers/status-next-action.d.ts +61 -0
- package/dist/command/cli/answers/status-next-action.js +84 -0
- package/dist/command/cli/auth/cloud-keystore.js +97 -0
- package/dist/command/cli/auth/device-flow.d.ts +76 -0
- package/dist/command/cli/auth/device-flow.js +56 -0
- package/dist/command/cli/cli-doctor.js +215 -0
- package/dist/command/cli/cli-flow-commands.d.ts +47 -0
- package/dist/command/cli/cli-flow-commands.js +255 -0
- package/dist/command/cli/cli-kill.d.ts +59 -0
- package/dist/command/cli/cli-kill.js +162 -0
- package/dist/command/cli/cli-parse-grammar.d.ts +29 -0
- package/dist/command/cli/cli-parse-grammar.js +39 -0
- package/dist/command/cli/cli-parse-verify.d.ts +22 -0
- package/dist/command/cli/cli-parse-verify.js +143 -0
- package/dist/command/cli/cli-parse.d.ts +193 -0
- package/dist/command/cli/cli-parse.js +833 -0
- package/dist/command/cli/cli-update-commands.js +112 -0
- package/dist/command/cli/cli-verify.d.ts +124 -0
- package/dist/command/cli/cli-verify.js +426 -0
- package/dist/command/cli/cloud-cli.js +694 -0
- package/dist/command/cli/cloud-kit.d.ts +37 -0
- package/dist/command/cli/cloud-kit.js +117 -0
- package/dist/command/cli/cloud-login.js +183 -0
- package/dist/command/cli/config/config-discovery.d.ts +48 -0
- package/dist/command/cli/config/config-discovery.js +183 -0
- package/dist/command/cli/daemon-start-options.d.ts +33 -0
- package/dist/command/cli/demo/demo-page.d.ts +78 -0
- package/dist/command/cli/demo/demo-page.js +238 -0
- package/dist/command/cli/demo/demo-run.d.ts +38 -0
- package/dist/command/cli/demo/demo-run.js +138 -0
- package/dist/command/cli/doctor/doctor-daemon-line.js +47 -0
- package/dist/command/cli/doctor/doctor-rows.d.ts +75 -0
- package/dist/command/cli/doctor/doctor-rows.js +77 -0
- package/dist/command/cli/doctor/doctor-sessions-line.js +69 -0
- package/dist/command/cli/drive/drive-attach.d.ts +113 -0
- package/dist/command/cli/drive/drive-attach.js +221 -0
- package/dist/command/cli/drive/drive-command.js +107 -0
- package/dist/command/cli/launch/cli-launch.d.ts +100 -0
- package/dist/command/cli/launch/cli-launch.js +216 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +33 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +198 -0
- package/dist/command/cli/mcp-command.js +176 -0
- package/dist/command/cli/ports/port-holder.js +123 -0
- package/dist/command/cli/ports/resolve/cli-port.d.ts +71 -0
- package/dist/command/cli/ports/resolve/cli-port.js +140 -0
- package/dist/command/cli/setup-mcp-cli.d.ts +29 -0
- package/dist/command/cli/setup-mcp-cli.js +107 -0
- package/dist/command/cli/status/status-lines.d.ts +28 -0
- package/dist/command/cli/status/status-lines.js +117 -0
- package/dist/command/cli/status-fields.d.ts +28 -0
- package/dist/command/cli/status-fields.js +29 -0
- package/dist/command/cli/tutorial.d.ts +116 -0
- package/dist/command/cli/tutorial.js +189 -0
- package/dist/command/cli-onboarding.d.ts +21 -0
- package/dist/command/cli-onboarding.js +27 -0
- package/dist/command/cli.d.ts +6 -0
- package/dist/command/cli.js +710 -0
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +48 -0
- package/dist/command/daemon/binding/loopback-reach.d.ts +42 -0
- package/dist/command/daemon/binding/loopback-reach.js +63 -0
- package/dist/command/daemon/daemon-resilience.d.ts +86 -0
- package/dist/command/daemon/daemon-resilience.js +339 -0
- package/dist/command/daemon/daemon-resolve.d.ts +113 -0
- package/dist/command/daemon/daemon-resolve.js +187 -0
- package/dist/command/daemon/daemon.d.ts +86 -0
- package/dist/command/daemon/daemon.js +333 -0
- package/dist/command/daemon/idle-shutdown.d.ts +54 -0
- package/dist/command/daemon/idle-shutdown.js +98 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +60 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.js +61 -0
- package/dist/command/daemon/lifetime/heartbeat.d.ts +119 -0
- package/dist/command/daemon/lifetime/heartbeat.js +151 -0
- package/dist/command/daemon/lifetime/idle-grace.d.ts +32 -0
- package/dist/command/daemon/lifetime/idle-grace.js +41 -0
- package/dist/command/daemon/lifetime/log-cap.d.ts +68 -0
- package/dist/command/daemon/lifetime/log-cap.js +115 -0
- package/dist/command/daemon/state-dir.js +59 -0
- package/dist/command/daemon/wake-decision.d.ts +32 -0
- package/dist/command/daemon/wake-decision.js +38 -0
- package/dist/command/dev/stale-issue-guard.d.ts +35 -0
- package/dist/command/dev/stale-issue-guard.js +69 -0
- package/dist/command/setup/agent-configs.d.ts +111 -0
- package/dist/command/setup/agent-configs.js +365 -0
- package/dist/command/setup/agent-notice-memory.d.ts +16 -0
- package/dist/command/setup/agent-notice-memory.js +65 -0
- package/dist/command/setup/agent-writer.d.ts +52 -0
- package/dist/command/setup/agent-writer.js +116 -0
- package/dist/command/setup/auto-approve.js +153 -0
- package/dist/command/setup/bringup/bridge-port.d.ts +15 -0
- package/dist/command/setup/bringup/bridge-port.js +24 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +69 -0
- package/dist/command/setup/bringup/dev-server-wait.js +83 -0
- package/dist/command/setup/bringup/ensure-daemon.js +58 -0
- package/dist/command/setup/init/init-host.js +37 -0
- package/dist/command/setup/init/init-runtime.d.ts +39 -0
- package/dist/command/setup/init/init-runtime.js +168 -0
- package/dist/command/setup/node-effects.d.ts +63 -0
- package/dist/command/setup/node-effects.js +225 -0
- package/dist/command/setup/probe/page-probe.d.ts +71 -0
- package/dist/command/setup/probe/page-probe.js +89 -0
- package/dist/command/setup/remaining-steps.js +53 -0
- package/dist/command/setup/run-setup.d.ts +123 -0
- package/dist/command/setup/run-setup.js +316 -0
- package/dist/command/setup/setup-command.d.ts +48 -0
- package/dist/command/setup/setup-command.js +224 -0
- package/dist/command/setup/setup-install.d.ts +18 -0
- package/dist/command/setup/setup-install.js +40 -0
- package/dist/command/setup/setup-mcp.d.ts +57 -0
- package/dist/command/setup/setup-mcp.js +92 -0
- package/dist/command/setup/setup-options.d.ts +66 -0
- package/dist/command/setup/setup-options.js +63 -0
- package/dist/command/setup/terminal/confirm.js +206 -0
- package/dist/command/setup/terminal/crash.d.ts +55 -0
- package/dist/command/setup/terminal/crash.js +74 -0
- package/dist/command/update/nudge-credit.js +53 -0
- package/dist/command/update/sdk-sync.d.ts +20 -0
- package/dist/command/update/sdk-sync.js +22 -0
- package/dist/command/update/update-checker.js +122 -0
- package/dist/command/update/update-nudge.d.ts +90 -0
- package/dist/command/update/update-nudge.js +211 -0
- package/dist/command/update/updater.d.ts +81 -0
- package/dist/command/update/updater.js +223 -0
- package/dist/command/version/identity/server-version.js +50 -0
- package/dist/command/version/peer-announce.js +32 -0
- package/dist/command/version/sdk-fix.js +127 -0
- package/dist/command/version/version-nudge.js +61 -0
- package/dist/command/version/version-skew.d.ts +113 -0
- package/dist/command/version/version-skew.js +192 -0
- package/dist/features/crawl/crawl-tools.d.ts +7 -0
- package/dist/features/crawl/crawl-tools.js +89 -0
- package/dist/features/crawl/crawl.d.ts +98 -0
- package/dist/features/crawl/crawl.js +444 -0
- package/dist/features/ee/audit-log.js +11 -0
- package/dist/features/harness/drive-report.d.ts +73 -0
- package/dist/features/harness/drive-report.js +196 -0
- package/dist/features/harness/driver.d.ts +50 -0
- package/dist/features/harness/driver.js +239 -0
- package/dist/features/harness/drivers.d.ts +19 -0
- package/dist/features/harness/drivers.js +19 -0
- package/dist/features/harness/fill-values.d.ts +67 -0
- package/dist/features/harness/fill-values.js +153 -0
- package/dist/features/harness/harness.d.ts +159 -0
- package/dist/features/harness/harness.js +203 -0
- package/dist/features/harness/jev-driver.d.ts +188 -0
- package/dist/features/harness/jev-driver.js +664 -0
- package/dist/features/harness/openai-driver.d.ts +46 -0
- package/dist/features/harness/openai-driver.js +197 -0
- package/dist/features/harness/platform-config.d.ts +52 -0
- package/dist/features/harness/platform-config.js +89 -0
- package/dist/features/harness/with-timeout.d.ts +18 -0
- package/dist/features/harness/with-timeout.js +34 -0
- package/dist/features/license/license-env.d.ts +24 -0
- package/dist/features/license/license-env.js +140 -0
- package/dist/features/license/license.d.ts +161 -0
- package/dist/features/license/license.js +287 -0
- package/dist/features/visual/visual-store.d.ts +22 -0
- package/dist/features/visual/visual-store.js +66 -0
- package/dist/features/visual/visual-tools.d.ts +26 -0
- package/dist/features/visual/visual-tools.js +352 -0
- package/dist/hooks/hook-bus.d.ts +53 -0
- package/dist/hooks/hook-bus.js +106 -0
- package/dist/hooks/hook-commands.d.ts +59 -0
- package/dist/hooks/hook-commands.js +184 -0
- package/dist/hooks/hook-emit.d.ts +44 -0
- package/dist/hooks/hook-emit.js +85 -0
- package/dist/import-graph.d.ts +48 -0
- package/dist/import-graph.js +106 -0
- package/dist/index.d.ts +91 -125
- package/dist/index.js +250 -160
- package/dist/judgement/capsule/capsule-store.d.ts +70 -0
- package/dist/judgement/capsule/capsule-store.js +113 -0
- package/dist/judgement/capsule/capsule.d.ts +42 -0
- package/dist/judgement/capsule/capsule.js +73 -0
- package/dist/judgement/capsule/causal-summary.d.ts +119 -0
- package/dist/judgement/capsule/causal-summary.js +172 -0
- package/dist/judgement/capsule/divergence.d.ts +26 -0
- package/dist/judgement/domain/domain-model.js +126 -0
- package/dist/judgement/domain/domain-tools.d.ts +2 -0
- package/dist/judgement/domain/domain-tools.js +96 -0
- package/dist/judgement/domain/flow-risk.js +80 -0
- package/dist/judgement/oracles/propose-consequences.d.ts +22 -0
- package/dist/judgement/oracles/propose-consequences.js +106 -0
- package/dist/judgement/outcome/predicate-to-expect.d.ts +44 -0
- package/dist/judgement/outcome/predicate-to-expect.js +148 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +34 -0
- package/dist/judgement/runs/artifact/build-verification-run.js +83 -0
- package/dist/judgement/runs/artifact/render-report.js +84 -0
- package/dist/judgement/runs/artifact/replay-mapping.js +34 -0
- package/dist/judgement/runs/artifact/run-store.d.ts +54 -0
- package/dist/judgement/runs/artifact/run-store.js +150 -0
- package/dist/judgement/runs/artifact/to-artifact.d.ts +119 -0
- package/dist/judgement/runs/artifact/to-artifact.js +83 -0
- package/dist/judgement/runs/context-tools.d.ts +2 -0
- package/dist/judgement/runs/context-tools.js +70 -0
- package/dist/judgement/runs/default-run-id.d.ts +8 -0
- package/dist/judgement/runs/default-run-id.js +11 -0
- package/dist/judgement/runs/drive-run.d.ts +61 -0
- package/dist/judgement/runs/drive-run.js +130 -0
- package/dist/judgement/runs/late-answer.d.ts +55 -0
- package/dist/judgement/runs/late-answer.js +81 -0
- package/dist/judgement/runs/reticle-runner.d.ts +60 -0
- package/dist/judgement/runs/reticle-runner.js +95 -0
- package/dist/judgement/runs/run-tools.d.ts +17 -0
- package/dist/judgement/runs/run-tools.js +97 -0
- package/dist/judgement/runs/runner-port.d.ts +11 -0
- package/dist/judgement/runs/runner-port.js +18 -0
- package/dist/judgement/runs/verification-sync.d.ts +13 -0
- package/dist/judgement/runs/verification-sync.js +93 -0
- package/dist/language/flows/affected-tools.d.ts +18 -0
- package/dist/language/flows/affected-tools.js +83 -0
- package/dist/language/flows/annotate-tools.d.ts +15 -0
- package/dist/language/flows/annotate-tools.js +179 -0
- package/dist/language/flows/change/affected.d.ts +24 -0
- package/dist/language/flows/change/affected.js +35 -0
- package/dist/language/flows/change/flow-sources.d.ts +19 -0
- package/dist/language/flows/change/flow-sources.js +55 -0
- package/dist/language/flows/change/gate.js +33 -0
- package/dist/language/flows/decision.d.ts +45 -0
- package/dist/language/flows/decision.js +371 -0
- package/dist/language/flows/empty-flow.js +24 -0
- package/dist/language/flows/fields/flow-secret-field.d.ts +53 -0
- package/dist/language/flows/fields/flow-secret-field.js +75 -0
- package/dist/language/flows/fields/flow-upload-resolve.d.ts +23 -0
- package/dist/language/flows/fields/flow-upload-resolve.js +46 -0
- package/dist/language/flows/flow-anchor.d.ts +59 -0
- package/dist/language/flows/flow-anchor.js +240 -0
- package/dist/language/flows/flow-classify.d.ts +73 -0
- package/dist/language/flows/flow-classify.js +146 -0
- package/dist/language/flows/flow-expect-grammar.d.ts +33 -0
- package/dist/language/flows/flow-expect-grammar.js +155 -0
- package/dist/language/flows/flow-intent.d.ts +52 -0
- package/dist/language/flows/flow-intent.js +123 -0
- package/dist/language/flows/flow-learning.d.ts +52 -0
- package/dist/language/flows/flow-learning.js +76 -0
- package/dist/language/flows/flow-mutate-tools.d.ts +14 -0
- package/dist/language/flows/flow-mutate-tools.js +82 -0
- package/dist/language/flows/flow-replay-run.d.ts +91 -0
- package/dist/language/flows/flow-replay-run.js +748 -0
- package/dist/language/flows/flow-replay-types.d.ts +37 -0
- package/dist/language/flows/flow-replay-types.js +1 -0
- package/dist/language/flows/flow-replay.d.ts +91 -0
- package/dist/language/flows/flow-replay.js +487 -0
- package/dist/language/flows/flow-result.d.ts +35 -0
- package/dist/language/flows/flow-result.js +26 -0
- package/dist/language/flows/flow-step-runners.d.ts +54 -0
- package/dist/language/flows/flow-step-runners.js +369 -0
- package/dist/language/flows/flow-store-for-session.d.ts +32 -0
- package/dist/language/flows/flow-success.d.ts +32 -0
- package/dist/language/flows/flow-success.js +181 -0
- package/dist/language/flows/flow-tools.d.ts +15 -0
- package/dist/language/flows/flow-tools.js +842 -0
- package/dist/language/flows/flows.d.ts +114 -0
- package/dist/language/flows/flows.js +492 -0
- package/dist/language/flows/heal-precondition.d.ts +28 -0
- package/dist/language/flows/heal-precondition.js +38 -0
- package/dist/language/flows/heal-run.d.ts +17 -0
- package/dist/language/flows/heal-run.js +186 -0
- package/dist/language/flows/heal.js +97 -0
- package/dist/language/flows/mutation-run.d.ts +33 -0
- package/dist/language/flows/mutation-run.js +60 -0
- package/dist/language/flows/narrow-write.d.ts +32 -0
- package/dist/language/flows/narrow-write.js +26 -0
- package/dist/language/flows/recording/flake.d.ts +56 -0
- package/dist/language/flows/recording/recording-backtrack.js +73 -0
- package/dist/language/flows/recording/tape/recordings.d.ts +134 -0
- package/dist/language/flows/recording/tape/recordings.js +144 -0
- package/dist/language/flows/replay.d.ts +83 -0
- package/dist/language/flows/replay.js +397 -0
- package/dist/language/flows/role-anchor-nearest.js +45 -0
- package/dist/language/flows/stores/assertion-tiers-store.d.ts +26 -0
- package/dist/language/flows/stores/assertion-tiers-store.js +107 -0
- package/dist/language/flows/stores/flake-store.d.ts +18 -0
- package/dist/language/flows/stores/flake-store.js +58 -0
- package/dist/language/flows/suite/server-verify.d.ts +15 -0
- package/dist/language/flows/suite/server-verify.js +56 -0
- package/dist/language/flows/suite/suite-flakes.d.ts +34 -0
- package/dist/language/flows/suite/suite-flakes.js +32 -0
- package/dist/language/flows/suite-selection.d.ts +45 -0
- package/dist/language/flows/suite-selection.js +84 -0
- package/dist/language/flows/verify-change-tools.d.ts +2 -0
- package/dist/language/flows/verify-change-tools.js +244 -0
- package/dist/machine/clock.d.ts +24 -0
- package/dist/machine/clock.js +1 -0
- package/dist/machine/repo-root.d.ts +16 -0
- package/dist/machine/repo-root.js +20 -0
- package/dist/memory/cloud/account-state.d.ts +20 -0
- package/dist/memory/cloud/account-state.js +70 -0
- package/dist/memory/cloud/cloud-config.d.ts +79 -0
- package/dist/memory/cloud/cloud-config.js +156 -0
- package/dist/memory/cloud/cloud-sync.d.ts +195 -0
- package/dist/memory/cloud/cloud-sync.js +359 -0
- package/dist/memory/cloud/harness-config.d.ts +10 -0
- package/dist/memory/cloud/harness-config.js +58 -0
- package/dist/memory/cloud/harness-offer.d.ts +44 -0
- package/dist/memory/cloud/harness-offer.js +146 -0
- package/dist/memory/cloud/harness-switch.d.ts +11 -0
- package/dist/memory/cloud/harness-switch.js +53 -0
- package/dist/memory/cloud/sync-cycle.d.ts +121 -0
- package/dist/memory/cloud/sync-cycle.js +295 -0
- package/dist/memory/cloud/sync-daemon.d.ts +73 -0
- package/dist/memory/cloud/sync-daemon.js +297 -0
- package/dist/memory/cloud/sync-disk.js +193 -0
- package/dist/memory/impact/impact-recorder.d.ts +54 -0
- package/dist/memory/impact/impact-recorder.js +160 -0
- package/dist/memory/impact/impact-store.d.ts +52 -0
- package/dist/memory/impact/impact-store.js +274 -0
- package/dist/memory/intent/inline-intent.d.ts +60 -0
- package/dist/memory/intent/inline-intent.js +206 -0
- package/dist/memory/intent/intent-shard-store.d.ts +87 -0
- package/dist/memory/intent/intent-shard-store.js +215 -0
- package/dist/memory/intent/intent-shard.d.ts +389 -0
- package/dist/memory/intent/intent-shard.js +153 -0
- package/dist/memory/intent/intent-store.d.ts +47 -0
- package/dist/memory/intent/intent-store.js +133 -0
- package/dist/memory/intent/intent-subject.d.ts +46 -0
- package/dist/memory/intent/intent-subject.js +175 -0
- package/dist/memory/intent/intent-tools.d.ts +2 -0
- package/dist/memory/intent/intent-tools.js +157 -0
- package/dist/memory/intent/open-intents.d.ts +36 -0
- package/dist/memory/intent/open-intents.js +58 -0
- package/dist/memory/journal/ambient-store.d.ts +13 -0
- package/dist/memory/journal/ambient-store.js +52 -0
- package/dist/memory/journal/attach-journal.d.ts +37 -0
- package/dist/memory/journal/attach-journal.js +26 -0
- package/dist/memory/journal/drive-flow.d.ts +74 -0
- package/dist/memory/journal/drive-flow.js +157 -0
- package/dist/memory/journal/drive-run-flush.d.ts +42 -0
- package/dist/memory/journal/drive-run-flush.js +82 -0
- package/dist/memory/journal/envelope-store.d.ts +16 -0
- package/dist/memory/journal/envelope-store.js +61 -0
- package/dist/memory/journal/envelope.d.ts +230 -0
- package/dist/memory/journal/journal-query.d.ts +66 -0
- package/dist/memory/journal/journal-query.js +98 -0
- package/dist/memory/journal/journal-recorder.d.ts +109 -0
- package/dist/memory/journal/journal-recorder.js +153 -0
- package/dist/memory/journal/on-disk/ambient-file.d.ts +21 -0
- package/dist/memory/journal/on-disk/ambient-file.js +15 -0
- package/dist/memory/journal/on-disk/retention.d.ts +141 -0
- package/dist/memory/journal/on-disk/retention.js +291 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +21 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.js +93 -0
- package/dist/memory/journal/self-observation.d.ts +3 -0
- package/dist/memory/journal/self-observation.js +67 -0
- package/dist/memory/journal/session-end.d.ts +112 -0
- package/dist/memory/journal/session-end.js +179 -0
- package/dist/memory/journal/session-journal.d.ts +134 -0
- package/dist/memory/journal/session-journal.js +614 -0
- package/dist/memory/project/artifact-root-resolver.d.ts +3 -0
- package/dist/memory/project/artifact-root-resolver.js +89 -0
- package/dist/memory/project/artifact-root.d.ts +109 -0
- package/dist/memory/project/artifact-root.js +157 -0
- package/dist/memory/project/dir/fill-value-store.d.ts +32 -0
- package/dist/memory/project/dir/fill-value-store.js +88 -0
- package/dist/memory/project/dir/reticle-dir.d.ts +139 -0
- package/dist/memory/project/dir/reticle-dir.js +229 -0
- package/dist/memory/project/fs/fs-port.d.ts +68 -0
- package/dist/memory/project/fs/fs-port.js +82 -0
- package/dist/memory/project/learned-routes.d.ts +38 -0
- package/dist/memory/project/learned-routes.js +79 -0
- package/dist/memory/project/memory-fs.d.ts +10 -0
- package/dist/memory/project/project-for-root.d.ts +30 -0
- package/dist/memory/project/project-for-root.js +43 -0
- package/dist/memory/project/project-store.d.ts +54 -0
- package/dist/memory/project/project-store.js +244 -0
- package/dist/memory/project/project-tools.d.ts +8 -0
- package/dist/memory/project/project-tools.js +160 -0
- package/dist/memory/project/reticle-deps.d.ts +15 -0
- package/dist/memory/project/reticle-deps.js +33 -0
- package/dist/memory/project/session-root.d.ts +52 -0
- package/dist/memory/project/session-root.js +100 -0
- package/dist/memory/recall/memory-tools.d.ts +2 -0
- package/dist/memory/recall/memory-tools.js +81 -0
- package/dist/memory/recall/prior/connection-memory.d.ts +65 -0
- package/dist/memory/recall/prior/connection-memory.js +114 -0
- package/dist/memory/recall/project-memory.d.ts +33 -0
- package/dist/portal/bridge/auth-failure-reason.d.ts +32 -0
- package/dist/portal/bridge/auth-failure-reason.js +68 -0
- package/dist/portal/bridge/bridge-security.d.ts +30 -0
- package/dist/portal/bridge/bridge-security.js +53 -0
- package/dist/portal/bridge/bridge.d.ts +109 -0
- package/dist/portal/bridge/bridge.js +808 -0
- package/dist/portal/input/drive-url-stamp.d.ts +14 -0
- package/dist/portal/input/drive-url-stamp.js +33 -0
- package/dist/portal/input/network-detail.d.ts +97 -0
- package/dist/portal/input/network-detail.js +138 -0
- package/dist/portal/input/network-mock-tools.d.ts +21 -0
- package/dist/portal/input/network-mock-tools.js +124 -0
- package/dist/portal/input/network-mock.js +83 -0
- package/dist/portal/input/network-mutation.d.ts +47 -0
- package/dist/portal/input/network-mutation.js +53 -0
- package/dist/portal/input/real-input.d.ts +261 -0
- package/dist/portal/input/real-input.js +488 -0
- package/dist/portal/input/scroll-find.js +111 -0
- package/dist/portal/input/scroll-tools.d.ts +2 -0
- package/dist/portal/input/scroll-tools.js +76 -0
- package/dist/portal/input/storage-fixture.d.ts +57 -0
- package/dist/portal/input/storage-fixture.js +92 -0
- package/dist/portal/input/viewport-tools.d.ts +2 -0
- package/dist/portal/input/viewport-tools.js +72 -0
- package/dist/portal/pool/browser-pool.d.ts +174 -0
- package/dist/portal/pool/browser-pool.js +559 -0
- package/dist/portal/pool/lease-reaper.js +40 -0
- package/dist/portal/pool/playwright-launcher.js +150 -0
- package/dist/portal/pool/pool-contract.d.ts +116 -0
- package/dist/portal/pool/pool-contract.js +8 -0
- package/dist/portal/pool/storage-seed.d.ts +23 -0
- package/dist/portal/realm/conformance-client.d.ts +43 -0
- package/dist/portal/realm/conformance-client.js +227 -0
- package/dist/portal/realm/http-witness.d.ts +48 -0
- package/dist/portal/realm/http-witness.js +135 -0
- package/dist/portal/realm/web-realm.d.ts +225 -0
- package/dist/portal/realm/web-realm.js +661 -0
- package/dist/portal/session/daemon-answers.d.ts +20 -0
- package/dist/portal/session/daemon-answers.js +20 -0
- package/dist/portal/session/dev-server/dev-server-probe.js +147 -0
- package/dist/portal/session/facts/handshake-facts.d.ts +56 -0
- package/dist/portal/session/facts/handshake-facts.js +1 -0
- package/dist/portal/session/facts/observed-state.d.ts +60 -0
- package/dist/portal/session/facts/observed-state.js +121 -0
- package/dist/portal/session/facts/session-replaced.d.ts +43 -0
- package/dist/portal/session/facts/session-replaced.js +51 -0
- package/dist/portal/session/live-control-tools.d.ts +15 -0
- package/dist/portal/session/live-control-tools.js +242 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +176 -0
- package/dist/portal/session/no-session-diagnosis.js +457 -0
- package/dist/portal/session/no-session-next-action.d.ts +76 -0
- package/dist/portal/session/no-session-next-action.js +211 -0
- package/dist/portal/session/no-session-watch.js +351 -0
- package/dist/portal/session/output-budget.d.ts +82 -0
- package/dist/portal/session/output-budget.js +108 -0
- package/dist/portal/session/page-commands/undeclared-command.d.ts +30 -0
- package/dist/portal/session/page-commands/undeclared-command.js +44 -0
- package/dist/portal/session/presence/session-recommendation.js +29 -0
- package/dist/portal/session/rebind.d.ts +18 -0
- package/dist/portal/session/rebind.js +38 -0
- package/dist/portal/session/session-health.d.ts +145 -0
- package/dist/portal/session/session-health.js +154 -0
- package/dist/portal/session/session-manager.d.ts +81 -0
- package/dist/portal/session/session-manager.js +504 -0
- package/dist/portal/session/session-reaper.d.ts +36 -0
- package/dist/portal/session/session-reaper.js +93 -0
- package/dist/portal/session/session-tools.d.ts +8 -0
- package/dist/portal/session/session-tools.js +42 -0
- package/dist/portal/session/session.d.ts +279 -0
- package/dist/portal/session/session.js +875 -0
- package/dist/portal/session/stall-clock.js +48 -0
- package/dist/portal/session/timing/command-timeout.d.ts +40 -0
- package/dist/portal/session/timing/command-timeout.js +42 -0
- package/dist/start-options.d.ts +51 -0
- package/dist/start-options.js +7 -0
- package/dist/status-payload.d.ts +16 -10
- package/dist/status-payload.js +5 -2
- package/dist/surface/http-server.d.ts +52 -0
- package/dist/surface/http-server.js +379 -0
- package/dist/surface/mcp/consumer-verdict-guard.d.ts +40 -0
- package/dist/surface/mcp/consumer-verdict-guard.js +57 -0
- package/dist/surface/mcp/faults/mcp-is-error.d.ts +13 -0
- package/dist/surface/mcp/faults/mcp-is-error.js +18 -0
- package/dist/surface/mcp/faults/mcp-outage.d.ts +33 -0
- package/dist/surface/mcp/faults/mcp-outage.js +71 -0
- package/dist/surface/mcp/mcp-proxy.d.ts +119 -0
- package/dist/surface/mcp/mcp-proxy.js +882 -0
- package/dist/surface/mcp/mcp.d.ts +89 -0
- package/dist/surface/mcp/mcp.js +676 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +109 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +22 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +71 -0
- package/dist/surface/mcp/proxy/proxy-handshake.js +192 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.d.ts +90 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.js +98 -0
- package/dist/surface/mcp/proxy/proxy-log.d.ts +57 -0
- package/dist/surface/mcp/proxy/proxy-log.js +117 -0
- package/dist/surface/mcp/server-instructions.d.ts +26 -0
- package/dist/surface/mcp/server-instructions.js +156 -0
- package/dist/surface/mcp/surface-vocabulary.d.ts +47 -0
- package/dist/surface/mcp/surface-vocabulary.js +56 -0
- package/dist/surface/mcp/tool-catalog-cache.d.ts +45 -0
- package/dist/surface/mcp/tool-catalog-cache.js +77 -0
- package/dist/surface/tools/act/act-danger.js +69 -0
- package/dist/surface/tools/act/act-helpers.d.ts +17 -0
- package/dist/surface/tools/act/act-helpers.js +40 -0
- package/dist/surface/tools/act/act-observation.d.ts +42 -0
- package/dist/surface/tools/act/act-observation.js +36 -0
- package/dist/surface/tools/act/act-preflight.d.ts +27 -0
- package/dist/surface/tools/act/act-preflight.js +168 -0
- package/dist/surface/tools/act/act-target.d.ts +10 -0
- package/dist/surface/tools/act/act-target.js +100 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +68 -0
- package/dist/surface/tools/act/resolve-target.js +115 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +79 -0
- package/dist/surface/tools/act/sequence-grade.js +104 -0
- package/dist/surface/tools/act-capsule.d.ts +33 -0
- package/dist/surface/tools/act-capsule.js +79 -0
- package/dist/surface/tools/act-merged.d.ts +20 -0
- package/dist/surface/tools/act-merged.js +53 -0
- package/dist/surface/tools/act-sequence-tool.js +330 -0
- package/dist/surface/tools/act-tools.d.ts +24 -0
- package/dist/surface/tools/act-tools.js +835 -0
- package/dist/surface/tools/args/numeric-bounds.d.ts +97 -0
- package/dist/surface/tools/args/numeric-bounds.js +133 -0
- package/dist/surface/tools/assert/assert-grade.d.ts +42 -0
- package/dist/surface/tools/assert/assert-grade.js +125 -0
- package/dist/surface/tools/assert/assert-source.d.ts +52 -0
- package/dist/surface/tools/assert/assert-source.js +74 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +48 -0
- package/dist/surface/tools/assert/assert-verdict.js +247 -0
- package/dist/surface/tools/browser-tools.d.ts +2 -0
- package/dist/surface/tools/browser-tools.js +115 -0
- package/dist/surface/tools/contract-tools.d.ts +2 -0
- package/dist/surface/tools/contract-tools.js +112 -0
- package/dist/surface/tools/coverage-tools.d.ts +18 -0
- package/dist/surface/tools/coverage-tools.js +178 -0
- package/dist/surface/tools/dynamic-tools.d.ts +17 -0
- package/dist/surface/tools/dynamic-tools.js +282 -0
- package/dist/surface/tools/error-recovery.d.ts +116 -0
- package/dist/surface/tools/error-recovery.js +527 -0
- package/dist/surface/tools/explore-tools.d.ts +14 -0
- package/dist/surface/tools/explore-tools.js +162 -0
- package/dist/surface/tools/feature-capture.d.ts +151 -0
- package/dist/surface/tools/feature-capture.js +235 -0
- package/dist/surface/tools/feedback-invite.d.ts +48 -0
- package/dist/surface/tools/feedback-invite.js +71 -0
- package/dist/surface/tools/feedback-tools.d.ts +35 -0
- package/dist/surface/tools/feedback-tools.js +280 -0
- package/dist/surface/tools/first-sentence.d.ts +24 -0
- package/dist/surface/tools/first-sentence.js +0 -0
- package/dist/surface/tools/gap-novelty.d.ts +39 -0
- package/dist/surface/tools/gap-novelty.js +69 -0
- package/dist/surface/tools/gaps/capability-absences.d.ts +39 -0
- package/dist/surface/tools/gaps/capability-absences.js +46 -0
- package/dist/surface/tools/harness-explore.d.ts +177 -0
- package/dist/surface/tools/harness-explore.js +453 -0
- package/dist/surface/tools/harness-plan.d.ts +76 -0
- package/dist/surface/tools/harness-plan.js +156 -0
- package/dist/surface/tools/harness-toolset.d.ts +35 -0
- package/dist/surface/tools/harness-toolset.js +144 -0
- package/dist/surface/tools/inspect-tool.d.ts +4 -0
- package/dist/surface/tools/inspect-tool.js +142 -0
- package/dist/surface/tools/invoke-tool.d.ts +10 -0
- package/dist/surface/tools/invoke-tool.js +668 -0
- package/dist/surface/tools/lease-hint.d.ts +50 -0
- package/dist/surface/tools/lease-hint.js +125 -0
- package/dist/surface/tools/lease-tools.d.ts +195 -0
- package/dist/surface/tools/lease-tools.js +797 -0
- package/dist/surface/tools/lineage-tools.d.ts +14 -0
- package/dist/surface/tools/lineage-tools.js +64 -0
- package/dist/surface/tools/live-call-text.d.ts +25 -0
- package/dist/surface/tools/live-call-text.js +191 -0
- package/dist/surface/tools/merge-tools.d.ts +68 -0
- package/dist/surface/tools/merge-tools.js +110 -0
- package/dist/surface/tools/merged-name-redirect.d.ts +36 -0
- package/dist/surface/tools/merged-name-redirect.js +107 -0
- package/dist/surface/tools/observe-tools.js +700 -0
- package/dist/surface/tools/read/query-windowed.d.ts +54 -0
- package/dist/surface/tools/read/query-windowed.js +75 -0
- package/dist/surface/tools/read/snapshot-delta.d.ts +92 -0
- package/dist/surface/tools/read/snapshot-delta.js +356 -0
- package/dist/surface/tools/read-tools.js +569 -0
- package/dist/surface/tools/real-input-attempt.d.ts +68 -0
- package/dist/surface/tools/real-input-attempt.js +360 -0
- package/dist/surface/tools/reconcile-tools.js +211 -0
- package/dist/surface/tools/tool-hit-rate.js +90 -0
- package/dist/surface/tools/tool-kit.d.ts +254 -0
- package/dist/surface/tools/tool-kit.js +123 -0
- package/dist/surface/tools/tool-surface.d.ts +195 -0
- package/dist/surface/tools/tool-surface.js +429 -0
- package/dist/surface/tools/tools-helpers.d.ts +40 -0
- package/dist/surface/tools/tools-helpers.js +76 -0
- package/dist/surface/tools/tools.d.ts +76 -0
- package/dist/surface/tools/tools.js +799 -0
- package/dist/surface/tools/unadvertised-help.js +60 -0
- package/dist/surface/tools/verify-next-baton.js +52 -0
- package/dist/telemetry/app-instrumented.d.ts +3 -5
- package/dist/telemetry/app-instrumented.js +17 -6
- package/dist/telemetry/argument-shape.js +4 -4
- package/dist/telemetry/bug-found.js +49 -27
- package/dist/telemetry/cli-telemetry.js +27 -10
- package/dist/telemetry/daemon-telemetry.d.ts +7 -13
- package/dist/telemetry/daemon-telemetry.js +15 -22
- package/dist/telemetry/error-fingerprint.js +26 -1
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +2 -2
- package/dist/telemetry/feedback-context.js +4 -4
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/harness-drive.d.ts +6 -0
- package/dist/telemetry/harness-drive.js +39 -0
- package/dist/telemetry/install-source.js +1 -1
- package/dist/telemetry/install-trace.d.ts +8 -0
- package/dist/telemetry/install-trace.js +74 -0
- package/dist/telemetry/license-activation.js +1 -1
- package/dist/telemetry/mcp-connection.d.ts +14 -1
- package/dist/telemetry/mcp-connection.js +17 -2
- package/dist/telemetry/onboarding-firsts.d.ts +40 -0
- package/dist/telemetry/onboarding-firsts.js +109 -0
- package/dist/telemetry/onboarding-funnel.d.ts +26 -0
- package/dist/telemetry/onboarding-funnel.js +60 -0
- package/dist/telemetry/project-profile.js +1 -1
- package/dist/telemetry/run-telemetry.js +13 -0
- package/dist/telemetry/session-metrics.d.ts +6 -7
- package/dist/telemetry/session-metrics.js +14 -21
- package/dist/telemetry/telemetry.d.ts +8 -1
- package/dist/telemetry/telemetry.js +6 -5
- package/dist/telemetry/verification-of.d.ts +6 -8
- package/dist/telemetry/verification-of.js +38 -12
- package/dist/workspace-packages.d.ts +22 -0
- package/dist/workspace-packages.js +57 -0
- package/docs/README.md +29 -23
- package/docs/actions.mdx +4 -4
- package/docs/adapters.md +75 -0
- package/docs/agent-cheatsheet.md +37 -27
- package/docs/architecture.md +3 -2
- package/docs/autodrive.md +99 -0
- package/docs/benchmarks.md +1 -1
- package/docs/best-practices.mdx +3 -3
- package/docs/capabilities.mdx +4 -4
- package/docs/cli/cloud.mdx +4 -4
- package/docs/cli/doctor.mdx +1 -0
- package/docs/cli/feedback.mdx +1 -1
- package/docs/cli/init.mdx +3 -3
- package/docs/cli/mcp.mdx +1 -1
- package/docs/cli/status.mdx +35 -20
- package/docs/cli/watch.mdx +1 -1
- package/docs/cli.mdx +15 -25
- package/docs/desktop.mdx +1 -1
- package/docs/enterprise.md +3 -2
- package/docs/faq.mdx +4 -4
- package/docs/first-drive.md +5 -5
- package/docs/flows.md +5 -5
- package/docs/for-agents.md +2 -1
- package/docs/frameworks.mdx +1 -1
- package/docs/getting-started.md +30 -21
- package/docs/http-transport.md +1 -1
- package/docs/index.mdx +28 -10
- package/docs/install-agentic.mdx +12 -4
- package/docs/install-manual.mdx +23 -7
- package/docs/instrumentation.mdx +3 -3
- package/docs/local-registry.md +15 -4
- package/docs/packages/babel-plugin.mdx +1 -1
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/core.mdx +2 -2
- package/docs/packages/engine.mdx +40 -0
- package/docs/packages/open-verification.mdx +40 -0
- package/docs/packages/tauri.mdx +1 -1
- package/docs/packages.mdx +22 -2
- package/docs/platform-integration.md +3 -3
- package/docs/predicates.mdx +19 -3
- package/docs/protocol.mdx +60 -0
- package/docs/quickstart.mdx +48 -13
- package/docs/recipes.mdx +1 -1
- package/docs/required-checks.md +37 -0
- package/docs/skill-file.mdx +2 -2
- package/docs/skill-setup.md +104 -0
- package/docs/state-files.md +46 -0
- package/docs/state-management.mdx +1 -1
- package/docs/system-map.md +8 -6
- package/docs/telemetry.md +4 -3
- package/docs/testing.md +12 -3
- package/docs/token-efficiency.md +3 -3
- package/docs/tools/act-and-wait.mdx +173 -0
- package/docs/tools/act-sequence.mdx +160 -0
- package/docs/tools/act.mdx +95 -0
- package/docs/tools/assert.mdx +129 -0
- package/docs/tools/console.mdx +70 -0
- package/docs/tools/inspect.mdx +95 -0
- package/docs/tools/navigate.mdx +107 -0
- package/docs/tools/network.mdx +126 -0
- package/docs/tools/observe.mdx +145 -0
- package/docs/tools/overview.mdx +163 -0
- package/docs/tools/query.mdx +133 -0
- package/docs/tools/sessions.mdx +101 -0
- package/docs/tools/snapshot.mdx +136 -0
- package/docs/tools/state.mdx +111 -0
- package/docs/tools/wait-for.mdx +92 -0
- package/docs/troubleshooting.mdx +43 -9
- package/docs/usage.md +59 -59
- package/package.json +31 -13
- package/dist/bridge/auth-failure-reason.d.ts +0 -23
- package/dist/bridge/auth-failure-reason.js +0 -47
- package/dist/bridge/bridge-security.d.ts +0 -30
- package/dist/bridge/bridge-security.js +0 -53
- package/dist/bridge/bridge.d.ts +0 -95
- package/dist/bridge/bridge.js +0 -713
- package/dist/bridge/bridge.test-harness.d.ts +0 -65
- package/dist/bridge/bridge.test-harness.js +0 -230
- package/dist/capsule/capsule-store.d.ts +0 -71
- package/dist/capsule/capsule-store.js +0 -114
- package/dist/capsule/capsule.d.ts +0 -18
- package/dist/capsule/capsule.js +0 -35
- package/dist/capsule/causal-summary.d.ts +0 -119
- package/dist/capsule/causal-summary.js +0 -172
- package/dist/capsule/divergence.d.ts +0 -35
- package/dist/capsule/predicate-to-links.d.ts +0 -8
- package/dist/capsule/predicate-to-links.js +0 -33
- package/dist/cli/adhoc-verdict.d.ts +0 -58
- package/dist/cli/adhoc-verdict.js +0 -115
- package/dist/cli/cli-doctor.js +0 -195
- package/dist/cli/cli-flow-commands.d.ts +0 -46
- package/dist/cli/cli-flow-commands.js +0 -255
- package/dist/cli/cli-kill.d.ts +0 -59
- package/dist/cli/cli-kill.js +0 -162
- package/dist/cli/cli-launch.d.ts +0 -92
- package/dist/cli/cli-launch.js +0 -223
- package/dist/cli/cli-parse.d.ts +0 -171
- package/dist/cli/cli-parse.js +0 -874
- package/dist/cli/cli-port.d.ts +0 -70
- package/dist/cli/cli-port.js +0 -136
- package/dist/cli/cli-update-commands.js +0 -112
- package/dist/cli/cli-verify.d.ts +0 -86
- package/dist/cli/cli-verify.js +0 -340
- package/dist/cli/cloud-cli.js +0 -694
- package/dist/cli/cloud-keystore.js +0 -97
- package/dist/cli/cloud-kit.d.ts +0 -37
- package/dist/cli/cloud-kit.js +0 -121
- package/dist/cli/cloud-login.js +0 -183
- package/dist/cli/config-discovery.d.ts +0 -36
- package/dist/cli/config-discovery.js +0 -164
- package/dist/cli/daemon-start-options.d.ts +0 -33
- package/dist/cli/device-flow.d.ts +0 -76
- package/dist/cli/device-flow.js +0 -56
- package/dist/cli/doctor-daemon-line.js +0 -47
- package/dist/cli/doctor-rows.d.ts +0 -63
- package/dist/cli/doctor-rows.js +0 -65
- package/dist/cli/doctor-sessions-line.js +0 -69
- package/dist/cli/drive-attach.d.ts +0 -113
- package/dist/cli/drive-attach.js +0 -221
- package/dist/cli/drive-command.js +0 -107
- package/dist/cli/mcp-command.js +0 -174
- package/dist/cli/port-holder.js +0 -123
- package/dist/cli/status-next-action.d.ts +0 -51
- package/dist/cli/status-next-action.js +0 -60
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +0 -828
- package/dist/cloud/account-state.d.ts +0 -20
- package/dist/cloud/account-state.js +0 -65
- package/dist/cloud/cloud-config.d.ts +0 -57
- package/dist/cloud/cloud-config.js +0 -145
- package/dist/cloud/cloud-sync.d.ts +0 -190
- package/dist/cloud/cloud-sync.js +0 -354
- package/dist/cloud/sync-cycle.d.ts +0 -111
- package/dist/cloud/sync-cycle.js +0 -270
- package/dist/cloud/sync-daemon.d.ts +0 -53
- package/dist/cloud/sync-daemon.js +0 -260
- package/dist/cloud/sync-disk.js +0 -191
- package/dist/crawl/crawl-tools.d.ts +0 -7
- package/dist/crawl/crawl-tools.js +0 -87
- package/dist/crawl/crawl.d.ts +0 -98
- package/dist/crawl/crawl.js +0 -441
- package/dist/daemon/daemon-resilience.d.ts +0 -74
- package/dist/daemon/daemon-resilience.js +0 -318
- package/dist/daemon/daemon-resolve.d.ts +0 -113
- package/dist/daemon/daemon-resolve.js +0 -187
- package/dist/daemon/daemon-usefulness.d.ts +0 -61
- package/dist/daemon/daemon-usefulness.js +0 -62
- package/dist/daemon/daemon.d.ts +0 -95
- package/dist/daemon/daemon.js +0 -336
- package/dist/daemon/heartbeat.d.ts +0 -111
- package/dist/daemon/heartbeat.js +0 -141
- package/dist/daemon/idle-grace.d.ts +0 -32
- package/dist/daemon/idle-grace.js +0 -41
- package/dist/daemon/idle-shutdown.d.ts +0 -54
- package/dist/daemon/idle-shutdown.js +0 -98
- package/dist/daemon/state-dir.js +0 -59
- package/dist/daemon/wake-decision.d.ts +0 -32
- package/dist/daemon/wake-decision.js +0 -38
- package/dist/dev/stale-issue-guard.d.ts +0 -41
- package/dist/dev/stale-issue-guard.js +0 -75
- package/dist/domain/domain-model.js +0 -126
- package/dist/domain/domain-tools.d.ts +0 -2
- package/dist/domain/domain-tools.js +0 -94
- package/dist/domain/flow-risk.js +0 -80
- package/dist/ee/audit-log.js +0 -11
- package/dist/events/body-failures.d.ts +0 -4
- package/dist/events/body-failures.js +0 -113
- package/dist/events/contradiction-folds.d.ts +0 -45
- package/dist/events/contradiction-folds.js +0 -42
- package/dist/events/contradictions.d.ts +0 -170
- package/dist/events/contradictions.js +0 -718
- package/dist/events/declared.d.ts +0 -74
- package/dist/events/declared.js +0 -171
- package/dist/events/echo-mismatch.d.ts +0 -10
- package/dist/events/echo-mismatch.js +0 -299
- package/dist/events/event-filters.d.ts +0 -121
- package/dist/events/event-filters.js +0 -215
- package/dist/events/json-salvage.d.ts +0 -33
- package/dist/events/json-salvage.js +0 -96
- package/dist/events/lineage.d.ts +0 -52
- package/dist/events/lineage.js +0 -122
- package/dist/events/net-evidence.d.ts +0 -21
- package/dist/events/net-evidence.js +0 -81
- package/dist/events/observed-in-window.d.ts +0 -24
- package/dist/events/observed-in-window.js +0 -38
- package/dist/events/predicate-asks.d.ts +0 -30
- package/dist/events/predicate-asks.js +0 -48
- package/dist/events/predicate-console.d.ts +0 -13
- package/dist/events/predicate-console.js +0 -138
- package/dist/events/predicate-element.d.ts +0 -13
- package/dist/events/predicate-element.js +0 -214
- package/dist/events/predicate-eval.d.ts +0 -101
- package/dist/events/predicate-eval.js +0 -834
- package/dist/events/predicate-parse.d.ts +0 -17
- package/dist/events/predicate-parse.js +0 -175
- package/dist/events/predicate-precheck.d.ts +0 -8
- package/dist/events/predicate-precheck.js +0 -41
- package/dist/events/predicate-request-body.d.ts +0 -50
- package/dist/events/predicate-request-body.js +0 -120
- package/dist/events/predicate-route.d.ts +0 -66
- package/dist/events/predicate-route.js +0 -258
- package/dist/events/predicate-schema.d.ts +0 -168
- package/dist/events/predicate-schema.js +0 -501
- package/dist/events/predicate.d.ts +0 -74
- package/dist/events/predicate.js +0 -725
- package/dist/events/reaction.d.ts +0 -33
- package/dist/events/reaction.js +0 -59
- package/dist/events/reconcile.d.ts +0 -39
- package/dist/events/reconcile.js +0 -211
- package/dist/events/ring-buffer.d.ts +0 -41
- package/dist/events/ring-buffer.js +0 -151
- package/dist/events/split-text-miss.d.ts +0 -32
- package/dist/events/split-text-miss.js +0 -51
- package/dist/events/stale-response.d.ts +0 -3
- package/dist/events/stale-response.js +0 -186
- package/dist/events/testid-near-miss.d.ts +0 -22
- package/dist/events/testid-near-miss.js +0 -33
- package/dist/events/unit-mismatch.d.ts +0 -16
- package/dist/events/unit-mismatch.js +0 -167
- package/dist/flows/affected-tools.d.ts +0 -18
- package/dist/flows/affected-tools.js +0 -80
- package/dist/flows/affected.d.ts +0 -24
- package/dist/flows/affected.js +0 -35
- package/dist/flows/annotate-tools.d.ts +0 -15
- package/dist/flows/annotate-tools.js +0 -179
- package/dist/flows/assertion-tiers-store.d.ts +0 -16
- package/dist/flows/assertion-tiers-store.js +0 -98
- package/dist/flows/decision.d.ts +0 -25
- package/dist/flows/decision.js +0 -201
- package/dist/flows/empty-flow.js +0 -24
- package/dist/flows/flake-store.d.ts +0 -18
- package/dist/flows/flake-store.js +0 -58
- package/dist/flows/flake.d.ts +0 -56
- package/dist/flows/flow-classify.d.ts +0 -51
- package/dist/flows/flow-classify.js +0 -102
- package/dist/flows/flow-expect-grammar.d.ts +0 -33
- package/dist/flows/flow-expect-grammar.js +0 -155
- package/dist/flows/flow-intent.d.ts +0 -52
- package/dist/flows/flow-intent.js +0 -123
- package/dist/flows/flow-replay-run.d.ts +0 -43
- package/dist/flows/flow-replay-run.js +0 -478
- package/dist/flows/flow-replay.d.ts +0 -82
- package/dist/flows/flow-replay.js +0 -519
- package/dist/flows/flow-secret-field.d.ts +0 -14
- package/dist/flows/flow-secret-field.js +0 -22
- package/dist/flows/flow-sources.d.ts +0 -19
- package/dist/flows/flow-sources.js +0 -32
- package/dist/flows/flow-step-runners.d.ts +0 -52
- package/dist/flows/flow-step-runners.js +0 -315
- package/dist/flows/flow-store-for-session.d.ts +0 -31
- package/dist/flows/flow-success.d.ts +0 -32
- package/dist/flows/flow-success.js +0 -169
- package/dist/flows/flow-tools.d.ts +0 -15
- package/dist/flows/flow-tools.js +0 -639
- package/dist/flows/flow-upload-resolve.d.ts +0 -23
- package/dist/flows/flow-upload-resolve.js +0 -46
- package/dist/flows/flows.d.ts +0 -130
- package/dist/flows/flows.js +0 -870
- package/dist/flows/gate.js +0 -33
- package/dist/flows/heal-run.d.ts +0 -10
- package/dist/flows/heal-run.js +0 -139
- package/dist/flows/heal.js +0 -97
- package/dist/flows/predicate-to-expect.d.ts +0 -44
- package/dist/flows/predicate-to-expect.js +0 -130
- package/dist/flows/recording-backtrack.js +0 -73
- package/dist/flows/recordings.d.ts +0 -63
- package/dist/flows/recordings.js +0 -57
- package/dist/flows/replay.d.ts +0 -62
- package/dist/flows/replay.js +0 -337
- package/dist/flows/role-anchor-nearest.js +0 -45
- package/dist/flows/server-verify.d.ts +0 -15
- package/dist/flows/server-verify.js +0 -56
- package/dist/flows/suite-flakes.d.ts +0 -34
- package/dist/flows/suite-flakes.js +0 -32
- package/dist/flows/verify-change-tools.d.ts +0 -2
- package/dist/flows/verify-change-tools.js +0 -231
- package/dist/honesty/accepted-write.d.ts +0 -17
- package/dist/honesty/accepted-write.js +0 -22
- package/dist/honesty/already-true.d.ts +0 -16
- package/dist/honesty/already-true.js +0 -89
- package/dist/honesty/blind-spots.d.ts +0 -133
- package/dist/honesty/blind-spots.js +0 -248
- package/dist/honesty/body-capture-remedy.d.ts +0 -42
- package/dist/honesty/body-capture-remedy.js +0 -95
- package/dist/honesty/feature-capture.d.ts +0 -151
- package/dist/honesty/feature-capture.js +0 -233
- package/dist/honesty/gap-ledger.d.ts +0 -52
- package/dist/honesty/gap-ledger.js +0 -63
- package/dist/honesty/honesty.d.ts +0 -103
- package/dist/honesty/honesty.js +0 -95
- package/dist/honesty/instrumentation-gaps.d.ts +0 -95
- package/dist/honesty/instrumentation-gaps.js +0 -114
- package/dist/honesty/observability.d.ts +0 -38
- package/dist/honesty/observability.js +0 -40
- package/dist/honesty/tool-hit-rate.js +0 -90
- package/dist/honesty/uncaptured-bodies.d.ts +0 -23
- package/dist/honesty/uncaptured-bodies.js +0 -41
- package/dist/honesty/undeclared-change.d.ts +0 -51
- package/dist/honesty/undeclared-change.js +0 -56
- package/dist/honesty/unread-outcome.d.ts +0 -10
- package/dist/honesty/unread-outcome.js +0 -77
- package/dist/honesty/unsettled.d.ts +0 -58
- package/dist/honesty/unsettled.js +0 -127
- package/dist/honesty/verified.d.ts +0 -148
- package/dist/honesty/verified.js +0 -330
- package/dist/http-server.d.ts +0 -52
- package/dist/http-server.js +0 -381
- package/dist/impact/impact-recorder.d.ts +0 -46
- package/dist/impact/impact-recorder.js +0 -159
- package/dist/impact/impact-store.d.ts +0 -47
- package/dist/impact/impact-store.js +0 -255
- package/dist/input/network-detail.d.ts +0 -104
- package/dist/input/network-detail.js +0 -211
- package/dist/input/network-mock-tools.d.ts +0 -21
- package/dist/input/network-mock-tools.js +0 -124
- package/dist/input/network-mock.js +0 -61
- package/dist/input/real-input.d.ts +0 -222
- package/dist/input/real-input.js +0 -405
- package/dist/input/scroll-find.js +0 -111
- package/dist/input/scroll-tools.d.ts +0 -2
- package/dist/input/scroll-tools.js +0 -76
- package/dist/input/viewport-tools.d.ts +0 -2
- package/dist/input/viewport-tools.js +0 -72
- package/dist/intent/inline-intent.d.ts +0 -27
- package/dist/intent/inline-intent.js +0 -193
- package/dist/intent/intent-shard-store.d.ts +0 -73
- package/dist/intent/intent-shard-store.js +0 -203
- package/dist/intent/intent-shard.d.ts +0 -411
- package/dist/intent/intent-shard.js +0 -176
- package/dist/intent/intent-store.d.ts +0 -49
- package/dist/intent/intent-store.js +0 -133
- package/dist/intent/intent-subject.d.ts +0 -46
- package/dist/intent/intent-subject.js +0 -177
- package/dist/intent/intent-tools.d.ts +0 -2
- package/dist/intent/intent-tools.js +0 -143
- package/dist/intent/open-intents.d.ts +0 -43
- package/dist/intent/open-intents.js +0 -40
- package/dist/journal/ambient-store.d.ts +0 -13
- package/dist/journal/ambient-store.js +0 -45
- package/dist/journal/ambient.d.ts +0 -47
- package/dist/journal/ambient.js +0 -47
- package/dist/journal/attach-journal.d.ts +0 -30
- package/dist/journal/attach-journal.js +0 -30
- package/dist/journal/envelope-store.d.ts +0 -16
- package/dist/journal/envelope-store.js +0 -61
- package/dist/journal/envelope.d.ts +0 -230
- package/dist/journal/journal-query.d.ts +0 -32
- package/dist/journal/journal-query.js +0 -52
- package/dist/journal/journal-recorder.d.ts +0 -61
- package/dist/journal/journal-recorder.js +0 -115
- package/dist/journal/retention.d.ts +0 -20
- package/dist/journal/retention.js +0 -49
- package/dist/journal/session-end.d.ts +0 -32
- package/dist/journal/session-end.js +0 -51
- package/dist/journal/session-journal.d.ts +0 -24
- package/dist/journal/session-journal.js +0 -167
- package/dist/journal/workspace-gitignore.d.ts +0 -10
- package/dist/journal/workspace-gitignore.js +0 -59
- package/dist/license/license-env.d.ts +0 -29
- package/dist/license/license-env.js +0 -148
- package/dist/license/license.d.ts +0 -169
- package/dist/license/license.js +0 -289
- package/dist/mcp/mcp-is-error.d.ts +0 -13
- package/dist/mcp/mcp-is-error.js +0 -18
- package/dist/mcp/mcp-outage.d.ts +0 -32
- package/dist/mcp/mcp-outage.js +0 -55
- package/dist/mcp/mcp-post-transport.js +0 -109
- package/dist/mcp/mcp-proxy.d.ts +0 -110
- package/dist/mcp/mcp-proxy.js +0 -872
- package/dist/mcp/mcp.d.ts +0 -80
- package/dist/mcp/mcp.js +0 -536
- package/dist/mcp/proxy-daemon-probe.d.ts +0 -9
- package/dist/mcp/proxy-daemon-probe.js +0 -54
- package/dist/mcp/proxy-handshake.js +0 -192
- package/dist/mcp/proxy-lifecycle.d.ts +0 -92
- package/dist/mcp/proxy-lifecycle.js +0 -100
- package/dist/mcp/proxy-log.d.ts +0 -63
- package/dist/mcp/proxy-log.js +0 -132
- package/dist/mcp/server-instructions.d.ts +0 -18
- package/dist/mcp/server-instructions.js +0 -98
- package/dist/mcp/tool-catalog-cache.d.ts +0 -45
- package/dist/mcp/tool-catalog-cache.js +0 -77
- package/dist/memory/memory-tools.d.ts +0 -2
- package/dist/memory/memory-tools.js +0 -82
- package/dist/memory/project-memory.d.ts +0 -33
- package/dist/oracles/propose-consequences.d.ts +0 -22
- package/dist/oracles/propose-consequences.js +0 -106
- package/dist/pool/browser-pool.d.ts +0 -282
- package/dist/pool/browser-pool.js +0 -560
- package/dist/pool/lease-reaper.js +0 -40
- package/dist/pool/playwright-launcher.js +0 -150
- package/dist/pool/storage-seed.d.ts +0 -23
- package/dist/project/artifact-root.d.ts +0 -84
- package/dist/project/artifact-root.js +0 -112
- package/dist/project/fs-port.d.ts +0 -47
- package/dist/project/fs-port.js +0 -54
- package/dist/project/learned-routes.d.ts +0 -24
- package/dist/project/learned-routes.js +0 -63
- package/dist/project/memory-fs.d.ts +0 -10
- package/dist/project/project-store.d.ts +0 -54
- package/dist/project/project-store.js +0 -201
- package/dist/project/project-tools.d.ts +0 -2
- package/dist/project/project-tools.js +0 -155
- package/dist/project/reticle-dir.d.ts +0 -102
- package/dist/project/reticle-dir.js +0 -188
- package/dist/project/session-root.d.ts +0 -23
- package/dist/project/session-root.js +0 -38
- package/dist/runs/build-verification-run.d.ts +0 -29
- package/dist/runs/build-verification-run.js +0 -70
- package/dist/runs/context-tools.d.ts +0 -2
- package/dist/runs/context-tools.js +0 -89
- package/dist/runs/render-report.js +0 -69
- package/dist/runs/replay-mapping.js +0 -34
- package/dist/runs/reticle-runner.d.ts +0 -60
- package/dist/runs/reticle-runner.js +0 -95
- package/dist/runs/run-store.d.ts +0 -54
- package/dist/runs/run-store.js +0 -147
- package/dist/runs/run-tools.d.ts +0 -9
- package/dist/runs/run-tools.js +0 -82
- package/dist/runs/runner-port.d.ts +0 -13
- package/dist/runs/runner-port.js +0 -22
- package/dist/runs/verification-sync.d.ts +0 -12
- package/dist/runs/verification-sync.js +0 -87
- package/dist/session/command-timeout.d.ts +0 -46
- package/dist/session/command-timeout.js +0 -42
- package/dist/session/connection-memory.d.ts +0 -59
- package/dist/session/connection-memory.js +0 -108
- package/dist/session/dev-server-probe.js +0 -147
- package/dist/session/live-control-tools.d.ts +0 -15
- package/dist/session/live-control-tools.js +0 -242
- package/dist/session/no-session-diagnosis.d.ts +0 -176
- package/dist/session/no-session-diagnosis.js +0 -477
- package/dist/session/no-session-next-action.d.ts +0 -72
- package/dist/session/no-session-next-action.js +0 -174
- package/dist/session/no-session-watch.js +0 -335
- package/dist/session/observed-state.d.ts +0 -60
- package/dist/session/observed-state.js +0 -121
- package/dist/session/output-budget.d.ts +0 -49
- package/dist/session/output-budget.js +0 -67
- package/dist/session/session-health.d.ts +0 -138
- package/dist/session/session-health.js +0 -154
- package/dist/session/session-manager.d.ts +0 -76
- package/dist/session/session-manager.js +0 -464
- package/dist/session/session-reaper.d.ts +0 -36
- package/dist/session/session-reaper.js +0 -93
- package/dist/session/session-recommendation.js +0 -29
- package/dist/session/session-replaced.d.ts +0 -24
- package/dist/session/session-replaced.js +0 -29
- package/dist/session/session-tools.d.ts +0 -8
- package/dist/session/session-tools.js +0 -42
- package/dist/session/session.d.ts +0 -280
- package/dist/session/session.js +0 -891
- package/dist/session/stall-clock.js +0 -48
- package/dist/setup/agent-configs.d.ts +0 -97
- package/dist/setup/agent-configs.js +0 -333
- package/dist/setup/agent-writer.d.ts +0 -52
- package/dist/setup/agent-writer.js +0 -115
- package/dist/setup/auto-approve.js +0 -153
- package/dist/setup/bridge-port.d.ts +0 -15
- package/dist/setup/bridge-port.js +0 -24
- package/dist/setup/confirm.js +0 -205
- package/dist/setup/dev-server-wait.d.ts +0 -68
- package/dist/setup/dev-server-wait.js +0 -67
- package/dist/setup/drive-agent.d.ts +0 -70
- package/dist/setup/drive-agent.js +0 -171
- package/dist/setup/drive-plan.d.ts +0 -69
- package/dist/setup/drive-plan.js +0 -130
- package/dist/setup/ensure-daemon.js +0 -58
- package/dist/setup/init-host.js +0 -26
- package/dist/setup/init-runtime.d.ts +0 -41
- package/dist/setup/init-runtime.js +0 -167
- package/dist/setup/node-effects.d.ts +0 -63
- package/dist/setup/node-effects.js +0 -225
- package/dist/setup/page-probe.d.ts +0 -44
- package/dist/setup/page-probe.js +0 -49
- package/dist/setup/remaining-steps.js +0 -31
- package/dist/setup/run-setup.d.ts +0 -103
- package/dist/setup/run-setup.js +0 -294
- package/dist/setup/setup-command.d.ts +0 -46
- package/dist/setup/setup-command.js +0 -207
- package/dist/setup/setup-options.d.ts +0 -76
- package/dist/setup/setup-options.js +0 -68
- package/dist/tools/act-capsule.d.ts +0 -33
- package/dist/tools/act-capsule.js +0 -53
- package/dist/tools/act-danger.js +0 -69
- package/dist/tools/act-helpers.d.ts +0 -17
- package/dist/tools/act-helpers.js +0 -40
- package/dist/tools/act-observation.d.ts +0 -42
- package/dist/tools/act-observation.js +0 -36
- package/dist/tools/act-preflight.d.ts +0 -20
- package/dist/tools/act-preflight.js +0 -103
- package/dist/tools/act-sequence-tool.js +0 -135
- package/dist/tools/act-target.d.ts +0 -18
- package/dist/tools/act-target.js +0 -56
- package/dist/tools/act-tools.d.ts +0 -20
- package/dist/tools/act-tools.js +0 -763
- package/dist/tools/assert-grade.d.ts +0 -42
- package/dist/tools/assert-grade.js +0 -108
- package/dist/tools/assert-source.d.ts +0 -52
- package/dist/tools/assert-source.js +0 -74
- package/dist/tools/assert-verdict.d.ts +0 -48
- package/dist/tools/assert-verdict.js +0 -197
- package/dist/tools/browser-tools.d.ts +0 -2
- package/dist/tools/browser-tools.js +0 -115
- package/dist/tools/contract-tools.d.ts +0 -2
- package/dist/tools/contract-tools.js +0 -98
- package/dist/tools/coverage-tools.d.ts +0 -18
- package/dist/tools/coverage-tools.js +0 -175
- package/dist/tools/dynamic-tools.d.ts +0 -7
- package/dist/tools/dynamic-tools.js +0 -257
- package/dist/tools/error-recovery.d.ts +0 -110
- package/dist/tools/error-recovery.js +0 -499
- package/dist/tools/feedback-invite.d.ts +0 -48
- package/dist/tools/feedback-invite.js +0 -71
- package/dist/tools/feedback-tools.d.ts +0 -35
- package/dist/tools/feedback-tools.js +0 -228
- package/dist/tools/invoke-tool.d.ts +0 -10
- package/dist/tools/invoke-tool.js +0 -569
- package/dist/tools/lease-hint.d.ts +0 -49
- package/dist/tools/lease-hint.js +0 -124
- package/dist/tools/lease-tools.d.ts +0 -143
- package/dist/tools/lease-tools.js +0 -688
- package/dist/tools/lineage-tools.d.ts +0 -14
- package/dist/tools/lineage-tools.js +0 -64
- package/dist/tools/merge-tools.d.ts +0 -51
- package/dist/tools/merge-tools.js +0 -69
- package/dist/tools/merged-name-redirect.d.ts +0 -26
- package/dist/tools/merged-name-redirect.js +0 -77
- package/dist/tools/navigate-arrival.d.ts +0 -68
- package/dist/tools/numeric-bounds.d.ts +0 -89
- package/dist/tools/numeric-bounds.js +0 -125
- package/dist/tools/observe-tools.js +0 -578
- package/dist/tools/read-tools.js +0 -569
- package/dist/tools/real-input-attempt.d.ts +0 -68
- package/dist/tools/real-input-attempt.js +0 -360
- package/dist/tools/reconcile-tools.js +0 -126
- package/dist/tools/resolve-target.js +0 -116
- package/dist/tools/snapshot-delta.d.ts +0 -92
- package/dist/tools/snapshot-delta.js +0 -356
- package/dist/tools/tool-kit.d.ts +0 -221
- package/dist/tools/tool-kit.js +0 -114
- package/dist/tools/tool-names.d.ts +0 -112
- package/dist/tools/tool-names.js +0 -112
- package/dist/tools/tool-surface.d.ts +0 -222
- package/dist/tools/tool-surface.js +0 -439
- package/dist/tools/tools-helpers.d.ts +0 -42
- package/dist/tools/tools-helpers.js +0 -87
- package/dist/tools/tools.d.ts +0 -20
- package/dist/tools/tools.js +0 -739
- package/dist/tools/unadvertised-help.js +0 -42
- package/dist/tools/verify-next-baton.js +0 -52
- package/dist/update/nudge-credit.js +0 -53
- package/dist/update/reticle-deps.d.ts +0 -9
- package/dist/update/reticle-deps.js +0 -27
- package/dist/update/sdk-sync.d.ts +0 -20
- package/dist/update/sdk-sync.js +0 -22
- package/dist/update/update-checker.js +0 -122
- package/dist/update/update-nudge.d.ts +0 -92
- package/dist/update/update-nudge.js +0 -214
- package/dist/update/updater.d.ts +0 -54
- package/dist/update/updater.js +0 -190
- package/dist/version/peer-announce.js +0 -32
- package/dist/version/sdk-fix.js +0 -127
- package/dist/version/server-version.js +0 -13
- package/dist/version/version-nudge.js +0 -61
- package/dist/version/version-skew.d.ts +0 -93
- package/dist/version/version-skew.js +0 -147
- package/dist/visual/visual-store.d.ts +0 -22
- package/dist/visual/visual-store.js +0 -66
- package/dist/visual/visual-tools.d.ts +0 -26
- package/dist/visual/visual-tools.js +0 -328
- package/docs/docs.json +0 -369
- package/docs/fixtures.md +0 -51
- package/docs/gate-plan.md +0 -104
- package/docs/gates.md +0 -131
- package/docs/style.css +0 -14
- package/docs/telemetry-contract.md +0 -390
- package/docs/telemetry-events.mdx +0 -442
- package/docs/tools-act-and-wait.mdx +0 -173
- package/docs/tools-act-sequence.mdx +0 -153
- package/docs/tools-act.mdx +0 -95
- package/docs/tools-assert.mdx +0 -129
- package/docs/tools-console.mdx +0 -63
- package/docs/tools-inspect.mdx +0 -88
- package/docs/tools-navigate.mdx +0 -107
- package/docs/tools-network.mdx +0 -119
- package/docs/tools-observe.mdx +0 -145
- package/docs/tools-overview.mdx +0 -160
- package/docs/tools-query.mdx +0 -126
- package/docs/tools-sessions.mdx +0 -94
- package/docs/tools-snapshot.mdx +0 -129
- package/docs/tools-state.mdx +0 -104
- package/docs/tools-wait-for.mdx +0 -85
- /package/dist/{cli → command/cli/answers}/gate-exit.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-exit.js +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.js +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.js +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-keystore.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.js +0 -0
- /package/dist/{cli → command/cli}/cli-doctor.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.js +0 -0
- /package/dist/{cli → command/cli}/cli-update-commands.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-cli.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-login.d.ts +0 -0
- /package/dist/{cli → command/cli}/daemon-start-options.js +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-daemon-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-sessions-line.d.ts +0 -0
- /package/dist/{cli → command/cli/drive}/drive-command.d.ts +0 -0
- /package/dist/{cli → command/cli}/mcp-command.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/port-holder.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.js +0 -0
- /package/dist/{cli → command/cli}/project-name.d.ts +0 -0
- /package/dist/{cli → command/cli}/project-name.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.js +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.d.ts +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.js +0 -0
- /package/dist/{daemon → command/daemon}/state-dir.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.js +0 -0
- /package/dist/{setup → command/setup}/approval-migration.d.ts +0 -0
- /package/dist/{setup → command/setup}/approval-migration.js +0 -0
- /package/dist/{setup → command/setup}/auto-approve.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/ensure-daemon.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.js +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.d.ts +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.js +0 -0
- /package/dist/{setup → command/setup/init}/init-host.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.js +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.js +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.js +0 -0
- /package/dist/{setup → command/setup}/remaining-steps.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.js +0 -0
- /package/dist/{setup → command/setup/terminal}/confirm.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.js +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.js +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.js +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.js +0 -0
- /package/dist/{update → command/update}/nudge-credit.d.ts +0 -0
- /package/dist/{update → command/update}/update-checker.d.ts +0 -0
- /package/dist/{version → command/version/identity}/server-version.d.ts +0 -0
- /package/dist/{version → command/version}/peer-announce.d.ts +0 -0
- /package/dist/{version → command/version}/sdk-fix.d.ts +0 -0
- /package/dist/{version → command/version}/version-nudge.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.js +0 -0
- /package/dist/{ee → features/ee}/audit-log.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.js +0 -0
- /package/dist/{visual → features/visual}/visual-diff.d.ts +0 -0
- /package/dist/{visual → features/visual}/visual-diff.js +0 -0
- /package/dist/{capsule → judgement/capsule}/divergence.js +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.d.ts +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.js +0 -0
- /package/dist/{domain → judgement/domain}/domain-model.d.ts +0 -0
- /package/dist/{domain → judgement/domain}/flow-risk.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.js +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.js +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.js +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.js +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.js +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.js +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.js +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.d.ts +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/render-report.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/replay-mapping.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.js +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.js +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.js +0 -0
- /package/dist/{flows → language/flows}/buddy-status.d.ts +0 -0
- /package/dist/{flows → language/flows}/buddy-status.js +0 -0
- /package/dist/{flows → language/flows/change}/gate.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.js +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.js +0 -0
- /package/dist/{flows → language/flows}/empty-flow.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.js +0 -0
- /package/dist/{flows → language/flows}/flow-report.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-report.js +0 -0
- /package/dist/{flows → language/flows}/flow-scope.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-scope.js +0 -0
- /package/dist/{flows → language/flows}/flow-store-for-session.js +0 -0
- /package/dist/{flows → language/flows}/heal.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/flake.js +0 -0
- /package/dist/{flows → language/flows/recording}/recording-backtrack.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.js +0 -0
- /package/dist/{flows → language/flows}/role-anchor-nearest.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.js +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.js +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.js +0 -0
- /package/dist/{platform.d.ts → machine/platform.d.ts} +0 -0
- /package/dist/{platform.js → machine/platform.js} +0 -0
- /package/dist/{temp-dir.d.ts → machine/temp-dir.d.ts} +0 -0
- /package/dist/{temp-dir.js → machine/temp-dir.js} +0 -0
- /package/dist/{cloud → memory/cloud}/sync-disk.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.js +0 -0
- /package/dist/{journal → memory/journal}/envelope.js +0 -0
- /package/dist/{journal → memory/journal}/rollups.d.ts +0 -0
- /package/dist/{journal → memory/journal}/rollups.js +0 -0
- /package/dist/{project → memory/project}/baselines.d.ts +0 -0
- /package/dist/{project → memory/project}/baselines.js +0 -0
- /package/dist/{project → memory/project}/file-lock.d.ts +0 -0
- /package/dist/{project → memory/project}/file-lock.js +0 -0
- /package/dist/{project → memory/project}/memory-fs.js +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.d.ts +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.js +0 -0
- /package/dist/memory/{project-memory.js → recall/project-memory.js} +0 -0
- /package/dist/{session → memory/recall}/registered-projects.d.ts +0 -0
- /package/dist/{session → memory/recall}/registered-projects.js +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.js +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.js +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.js +0 -0
- /package/dist/{input → portal/input}/driven-redaction.d.ts +0 -0
- /package/dist/{input → portal/input}/driven-redaction.js +0 -0
- /package/dist/{input → portal/input}/network-mock.d.ts +0 -0
- /package/dist/{input → portal/input}/scroll-find.d.ts +0 -0
- /package/dist/{pool → portal/pool}/lease-reaper.d.ts +0 -0
- /package/dist/{pool → portal/pool}/playwright-launcher.d.ts +0 -0
- /package/dist/{pool → portal/pool}/storage-seed.js +0 -0
- /package/dist/{session → portal/session}/control-envelope.d.ts +0 -0
- /package/dist/{session → portal/session}/control-envelope.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.d.ts +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-server-probe.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.js +0 -0
- /package/dist/{session → portal/session}/fake-session.d.ts +0 -0
- /package/dist/{session → portal/session}/fake-session.js +0 -0
- /package/dist/{session → portal/session/human}/live-control.d.ts +0 -0
- /package/dist/{session → portal/session/human}/live-control.js +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.d.ts +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.js +0 -0
- /package/dist/{session → portal/session/human}/review-store.d.ts +0 -0
- /package/dist/{session → portal/session/human}/review-store.js +0 -0
- /package/dist/{session → portal/session}/last-act.d.ts +0 -0
- /package/dist/{session → portal/session}/last-act.js +0 -0
- /package/dist/{session → portal/session}/lease-visibility.d.ts +0 -0
- /package/dist/{session → portal/session}/lease-visibility.js +0 -0
- /package/dist/{session → portal/session}/no-session-watch.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.js +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.js +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.js +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.js +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.js +0 -0
- /package/dist/{session → portal/session/presence}/session-recommendation.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.js +0 -0
- /package/dist/{session → portal/session}/session-reconnect.d.ts +0 -0
- /package/dist/{session → portal/session}/session-reconnect.js +0 -0
- /package/dist/{session → portal/session}/session-successor.d.ts +0 -0
- /package/dist/{session → portal/session}/session-successor.js +0 -0
- /package/dist/{session → portal/session}/stall-clock.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.js +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.js +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.js +0 -0
- /package/dist/{loopback-agent.d.ts → surface/loopback-agent.d.ts} +0 -0
- /package/dist/{loopback-agent.js → surface/loopback-agent.js} +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.js +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/mcp-post-transport.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-handshake.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.js +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.js +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-danger.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-arrival.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.js +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.js +0 -0
- /package/dist/{tools → surface/tools/act}/resolve-target.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.js +0 -0
- /package/dist/{tools → surface/tools}/act-sequence-tool.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.js +0 -0
- /package/dist/{tools → surface/tools}/observe-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.js +0 -0
- /package/dist/{tools → surface/tools}/read-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools}/reconcile-tools.d.ts +0 -0
- /package/dist/{honesty → surface/tools}/tool-hit-rate.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.js +0 -0
- /package/dist/{tools → surface/tools}/unadvertised-help.d.ts +0 -0
- /package/dist/{tools → surface/tools}/verify-next-baton.d.ts +0 -0
- /package/docs/{tools-session-and-feedback.mdx → tools/session-and-feedback.mdx} +0 -0
- /package/docs/{tools-tools-and-run.mdx → tools/tools-and-run.mdx} +0 -0
|
@@ -1,834 +0,0 @@
|
|
|
1
|
-
import { EventType, PredicateKind, StreamDirection, isDevToolingUrl, urlForMatch, REDACTED_VALUE, } from '@reticlehq/core';
|
|
2
|
-
import { describeObserved } from './observed-in-window.js';
|
|
3
|
-
import { netEvidence } from './net-evidence.js';
|
|
4
|
-
import { checkRequestBody, newRequestBodyState, requestBodyVerdict, } from './predicate-request-body.js';
|
|
5
|
-
export { evalConsole } from './predicate-console.js';
|
|
6
|
-
// The predicate SHAPE — the discriminated union, its aliases and its zod schema — lives in
|
|
7
|
-
// predicate-schema.ts. Re-exported here so every existing importer of this module is unaffected:
|
|
8
|
-
// the two halves are one public surface, split only because the file outgrew the size backstop.
|
|
9
|
-
export * from './predicate-schema.js';
|
|
10
|
-
export function str(value) {
|
|
11
|
-
return 'string' === typeof value ? value : undefined;
|
|
12
|
-
}
|
|
13
|
-
function num(value) {
|
|
14
|
-
return 'number' === typeof value ? value : undefined;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Match one value against a pattern. Supports `*` (present), strict equality, and operators:
|
|
18
|
-
* `{$gte,$lte,$gt,$lt}` (numbers), `{$contains}` (array membership or substring), `{$length}`.
|
|
19
|
-
*/
|
|
20
|
-
export function matchValue(got, want) {
|
|
21
|
-
if ('*' === want)
|
|
22
|
-
return got !== undefined;
|
|
23
|
-
// An object is an OPERATOR container only if it actually carries a `$`-prefixed operator. An empty
|
|
24
|
-
// `{}` (or an object with no `$` key) used to enter this branch, iterate zero recognized operators,
|
|
25
|
-
// and `return true` — so `equals: {}` / `dataMatches: {status: {}}` was a green assertion that
|
|
26
|
-
// passed against ANYTHING, undefined included: the exact false green the oracle exists to catch.
|
|
27
|
-
// Without an operator it is a literal to compare, and falls through to strict equality below.
|
|
28
|
-
const ops = 'object' === typeof want && want !== null && !Array.isArray(want)
|
|
29
|
-
? Object.entries(want)
|
|
30
|
-
: undefined;
|
|
31
|
-
if (ops !== undefined && ops.some(([op]) => op.startsWith('$'))) {
|
|
32
|
-
for (const [op, val] of ops) {
|
|
33
|
-
const n = 'number' === typeof got ? got : NaN;
|
|
34
|
-
switch (op) {
|
|
35
|
-
case '$gte':
|
|
36
|
-
if (!(n >= val))
|
|
37
|
-
return false;
|
|
38
|
-
break;
|
|
39
|
-
case '$lte':
|
|
40
|
-
if (!(n <= val))
|
|
41
|
-
return false;
|
|
42
|
-
break;
|
|
43
|
-
case '$gt':
|
|
44
|
-
if (!(n > val))
|
|
45
|
-
return false;
|
|
46
|
-
break;
|
|
47
|
-
case '$lt':
|
|
48
|
-
if (!(n < val))
|
|
49
|
-
return false;
|
|
50
|
-
break;
|
|
51
|
-
case '$contains':
|
|
52
|
-
if (Array.isArray(got)) {
|
|
53
|
-
if (!got.includes(val))
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
else if ('string' === typeof got) {
|
|
57
|
-
if (!got.includes(String(val)))
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
case '$length':
|
|
65
|
-
if (!((Array.isArray(got) || 'string' === typeof got) && got.length === val)) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
return structurallyEqual(got, want);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Value equality for the leaf comparison, because `===` could never match a literal.
|
|
79
|
-
*
|
|
80
|
-
* The expected side of a predicate is parsed out of the agent's JSON, so it is a fresh object every
|
|
81
|
-
* time — reference equality made `equals: ["a", "b"]` false against a store holding exactly
|
|
82
|
-
* `["a", "b"]`, and there was no value of the app's state that could have made it true. The mirror of
|
|
83
|
-
* a false green: an assertion nobody could satisfy, on the commonest thing there is to assert about.
|
|
84
|
-
*
|
|
85
|
-
* Deliberately strict about shape. An array is not an object, an extra key is a difference, and order
|
|
86
|
-
* is part of a list's value — `equals` means equals; `dataMatches` is the field-by-field one.
|
|
87
|
-
*/
|
|
88
|
-
function structurallyEqual(got, want) {
|
|
89
|
-
if (got === want)
|
|
90
|
-
return true;
|
|
91
|
-
if (null === got || null === want)
|
|
92
|
-
return false;
|
|
93
|
-
if ('object' !== typeof got || 'object' !== typeof want)
|
|
94
|
-
return false;
|
|
95
|
-
if (Array.isArray(got) !== Array.isArray(want))
|
|
96
|
-
return false;
|
|
97
|
-
if (Array.isArray(got) && Array.isArray(want)) {
|
|
98
|
-
return got.length === want.length && got.every((v, i) => structurallyEqual(v, want[i]));
|
|
99
|
-
}
|
|
100
|
-
const a = got;
|
|
101
|
-
const b = want;
|
|
102
|
-
const keys = Object.keys(a);
|
|
103
|
-
if (keys.length !== Object.keys(b).length)
|
|
104
|
-
return false;
|
|
105
|
-
return keys.every((k) => k in b && structurallyEqual(a[k], b[k]));
|
|
106
|
-
}
|
|
107
|
-
/** Shallow JSON pattern match: each key in `pattern` must match (see matchValue). */
|
|
108
|
-
export function dataMatches(actual, pattern) {
|
|
109
|
-
for (const [key, want] of Object.entries(pattern)) {
|
|
110
|
-
if (!matchValue(actual[key], want))
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Did this call succeed, as the app experienced it?
|
|
117
|
-
*
|
|
118
|
-
* `ok` is authoritative when present — IPC sets it explicitly, because an IPC call has no status
|
|
119
|
-
* code and the 200/500 Reticle derives is a convenience, not a fact. Falling back to the HTTP status
|
|
120
|
-
* keeps ordinary web requests working without the observer having to set the field everywhere.
|
|
121
|
-
*
|
|
122
|
-
* This exists so an agent can assert on the OUTCOME rather than on a number Reticle invented.
|
|
123
|
-
*/
|
|
124
|
-
function callSucceeded(data) {
|
|
125
|
-
if ('boolean' === typeof data['ok'])
|
|
126
|
-
return data['ok'];
|
|
127
|
-
const status = num(data['status']);
|
|
128
|
-
return status === undefined || status < 400;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* One call, as the failure report should name it: `POST /api/generate-script → 500`.
|
|
132
|
-
*
|
|
133
|
-
* The status used to be dropped here, which made the most common net failure unreadable. Asserting
|
|
134
|
-
* `{status: 200}` against a call that returned 500 reported only `POST /api/generate-script` — the
|
|
135
|
-
* very field the predicate filtered on was missing from the account of what was seen, so the agent
|
|
136
|
-
* is told the call happened and left to guess why it did not match.
|
|
137
|
-
*
|
|
138
|
-
* The arrow is OMITTED when there is no status. An in-flight or aborted request genuinely has none,
|
|
139
|
-
* and `→ undefined` would be a fabricated fact about the wire.
|
|
140
|
-
*/
|
|
141
|
-
function describeCall(e) {
|
|
142
|
-
const head = `${str(e.data['method']) ?? 'GET'} ${str(e.data['url']) ?? ''}`;
|
|
143
|
-
const status = num(e.data['status']);
|
|
144
|
-
return status === undefined ? head : `${head} → ${String(status)}`;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* What a miss should say when the displayed URL was redacted. Matching uses `urlRaw` when present;
|
|
148
|
-
* an older SDK has no copy, and this is the sentence both reporters asked for.
|
|
149
|
-
*/
|
|
150
|
-
const REDACTED_PATH_HINT = 'this path segment was redacted — the literal you matched may be here, try bodyContains';
|
|
151
|
-
function observedNetCalls(events, urlContains) {
|
|
152
|
-
const calls = events.filter((e) => e.type === EventType.NET_REQUEST);
|
|
153
|
-
const base = describeObserved('calls', calls.map(describeCall));
|
|
154
|
-
if (urlContains === undefined)
|
|
155
|
-
return base;
|
|
156
|
-
const encoded = encodeURIComponent(REDACTED_VALUE);
|
|
157
|
-
const redacted = calls.some((e) => {
|
|
158
|
-
const url = str(e.data['url']) ?? '';
|
|
159
|
-
return url.includes(REDACTED_VALUE) || url.includes(encoded);
|
|
160
|
-
});
|
|
161
|
-
return redacted ? `${base}; ${REDACTED_PATH_HINT}` : base;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* How much of a response body a failure may quote. Enough to see the value that differed on the
|
|
165
|
-
* bodies this field is used against (a JSON answer), and not a whole payload in every verdict.
|
|
166
|
-
*/
|
|
167
|
-
const MAX_BODY_IN_FAILURE = 200;
|
|
168
|
-
/** Enough of a body to see what differed, without paying for a whole payload in the verdict. */
|
|
169
|
-
export function clipBody(body) {
|
|
170
|
-
return body.length <= MAX_BODY_IN_FAILURE ? body : `${body.slice(0, MAX_BODY_IN_FAILURE)}…`;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* The filter as APPLIED, every field of it.
|
|
174
|
-
*
|
|
175
|
-
* The count failure used to print `{method, urlContains, status}` while `ok` and `bodyContains` were
|
|
176
|
-
* applied too, so the caller was shown a predicate it had not written and told nothing matched it.
|
|
177
|
-
* A printed filter that is narrower than the real one is worse than none: it is believed.
|
|
178
|
-
*/
|
|
179
|
-
export function describeNetFilter(p) {
|
|
180
|
-
const { kind: _kind, count: _count, since: _since, ...filter } = p;
|
|
181
|
-
return JSON.stringify(filter);
|
|
182
|
-
}
|
|
183
|
-
/** Same, for a signal: the matcher as applied, with the cardinality and the floor taken out. */
|
|
184
|
-
function describeSignalFilter(p) {
|
|
185
|
-
const { kind: _kind, count: _count, since: _since, ...filter } = p;
|
|
186
|
-
return JSON.stringify(filter);
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Exact cardinality, once, for every channel that can count its matches.
|
|
190
|
-
*
|
|
191
|
-
* `net` and `signal` are the same assertion over different evidence — "this happened EXACTLY n
|
|
192
|
-
* times" — and the interesting half is the same on both: an over-count is `decided`, because a
|
|
193
|
-
* window only accumulates and a count cannot come back down, so waiting out the rest of the budget
|
|
194
|
-
* to report a double-fire buys nothing but latency.
|
|
195
|
-
*
|
|
196
|
-
* `noun` names the population in prose ("network call(s)", "signal(s)"), `filter` is the matcher as
|
|
197
|
-
* applied, and `assertion` is the oracle that judged it.
|
|
198
|
-
*/
|
|
199
|
-
function evalExactCount(args) {
|
|
200
|
-
const { matched, want, noun, filter, assertion } = args;
|
|
201
|
-
if (matched === want)
|
|
202
|
-
return { pass: true, evidence: { matched } };
|
|
203
|
-
return {
|
|
204
|
-
pass: false,
|
|
205
|
-
...(matched > want ? { decided: true } : {}),
|
|
206
|
-
failureReason: `expected ${String(want)} ${noun} matching ${filter}, saw ${String(matched)}`,
|
|
207
|
-
observed: `${String(matched)} matching ${noun}`,
|
|
208
|
-
expected: `exactly ${String(want)} matching ${filter}`,
|
|
209
|
-
assertion,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* URL suffixes only the DOCUMENT fetches, which the network observer therefore never records.
|
|
214
|
-
*
|
|
215
|
-
* `network.ts` patches `fetch` and `XMLHttpRequest` and nothing else, so `<link rel=icon>`,
|
|
216
|
-
* `<link rel=manifest>`, stylesheets, fonts and `<img src>` are invisible to it. "No matching call"
|
|
217
|
-
* and "that class of call is not observed" are then indistinguishable, and the miss graded
|
|
218
|
-
* `assertion_failed` — a false RED. Reported from the field: an assert over `/favicon.ico`,
|
|
219
|
-
* `/site.webmanifest` and `/apple-touch-icon.png` returned `verified:"no"` while curl showed all
|
|
220
|
-
* three answering 200. A false negative here is worse than an unknown, because an agent that trusts
|
|
221
|
-
* it goes and "fixes" working code.
|
|
222
|
-
*
|
|
223
|
-
* Deliberately NOT here: `.js` and `.json`. Both are routinely fetched via `fetch`/XHR — a module
|
|
224
|
-
* preload and an API call can share a suffix — so downgrading them would hide real misses. This list
|
|
225
|
-
* is only the suffixes for which the document is the sole plausible initiator.
|
|
226
|
-
*
|
|
227
|
-
* This began as the smaller half of #447: it did not make these requests observable, it stopped
|
|
228
|
-
* Reticle claiming they did not happen. The other half, observing them via resource timing, has
|
|
229
|
-
* since landed in the browser SDK, so the two halves are no longer independent and this downgrade is
|
|
230
|
-
* now GATED: when the event stream carries at least one document-initiated record, the observer is
|
|
231
|
-
* demonstrably live and a miss over these suffixes is real evidence, graded a plain failure. Only a
|
|
232
|
-
* page whose stream holds no resource entry at all keeps the honest "cannot tell apart" answer,
|
|
233
|
-
* because there the observer may simply not exist.
|
|
234
|
-
*/
|
|
235
|
-
const DOCUMENT_ONLY_SUFFIXES = [
|
|
236
|
-
'.ico',
|
|
237
|
-
'.png',
|
|
238
|
-
'.jpg',
|
|
239
|
-
'.jpeg',
|
|
240
|
-
'.gif',
|
|
241
|
-
'.svg',
|
|
242
|
-
'.webp',
|
|
243
|
-
'.avif',
|
|
244
|
-
'.bmp',
|
|
245
|
-
'.css',
|
|
246
|
-
'.woff',
|
|
247
|
-
'.woff2',
|
|
248
|
-
'.ttf',
|
|
249
|
-
'.otf',
|
|
250
|
-
'.eot',
|
|
251
|
-
'.webmanifest',
|
|
252
|
-
];
|
|
253
|
-
/**
|
|
254
|
-
* File suffixes a click typically downloads or navigates to as a document, never as fetch/XHR.
|
|
255
|
-
*
|
|
256
|
-
* Sibling of DOCUMENT_ONLY_SUFFIXES, not a member of it. Those are subresources: once resource
|
|
257
|
-
* timing is live, a miss is evidence. A click on `<a href="/export.pdf">` is a navigation (or a
|
|
258
|
-
* Content-Disposition attachment). Resource timing of stylesheets does not make it visible, so
|
|
259
|
-
* grading the miss as "0 network calls" / a 404 is the lie #805 exists to stop — even on a page
|
|
260
|
-
* whose observer is running. `.js` / `.json` stay off this list for the same reason they stay off
|
|
261
|
-
* the other: they are routinely fetched.
|
|
262
|
-
*/
|
|
263
|
-
const NATIVE_DOWNLOAD_SUFFIXES = [
|
|
264
|
-
'.pdf',
|
|
265
|
-
'.csv',
|
|
266
|
-
'.tsv',
|
|
267
|
-
'.zip',
|
|
268
|
-
'.gz',
|
|
269
|
-
'.tar',
|
|
270
|
-
'.xlsx',
|
|
271
|
-
'.xls',
|
|
272
|
-
'.docx',
|
|
273
|
-
'.doc',
|
|
274
|
-
'.pptx',
|
|
275
|
-
'.ppt',
|
|
276
|
-
'.ods',
|
|
277
|
-
'.odt',
|
|
278
|
-
'.rtf',
|
|
279
|
-
'.7z',
|
|
280
|
-
'.rar',
|
|
281
|
-
];
|
|
282
|
-
/**
|
|
283
|
-
* Does this filter target a class of request the observer cannot see?
|
|
284
|
-
*
|
|
285
|
-
* Read off `urlContains` only, and only when the pattern ENDS in one of the suffixes — a filter of
|
|
286
|
-
* `/api/` that happens to contain `.css` somewhere in a query string is still an ordinary XHR
|
|
287
|
-
* target. Query strings and fragments are stripped first, since `favicon.ico?v=2` is the same asset.
|
|
288
|
-
*/
|
|
289
|
-
function filterPath(urlContains) {
|
|
290
|
-
return (urlContains.split('#')[0] ?? '').split('?')[0]?.toLowerCase() ?? '';
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Does this filter target a class of request the observer cannot see?
|
|
294
|
-
*
|
|
295
|
-
* Read off `urlContains` only, and only when the pattern ENDS in one of the suffixes — a filter of
|
|
296
|
-
* `/api/` that happens to contain `.css` somewhere in a query string is still an ordinary XHR
|
|
297
|
-
* target. Query strings and fragments are stripped first, since `favicon.ico?v=2` is the same asset.
|
|
298
|
-
*/
|
|
299
|
-
function targetsUnobservedChannel(p) {
|
|
300
|
-
const url = p.urlContains;
|
|
301
|
-
if (undefined === url)
|
|
302
|
-
return false;
|
|
303
|
-
return DOCUMENT_ONLY_SUFFIXES.some((suffix) => filterPath(url).endsWith(suffix));
|
|
304
|
-
}
|
|
305
|
-
function targetsNativeDownload(p) {
|
|
306
|
-
const url = p.urlContains;
|
|
307
|
-
if (undefined === url)
|
|
308
|
-
return false;
|
|
309
|
-
return NATIVE_DOWNLOAD_SUFFIXES.some((suffix) => filterPath(url).endsWith(suffix));
|
|
310
|
-
}
|
|
311
|
-
function nativeDownloadReason(p) {
|
|
312
|
-
return (`no fetch or XHR matched ${describeNetFilter(p)}. A native download or document navigation ` +
|
|
313
|
-
`(an <a href> to a file, a Content-Disposition attachment, <a download>) never goes through ` +
|
|
314
|
-
`fetch or XMLHttpRequest, so an empty net window is not a 404 and is not evidence the export ` +
|
|
315
|
-
`failed. This is unobservable on the net channel. Assert the link href, or check the file ` +
|
|
316
|
-
`outside the browser — Reticle cannot see the bytes land`);
|
|
317
|
-
}
|
|
318
|
-
function nativeDownloadMiss(events, p) {
|
|
319
|
-
if (!targetsNativeDownload(p))
|
|
320
|
-
return undefined;
|
|
321
|
-
const reason = nativeDownloadReason(p);
|
|
322
|
-
return {
|
|
323
|
-
pass: false,
|
|
324
|
-
failureReason: reason,
|
|
325
|
-
inconclusive: reason,
|
|
326
|
-
observed: observedNetCalls(events, p.urlContains),
|
|
327
|
-
expected: `a fetch or XHR matching ${describeNetFilter(p)}`,
|
|
328
|
-
assertion: 'net.native-download',
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Initiator types the browser SDK's resource-timing observer stamps onto document-initiated records
|
|
333
|
-
* (packages/browser/src/observers/network.ts). The patched transports sign themselves `fetch`,
|
|
334
|
-
* `xhr` or `beacon`, so any NET_REQUEST carrying one of these came from a `resource` entry, and its
|
|
335
|
-
* mere presence is proof the PerformanceObserver is alive on this page. Mirrors the wire; keep in
|
|
336
|
-
* sync with the browser package.
|
|
337
|
-
*/
|
|
338
|
-
const DOCUMENT_INITIATORS = new Set([
|
|
339
|
-
'link',
|
|
340
|
-
'css',
|
|
341
|
-
'img',
|
|
342
|
-
'script',
|
|
343
|
-
'manifest',
|
|
344
|
-
'other',
|
|
345
|
-
]);
|
|
346
|
-
/**
|
|
347
|
-
* Did the observer actually report a document-initiated load?
|
|
348
|
-
*
|
|
349
|
-
* This is the gate on the unobserved-channel downgrade above. Once subresource observation landed,
|
|
350
|
-
* a miss over `.ico`/`.css`/`.woff2` is no longer inherently unknowable: if the observer is live it
|
|
351
|
-
* would have seen the favicon load, so seeing none is evidence it never fired. But the observer is
|
|
352
|
-
* opt-in-by-engine, not guaranteed: on a renderer without `PerformanceObserver` (or before any
|
|
353
|
-
* resource entry exists) nothing distinguishes "not requested" from "not visible", and the honest
|
|
354
|
-
* answer stays inconclusive. Liveness is inferred from the same events being judged: one
|
|
355
|
-
* document-initiated record anywhere in the window proves the channel works.
|
|
356
|
-
*/
|
|
357
|
-
function observerSawSubresources(events) {
|
|
358
|
-
return events.some((e) => {
|
|
359
|
-
if (e.type !== EventType.NET_REQUEST)
|
|
360
|
-
return false;
|
|
361
|
-
const initiator = str(e.data['initiator']);
|
|
362
|
-
return initiator !== undefined && DOCUMENT_INITIATORS.has(initiator);
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
/** The sentence both zero-match branches hand to `inconclusive`. */
|
|
366
|
-
function unobservedChannelReason(p) {
|
|
367
|
-
return (`no call matched ${describeNetFilter(p)}, and no document-initiated load was recorded either, ` +
|
|
368
|
-
`so this page exposed no resource timing to read: Reticle observes fetch and XMLHttpRequest ` +
|
|
369
|
-
`directly, while a request the document initiates (<link rel=icon|manifest|preload>, a ` +
|
|
370
|
-
`stylesheet, a font, <img src>) leaves no record, and that state cannot be told apart from the ` +
|
|
371
|
-
`request having been made. ` +
|
|
372
|
-
`Nothing here says the app is wrong. Check it outside the browser, or assert something the ` +
|
|
373
|
-
`document does not fetch on its own`);
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Appended to a zero-match `net` negative whose window starts at SDK attach.
|
|
377
|
-
*
|
|
378
|
-
* Every event's `t` is stamped `performance.now() - #start`, where `#start` is taken when the SDK
|
|
379
|
-
* is constructed, so `t` is never negative and a window with `since === 0` begins AT attach — never
|
|
380
|
-
* before it. Whatever the page did between navigation start and attach left no event at all, so
|
|
381
|
-
* "no matching call" over such a window cannot be told apart from "the call was made while nothing
|
|
382
|
-
* was watching yet".
|
|
383
|
-
*
|
|
384
|
-
* The gap is routine rather than exotic: a `fetch` from an effect in a root provider, or a classic
|
|
385
|
-
* `<script>` at the end of `<body>`, fires before a deferred module script has run. Reported from
|
|
386
|
-
* the field, the verdict then read as proof the request was never made, and reporters went looking
|
|
387
|
-
* for the defect in code that was working — restarting dev servers and re-reading providers to
|
|
388
|
-
* establish the request was invisible rather than absent.
|
|
389
|
-
*
|
|
390
|
-
* Same argument as DOCUMENT_ONLY_SUFFIXES one axis over: that one is a channel Reticle does not
|
|
391
|
-
* watch, this is a stretch of TIME it was not yet watching.
|
|
392
|
-
*
|
|
393
|
-
* The grade is deliberately NOT downgraded to `inconclusive`. A missing API call is the finding this
|
|
394
|
-
* oracle exists to make, and it is the strongest grade available for the startup class — session
|
|
395
|
-
* restore, feature flags, bootstrap config — which is exactly the class that silently breaks on
|
|
396
|
-
* reload. Every window an action opens carries `since > 0` and is untouched. What changes is only
|
|
397
|
-
* what the negative CLAIMS: it stops asserting the request never happened, and names the assertion
|
|
398
|
-
* that can settle it, because the state such a request produces IS observable after attach.
|
|
399
|
-
*/
|
|
400
|
-
const PRE_ATTACH_CAVEAT = ' — note that this window starts where the SDK attached, and requests made before that are never ' +
|
|
401
|
-
'captured, so a miss here cannot tell a call that was never made apart from one made before the ' +
|
|
402
|
-
'page connected; if the call is expected during startup, assert on the state it produces instead';
|
|
403
|
-
export function evalNet(events, p) {
|
|
404
|
-
const since = p.since ?? 0;
|
|
405
|
-
/**
|
|
406
|
-
* Computed once: the gate every zero-match downgrade below reads. True means the resource-timing
|
|
407
|
-
* observer is demonstrably live in this window, so a miss is evidence rather than blindness.
|
|
408
|
-
*/
|
|
409
|
-
const sawSubresources = observerSawSubresources(events);
|
|
410
|
-
/**
|
|
411
|
-
* Did any call match everything EXCEPT the body assertion, while carrying no recorded body?
|
|
412
|
-
*
|
|
413
|
-
* Bodies are opt-in, so without them a body predicate can never hold — and "no call matched" would
|
|
414
|
-
* send the caller to check the url and the method, which are both fine, instead of to the one
|
|
415
|
-
* setting that makes the assertion possible. Tracked while filtering rather than recomputed after,
|
|
416
|
-
* because it is the same pass over the same events.
|
|
417
|
-
*/
|
|
418
|
-
let matchedButUnrecorded = false;
|
|
419
|
-
/** A call matched url/method but carried NO readable status (document-initiated subresource). */
|
|
420
|
-
let unobservableStatus = false;
|
|
421
|
-
/**
|
|
422
|
-
* The response body of a call that matched everything EXCEPT the body assertion, and HAD one.
|
|
423
|
-
*
|
|
424
|
-
* Reported by the first field user of `bodyContains`: a body mismatch was formatted as
|
|
425
|
-
* "expected 1 network call(s) matching {method, urlContains, status}, saw 0" — the body assertion
|
|
426
|
-
* was applied but not printed — so the verdict read "the request never fired" and sent them hunting
|
|
427
|
-
* a UI wiring bug that did not exist, when the defect was the value the server answered with.
|
|
428
|
-
*/
|
|
429
|
-
let bodyMismatch;
|
|
430
|
-
/**
|
|
431
|
-
* The prefix of a TRUNCATED body the needle was not found in. Held apart from `bodyMismatch`
|
|
432
|
-
* because the two are different verdicts: a full body without the needle decides the assertion,
|
|
433
|
-
* a truncated one cannot (#614).
|
|
434
|
-
*/
|
|
435
|
-
let truncatedBody;
|
|
436
|
-
const requestState = newRequestBodyState();
|
|
437
|
-
const matches = events.filter((e) => {
|
|
438
|
-
if (e.type !== EventType.NET_REQUEST || e.t < since)
|
|
439
|
-
return false;
|
|
440
|
-
const d = e.data;
|
|
441
|
-
if (p.method !== undefined && str(d['method'])?.toUpperCase() !== p.method.toUpperCase()) {
|
|
442
|
-
return false;
|
|
443
|
-
}
|
|
444
|
-
if (p.urlContains !== undefined && !urlForMatch(d).includes(p.urlContains)) {
|
|
445
|
-
return false;
|
|
446
|
-
}
|
|
447
|
-
if (p.status !== undefined) {
|
|
448
|
-
const status = num(d['status']);
|
|
449
|
-
if (status === undefined) {
|
|
450
|
-
// Document-initiated subresources (link/css/img/manifest via resource timing) carry no
|
|
451
|
-
// readable status on engines without responseStatus. A failed assertion here would read
|
|
452
|
-
// "your change is broken" and send the caller to fix working code — the exact false
|
|
453
|
-
// negative the oracle exists to prevent. Downgrade to unknown instead.
|
|
454
|
-
unobservableStatus = true;
|
|
455
|
-
return false;
|
|
456
|
-
}
|
|
457
|
-
if (status !== p.status)
|
|
458
|
-
return false;
|
|
459
|
-
}
|
|
460
|
-
if (p.ok !== undefined && callSucceeded(d) !== p.ok)
|
|
461
|
-
return false;
|
|
462
|
-
if (p.bodyContains !== undefined) {
|
|
463
|
-
// The RESPONSE body only, and this is the whole point of the field. Searching the request too
|
|
464
|
-
// would let `bodyContains: "1187.01"` pass on the very defect it exists to catch: the app SENT
|
|
465
|
-
// that number, so it is in the request whatever the server then did with it. The server's answer
|
|
466
|
-
// is the one channel a UI cannot fake.
|
|
467
|
-
const response = str(d['responseBody']);
|
|
468
|
-
if (response === undefined) {
|
|
469
|
-
matchedButUnrecorded = true;
|
|
470
|
-
return false;
|
|
471
|
-
}
|
|
472
|
-
if (!response.includes(p.bodyContains)) {
|
|
473
|
-
// A needle missing from a body we only hold the FIRST N BYTES of is undecidable, not
|
|
474
|
-
// absent: the rest of the response was never recorded, so nothing here can say whether it
|
|
475
|
-
// was in there (#614). Grading it `pass: false` with "the response value is what differed"
|
|
476
|
-
// is the inversion the honesty rules exist to prevent — an unknown reported as decided,
|
|
477
|
-
// against a response that was very likely correct.
|
|
478
|
-
if (true === d['responseBodyTruncated']) {
|
|
479
|
-
truncatedBody ??= response;
|
|
480
|
-
return false;
|
|
481
|
-
}
|
|
482
|
-
bodyMismatch ??= response;
|
|
483
|
-
return false;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
if (!checkRequestBody(d, p, requestState))
|
|
487
|
-
return false;
|
|
488
|
-
return true;
|
|
489
|
-
});
|
|
490
|
-
if (unobservableStatus && 0 === matches.length) {
|
|
491
|
-
// The url/method matched a document-initiated subresource whose engine could not read a status.
|
|
492
|
-
// "No matching call" would be a lie in both directions: it may have succeeded, it may have 404'd
|
|
493
|
-
// on exactly the path mistake the caller is hunting. Say the truth — not observable here.
|
|
494
|
-
return {
|
|
495
|
-
pass: false,
|
|
496
|
-
inconclusive: `a document-initiated request matching ${describeNetFilter(p)} was observed, but this engine does not expose its status code (resource timing without responseStatus) — assert on the element or route instead, or check the network tab`,
|
|
497
|
-
observed: 'a matching request with no readable status',
|
|
498
|
-
expected: `a status of ${String(p.status)} on ${JSON.stringify(p.urlContains ?? '*')}`,
|
|
499
|
-
assertion: 'net.unobservable-status',
|
|
500
|
-
};
|
|
501
|
-
}
|
|
502
|
-
if (matchedButUnrecorded && 0 === matches.length) {
|
|
503
|
-
return {
|
|
504
|
-
pass: false,
|
|
505
|
-
failureReason: `a call matched but its body was not recorded, so \`bodyContains\` could not be checked — enable it where the app calls connect(): reticle({ captureNetworkBodies: true })`,
|
|
506
|
-
observed: 'a matching call with no recorded body',
|
|
507
|
-
expected: `a body containing ${JSON.stringify(p.bodyContains)}`,
|
|
508
|
-
assertion: 'net.bodyContains',
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
const requestVerdict = requestBodyVerdict(requestState, p, matches.length);
|
|
512
|
-
if (requestVerdict !== undefined)
|
|
513
|
-
return requestVerdict;
|
|
514
|
-
// Ranked ABOVE the mismatch branch: when both a truncated and a full body missed the needle,
|
|
515
|
-
// the honest verdict is the undecidable one. Deciding on the full body would report a failure
|
|
516
|
-
// the truncated call may well contradict.
|
|
517
|
-
if (truncatedBody !== undefined && 0 === matches.length) {
|
|
518
|
-
return {
|
|
519
|
-
pass: false,
|
|
520
|
-
inconclusive: `a call matching ${describeNetFilter(p)} was answered with a body that was TRUNCATED before it was recorded, and ${JSON.stringify(p.bodyContains)} is not in the part that was kept — so this is undecidable, not a failure. Raise the capture cap or assert on something inside the recorded prefix`,
|
|
521
|
-
observed: `the first ${String(truncatedBody.length)} characters of a truncated response body ${JSON.stringify(clipBody(truncatedBody))}`,
|
|
522
|
-
expected: `a response body containing ${JSON.stringify(p.bodyContains)}`,
|
|
523
|
-
assertion: 'net.bodyContains',
|
|
524
|
-
};
|
|
525
|
-
}
|
|
526
|
-
if (bodyMismatch !== undefined && 0 === matches.length) {
|
|
527
|
-
// The call is there and its body is there; only the VALUE differs. Counting it as zero matches
|
|
528
|
-
// points at the wiring, which is the one place the defect is not.
|
|
529
|
-
return {
|
|
530
|
-
pass: false,
|
|
531
|
-
failureReason: `a call matching ${describeNetFilter(p)} was made and answered ${JSON.stringify(clipBody(bodyMismatch))}, which does not contain ${JSON.stringify(p.bodyContains)} — the request fired, the response value is what differed`,
|
|
532
|
-
observed: `response body ${JSON.stringify(clipBody(bodyMismatch))}`,
|
|
533
|
-
expected: `a response body containing ${JSON.stringify(p.bodyContains)}`,
|
|
534
|
-
assertion: 'net.bodyContains',
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
// `count` (exact) turns presence into a cardinality assertion — catches the double-submit /
|
|
538
|
-
// useEffect-double-fire / retry-storm regression class, where the request DID fire (presence passes)
|
|
539
|
-
// but fired the WRONG number of times. Without `count`, the matcher is presence-only (≥1).
|
|
540
|
-
if (p.count !== undefined) {
|
|
541
|
-
if (0 === matches.length) {
|
|
542
|
-
const download = nativeDownloadMiss(events, p);
|
|
543
|
-
if (download !== undefined)
|
|
544
|
-
return download;
|
|
545
|
-
}
|
|
546
|
-
if (matches.length !== p.count &&
|
|
547
|
-
0 === matches.length &&
|
|
548
|
-
targetsUnobservedChannel(p) &&
|
|
549
|
-
!sawSubresources) {
|
|
550
|
-
return {
|
|
551
|
-
pass: false,
|
|
552
|
-
failureReason: unobservedChannelReason(p),
|
|
553
|
-
inconclusive: unobservedChannelReason(p),
|
|
554
|
-
assertion: 'net.count',
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
const counted = evalExactCount({
|
|
558
|
-
matched: matches.length,
|
|
559
|
-
want: p.count,
|
|
560
|
-
noun: 'network call(s)',
|
|
561
|
-
filter: describeNetFilter(p),
|
|
562
|
-
assertion: 'net.count',
|
|
563
|
-
});
|
|
564
|
-
// Same blind head, second door: "saw 0" over a whole-session window is the same claim the
|
|
565
|
-
// presence branch makes, and just as unable to see a startup call. A `count: 0` assertion is
|
|
566
|
-
// left alone on purpose — it PASSES here, and turning that green into a non-pass is a grade
|
|
567
|
-
// change, not a wording one.
|
|
568
|
-
return 0 === matches.length && 0 === since && counted.failureReason !== undefined
|
|
569
|
-
? { ...counted, failureReason: `${counted.failureReason}${PRE_ATTACH_CAVEAT}` }
|
|
570
|
-
: counted;
|
|
571
|
-
}
|
|
572
|
-
const hit = matches[0];
|
|
573
|
-
if (hit === undefined) {
|
|
574
|
-
const download = nativeDownloadMiss(events, p);
|
|
575
|
-
if (download !== undefined)
|
|
576
|
-
return download;
|
|
577
|
-
}
|
|
578
|
-
if (hit === undefined && targetsUnobservedChannel(p) && !sawSubresources) {
|
|
579
|
-
const reason = unobservedChannelReason(p);
|
|
580
|
-
return {
|
|
581
|
-
pass: false,
|
|
582
|
-
failureReason: reason,
|
|
583
|
-
inconclusive: reason,
|
|
584
|
-
observed: observedNetCalls(events, p.urlContains),
|
|
585
|
-
expected: `at least one call matching ${describeNetFilter(p)}`,
|
|
586
|
-
assertion: 'net.unobserved-channel',
|
|
587
|
-
};
|
|
588
|
-
}
|
|
589
|
-
return hit !== undefined
|
|
590
|
-
? { pass: true, evidence: netEvidence(hit.data, p) }
|
|
591
|
-
: {
|
|
592
|
-
pass: false,
|
|
593
|
-
failureReason: `no network call matched ${JSON.stringify(p)}${0 === since ? PRE_ATTACH_CAVEAT : ''}`,
|
|
594
|
-
// Same reasoning as the signal miss: "no matching call" cannot be told apart from "the app
|
|
595
|
-
// made no calls at all", and those need different fixes.
|
|
596
|
-
observed: observedNetCalls(events, p.urlContains),
|
|
597
|
-
expected: `at least one call matching ${JSON.stringify(p)}`,
|
|
598
|
-
assertion: 'net.present',
|
|
599
|
-
};
|
|
600
|
-
}
|
|
601
|
-
export function evalAnimation(events, p) {
|
|
602
|
-
const wantType = true === p.completed ? EventType.ANIM_END : EventType.ANIM_START;
|
|
603
|
-
const hit = events.find((e) => {
|
|
604
|
-
if (e.type !== wantType)
|
|
605
|
-
return false;
|
|
606
|
-
if (p.name !== undefined && str(e.data['name']) !== p.name)
|
|
607
|
-
return false;
|
|
608
|
-
if (p.target !== undefined && e.ref !== p.target)
|
|
609
|
-
return false;
|
|
610
|
-
return true;
|
|
611
|
-
});
|
|
612
|
-
return hit !== undefined
|
|
613
|
-
? { pass: true, evidence: hit.data }
|
|
614
|
-
: {
|
|
615
|
-
pass: false,
|
|
616
|
-
failureReason: `no animation matched ${JSON.stringify(p)}`,
|
|
617
|
-
observed: 'no matching animation in the window',
|
|
618
|
-
expected: `an animation matching ${JSON.stringify(p)}`,
|
|
619
|
-
assertion: 'animation.present',
|
|
620
|
-
};
|
|
621
|
-
}
|
|
622
|
-
export function evalSignal(events, p) {
|
|
623
|
-
const isMatch = (e) => {
|
|
624
|
-
if (e.type !== EventType.SIGNAL)
|
|
625
|
-
return false;
|
|
626
|
-
if (p.name !== undefined && str(e.data['name']) !== p.name)
|
|
627
|
-
return false;
|
|
628
|
-
if (p.dataMatches !== undefined) {
|
|
629
|
-
const payload = (e.data['data'] ?? {});
|
|
630
|
-
if (!dataMatches(payload, p.dataMatches))
|
|
631
|
-
return false;
|
|
632
|
-
}
|
|
633
|
-
return true;
|
|
634
|
-
};
|
|
635
|
-
// `count` (exact) turns presence into a cardinality assertion, exactly as it does on `net`. The
|
|
636
|
-
// double-fire is invisible to every state-only oracle — a handler wired twice leaves the store in
|
|
637
|
-
// the right shape and fires the signal twice — and so is the wrong-name fire, where the intended
|
|
638
|
-
// signal fires once beside a mistyped sibling and a presence check cannot say which is which.
|
|
639
|
-
// Counting only what the MATCHER matched is what separates them. Omit = presence (≥1).
|
|
640
|
-
if (p.count !== undefined) {
|
|
641
|
-
return evalExactCount({
|
|
642
|
-
matched: events.filter(isMatch).length,
|
|
643
|
-
want: p.count,
|
|
644
|
-
noun: 'signal(s)',
|
|
645
|
-
filter: describeSignalFilter(p),
|
|
646
|
-
assertion: 'signal.count',
|
|
647
|
-
});
|
|
648
|
-
}
|
|
649
|
-
const hit = events.find(isMatch);
|
|
650
|
-
if (hit !== undefined)
|
|
651
|
-
return { pass: true, evidence: hit.data };
|
|
652
|
-
// Near-miss: show signals that fired with the same name (so the agent sees the real data).
|
|
653
|
-
const sameName = events
|
|
654
|
-
.filter((e) => e.type === EventType.SIGNAL && (p.name === undefined || str(e.data['name']) === p.name))
|
|
655
|
-
.map((e) => e.data['data'] ?? e.data);
|
|
656
|
-
return {
|
|
657
|
-
pass: false,
|
|
658
|
-
failureReason: sameName.length > 0
|
|
659
|
-
? `signal '${p.name ?? '(any)'}' fired ${String(sameName.length)}x but data didn't match`
|
|
660
|
-
: `no signal matched ${JSON.stringify(p)}`,
|
|
661
|
-
observed: sameName.length > 0
|
|
662
|
-
? `signal '${p.name ?? '(any)'}' fired ${String(sameName.length)}x, payload: ${JSON.stringify(sameName[0])}`
|
|
663
|
-
: // Name what DID fire: a typo'd signal name and a genuinely dead action produce the same
|
|
664
|
-
// sentence otherwise, and the agent cannot tell them apart. See observed-in-window.ts.
|
|
665
|
-
`signal '${p.name ?? '(any)'}' never fired; ${describeObserved('signals', events.filter((e) => e.type === EventType.SIGNAL).map((e) => str(e.data['name']) ?? ''))}`,
|
|
666
|
-
expected: p.dataMatches === undefined
|
|
667
|
-
? `signal '${p.name ?? '(any)'}' to fire`
|
|
668
|
-
: `signal '${p.name ?? '(any)'}' with payload matching ${JSON.stringify(p.dataMatches)}`,
|
|
669
|
-
// Two distinct failures behind one prose line: never fired at all, versus fired with the wrong
|
|
670
|
-
// payload. They call for different fixes, so the agent should not have to tell them apart by
|
|
671
|
-
// reading the sentence.
|
|
672
|
-
assertion: sameName.length > 0 ? 'signal.payload' : 'signal.absent',
|
|
673
|
-
evidence: sameName.length > 0 ? { nearMiss: sameName } : undefined,
|
|
674
|
-
};
|
|
675
|
-
}
|
|
676
|
-
/**
|
|
677
|
-
* Assert a value inside a registered store — the deterministic source of truth no DOM/network read
|
|
678
|
-
* can reach. Reads the store (STATE_READ), walks `path` (dot-path, numeric array indices), and matches
|
|
679
|
-
* the value against `equals` (a literal, `*` for presence, or a `{$gte,$contains,$length,…}` operator
|
|
680
|
-
* pattern — same matcher as signal `dataMatches`). This is what turns "the UI lies about the store"
|
|
681
|
-
* from a manual three-step catch into a one-line, LLM-free regression invariant a flow can carry.
|
|
682
|
-
*/
|
|
683
|
-
/**
|
|
684
|
-
* Activity that resets the "quiet" timer for a `settled` predicate: network calls and STRUCTURAL DOM
|
|
685
|
-
* mutations (nodes added/removed, attributes changed). Deliberately EXCLUDES `dom.text` and animation
|
|
686
|
-
* frames: a count-up counter, a spinner, a pulsing dot, or any looping CSS animation emits a text/anim
|
|
687
|
-
* event every frame forever, so an app with ambient motion would NEVER go quiet (observed live: one
|
|
688
|
-
* login flooded 319 dom.text events from the dashboard's count-up animations). That is the same trap
|
|
689
|
-
* that got Playwright's `networkidle` deprecated. Network + structural DOM are the real "the app is
|
|
690
|
-
* still doing work" signals; for an outcome gated on an animation finishing, assert that specific
|
|
691
|
-
* consequence (signal/net) instead of relying on settle.
|
|
692
|
-
*/
|
|
693
|
-
const SETTLE_ACTIVITY = new Set([
|
|
694
|
-
EventType.NET_REQUEST,
|
|
695
|
-
EventType.DOM_ADDED,
|
|
696
|
-
EventType.DOM_REMOVED,
|
|
697
|
-
EventType.DOM_ATTR,
|
|
698
|
-
]);
|
|
699
|
-
/** The three net-shaped event types a URL can be read off — the only ones dev tooling can produce. */
|
|
700
|
-
const NET_TYPES = new Set([
|
|
701
|
-
EventType.NET_PENDING,
|
|
702
|
-
EventType.NET_REQUEST,
|
|
703
|
-
EventType.NET_STREAM,
|
|
704
|
-
]);
|
|
705
|
-
/** Default quiet window — enough to absorb a render+xhr settle without waiting on slow polls. */
|
|
706
|
-
const DEFAULT_QUIET_MS = 500;
|
|
707
|
-
/**
|
|
708
|
-
* "The page has gone quiet": no network/DOM/animation activity for at least `quietMs`. Needs the
|
|
709
|
-
* wall-clock `now` (in the buffer's time base) because "no activity in the last N ms" is relative to
|
|
710
|
-
* now, not to any buffered event — so `now` is injected (CLAUDE.md rule 7), and the wait loop's
|
|
711
|
-
* poll interval is what eventually flips this to pass once activity stops.
|
|
712
|
-
*/
|
|
713
|
-
export function evalSettled(allEvents, p, now) {
|
|
714
|
-
const quietMs = p.quietMs ?? DEFAULT_QUIET_MS;
|
|
715
|
-
// Dev-tooling traffic is the framework talking about ITSELF (see DevToolingChannel) and says
|
|
716
|
-
// nothing about whether the app finished its work — but it was holding settle open. Dropped from
|
|
717
|
-
// both halves of the calculation below (in-flight AND the quiet timer) and DISCLOSED on the
|
|
718
|
-
// evidence, never silently swallowed.
|
|
719
|
-
const ignoredDevTooling = [];
|
|
720
|
-
const events = allEvents.filter((e) => {
|
|
721
|
-
if (!NET_TYPES.has(e.type))
|
|
722
|
-
return true;
|
|
723
|
-
const url = str(e.data['url']);
|
|
724
|
-
if (!isDevToolingUrl(url))
|
|
725
|
-
return true;
|
|
726
|
-
if (url !== undefined && !ignoredDevTooling.includes(url))
|
|
727
|
-
ignoredDevTooling.push(url);
|
|
728
|
-
return false;
|
|
729
|
-
});
|
|
730
|
-
const disclosure = 0 === ignoredDevTooling.length ? {} : { ignoredDevTooling };
|
|
731
|
-
// A request that STARTED (NET_PENDING) but never completed (NET_REQUEST with the same id) is
|
|
732
|
-
// still in flight — the page is NOT settled no matter how quiet the DOM has gone. Without this,
|
|
733
|
-
// a slow save reads as "settled" the instant its spinner stops mutating the DOM: the exact
|
|
734
|
-
// false-green `settled` exists to prevent.
|
|
735
|
-
//
|
|
736
|
-
// COUNT per id, don't just set-membership: a retry that reuses a request id (two NET_PENDING, one
|
|
737
|
-
// NET_REQUEST) would mark the id "done" and hide the second, still-flying request — an in-flight
|
|
738
|
-
// UNDERCOUNT that greens settle while a request is live. In-flight for an id is pendings minus
|
|
739
|
-
// completions (floored at 0); unkeyed pendings each count as one.
|
|
740
|
-
const pendingById = new Map();
|
|
741
|
-
const doneById = new Map();
|
|
742
|
-
let unkeyedPending = 0;
|
|
743
|
-
for (const e of events) {
|
|
744
|
-
if (e.type === EventType.NET_PENDING) {
|
|
745
|
-
const id = str(e.data['id']);
|
|
746
|
-
if (id === undefined)
|
|
747
|
-
unkeyedPending += 1;
|
|
748
|
-
else
|
|
749
|
-
pendingById.set(id, (pendingById.get(id) ?? 0) + 1);
|
|
750
|
-
}
|
|
751
|
-
else if (e.type === EventType.NET_REQUEST) {
|
|
752
|
-
const id = str(e.data['id']);
|
|
753
|
-
if (id !== undefined)
|
|
754
|
-
doneById.set(id, (doneById.get(id) ?? 0) + 1);
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
let inFlight = unkeyedPending;
|
|
758
|
-
for (const [id, pending] of pendingById) {
|
|
759
|
-
inFlight += Math.max(0, pending - (doneById.get(id) ?? 0));
|
|
760
|
-
}
|
|
761
|
-
// A completed request whose BODY is still streaming is not a finished request. `fetch` resolves at
|
|
762
|
-
// HEADERS, so on a Next.js App Router page the RSC payload reported complete 16 ms in while the
|
|
763
|
-
// Suspense boundary's content arrived 889 ms later — and the silence between them read as a settled
|
|
764
|
-
// page with a loading spinner still on screen. An OPEN with no CLOSE is in flight, counted the same
|
|
765
|
-
// way as a pending with no completion.
|
|
766
|
-
const openStreams = new Set();
|
|
767
|
-
for (const e of events) {
|
|
768
|
-
if (e.type !== EventType.NET_STREAM)
|
|
769
|
-
continue;
|
|
770
|
-
const id = str(e.data['id']);
|
|
771
|
-
if (id === undefined)
|
|
772
|
-
continue;
|
|
773
|
-
const direction = str(e.data['direction']);
|
|
774
|
-
if (StreamDirection.OPEN === direction)
|
|
775
|
-
openStreams.add(id);
|
|
776
|
-
else if (StreamDirection.CLOSE === direction)
|
|
777
|
-
openStreams.delete(id);
|
|
778
|
-
}
|
|
779
|
-
const streaming = openStreams.size;
|
|
780
|
-
if (inFlight + streaming > 0) {
|
|
781
|
-
const what = 0 === streaming
|
|
782
|
-
? `${String(inFlight)} request(s) still in flight`
|
|
783
|
-
: 0 === inFlight
|
|
784
|
-
? `${String(streaming)} response body(ies) still streaming`
|
|
785
|
-
: `${String(inFlight)} request(s) in flight and ${String(streaming)} response body(ies) still streaming`;
|
|
786
|
-
return {
|
|
787
|
-
pass: false,
|
|
788
|
-
failureReason: `not settled: ${what}`,
|
|
789
|
-
observed: what,
|
|
790
|
-
expected: 'no requests in flight and no response bodies still streaming',
|
|
791
|
-
assertion: 'settled.in-flight',
|
|
792
|
-
evidence: {
|
|
793
|
-
settled: false,
|
|
794
|
-
inFlight,
|
|
795
|
-
...(streaming > 0 ? { streaming } : {}),
|
|
796
|
-
...disclosure,
|
|
797
|
-
},
|
|
798
|
-
};
|
|
799
|
-
}
|
|
800
|
-
let lastT = -1;
|
|
801
|
-
let lastType;
|
|
802
|
-
for (const e of events) {
|
|
803
|
-
if (SETTLE_ACTIVITY.has(e.type) && e.t > lastT) {
|
|
804
|
-
lastT = e.t;
|
|
805
|
-
lastType = e.type;
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
if (lastT < 0) {
|
|
809
|
-
return {
|
|
810
|
-
pass: true,
|
|
811
|
-
evidence: { settled: true, quietForMs: null, note: 'no activity to settle', ...disclosure },
|
|
812
|
-
};
|
|
813
|
-
}
|
|
814
|
-
const quietForMs = now - lastT;
|
|
815
|
-
if (quietForMs >= quietMs) {
|
|
816
|
-
return {
|
|
817
|
-
pass: true,
|
|
818
|
-
evidence: { settled: true, quietForMs, lastActivity: lastType, ...disclosure },
|
|
819
|
-
};
|
|
820
|
-
}
|
|
821
|
-
return {
|
|
822
|
-
pass: false,
|
|
823
|
-
failureReason: `not settled: last activity (${String(lastType)}) ${String(quietForMs)}ms ago, need ${String(quietMs)}ms quiet`,
|
|
824
|
-
observed: `last activity was ${String(lastType)}, ${String(quietForMs)}ms ago`,
|
|
825
|
-
expected: `${String(quietMs)}ms of quiet`,
|
|
826
|
-
assertion: 'settled.quiet',
|
|
827
|
-
evidence: { quietForMs, lastActivity: lastType, ...disclosure },
|
|
828
|
-
// The one failure in this file that knows exactly when it could stop being one: if nothing else
|
|
829
|
-
// happens, the window closes in this many ms. A waiter that re-checks THEN instead of on its next
|
|
830
|
-
// blind tick stops paying up to a full poll interval on the hottest call in the product. Only a
|
|
831
|
-
// hint — the predicate is still evaluated at that moment, and can still fail.
|
|
832
|
-
retryAfterMs: quietMs - quietForMs,
|
|
833
|
-
};
|
|
834
|
-
}
|