@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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { CHURN_TYPES } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* Above this, a timeline is big enough that re-reading it unscoped is a real token tax. Observed
|
|
4
|
+
* live: a single login flooded 319 events / ~37KB because the dashboard's count-up animations emit
|
|
5
|
+
* a dom.text per frame — the agent only dodged the cost by knowing to pass filters. The hint now
|
|
6
|
+
* tells it.
|
|
7
|
+
*/
|
|
8
|
+
const LARGE_TIMELINE_EVENTS = 80;
|
|
9
|
+
const LARGE_TIMELINE_BYTES = 8000;
|
|
10
|
+
/**
|
|
11
|
+
* Default cap for reticle_network / reticle_console when the caller passes no `limit`. Those tools
|
|
12
|
+
* default `since` to 0 (the whole session), so a long-lived or event-flooded session produced an
|
|
13
|
+
* UNBOUNDED result — a measured 1-hour flood is ~72,000 calls / ~1M tokens in a single tool result.
|
|
14
|
+
* Capping to the most-recent N (with `total`/`droppedOldest` disclosed, so nothing is hidden and the
|
|
15
|
+
* agent can page with since/until or a higher explicit limit) bounds the cost without changing the
|
|
16
|
+
* window. 200 comfortably covers a real flow's traffic while killing the pathological case.
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_QUERY_LIMIT = 200;
|
|
19
|
+
/**
|
|
20
|
+
* Default cap for `reticle_observe`'s timeline when the caller passes no `max_events`.
|
|
21
|
+
*
|
|
22
|
+
* Without one, the whole window is returned. That is fine for a quiet page and pathological for a
|
|
23
|
+
* busy one: a page with count-up animations emits an event per frame, and a single observe result
|
|
24
|
+
* was measured at ~60KB. The sibling tools (`reticle_network`, `reticle_console`) have had a default
|
|
25
|
+
* for exactly this reason; observe was simply missed.
|
|
26
|
+
*
|
|
27
|
+
* Capping is safe for accuracy — and that is the only reason it is allowed. Contradiction detection
|
|
28
|
+
* runs over the FILTERED-BUT-UNBUDGETED window (see `observe-tools.ts`), so a finding can never
|
|
29
|
+
* disappear because the timeline was trimmed for tokens. What the cap changes is how much of the
|
|
30
|
+
* timeline is printed, never what was examined.
|
|
31
|
+
*
|
|
32
|
+
* Nothing is hidden: whenever the cap bites, `cost.droppedOldest` says how many older events fell
|
|
33
|
+
* outside it, and the caller can pass a larger `max_events` to see them.
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_OBSERVE_EVENT_LIMIT = 200;
|
|
36
|
+
/**
|
|
37
|
+
* Trim a timeline to `maxEvents`, sacrificing noise before evidence.
|
|
38
|
+
*
|
|
39
|
+
* The obvious rule -- keep the most recent N -- is wrong here, and a live session showed why. A page
|
|
40
|
+
* emits a health heartbeat every few seconds forever, so on any idle app the most recent events are
|
|
41
|
+
* all heartbeats. A real observe call came back with 200 events and 46 KB whose own summary read:
|
|
42
|
+
* zero network, zero DOM changes, zero route changes, zero console errors, zero signals. The budget
|
|
43
|
+
* had been spent entirely on heartbeats, and the click the caller was asking about had been dropped
|
|
44
|
+
* for being older.
|
|
45
|
+
*
|
|
46
|
+
* So evidence is kept first, and `CHURN_TYPES` -- which core already defines as the high-volume,
|
|
47
|
+
* low-signal events that are "the ONLY thing that should be sacrificed when a buffer is full" -- is
|
|
48
|
+
* used to fill whatever room is left. That rule already governed buffer eviction; it governs this
|
|
49
|
+
* budget now too, so both agree on what is worth keeping.
|
|
50
|
+
*
|
|
51
|
+
* Order is preserved: the result reads oldest-first, like the timeline it came from.
|
|
52
|
+
*/
|
|
53
|
+
export function applyEventBudget(events, maxEvents) {
|
|
54
|
+
if (maxEvents === undefined || maxEvents < 0 || events.length <= maxEvents) {
|
|
55
|
+
return { events, droppedOldest: 0 };
|
|
56
|
+
}
|
|
57
|
+
const isNoise = (event) => CHURN_TYPES.has(event.type);
|
|
58
|
+
const evidence = events.filter((event) => !isNoise(event));
|
|
59
|
+
// Evidence alone can overflow the budget; then it is the most recent evidence that survives.
|
|
60
|
+
const keptEvidence = evidence.slice(Math.max(0, evidence.length - maxEvents));
|
|
61
|
+
const roomLeft = maxEvents - keptEvidence.length;
|
|
62
|
+
const keptNoise = roomLeft <= 0 ? [] : events.filter(isNoise).slice(-roomLeft);
|
|
63
|
+
const keep = new Set([...keptEvidence, ...keptNoise]);
|
|
64
|
+
return {
|
|
65
|
+
events: events.filter((event) => keep.has(event)),
|
|
66
|
+
droppedOldest: events.length - keep.size,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Build a cost hint from a payload + the event count it carries. */
|
|
70
|
+
export function costHint(payload, events, droppedOldest = 0) {
|
|
71
|
+
const json = JSON.stringify(payload) ?? '';
|
|
72
|
+
// Actual UTF-8 wire bytes, not json.length (UTF-16 code units) — the field is labeled `bytes` and
|
|
73
|
+
// drives the large-timeline recommendation, so a multibyte-heavy payload was under-counted.
|
|
74
|
+
const bytes = Buffer.byteLength(json, 'utf8');
|
|
75
|
+
const base = droppedOldest > 0 ? { events, bytes, droppedOldest } : { events, bytes };
|
|
76
|
+
if (events >= LARGE_TIMELINE_EVENTS || bytes >= LARGE_TIMELINE_BYTES) {
|
|
77
|
+
base.recommendation = `large timeline (${String(events)} events, ~${String(estimateTokens(json))} tokens) — pass filters:[...] (e.g. ["signal","net"]) or max_events to scope your next call and cut tokens`;
|
|
78
|
+
}
|
|
79
|
+
return base;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Rough token estimate for a string. The exact count is model/tokenizer-specific, but ~4 characters
|
|
83
|
+
* per token is the well-known heuristic for English-ish text (and JSON) across GPT/Claude
|
|
84
|
+
* tokenizers — accurate enough for the only decision it drives: "is this response big enough that I
|
|
85
|
+
* should re-scope before reading it?" Deliberately a cheap, dependency-free approximation, NOT a
|
|
86
|
+
* billing-grade count.
|
|
87
|
+
*/
|
|
88
|
+
const CHARS_PER_TOKEN = 4;
|
|
89
|
+
export function estimateTokens(text) {
|
|
90
|
+
return Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
91
|
+
}
|
|
92
|
+
export function sizeCost(payload) {
|
|
93
|
+
const json = JSON.stringify(payload) ?? '';
|
|
94
|
+
// Actual UTF-8 wire bytes, not json.length (UTF-16 code units) — the field is labeled `bytes`
|
|
95
|
+
// and drives the large-snapshot recommendation, so a multibyte-heavy payload was under-counted.
|
|
96
|
+
const bytes = Buffer.byteLength(json, 'utf8');
|
|
97
|
+
return { bytes, tokens: estimateTokens(json) };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Attach a `cost` size preview to a read result. Pure: the cost is computed over the result BEFORE
|
|
101
|
+
* the cost field is added (so it measures the body the agent will actually read), then merged in.
|
|
102
|
+
* Non-object results (e.g. a thrown-error envelope) pass through unchanged.
|
|
103
|
+
*/
|
|
104
|
+
export function withSizeCost(result) {
|
|
105
|
+
if (typeof result !== 'object' || null === result)
|
|
106
|
+
return result;
|
|
107
|
+
return { ...result, cost: sizeCost(result) };
|
|
108
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Should this page be asked for this command at all?
|
|
3
|
+
*
|
|
4
|
+
* A pure decision, kept out of `Session` so it can be argued with directly: the interesting part
|
|
5
|
+
* is not the sending, it is the rule about when not to send, and that rule has a case each way.
|
|
6
|
+
*
|
|
7
|
+
* The protocol says an implementation declares what it can do and refuses everything else, and
|
|
8
|
+
* the whole value of refusing is that it happens BEFORE the action is spent. Without a
|
|
9
|
+
* declaration the only way to discover an unsupported command was to send it and wait: eight
|
|
10
|
+
* seconds, then a timeout whose message is about the page being slow. For a command the page was
|
|
11
|
+
* never going to answer, that reads as an unhealthy application rather than a request it does not
|
|
12
|
+
* serve, and it sends whoever is reading to debug the wrong thing.
|
|
13
|
+
*
|
|
14
|
+
* **The other half matters more.** `commands` is optional, and an SDK too old to declare sends
|
|
15
|
+
* nothing at all. Silence must read as UNKNOWN and never as an empty list -- treating it as
|
|
16
|
+
* "serves nothing" would refuse every command from every older page in the field, which is a far
|
|
17
|
+
* larger failure than the one being prevented. Absence is the reason this is a function with two
|
|
18
|
+
* answers rather than a set lookup at the call site.
|
|
19
|
+
*/
|
|
20
|
+
import { type CommandResult } from '@reticlehq/core';
|
|
21
|
+
/** Why nothing was sent, in a sentence, or undefined when the command should go. */
|
|
22
|
+
export declare function refusalForUndeclared(name: string, declared: readonly string[] | undefined): string | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* The refusal as a finished result, or undefined when the command should be sent.
|
|
25
|
+
*
|
|
26
|
+
* Returns the whole `CommandResult` rather than the sentence, so the caller is two lines and
|
|
27
|
+
* cannot get the envelope subtly wrong -- an `ok: true` refusal would be read as a command that
|
|
28
|
+
* worked, which is the one shape this must never produce.
|
|
29
|
+
*/
|
|
30
|
+
export declare function refusedResult(name: string, declared: readonly string[] | undefined, id: string): CommandResult | undefined;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Should this page be asked for this command at all?
|
|
3
|
+
*
|
|
4
|
+
* A pure decision, kept out of `Session` so it can be argued with directly: the interesting part
|
|
5
|
+
* is not the sending, it is the rule about when not to send, and that rule has a case each way.
|
|
6
|
+
*
|
|
7
|
+
* The protocol says an implementation declares what it can do and refuses everything else, and
|
|
8
|
+
* the whole value of refusing is that it happens BEFORE the action is spent. Without a
|
|
9
|
+
* declaration the only way to discover an unsupported command was to send it and wait: eight
|
|
10
|
+
* seconds, then a timeout whose message is about the page being slow. For a command the page was
|
|
11
|
+
* never going to answer, that reads as an unhealthy application rather than a request it does not
|
|
12
|
+
* serve, and it sends whoever is reading to debug the wrong thing.
|
|
13
|
+
*
|
|
14
|
+
* **The other half matters more.** `commands` is optional, and an SDK too old to declare sends
|
|
15
|
+
* nothing at all. Silence must read as UNKNOWN and never as an empty list -- treating it as
|
|
16
|
+
* "serves nothing" would refuse every command from every older page in the field, which is a far
|
|
17
|
+
* larger failure than the one being prevented. Absence is the reason this is a function with two
|
|
18
|
+
* answers rather than a set lookup at the call site.
|
|
19
|
+
*/
|
|
20
|
+
import { MessageKind } from '@reticlehq/core';
|
|
21
|
+
/** Why nothing was sent, in a sentence, or undefined when the command should go. */
|
|
22
|
+
export function refusalForUndeclared(name, declared) {
|
|
23
|
+
// Too old to say. Unknown, never "nothing".
|
|
24
|
+
if (declared === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
if (declared.includes(name))
|
|
27
|
+
return undefined;
|
|
28
|
+
return (`this page does not serve "${name}". It declared ${String(declared.length)} command(s) when ` +
|
|
29
|
+
`it connected, and this is not one of them: ${declared.join(', ')}. Nothing was sent, so ` +
|
|
30
|
+
'nothing happened -- this is a refusal, not a failure of the app.');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The refusal as a finished result, or undefined when the command should be sent.
|
|
34
|
+
*
|
|
35
|
+
* Returns the whole `CommandResult` rather than the sentence, so the caller is two lines and
|
|
36
|
+
* cannot get the envelope subtly wrong -- an `ok: true` refusal would be read as a command that
|
|
37
|
+
* worked, which is the one shape this must never produce.
|
|
38
|
+
*/
|
|
39
|
+
export function refusedResult(name, declared, id) {
|
|
40
|
+
const error = refusalForUndeclared(name, declared);
|
|
41
|
+
return error === undefined
|
|
42
|
+
? undefined
|
|
43
|
+
: { kind: MessageKind.COMMAND_RESULT, id, ok: false, error };
|
|
44
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { realmOf, DESKTOP_WINDOW_BACKGROUNDED, HIDDEN_TAB_RECOMMENDATION, THROTTLED_TAB_RECOMMENDATION, } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* A human-readable hint when a tab is hidden or throttled. Returns undefined for a healthy tab so
|
|
4
|
+
* the field stays ABSENT (not empty). A merely-unfocused but live tab is still scriptable, so blur
|
|
5
|
+
* alone does not trigger it. Pure.
|
|
6
|
+
*
|
|
7
|
+
* HIDDEN and THROTTLED get DIFFERENT answers, which is the fix. They used to share one message that
|
|
8
|
+
* said "may be un-focusable; acquire a guaranteed scriptable context" — correct for a background
|
|
9
|
+
* tab, and actively harmful for a visible one. A visible throttled tab is driveable; measured in the
|
|
10
|
+
* field, one took a sign-in and two clean net-grade verdicts with no retries, while that message had
|
|
11
|
+
* already sent the agent into a lease the watching human could not see. One flag, advice that cost
|
|
12
|
+
* the product's main trust surface, and nothing bought.
|
|
13
|
+
*
|
|
14
|
+
* Hidden outranks throttled when both are set: a background tab is the stronger fact, and its
|
|
15
|
+
* failure mode (events landing on a page that never advances) is the one worth warning about.
|
|
16
|
+
*/
|
|
17
|
+
export function buildSessionRecommendation(inputs) {
|
|
18
|
+
if (!inputs.hidden && !inputs.throttled)
|
|
19
|
+
return undefined;
|
|
20
|
+
// A desktop window gets the one answer it can act on. Checked BEFORE hidden/throttled are told
|
|
21
|
+
// apart, because the distinction between them is about browser tab lifecycle and neither of its
|
|
22
|
+
// two answers exists for an app whose window is the client. See DESKTOP_WINDOW_BACKGROUNDED.
|
|
23
|
+
if (realmOf(inputs.runtime).isDesktopShell) {
|
|
24
|
+
return DESKTOP_WINDOW_BACKGROUNDED;
|
|
25
|
+
}
|
|
26
|
+
if (inputs.hidden)
|
|
27
|
+
return HIDDEN_TAB_RECOMMENDATION;
|
|
28
|
+
return THROTTLED_TAB_RECOMMENDATION;
|
|
29
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commands that may be re-issued against the connection that replaced this session.
|
|
3
|
+
*
|
|
4
|
+
* Reads only, and the boundary is the point. Re-reading a page costs nothing and answers the same
|
|
5
|
+
* question the caller asked. An act cannot be replayed: it may already have been dispatched in the
|
|
6
|
+
* page that went away, and performing it a second time behind the caller's back is a double submit
|
|
7
|
+
* nobody asked for. A replaced act still errors, and the caller's own retry — with the same id,
|
|
8
|
+
* which is still the right one — is the safe path.
|
|
9
|
+
*/
|
|
10
|
+
export declare const REBINDABLE_COMMANDS: ReadonlySet<string>;
|
|
11
|
+
/**
|
|
12
|
+
* How far to walk a chain of replacements before giving up.
|
|
13
|
+
*
|
|
14
|
+
* Generous for the real case (a page reloading a handful of times while a call is in flight) and
|
|
15
|
+
* small enough that a cycle costs nothing. The number is a backstop, not a policy: a chain longer
|
|
16
|
+
* than this means something is re-dialling in a loop, and that is a different problem.
|
|
17
|
+
*/
|
|
18
|
+
export declare const MAX_SUCCESSOR_HOPS = 32;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a command in flight may be re-issued against the connection that REPLACED this session,
|
|
3
|
+
* and how far a chain of replacements is worth walking.
|
|
4
|
+
*
|
|
5
|
+
* One question, so one file. It left `session.ts` when that file crossed the thousand-line cap on a
|
|
6
|
+
* merge: two branches had each grown it by a few lines and the sum went over, which is the moment
|
|
7
|
+
* the rule says to split rather than to raise the number. These two constants and the reasoning
|
|
8
|
+
* behind them are the most self-contained thing in there — `session.ts` reads them twice and owns
|
|
9
|
+
* nothing else about rebinding.
|
|
10
|
+
*/
|
|
11
|
+
import { ReticleCommand } from '@reticlehq/core';
|
|
12
|
+
/**
|
|
13
|
+
* Commands that may be re-issued against the connection that replaced this session.
|
|
14
|
+
*
|
|
15
|
+
* Reads only, and the boundary is the point. Re-reading a page costs nothing and answers the same
|
|
16
|
+
* question the caller asked. An act cannot be replayed: it may already have been dispatched in the
|
|
17
|
+
* page that went away, and performing it a second time behind the caller's back is a double submit
|
|
18
|
+
* nobody asked for. A replaced act still errors, and the caller's own retry — with the same id,
|
|
19
|
+
* which is still the right one — is the safe path.
|
|
20
|
+
*/
|
|
21
|
+
export const REBINDABLE_COMMANDS = new Set([
|
|
22
|
+
ReticleCommand.SNAPSHOT,
|
|
23
|
+
ReticleCommand.QUERY,
|
|
24
|
+
ReticleCommand.MATCH,
|
|
25
|
+
ReticleCommand.INSPECT,
|
|
26
|
+
ReticleCommand.STATE_READ,
|
|
27
|
+
ReticleCommand.STORAGE_READ,
|
|
28
|
+
ReticleCommand.CAPABILITIES,
|
|
29
|
+
ReticleCommand.ANIMATIONS,
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* How far to walk a chain of replacements before giving up.
|
|
33
|
+
*
|
|
34
|
+
* Generous for the real case (a page reloading a handful of times while a call is in flight) and
|
|
35
|
+
* small enough that a cycle costs nothing. The number is a backstop, not a policy: a chain longer
|
|
36
|
+
* than this means something is re-dialling in a loop, and that is a different problem.
|
|
37
|
+
*/
|
|
38
|
+
export const MAX_SUCCESSOR_HOPS = 32;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { BrowserBrand, type ReticleEvent } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* What these functions need from a session, named structurally rather than imported.
|
|
4
|
+
*
|
|
5
|
+
* `Session` imports this module for `readHealthEvent`/`pendingNavigationMs`, so naming the class
|
|
6
|
+
* here made a cycle out of three method signatures. The real `Session` satisfies this by having the
|
|
7
|
+
* methods, and a test can now pass a two-line stand-in instead of a whole session.
|
|
8
|
+
*/
|
|
9
|
+
interface HealthSubject {
|
|
10
|
+
bufferHealth(): {
|
|
11
|
+
total: number;
|
|
12
|
+
dropped: number;
|
|
13
|
+
};
|
|
14
|
+
health(): SessionHealth;
|
|
15
|
+
throttled(): boolean;
|
|
16
|
+
}
|
|
17
|
+
/** The health block spliced onto act/assert results. Defined here because this is what builds it. */
|
|
18
|
+
export interface SessionHealth {
|
|
19
|
+
lastSeenMs: number;
|
|
20
|
+
throttled: boolean;
|
|
21
|
+
focused: boolean;
|
|
22
|
+
/** present only when hidden/throttled — points at the `reticle drive` escape hatch. */
|
|
23
|
+
recommendation?: string;
|
|
24
|
+
/**
|
|
25
|
+
* How long the OLDEST unanswered request has been in flight, when that is long enough to matter.
|
|
26
|
+
*
|
|
27
|
+
* Present only past `PENDING_NAVIGATION_NOTICE_MS`, so a healthy session costs nothing. Without
|
|
28
|
+
* it, a fetch stuck pending forever and a dev server that accepts connections and never sends a
|
|
29
|
+
* body both look exactly like an app that is merely slow — while the daemon holds the evidence.
|
|
30
|
+
*/
|
|
31
|
+
pendingNavigationMs?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Present only when the page's SDK version differs from the daemon's — see version-skew.ts.
|
|
34
|
+
*
|
|
35
|
+
* On the HEALTH block, not only on `reticle_sessions`, because skew causes SILENT action failures
|
|
36
|
+
* and the fields it contradicts ride on the act result: `act_and_wait` can report `dispatched`,
|
|
37
|
+
* `settled` and a DOM mutation while framework state never changed. A banner an agent only sees
|
|
38
|
+
* on `reticle_sessions` or `reticle_lease` is not on the surface it reads every call.
|
|
39
|
+
*/
|
|
40
|
+
versionSkew?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* How long a request may be in flight before it is worth reporting on session health.
|
|
44
|
+
*
|
|
45
|
+
* A drive always has requests in the air, so a low bar puts a scary number on every healthy session
|
|
46
|
+
* and trains agents to ignore the field — the same way a guard that fires on routine controls trains
|
|
47
|
+
* them to pass `confirmDangerous` reflexively.
|
|
48
|
+
*
|
|
49
|
+
* 10s, and it is a HEURISTIC with no clean separation available: "a slow endpoint" and "a server
|
|
50
|
+
* that will never answer" are the same observation until one of them finishes. The number is chosen
|
|
51
|
+
* to sit between the two things actually measured, not derived from anything.
|
|
52
|
+
*
|
|
53
|
+
* Below it: this repo's own battery runs its API with `REFLECT_MS=6000` on purpose, and at the 5s
|
|
54
|
+
* this first shipped with, a healthy app with one slow route was permanently non-nominal and carried
|
|
55
|
+
* a scary number on every result.
|
|
56
|
+
*
|
|
57
|
+
* Above it: both reported wedges — 10.4s on one, 170s+ on the other. 10.4s clears this by 400ms,
|
|
58
|
+
* which is thin, and an app with an 8-second endpoint will not be warned about a wedge until 10s.
|
|
59
|
+
* That is the trade: an over-firing field gets ignored, and a field nobody reads catches nothing.
|
|
60
|
+
*/
|
|
61
|
+
export declare const PENDING_NAVIGATION_NOTICE_MS = 10000;
|
|
62
|
+
/**
|
|
63
|
+
* The age of the oldest request that STARTED and never completed, or undefined when there is none
|
|
64
|
+
* worth reporting.
|
|
65
|
+
*
|
|
66
|
+
* Matched on request id, the way `detectHungRequests` and the route oracle's `unansweredIn` do: a
|
|
67
|
+
* NET_PENDING with no NET_REQUEST carrying the same id. Three readings of one fact is two too many,
|
|
68
|
+
* but they read different windows — this one is the whole session, which is the point: a wedge that
|
|
69
|
+
* began before the current action is exactly the case a per-window reading cannot see.
|
|
70
|
+
*/
|
|
71
|
+
export declare function pendingNavigationMs(events: readonly ReticleEvent[], nowMs: number): number | undefined;
|
|
72
|
+
/** The evidence-completeness block spliced onto observe/network/console results. */
|
|
73
|
+
interface BufferEnvelope {
|
|
74
|
+
buffer?: {
|
|
75
|
+
held: number;
|
|
76
|
+
dropped: number;
|
|
77
|
+
note: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Buffer-honesty envelope for observe/network/console. When the ring buffer has evicted anything
|
|
82
|
+
* (age/size cap), a "no such event" answer may be a false negative — so we attach the drop count and
|
|
83
|
+
* an actionable note. OMITTED entirely when nothing was dropped: silence means the buffer is intact,
|
|
84
|
+
* so a clean/empty result there is trustworthy and costs zero tokens.
|
|
85
|
+
*/
|
|
86
|
+
export declare function bufferEnvelope(session: HealthSubject): BufferEnvelope;
|
|
87
|
+
/** The `session` (and optional throttled `warning`) block spliced onto act/assert results. */
|
|
88
|
+
interface HealthEnvelope {
|
|
89
|
+
session?: SessionHealth;
|
|
90
|
+
warning?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build the health envelope for a tool result. When the session is **nominal** (focused, not
|
|
94
|
+
* throttled, no escape-hatch recommendation) the block is OMITTED entirely — a healthy session
|
|
95
|
+
* conveys nothing actionable, and emitting it on every act/observe/assert call is pure token
|
|
96
|
+
* overhead. The block (and a throttled `warning`) appears only when something is actually wrong,
|
|
97
|
+
* so no health signal is lost — absence means healthy.
|
|
98
|
+
*/
|
|
99
|
+
export declare function healthEnvelope(session: HealthSubject): HealthEnvelope;
|
|
100
|
+
/**
|
|
101
|
+
* Opt-in hard stop. When `refuseWhenThrottled` is true and the tab is throttled, throw so the
|
|
102
|
+
* agent does not drive a tab where timers/rAF/pointer gestures may silently no-op. Default is
|
|
103
|
+
* warn-only so background testing never breaks.
|
|
104
|
+
*/
|
|
105
|
+
export declare function refuseIfThrottled(session: HealthSubject, refuse: unknown): void;
|
|
106
|
+
/**
|
|
107
|
+
* Suffix the starvation note onto a FAILED predicate verdict when the tab is throttled. A pass is
|
|
108
|
+
* returned untouched — starvation is context for a failure, not a reason to doubt a hold. Pure and
|
|
109
|
+
* generic over the verdict shape so assert/wait_for/act_and_wait share one rule.
|
|
110
|
+
*
|
|
111
|
+
* The note FOLLOWS the stamped field and does not decide for itself. `annotateThrottledMiss`
|
|
112
|
+
* (predicate.ts) owns the question of whether this failure was reached by NOT HAVING SEEN
|
|
113
|
+
* something, which is the only reading a starved tab casts doubt on, and stamps
|
|
114
|
+
* `THROTTLED_STARVED_NOTE` when it was. Deciding again here gives two answers to one question: an
|
|
115
|
+
* `absent: true` assertion that failed because it MATCHED elements is not in doubt, and must not be
|
|
116
|
+
* told in prose that the tab may never have rendered. The same applies to a failure that already
|
|
117
|
+
* carries a more specific reason (an unreadable locator, a superseded window): the concrete
|
|
118
|
+
* diagnosis leads.
|
|
119
|
+
*/
|
|
120
|
+
export declare function annotateStarvedFailure<V extends {
|
|
121
|
+
pass?: boolean;
|
|
122
|
+
failureReason?: string;
|
|
123
|
+
inconclusive?: string;
|
|
124
|
+
}>(session: HealthSubject, verdict: V): V;
|
|
125
|
+
/** The page's own visibility/runtime report, narrowed out of an untrusted PAGE_HEALTH payload. */
|
|
126
|
+
interface HealthReport {
|
|
127
|
+
hidden: boolean | undefined;
|
|
128
|
+
focused: boolean | undefined;
|
|
129
|
+
runtime: string | undefined;
|
|
130
|
+
/** Coarse rendering engine (blink/gecko/webkit) — context for a feedback report, not a health input. */
|
|
131
|
+
engine: string | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* Which browser the page is. Narrowed to `BrowserBrand` HERE rather than trusted: the SDK already
|
|
134
|
+
* normalises, so anything else is a stale or hand-forged payload and is dropped — the point of the
|
|
135
|
+
* closed list is that an unbounded string can never reach telemetry through it.
|
|
136
|
+
*/
|
|
137
|
+
brand: BrowserBrand | undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Narrow a PAGE_HEALTH payload. Every field is optional on the wire — an older SDK does not report
|
|
141
|
+
* `runtime` at all — so each is returned as undefined rather than defaulted here, letting the caller
|
|
142
|
+
* keep its previous value instead of silently flipping a session to "visible" on a partial report.
|
|
143
|
+
*/
|
|
144
|
+
export declare function readHealthEvent(data: Record<string, unknown>): HealthReport;
|
|
145
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { BrowserBrand, EventType, BUFFER_EVICTION_WARNING, THROTTLED_STARVED_NOTE, THROTTLED_WARNING, } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* How long a request may be in flight before it is worth reporting on session health.
|
|
4
|
+
*
|
|
5
|
+
* A drive always has requests in the air, so a low bar puts a scary number on every healthy session
|
|
6
|
+
* and trains agents to ignore the field — the same way a guard that fires on routine controls trains
|
|
7
|
+
* them to pass `confirmDangerous` reflexively.
|
|
8
|
+
*
|
|
9
|
+
* 10s, and it is a HEURISTIC with no clean separation available: "a slow endpoint" and "a server
|
|
10
|
+
* that will never answer" are the same observation until one of them finishes. The number is chosen
|
|
11
|
+
* to sit between the two things actually measured, not derived from anything.
|
|
12
|
+
*
|
|
13
|
+
* Below it: this repo's own battery runs its API with `REFLECT_MS=6000` on purpose, and at the 5s
|
|
14
|
+
* this first shipped with, a healthy app with one slow route was permanently non-nominal and carried
|
|
15
|
+
* a scary number on every result.
|
|
16
|
+
*
|
|
17
|
+
* Above it: both reported wedges — 10.4s on one, 170s+ on the other. 10.4s clears this by 400ms,
|
|
18
|
+
* which is thin, and an app with an 8-second endpoint will not be warned about a wedge until 10s.
|
|
19
|
+
* That is the trade: an over-firing field gets ignored, and a field nobody reads catches nothing.
|
|
20
|
+
*/
|
|
21
|
+
export const PENDING_NAVIGATION_NOTICE_MS = 10_000;
|
|
22
|
+
/**
|
|
23
|
+
* Said beside `dispatched` / `settled` on a skewed session, because those fields read as success.
|
|
24
|
+
*
|
|
25
|
+
* The reporter's own account of the cost: "the false-positive dispatch confirmation is what cost the
|
|
26
|
+
* most time — I trusted `dispatched: true, domMutatedWithin: Nms` as real signal for a long time
|
|
27
|
+
* before suspecting the skew banner." Stating the contradiction is the whole job here; the existing
|
|
28
|
+
* banner was accurate and simply never appeared where it was needed.
|
|
29
|
+
*/
|
|
30
|
+
const SKEW_VERDICT_WARNING = 'version skew: `dispatched` and `settled` on this session mean the event was sent, NOT that the ' +
|
|
31
|
+
'app acted on it — a skewed pair drops actions silently. Re-read the control (aria-checked, ' +
|
|
32
|
+
'data-state, its text) before trusting any verdict from this session, and converge the versions:';
|
|
33
|
+
/**
|
|
34
|
+
* The age of the oldest request that STARTED and never completed, or undefined when there is none
|
|
35
|
+
* worth reporting.
|
|
36
|
+
*
|
|
37
|
+
* Matched on request id, the way `detectHungRequests` and the route oracle's `unansweredIn` do: a
|
|
38
|
+
* NET_PENDING with no NET_REQUEST carrying the same id. Three readings of one fact is two too many,
|
|
39
|
+
* but they read different windows — this one is the whole session, which is the point: a wedge that
|
|
40
|
+
* began before the current action is exactly the case a per-window reading cannot see.
|
|
41
|
+
*/
|
|
42
|
+
export function pendingNavigationMs(events, nowMs) {
|
|
43
|
+
const settled = new Set();
|
|
44
|
+
for (const e of events)
|
|
45
|
+
if (e.type === EventType.NET_REQUEST)
|
|
46
|
+
settled.add(e.data['id']);
|
|
47
|
+
let oldest;
|
|
48
|
+
for (const e of events) {
|
|
49
|
+
if (e.type !== EventType.NET_PENDING || settled.has(e.data['id']))
|
|
50
|
+
continue;
|
|
51
|
+
if (oldest === undefined || e.t < oldest)
|
|
52
|
+
oldest = e.t;
|
|
53
|
+
}
|
|
54
|
+
if (oldest === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
const age = nowMs - oldest;
|
|
57
|
+
return age >= PENDING_NAVIGATION_NOTICE_MS ? age : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Buffer-honesty envelope for observe/network/console. When the ring buffer has evicted anything
|
|
61
|
+
* (age/size cap), a "no such event" answer may be a false negative — so we attach the drop count and
|
|
62
|
+
* an actionable note. OMITTED entirely when nothing was dropped: silence means the buffer is intact,
|
|
63
|
+
* so a clean/empty result there is trustworthy and costs zero tokens.
|
|
64
|
+
*/
|
|
65
|
+
export function bufferEnvelope(session) {
|
|
66
|
+
const { total, dropped } = session.bufferHealth();
|
|
67
|
+
if (0 === dropped)
|
|
68
|
+
return {};
|
|
69
|
+
return { buffer: { held: total, dropped, note: BUFFER_EVICTION_WARNING } };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build the health envelope for a tool result. When the session is **nominal** (focused, not
|
|
73
|
+
* throttled, no escape-hatch recommendation) the block is OMITTED entirely — a healthy session
|
|
74
|
+
* conveys nothing actionable, and emitting it on every act/observe/assert call is pure token
|
|
75
|
+
* overhead. The block (and a throttled `warning`) appears only when something is actually wrong,
|
|
76
|
+
* so no health signal is lost — absence means healthy.
|
|
77
|
+
*/
|
|
78
|
+
export function healthEnvelope(session) {
|
|
79
|
+
const health = session.health();
|
|
80
|
+
// A request stuck in flight makes a session non-nominal even when the tab is fine, because it is
|
|
81
|
+
// the one condition where every observation is about to be about a page that is not moving.
|
|
82
|
+
const nominal = !health.throttled &&
|
|
83
|
+
health.focused &&
|
|
84
|
+
health.recommendation === undefined &&
|
|
85
|
+
health.pendingNavigationMs === undefined &&
|
|
86
|
+
health.versionSkew === undefined;
|
|
87
|
+
if (nominal)
|
|
88
|
+
return {};
|
|
89
|
+
// Skew outranks the throttle warning when both hold: a throttled tab makes a reading unreliable,
|
|
90
|
+
// a skewed link makes the ACTION unreliable, and there is no point warning about the quality of an
|
|
91
|
+
// observation of something that may never have happened.
|
|
92
|
+
if (health.versionSkew !== undefined) {
|
|
93
|
+
return { session: health, warning: `${SKEW_VERDICT_WARNING} ${health.versionSkew}` };
|
|
94
|
+
}
|
|
95
|
+
return health.throttled ? { session: health, warning: THROTTLED_WARNING } : { session: health };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Opt-in hard stop. When `refuseWhenThrottled` is true and the tab is throttled, throw so the
|
|
99
|
+
* agent does not drive a tab where timers/rAF/pointer gestures may silently no-op. Default is
|
|
100
|
+
* warn-only so background testing never breaks.
|
|
101
|
+
*/
|
|
102
|
+
export function refuseIfThrottled(session, refuse) {
|
|
103
|
+
if (true === refuse && session.throttled()) {
|
|
104
|
+
throw new Error(`refusing to act: ${THROTTLED_WARNING}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The sentence appended to a FAILED predicate verdict waited out on a throttled tab.
|
|
109
|
+
*
|
|
110
|
+
* A starved tab and a missing element read identically as a bare near-miss: after a hard reload a
|
|
111
|
+
* backgrounded tab can sit on its loading state forever (hydration starved, nothing painted), and
|
|
112
|
+
* `wait_for { text }` timing out there looks exactly like "the code did not render" (#521). The
|
|
113
|
+
* health envelope already rode alongside saying `throttled:true`, but nothing connected it to the
|
|
114
|
+
* verdict an agent actually gates on. Appended, not replacing: the original diagnosis still leads,
|
|
115
|
+
* and on a healthy tab the failure says exactly what it always said.
|
|
116
|
+
*/
|
|
117
|
+
const STARVED_WAIT_NOTE = ' (the tab was throttled during this wait, so starvation can look exactly like absence: bring it to the front and re-check before concluding this is genuinely missing)';
|
|
118
|
+
/**
|
|
119
|
+
* Suffix the starvation note onto a FAILED predicate verdict when the tab is throttled. A pass is
|
|
120
|
+
* returned untouched — starvation is context for a failure, not a reason to doubt a hold. Pure and
|
|
121
|
+
* generic over the verdict shape so assert/wait_for/act_and_wait share one rule.
|
|
122
|
+
*
|
|
123
|
+
* The note FOLLOWS the stamped field and does not decide for itself. `annotateThrottledMiss`
|
|
124
|
+
* (predicate.ts) owns the question of whether this failure was reached by NOT HAVING SEEN
|
|
125
|
+
* something, which is the only reading a starved tab casts doubt on, and stamps
|
|
126
|
+
* `THROTTLED_STARVED_NOTE` when it was. Deciding again here gives two answers to one question: an
|
|
127
|
+
* `absent: true` assertion that failed because it MATCHED elements is not in doubt, and must not be
|
|
128
|
+
* told in prose that the tab may never have rendered. The same applies to a failure that already
|
|
129
|
+
* carries a more specific reason (an unreadable locator, a superseded window): the concrete
|
|
130
|
+
* diagnosis leads.
|
|
131
|
+
*/
|
|
132
|
+
export function annotateStarvedFailure(session, verdict) {
|
|
133
|
+
if (true === verdict.pass || verdict.failureReason === undefined)
|
|
134
|
+
return verdict;
|
|
135
|
+
if (true !== session.throttled())
|
|
136
|
+
return verdict;
|
|
137
|
+
if (THROTTLED_STARVED_NOTE !== verdict.inconclusive)
|
|
138
|
+
return verdict;
|
|
139
|
+
return { ...verdict, failureReason: `${verdict.failureReason}${STARVED_WAIT_NOTE}` };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Narrow a PAGE_HEALTH payload. Every field is optional on the wire — an older SDK does not report
|
|
143
|
+
* `runtime` at all — so each is returned as undefined rather than defaulted here, letting the caller
|
|
144
|
+
* keep its previous value instead of silently flipping a session to "visible" on a partial report.
|
|
145
|
+
*/
|
|
146
|
+
export function readHealthEvent(data) {
|
|
147
|
+
return {
|
|
148
|
+
hidden: 'boolean' === typeof data['hidden'] ? data['hidden'] : undefined,
|
|
149
|
+
focused: 'boolean' === typeof data['focused'] ? data['focused'] : undefined,
|
|
150
|
+
runtime: 'string' === typeof data['runtime'] ? data['runtime'] : undefined,
|
|
151
|
+
engine: 'string' === typeof data['engine'] ? data['engine'] : undefined,
|
|
152
|
+
brand: Object.values(BrowserBrand).find((known) => known === data['brand']),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { NoSessionReason } from '@reticlehq/core/telemetry';
|
|
2
|
+
import { Session, type SessionInfo } from './session.js';
|
|
3
|
+
import { AttachmentHistory } from './presence/attachment-history.js';
|
|
4
|
+
import type { NoSessionNextAction } from './no-session-next-action.js';
|
|
5
|
+
import { type SessionIdentity } from './session-successor.js';
|
|
6
|
+
/**
|
|
7
|
+
* The agent's active project, used to scope auto-selection. `projectId` is the stable build-stamped
|
|
8
|
+
* identity (authoritative when present); `url` is the app origin, a fallback hint for older SDKs that
|
|
9
|
+
* don't stamp a projectId. Both optional — an empty scope means "no project filter" (legacy behavior).
|
|
10
|
+
*/
|
|
11
|
+
interface ResolveScope {
|
|
12
|
+
projectId?: string;
|
|
13
|
+
url?: string;
|
|
14
|
+
}
|
|
15
|
+
/** The scheme://host:port of a URL, or undefined if it can't be parsed. Used to compare origins. */
|
|
16
|
+
export declare function originOf(url: string | undefined): string | undefined;
|
|
17
|
+
export declare class SessionManager {
|
|
18
|
+
#private;
|
|
19
|
+
/** Set the active project's default resolve scope (called once at daemon wiring). */
|
|
20
|
+
setDefaultScope(scope: ResolveScope | undefined): void;
|
|
21
|
+
setConnectionRecorder(record: ((projectId: string | undefined) => void) | undefined): void;
|
|
22
|
+
add(session: Session): Session | undefined;
|
|
23
|
+
remove(session: Session): boolean;
|
|
24
|
+
get(sessionId: string): Session | undefined;
|
|
25
|
+
list(): SessionInfo[];
|
|
26
|
+
/** Continuity for one session — "has this been attached the whole time I am reasoning about?" */
|
|
27
|
+
attachmentOf(sessionId: string): ReturnType<AttachmentHistory['of']>;
|
|
28
|
+
/** Every connected session — used by the liveness reaper to sweep for idle/disconnected ones. */
|
|
29
|
+
all(): Session[];
|
|
30
|
+
count(): number;
|
|
31
|
+
/** Wire the diagnosis provider (daemon boot). Absent ⇒ the plain, static message. */
|
|
32
|
+
setNoSessionHint(hint: (() => string | undefined) | undefined): void;
|
|
33
|
+
/** Wire the short rendering. Registered from the same `explainNoSession` call as the hint. */
|
|
34
|
+
setNoSessionLead(lead: (() => string | undefined) | undefined): void;
|
|
35
|
+
/** The lead and the next action, for a surface a person reads. */
|
|
36
|
+
noSessionLead(): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* The same diagnosis, for a caller that is ASKING about sessions rather than failing to get one.
|
|
39
|
+
*
|
|
40
|
+
* `reticle_sessions` is the first thing an agent reaches for and it returned a bare empty array —
|
|
41
|
+
* confidently, with nothing to act on. An agent cannot tell an empty list apart from a daemon that
|
|
42
|
+
* is down, an app with no SDK, or a tab that was closed, so it stops there. The diagnosis was
|
|
43
|
+
* already computed for the error path; this exposes it to the read path too.
|
|
44
|
+
*/
|
|
45
|
+
noSessionHint(): string | undefined;
|
|
46
|
+
setNoSessionReason(reason: (() => NoSessionReason | undefined) | undefined): void;
|
|
47
|
+
noSessionReason(): NoSessionReason | undefined;
|
|
48
|
+
setNoSessionNextAction(next: (() => NoSessionNextAction | undefined) | undefined): void;
|
|
49
|
+
noSessionNextAction(): NoSessionNextAction | undefined;
|
|
50
|
+
everConnected(): boolean;
|
|
51
|
+
/** Record a bridge-initiated close so `resolve` can explain a session that vanished. */
|
|
52
|
+
noteClosure(reason: string, at: number): void;
|
|
53
|
+
/** The most recent bridge-initiated close, if any. */
|
|
54
|
+
lastClosure(): {
|
|
55
|
+
at: number;
|
|
56
|
+
reason: string;
|
|
57
|
+
} | undefined;
|
|
58
|
+
connectedSinceLastClosure(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* The id of the session that most recently went away, if any.
|
|
61
|
+
*
|
|
62
|
+
* Distinct from {@link lastClosure}, which only records closes the bridge itself initiated
|
|
63
|
+
* (handshake refusals, auth failures) — an ordinary disconnect never reaches it. This reads the
|
|
64
|
+
* tombstone ring `remove()` maintains, so it covers every departure.
|
|
65
|
+
*
|
|
66
|
+
* Read by the no-session diagnosis, which needs to say something about the session that actually
|
|
67
|
+
* vanished rather than about the daemon's lifetime history (#611).
|
|
68
|
+
*/
|
|
69
|
+
lastDeparted(): string | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* The session that most recently disappeared — id, last URL, project — or undefined.
|
|
72
|
+
*
|
|
73
|
+
* `lastDeparted` is the id alone, which is what lease-expiry attribution needs. This is the
|
|
74
|
+
* rest: a route that 500s tears the page down and the SDK never reconnects, and without the
|
|
75
|
+
* URL `reticle_sessions` is an empty list with no history (#808). Tombstones, not live rows:
|
|
76
|
+
* a connected tab is in `list()`, not here.
|
|
77
|
+
*/
|
|
78
|
+
lastKnown(): SessionIdentity | undefined;
|
|
79
|
+
resolve(sessionId?: string, scope?: ResolveScope): Session;
|
|
80
|
+
}
|
|
81
|
+
export {};
|