@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
package/dist/session/session.js
DELETED
|
@@ -1,891 +0,0 @@
|
|
|
1
|
-
import { recordImpact } from '../impact/impact-recorder.js';
|
|
2
|
-
import { LastAct } from './last-act.js';
|
|
3
|
-
import { GapLedger } from '../honesty/gap-ledger.js';
|
|
4
|
-
import { CaptureLedger } from '../honesty/feature-capture.js';
|
|
5
|
-
import { commandTimeoutMessage } from './command-timeout.js';
|
|
6
|
-
import { readHealthEvent, pendingNavigationMs } from './session-health.js';
|
|
7
|
-
import { MIRRORED_COMMANDS, mirroredNarration } from './session-mirror.js';
|
|
8
|
-
/** The HUD does not need 200 frames to watch a counter climb; the last state always lands. */
|
|
9
|
-
const IMPACT_PUSH_DEBOUNCE_MS = 700;
|
|
10
|
-
import { PendingCommands, CommandTimeoutError } from './pending-commands.js';
|
|
11
|
-
import { span } from '../trace.js';
|
|
12
|
-
import { AppRuntime, EventType, HumanControlDataSchema, HumanControlKind, HumanMarkDataSchema, ReticleCommand, MessageKind, parseEventPayload, PresenterTone, SESSION_HEALTH, SESSION_LEASE, SESSION_LIFECYCLE, SessionState, } from '@reticlehq/core';
|
|
13
|
-
import { RingBuffer } from '../events/ring-buffer.js';
|
|
14
|
-
import { filterEvents, mergeEventsBySeq, } from '../journal/journal-query.js';
|
|
15
|
-
import {} from '../journal/ambient.js';
|
|
16
|
-
import { ObservedState } from './observed-state.js';
|
|
17
|
-
import { recordBrowserLatency, recordSdkFailure } from '../telemetry/session-metrics.js';
|
|
18
|
-
import { LiveControl } from './live-control.js';
|
|
19
|
-
import { ReviewStore } from './review-store.js';
|
|
20
|
-
import { buildSessionRecommendation } from './session-recommendation.js';
|
|
21
|
-
import { buildPresenterArgs } from './presenter-args.js';
|
|
22
|
-
import { buildSessionLease } from './session-lease.js';
|
|
23
|
-
import { buildSessionInfo } from './session-info.js';
|
|
24
|
-
const DEFAULT_COMMAND_TIMEOUT_MS = 8000;
|
|
25
|
-
/** Prefix on correlated command ids (c1, c2, …) — distinguishes them from mark ids. */
|
|
26
|
-
const COMMAND_ID_PREFIX = 'c';
|
|
27
|
-
/**
|
|
28
|
-
* Commands that may be re-issued against the connection that replaced this session.
|
|
29
|
-
*
|
|
30
|
-
* Reads only, and the boundary is the point. Re-reading a page costs nothing and answers the same
|
|
31
|
-
* question the caller asked. An act cannot be replayed: it may already have been dispatched in the
|
|
32
|
-
* page that went away, and performing it a second time behind the caller's back is a double submit
|
|
33
|
-
* nobody asked for. A replaced act still errors, and the caller's own retry — with the same id,
|
|
34
|
-
* which is still the right one — is the safe path.
|
|
35
|
-
*/
|
|
36
|
-
/**
|
|
37
|
-
* How far to walk a chain of replacements before giving up.
|
|
38
|
-
*
|
|
39
|
-
* Generous for the real case (a page reloading a handful of times while a call is in flight) and
|
|
40
|
-
* small enough that a cycle costs nothing. The number is a backstop, not a policy: a chain longer
|
|
41
|
-
* than this means something is re-dialling in a loop, and that is a different problem.
|
|
42
|
-
*/
|
|
43
|
-
const MAX_SUCCESSOR_HOPS = 32;
|
|
44
|
-
const REBINDABLE_COMMANDS = new Set([
|
|
45
|
-
ReticleCommand.SNAPSHOT,
|
|
46
|
-
ReticleCommand.QUERY,
|
|
47
|
-
ReticleCommand.MATCH,
|
|
48
|
-
ReticleCommand.INSPECT,
|
|
49
|
-
ReticleCommand.STATE_READ,
|
|
50
|
-
ReticleCommand.STORAGE_READ,
|
|
51
|
-
ReticleCommand.CAPABILITIES,
|
|
52
|
-
ReticleCommand.ANIMATIONS,
|
|
53
|
-
]);
|
|
54
|
-
/** Prefix on minted action ids (a1, a2, …) — the journal's action identity, independent of commands. */
|
|
55
|
-
const ACTION_ID_PREFIX = 'a';
|
|
56
|
-
/**
|
|
57
|
-
* How many consecutive unanswered commands make a tab unresponsive. One is a page that was merely
|
|
58
|
-
* busy for its budget; two in a row with no reply between them is a wedge, and the cost of being
|
|
59
|
-
* wrong about that is one extra browser tab.
|
|
60
|
-
*/
|
|
61
|
-
const UNRESPONSIVE_AFTER_TIMEOUTS = 2;
|
|
62
|
-
/** ws readyState for an OPEN socket — guard fire-and-forget pushes against a closing tab. */
|
|
63
|
-
const WS_OPEN = 1;
|
|
64
|
-
/**
|
|
65
|
-
* One connected browser tab. Owns its socket, a ring buffer of observations, and the
|
|
66
|
-
* in-flight command map. `clock` is injected so elapsed-time logic stays testable.
|
|
67
|
-
*/
|
|
68
|
-
export class Session {
|
|
69
|
-
id;
|
|
70
|
-
/** Stable build-stamped project identity; undefined for v1.0 SDKs that omit it. */
|
|
71
|
-
projectId;
|
|
72
|
-
/**
|
|
73
|
-
* The `.reticle` directory this session's evidence belongs in — impact counters AND capsules.
|
|
74
|
-
*
|
|
75
|
-
* Stamped once when the session is created, from the project it declared in HELLO, rather than
|
|
76
|
-
* resolved per call: the answer cannot change while the tab is connected, and resolving it once
|
|
77
|
-
* means every counter that fires for this session agrees about where it goes.
|
|
78
|
-
*
|
|
79
|
-
* Undefined when nothing could name a project — the caller then falls back to the daemon's own
|
|
80
|
-
* root, which is what every counter did unconditionally before this existed.
|
|
81
|
-
*/
|
|
82
|
-
artifactRoot;
|
|
83
|
-
url;
|
|
84
|
-
title;
|
|
85
|
-
adapters;
|
|
86
|
-
hasCapabilities;
|
|
87
|
-
/** Set when the page's SDK version differs from the daemon's (see version-skew.ts). */
|
|
88
|
-
versionSkew;
|
|
89
|
-
/** SDK version from HELLO; kept so a remedy can check it applies — see body-capture-remedy.ts. */
|
|
90
|
-
sdkVersion;
|
|
91
|
-
/** Whether the page records network bodies; undefined on an SDK too old to say. See HELLO. */
|
|
92
|
-
captureBodies;
|
|
93
|
-
/**
|
|
94
|
-
* Whether this build stamps `data-reticle-source`, when the build plugin said. See HELLO.
|
|
95
|
-
* `false` separates "the project turned it off" from "nothing provides one"; undefined is unknown.
|
|
96
|
-
*/
|
|
97
|
-
sourceMapping;
|
|
98
|
-
/**
|
|
99
|
-
* Extra key names this app declared sensitive via `connect({ redact: { keys } })`. Held so the
|
|
100
|
-
* DRIVEN path can redact them too — a request body the daemon captures from the network stack
|
|
101
|
-
* never passes through the SDK, so nothing else would.
|
|
102
|
-
*/
|
|
103
|
-
redactKeys;
|
|
104
|
-
#socket;
|
|
105
|
-
#clock;
|
|
106
|
-
#startedAt;
|
|
107
|
-
#buffer = new RingBuffer();
|
|
108
|
-
#pending = new PendingCommands();
|
|
109
|
-
#listeners = new Set();
|
|
110
|
-
#disconnectListeners = new Set();
|
|
111
|
-
#actionSeq = 0;
|
|
112
|
-
/** Consecutive missed command budgets — free liveness evidence. Any reply resets it. */
|
|
113
|
-
#unansweredCommands = 0;
|
|
114
|
-
#lastSeenAt;
|
|
115
|
-
#hidden = false;
|
|
116
|
-
/** Which shell the page reported (PAGE_HEALTH). Undefined until the first report lands. */
|
|
117
|
-
#runtime;
|
|
118
|
-
#engine;
|
|
119
|
-
/** Which browser the page said it is (chrome/edge/arc/…). Undefined on an SDK too old to report one. */
|
|
120
|
-
#brand;
|
|
121
|
-
#focused = true;
|
|
122
|
-
/** Liveness: wall-clock of the last AGENT command (distinct from browser chatter / lastSeen). */
|
|
123
|
-
#lastAgentActivityAt;
|
|
124
|
-
/** Server-side mirror of the agent-tuned idle window, so the reaper honors reticle_session. */
|
|
125
|
-
#idleEndMs = SESSION_LIFECYCLE.IDLE_END_MS;
|
|
126
|
-
/** True when the reaper/disconnect ended this session — such an end is revivable; explicit ends are not. */
|
|
127
|
-
#autoEnded = false;
|
|
128
|
-
#live = new LiveControl();
|
|
129
|
-
/** Human review marks: mistakes the human pinned to elements, for the agent to drain and fix. */
|
|
130
|
-
#review = new ReviewStore();
|
|
131
|
-
/** Whether the session_lease has already been returned (fire-once per session). */
|
|
132
|
-
#firstCommandDone = false;
|
|
133
|
-
/** Durable causal-journal recorder; undefined when journaling is off (opt-out or not yet attached). */
|
|
134
|
-
#journal;
|
|
135
|
-
#activeActionId; // action window, held independently of the journal
|
|
136
|
-
/** Read side of the journal, for queries that must survive ring-buffer eviction. */
|
|
137
|
-
#journalReader;
|
|
138
|
-
/** What this session has learned by watching its own stream: ambient churn + blind-spot levels. */
|
|
139
|
-
#observed = new ObservedState();
|
|
140
|
-
/** Set when a required application precondition (e.g. seedStorage) was not established. */
|
|
141
|
-
#preconditionFailure;
|
|
142
|
-
/**
|
|
143
|
-
* Which document is on screen right now — the one the most recent stamped event was observed under.
|
|
144
|
-
* DERIVED, never announced: the SDK stamps it on events. An unstamped event never clears this.
|
|
145
|
-
*/
|
|
146
|
-
#documentId;
|
|
147
|
-
/**
|
|
148
|
-
* The edit epoch of the most recent stamped event. DERIVED for the same reason `#documentId` is.
|
|
149
|
-
* A hot update advances it inside the same document. An unstamped event never clears it.
|
|
150
|
-
*/
|
|
151
|
-
#editEpoch;
|
|
152
|
-
constructor(hello, socket, clock) {
|
|
153
|
-
this.id = hello.sessionId;
|
|
154
|
-
this.projectId = hello.projectId;
|
|
155
|
-
this.url = hello.url;
|
|
156
|
-
this.title = hello.title;
|
|
157
|
-
this.adapters = hello.adapters;
|
|
158
|
-
this.hasCapabilities = hello.hasCapabilities ?? false;
|
|
159
|
-
this.sourceMapping = hello.sourceMapping;
|
|
160
|
-
this.redactKeys = hello.redactKeys ?? [];
|
|
161
|
-
this.#socket = socket;
|
|
162
|
-
this.#clock = clock;
|
|
163
|
-
this.#startedAt = clock();
|
|
164
|
-
this.#lastSeenAt = clock();
|
|
165
|
-
this.#lastAgentActivityAt = clock();
|
|
166
|
-
}
|
|
167
|
-
/** Milliseconds since this session connected — the authoritative buffer clock. */
|
|
168
|
-
elapsed() {
|
|
169
|
-
return this.#clock() - this.#startedAt;
|
|
170
|
-
}
|
|
171
|
-
/** Mark that the SDK was just heard from. Called on every inbound message. */
|
|
172
|
-
touch() {
|
|
173
|
-
this.#lastSeenAt = this.#clock();
|
|
174
|
-
}
|
|
175
|
-
/** ms since the SDK last reported anything (distinct from elapsed-since-connect). */
|
|
176
|
-
lastSeenMs() {
|
|
177
|
-
return this.#clock() - this.#lastSeenAt;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Record the latest page visibility/focus state from a PAGE_HEALTH event.
|
|
181
|
-
*
|
|
182
|
-
* `runtime` is optional so an older SDK (which does not report it) still works — it simply loses
|
|
183
|
-
* the desktop-specific timeout diagnosis rather than breaking.
|
|
184
|
-
*/
|
|
185
|
-
applyHealth(hidden, focused, runtime, engine, brand) {
|
|
186
|
-
this.#hidden = hidden;
|
|
187
|
-
this.#focused = focused;
|
|
188
|
-
if (AppRuntime.ELECTRON === runtime ||
|
|
189
|
-
AppRuntime.TAURI === runtime ||
|
|
190
|
-
AppRuntime.WEB === runtime) {
|
|
191
|
-
this.#runtime = runtime;
|
|
192
|
-
}
|
|
193
|
-
if (engine !== undefined)
|
|
194
|
-
this.#engine = engine;
|
|
195
|
-
if (brand !== undefined)
|
|
196
|
-
this.#brand = brand;
|
|
197
|
-
}
|
|
198
|
-
/** The shell (web/electron/tauri) and rendering engine the SDK reported. Undefined on an older SDK. */
|
|
199
|
-
get runtime() {
|
|
200
|
-
return this.#runtime;
|
|
201
|
-
}
|
|
202
|
-
get engine() {
|
|
203
|
-
return this.#engine;
|
|
204
|
-
}
|
|
205
|
-
/** The browser brand the SDK reported. Absent (never guessed) when the page did not say. */
|
|
206
|
-
get brand() {
|
|
207
|
-
return this.#brand;
|
|
208
|
-
}
|
|
209
|
-
/** Throttled if the tab is hidden OR we have not heard from it recently. */
|
|
210
|
-
throttled() {
|
|
211
|
-
return this.#hidden || this.lastSeenMs() > SESSION_HEALTH.STALE_THRESHOLD_MS;
|
|
212
|
-
}
|
|
213
|
-
/** The attachable health block — single source of truth for the tools. */
|
|
214
|
-
health() {
|
|
215
|
-
// From event t=0, not a cursor: a wedge that began before the current action is exactly the
|
|
216
|
-
// case a per-window reading cannot see, and is the one both reporters hit.
|
|
217
|
-
const stuck = pendingNavigationMs(this.eventsSince(0), this.elapsed());
|
|
218
|
-
const base = {
|
|
219
|
-
lastSeenMs: this.lastSeenMs(),
|
|
220
|
-
throttled: this.throttled(),
|
|
221
|
-
focused: this.#focused,
|
|
222
|
-
...(stuck === undefined ? {} : { pendingNavigationMs: stuck }),
|
|
223
|
-
// Carried onto every act/assert result, not just reticle_sessions: skew drops actions
|
|
224
|
-
// SILENTLY, and the fields it contradicts are on the act verdict.
|
|
225
|
-
...(this.versionSkew === undefined ? {} : { versionSkew: this.versionSkew }),
|
|
226
|
-
};
|
|
227
|
-
// attach the escape-hatch hint only when un-scriptable (keeps field absent otherwise).
|
|
228
|
-
const recommendation = buildSessionRecommendation({
|
|
229
|
-
hidden: this.#hidden,
|
|
230
|
-
throttled: base.throttled,
|
|
231
|
-
focused: base.focused,
|
|
232
|
-
// Without this the desktop branch is unreachable in production: every unit test would pass and
|
|
233
|
-
// every real Electron window would still be told to open a browser.
|
|
234
|
-
runtime: this.#runtime,
|
|
235
|
-
});
|
|
236
|
-
return recommendation === undefined ? base : { ...base, recommendation };
|
|
237
|
-
}
|
|
238
|
-
info() {
|
|
239
|
-
return buildSessionInfo({
|
|
240
|
-
id: this.id,
|
|
241
|
-
url: this.url,
|
|
242
|
-
projectId: this.projectId,
|
|
243
|
-
title: this.title,
|
|
244
|
-
adapters: this.adapters,
|
|
245
|
-
hasCapabilities: this.hasCapabilities,
|
|
246
|
-
runtime: this.#runtime,
|
|
247
|
-
versionSkew: this.versionSkew,
|
|
248
|
-
hidden: this.#hidden,
|
|
249
|
-
health: () => this.health(),
|
|
250
|
-
staleMs: () => this.staleMs(),
|
|
251
|
-
pendingMarkCount: () => this.#review.pendingCount(),
|
|
252
|
-
unresponsive: () => this.unresponsive(),
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Attached but not answering. A tab can be `connected` with a fresh `lastSeenMs` and still answer
|
|
257
|
-
* nothing: `lastSeenMs` measures the events the SDK streams, not the commands it replies to. Reuse
|
|
258
|
-
* and auto-selection read that as health, so `reticle open` handed a wedged tab back forever and
|
|
259
|
-
* `reticle_session{action:"end"}` — a flag on the record, not on the page — could not help.
|
|
260
|
-
*/
|
|
261
|
-
unresponsive() {
|
|
262
|
-
return this.#unansweredCommands >= UNRESPONSIVE_AFTER_TIMEOUTS;
|
|
263
|
-
}
|
|
264
|
-
/** Wall-clock age of the session in milliseconds. */
|
|
265
|
-
staleMs() {
|
|
266
|
-
return this.#clock() - this.#startedAt;
|
|
267
|
-
}
|
|
268
|
-
/** The document the most recent stamped event was observed under. See `#documentId`. */
|
|
269
|
-
get currentDocumentId() {
|
|
270
|
-
return this.#documentId;
|
|
271
|
-
}
|
|
272
|
-
/** The edit epoch the most recent stamped event was observed under. See `#editEpoch`. */
|
|
273
|
-
get currentEditEpoch() {
|
|
274
|
-
return this.#editEpoch;
|
|
275
|
-
}
|
|
276
|
-
/** Seed/auth precondition failure reason, if any. */
|
|
277
|
-
setPreconditionFailure(reason) {
|
|
278
|
-
this.#preconditionFailure = reason;
|
|
279
|
-
}
|
|
280
|
-
preconditionFailure() {
|
|
281
|
-
return this.#preconditionFailure;
|
|
282
|
-
}
|
|
283
|
-
/** Re-stamp an incoming event with server-relative time, buffer it, and fan out. */
|
|
284
|
-
pushEvent(event, byteSize) {
|
|
285
|
-
if (event.documentId !== undefined)
|
|
286
|
-
this.#documentId = event.documentId;
|
|
287
|
-
if (event.editEpoch !== undefined)
|
|
288
|
-
this.#editEpoch = event.editEpoch;
|
|
289
|
-
if (event.type === EventType.PAGE_HEALTH) {
|
|
290
|
-
const r = readHealthEvent(event.data);
|
|
291
|
-
this.applyHealth(r.hidden ?? this.#hidden, r.focused ?? this.#focused, r.runtime, r.engine, r.brand);
|
|
292
|
-
}
|
|
293
|
-
// The in-page half of Reticle reporting its own failure — recorded like a tool error
|
|
294
|
-
// (fingerprinted, variables stripped) so a broken observer is as visible as a broken tool.
|
|
295
|
-
if (event.type === EventType.SDK_FAILED) {
|
|
296
|
-
const sdk = parseEventPayload(EventType.SDK_FAILED, event.data);
|
|
297
|
-
if (sdk.success)
|
|
298
|
-
recordSdkFailure(sdk.data);
|
|
299
|
-
}
|
|
300
|
-
if (event.type === EventType.HUMAN_CONTROL) {
|
|
301
|
-
// Narrow unknown at the boundary; an invalid/unknown control is ignored (never thrown).
|
|
302
|
-
const parsed = HumanControlDataSchema.safeParse(event.data);
|
|
303
|
-
if (parsed.success)
|
|
304
|
-
this.applyHumanControl(parsed.data);
|
|
305
|
-
}
|
|
306
|
-
if (event.type === EventType.HUMAN_MARK) {
|
|
307
|
-
// A human pinned a mistake to an element. Narrow at the boundary; an invalid mark is ignored.
|
|
308
|
-
const parsed = HumanMarkDataSchema.safeParse(event.data);
|
|
309
|
-
if (parsed.success) {
|
|
310
|
-
this.#review.add(parsed.data, this.elapsed());
|
|
311
|
-
// The impact record's `marks` field existed and nothing ever wrote it: the report would
|
|
312
|
-
// have shown a permanent zero next to a page covered in pins.
|
|
313
|
-
recordImpact({ marks: 1 }, {}, this.artifactRoot);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
if (event.type === EventType.ROUTE_CHANGE) {
|
|
317
|
-
// Keep the reported URL live across SPA navigation. The SDK already emits route.change on
|
|
318
|
-
// pushState/replaceState/popstate; without this the URL stays frozen at the hello value, and
|
|
319
|
-
// URL-based CDP correlation (real input) silently breaks after the first client-side nav.
|
|
320
|
-
const to = event.data['to'];
|
|
321
|
-
if ('string' === typeof to && to.length > 0)
|
|
322
|
-
this.url = to;
|
|
323
|
-
}
|
|
324
|
-
const t = this.elapsed();
|
|
325
|
-
const stamped = { ...event, t, sessionId: this.id };
|
|
326
|
-
// The recorder attributes the event to the in-flight action (if any) and journals it durably; the
|
|
327
|
-
// returned event carries actionId/attribution so the buffer + all queries see the same causal link.
|
|
328
|
-
// Falls back to the session's own window so attribution survives the journal being switched off.
|
|
329
|
-
const seen = this.#journal?.observe(stamped) ?? stamped;
|
|
330
|
-
const fallback = this.#activeActionId;
|
|
331
|
-
const attributed = seen.actionId === undefined && fallback !== undefined
|
|
332
|
-
? { ...seen, actionId: fallback }
|
|
333
|
-
: seen;
|
|
334
|
-
this.#observed.observe(attributed);
|
|
335
|
-
this.#buffer.push(attributed, t, byteSize);
|
|
336
|
-
// Each subscriber is independent, and this runs inside the websocket's `message` handler — a
|
|
337
|
-
// NON-async callback, so a sync throw here escapes every try/catch the tool call is wrapped in
|
|
338
|
-
// and becomes an uncaughtException, which the daemon answers by exiting. One observer's bug must
|
|
339
|
-
// not cost the fleet its daemon. Same rule the session-ready fan-out already follows.
|
|
340
|
-
for (const listener of this.#listeners) {
|
|
341
|
-
try {
|
|
342
|
-
listener(attributed);
|
|
343
|
-
}
|
|
344
|
-
catch {
|
|
345
|
-
/* an event observer must never break the session it observes */
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
// Passthroughs to ObservedState, which owns the per-session facts that must SURVIVE buffer
|
|
350
|
-
// eviction: refs the agent drove, and what the layer could not see. See observed-state.ts.
|
|
351
|
-
recordActedRef(ref) {
|
|
352
|
-
this.#observed.recordActedRef(ref);
|
|
353
|
-
}
|
|
354
|
-
actedLabels() {
|
|
355
|
-
return this.#observed.actedLabels();
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Derive the snapshot-shaped label (`button "Deploy"`) from an act reply and remember it.
|
|
359
|
-
*
|
|
360
|
-
* Same shape the interactive snapshot emits, so coverage can match a control the agent drove
|
|
361
|
-
* against the same control after a re-render gave it a different ref.
|
|
362
|
-
*/
|
|
363
|
-
recordActedLabelFrom(result) {
|
|
364
|
-
const payload = result.result;
|
|
365
|
-
if (typeof payload !== 'object' || null === payload)
|
|
366
|
-
return;
|
|
367
|
-
const record = payload;
|
|
368
|
-
// The TESTID first: it is the strongest identity a control has and it survives any re-render.
|
|
369
|
-
// Coverage previously matched only on `role "name"`, so a control with a testid but no accessible
|
|
370
|
-
// name — or on a stack where the act reply carried neither — was unrecognisable after a
|
|
371
|
-
// re-render, and coverage read `exercised: 0` however much work had been done.
|
|
372
|
-
const testid = record['testid'];
|
|
373
|
-
if ('string' === typeof testid && testid.length > 0)
|
|
374
|
-
this.#observed.recordActedLabel(testid);
|
|
375
|
-
const role = record['role'];
|
|
376
|
-
const name = record['name'];
|
|
377
|
-
if (typeof role !== 'string' || typeof name !== 'string')
|
|
378
|
-
return;
|
|
379
|
-
if (0 === role.length || 0 === name.length)
|
|
380
|
-
return;
|
|
381
|
-
this.#observed.recordActedLabel(`${role} "${name}"`);
|
|
382
|
-
}
|
|
383
|
-
actedRefs() {
|
|
384
|
-
return this.#observed.actedRefs();
|
|
385
|
-
}
|
|
386
|
-
noteRateLimited(dropped) {
|
|
387
|
-
this.#observed.noteRateLimited(dropped);
|
|
388
|
-
}
|
|
389
|
-
blindSpots() {
|
|
390
|
-
return this.#observed.blindSpots();
|
|
391
|
-
}
|
|
392
|
-
/** Learned ambient-churn counts (PredicateSession hook the settle oracle reads). */
|
|
393
|
-
ambientCounts() {
|
|
394
|
-
return this.#observed.ambientCounts();
|
|
395
|
-
}
|
|
396
|
-
/** Only what THIS session observed — what teardown accumulates onto the persisted map. */
|
|
397
|
-
ownAmbientCounts() {
|
|
398
|
-
return this.#observed.ownAmbientCounts();
|
|
399
|
-
}
|
|
400
|
-
/** Seed the ambient map from the persisted per-app `.reticle/ambient.json` (sharpens across sessions). */
|
|
401
|
-
seedAmbient(counts) {
|
|
402
|
-
this.#observed.seedAmbient(counts);
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Attach the durable causal-journal recorder (off by default; wired at session creation). The optional
|
|
406
|
-
* reader is the query fall-through source — pass it to make `queryEvents` survive buffer eviction.
|
|
407
|
-
*/
|
|
408
|
-
setJournal(recorder, reader) {
|
|
409
|
-
this.#journal = recorder;
|
|
410
|
-
this.#journalReader = reader;
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* Journal-backed event query: the ring buffer's events, merged with the durable journal **only when
|
|
414
|
-
* the buffer has evicted** (so a healthy session pays no disk cost), then filtered by since/until/
|
|
415
|
-
* actionId. This is how "what did action N cause" is answered after the buffer has dropped the
|
|
416
|
-
* evidence — the substrate's whole point. The sync `eventsSince`/`window` stay for the hot path.
|
|
417
|
-
*/
|
|
418
|
-
async queryEvents(options) {
|
|
419
|
-
if (this.#journalReader !== undefined && this.#buffer.bufferHealth().dropped > 0) {
|
|
420
|
-
const durable = await this.#journalReader.readEvents();
|
|
421
|
-
return filterEvents(mergeEventsBySeq(durable, this.#buffer.since(0)), options);
|
|
422
|
-
}
|
|
423
|
-
return filterEvents(this.#buffer.since(options.since ?? 0), options);
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Open an action-attribution window: events observed until finishAction attribute to the returned
|
|
427
|
-
* action id. Ids are minted independently of command correlation ids so the journal is self-contained.
|
|
428
|
-
*/
|
|
429
|
-
beginAction(tool, args) {
|
|
430
|
-
const actionId = this.#mintActionId();
|
|
431
|
-
// Held here, not only in the journal: with the journal off every event was unattributed, and
|
|
432
|
-
// pushEvent reads that as ambient churn the settle oracle then ignores. See action-attribution test.
|
|
433
|
-
this.#activeActionId = actionId;
|
|
434
|
-
this.#journal?.beginAction(actionId, tool, args);
|
|
435
|
-
return actionId;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Record one action WITHOUT opening an attribution window — for a tool that returns a verdict but
|
|
439
|
-
* drives nothing, so no event it observes was caused by it. See `JournalRecorder.recordAction`.
|
|
440
|
-
*/
|
|
441
|
-
recordAction(tool, args, effect) {
|
|
442
|
-
const actionId = this.#mintActionId();
|
|
443
|
-
this.#journal?.recordAction(actionId, tool, args, effect);
|
|
444
|
-
return actionId;
|
|
445
|
-
}
|
|
446
|
-
#mintActionId() {
|
|
447
|
-
this.#actionSeq += 1;
|
|
448
|
-
return `${ACTION_ID_PREFIX}${String(this.#actionSeq)}`;
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* How many actions this session has dispatched.
|
|
452
|
-
*
|
|
453
|
-
* The counter that mints journal action ids, not a second one — so it equals the journal's own
|
|
454
|
-
* length, and `reticle_context`'s `step`, whenever this session journals at all.
|
|
455
|
-
*/
|
|
456
|
-
get actionCount() {
|
|
457
|
-
return this.#actionSeq;
|
|
458
|
-
}
|
|
459
|
-
/** Close the active action window, persisting its action record with the settle outcome. */
|
|
460
|
-
finishAction(effect, settled, settledInMs) {
|
|
461
|
-
this.#activeActionId = undefined;
|
|
462
|
-
this.#journal?.finishAction(effect, settled, settledInMs);
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* The durable action ledger for this session — the ledger the run context is folded out of.
|
|
466
|
-
*
|
|
467
|
-
* `[]` when nothing journals this session (journaling disabled, or an id that is not a safe path
|
|
468
|
-
* segment). An absent ledger reads as an empty run, never as a missing one: the fold simply has
|
|
469
|
-
* nothing to say, which is the honest answer.
|
|
470
|
-
*/
|
|
471
|
-
async readJournalActions() {
|
|
472
|
-
return (await this.#journalReader?.readActions?.()) ?? [];
|
|
473
|
-
}
|
|
474
|
-
/** Flush any buffered journal events to disk (call on session end). */
|
|
475
|
-
async flushJournal() {
|
|
476
|
-
await this.#journal?.flush();
|
|
477
|
-
}
|
|
478
|
-
eventsSince(cursor) {
|
|
479
|
-
return this.#buffer.since(cursor);
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* What the most recent act was: its cursor, its source, and what it changed inside its target.
|
|
483
|
-
*
|
|
484
|
-
* Exposed as the object rather than six pass-through methods — act writes to it and observe reads
|
|
485
|
-
* from it, and the split between those two tool calls is the whole reason it exists.
|
|
486
|
-
*/
|
|
487
|
-
lastAct = new LastAct();
|
|
488
|
-
/**
|
|
489
|
-
* What this app still cannot tell Reticle, as of the most recent verdict.
|
|
490
|
-
*
|
|
491
|
-
* Lives on the session because that is the scope the question belongs to: "am I done with this
|
|
492
|
-
* app" is a session question, and a gap closed halfway through must not follow the agent to the
|
|
493
|
-
* end of it.
|
|
494
|
-
*/
|
|
495
|
-
gaps = new GapLedger();
|
|
496
|
-
/**
|
|
497
|
-
* The read-only calls the journal does not keep, so "was `reticle_context` ever called" has
|
|
498
|
-
* something to fold. See honesty/feature-capture.ts — it is the only state that instrument adds.
|
|
499
|
-
*/
|
|
500
|
-
capture = new CaptureLedger();
|
|
501
|
-
// ── Server-authoritative liveness (immune to browser-tab throttling) ──────────────
|
|
502
|
-
/**
|
|
503
|
-
* Stamp the wall-clock of the latest AGENT command (called whenever a tool resolves this session).
|
|
504
|
-
* If the reaper had auto-ended the session, a fresh command means the agent is alive again, so the
|
|
505
|
-
* session is REVIVED to ACTIVE. An EXPLICIT end (human/agent reticle_end_session) is terminal and is
|
|
506
|
-
* never revived here.
|
|
507
|
-
*/
|
|
508
|
-
markAgentActivity() {
|
|
509
|
-
this.#lastAgentActivityAt = this.#clock();
|
|
510
|
-
if (this.#live.isEnded() && this.#autoEnded) {
|
|
511
|
-
this.#autoEnded = false;
|
|
512
|
-
this.setState(SessionState.ACTIVE);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
/** ms since the agent last issued a command against this session (the reaper's idle signal). */
|
|
516
|
-
agentIdleMs() {
|
|
517
|
-
return this.#clock() - this.#lastAgentActivityAt;
|
|
518
|
-
}
|
|
519
|
-
/** The agent-idle window after which the reaper ends this session. */
|
|
520
|
-
idleEndMs() {
|
|
521
|
-
return this.#idleEndMs;
|
|
522
|
-
}
|
|
523
|
-
/** Tune the idle window (reticle_session). Floored so an agent can't disable the safety net. */
|
|
524
|
-
setIdleEndMs(ms) {
|
|
525
|
-
this.#idleEndMs = Math.max(SESSION_LIFECYCLE.IDLE_END_MIN_MS, Math.floor(ms));
|
|
526
|
-
}
|
|
527
|
-
/**
|
|
528
|
-
* Reaper/disconnect end: terminal like a normal end (pushes PRESENTER ended to the browser, which a
|
|
529
|
-
* throttled tab still receives) but flagged auto-ended so a returning agent revives it. No-op if
|
|
530
|
-
* already ended.
|
|
531
|
-
*/
|
|
532
|
-
autoEnd(text, tone = PresenterTone.WARN) {
|
|
533
|
-
if (this.#live.isEnded())
|
|
534
|
-
return;
|
|
535
|
-
this.#autoEnded = true;
|
|
536
|
-
this.setState(SessionState.ENDED, text, tone);
|
|
537
|
-
}
|
|
538
|
-
eventsInWindow(windowMs) {
|
|
539
|
-
return this.#buffer.window(windowMs, this.elapsed());
|
|
540
|
-
}
|
|
541
|
-
/** Buffer honesty: events currently held + cumulative evictions since connect (for false-negative detection). */
|
|
542
|
-
bufferHealth() {
|
|
543
|
-
return this.#buffer.bufferHealth();
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* Did the buffer lose scarce evidence from a window opened at `cursor`? The input to whether a
|
|
547
|
-
* verdict's capture was clean — see `RingBuffer.lostSince`, and never the raw drop counter, which
|
|
548
|
-
* moves for the age and churn evictions that every live page produces continuously.
|
|
549
|
-
*/
|
|
550
|
-
lostSince(cursor) {
|
|
551
|
-
return this.#buffer.lostSince(cursor);
|
|
552
|
-
}
|
|
553
|
-
onEvent(listener) {
|
|
554
|
-
this.#listeners.add(listener);
|
|
555
|
-
return () => this.#listeners.delete(listener);
|
|
556
|
-
}
|
|
557
|
-
onDisconnect(listener) {
|
|
558
|
-
this.#disconnectListeners.add(listener);
|
|
559
|
-
return () => this.#disconnectListeners.delete(listener);
|
|
560
|
-
}
|
|
561
|
-
/** Send a command to the browser and await its reply (or time out). */
|
|
562
|
-
command(name, args = {}, timeoutMs = DEFAULT_COMMAND_TIMEOUT_MS) {
|
|
563
|
-
// Recorded HERE rather than at the tool call sites: this is the one place every driven action
|
|
564
|
-
// passes through, so act_sequence and flow replay count too. Doing it per-tool missed both, and
|
|
565
|
-
// an under-counted "exercised" reports worse coverage than reality — the safe direction, but
|
|
566
|
-
// still wrong, and it made the number depend on which tool the agent happened to use.
|
|
567
|
-
if (name === ReticleCommand.ACT) {
|
|
568
|
-
const ref = args['ref'];
|
|
569
|
-
if ('string' === typeof ref)
|
|
570
|
-
this.recordActedRef(ref);
|
|
571
|
-
}
|
|
572
|
-
// The page already re-dialled under this same id. Nothing has been sent yet, so handing the
|
|
573
|
-
// command to the live connection cannot perform anything twice — it is the call the agent would
|
|
574
|
-
// have made itself after a `reticle_sessions` round trip, minus the round trip.
|
|
575
|
-
const successor = this.#liveSuccessor();
|
|
576
|
-
if (successor !== undefined)
|
|
577
|
-
return successor.command(name, args, timeoutMs);
|
|
578
|
-
const id = this.#pending.nextId(COMMAND_ID_PREFIX);
|
|
579
|
-
const payload = JSON.stringify({
|
|
580
|
-
kind: MessageKind.COMMAND,
|
|
581
|
-
id,
|
|
582
|
-
sessionId: this.id,
|
|
583
|
-
name,
|
|
584
|
-
args,
|
|
585
|
-
});
|
|
586
|
-
// The timeout message is built LAZILY: health can change while a command is in flight, and the
|
|
587
|
-
// diagnosis should describe the page as it was when the command actually gave up.
|
|
588
|
-
const awaited = this.#pending.track(id, timeoutMs, () => commandTimeoutMessage(name, timeoutMs, {
|
|
589
|
-
url: this.url,
|
|
590
|
-
hidden: this.#hidden,
|
|
591
|
-
lastSeenMs: this.lastSeenMs(),
|
|
592
|
-
...(this.#runtime === undefined ? {} : { runtime: this.#runtime }),
|
|
593
|
-
}));
|
|
594
|
-
this.#socket.send(payload);
|
|
595
|
-
const sentAt = Date.now(); // browser-leg timing; see recordBrowserLatency for why it is split out
|
|
596
|
-
// Traced because this is the boundary that decides whether a slow tool call is OUR overhead or
|
|
597
|
-
// the app taking its time — the split telemetry reports in aggregate, made visible per call.
|
|
598
|
-
return span('browser.command', { command: name, sessionId: this.id }, () => awaited)
|
|
599
|
-
.then((result) => {
|
|
600
|
-
// Answered — whatever the reply said, the command channel is alive.
|
|
601
|
-
this.#unansweredCommands = 0;
|
|
602
|
-
// The label is only knowable from the REPLY — the request carries a ref, and a ref dies with
|
|
603
|
-
// the next re-render. Recorded here so coverage survives frameworks that replace nodes.
|
|
604
|
-
if (name === ReticleCommand.ACT)
|
|
605
|
-
this.recordActedLabelFrom(result);
|
|
606
|
-
return result;
|
|
607
|
-
})
|
|
608
|
-
.finally(() => recordBrowserLatency(Date.now() - sentAt))
|
|
609
|
-
.catch((error) => {
|
|
610
|
-
// The replacement landed while this command was on the wire, which is the reported case:
|
|
611
|
-
// `reticle_navigate` reloads the page, the reload sends a fresh HELLO carrying the same id,
|
|
612
|
-
// and the `reticle_snapshot` already in flight is rejected by the displaced session.
|
|
613
|
-
// A TIMEOUT is not a replacement. The catch fired on any rejection, so a command that had
|
|
614
|
-
// simply not been answered in budget was read as "you were replaced, ask again" — and
|
|
615
|
-
// against a page re-dialling in a loop that turned one read into hundreds of commands on the
|
|
616
|
-
// wire, minutes of wall clock, and an answer still quoting the budget it had blown.
|
|
617
|
-
if (error instanceof CommandTimeoutError)
|
|
618
|
-
this.#unansweredCommands += 1;
|
|
619
|
-
const next = error instanceof CommandTimeoutError ? undefined : this.#liveSuccessor();
|
|
620
|
-
if (next === undefined || !REBINDABLE_COMMANDS.has(name))
|
|
621
|
-
throw error;
|
|
622
|
-
// What is LEFT of the caller's budget, not a fresh copy of it. Re-issuing with the original
|
|
623
|
-
// timeout means a caller who granted 8s can wait 16, and across a chain of replacements the
|
|
624
|
-
// total is unbounded — a wait nobody asked for, on the path that exists to save a round trip.
|
|
625
|
-
// A budget already spent means there is nothing left to retry into, so the error stands.
|
|
626
|
-
const remaining = timeoutMs - (Date.now() - sentAt);
|
|
627
|
-
if (remaining <= 0)
|
|
628
|
-
throw error;
|
|
629
|
-
return next.command(name, args, remaining);
|
|
630
|
-
});
|
|
631
|
-
}
|
|
632
|
-
handleResult(result) {
|
|
633
|
-
// Any reply at all clears the wedge, including one for a command that already timed out: it is
|
|
634
|
-
// still proof that bridge→page→bridge works right now, which is the only thing being claimed.
|
|
635
|
-
this.#unansweredCommands = 0;
|
|
636
|
-
this.#pending.settle(result);
|
|
637
|
-
}
|
|
638
|
-
/** Reject everything still in flight — used on disconnect. */
|
|
639
|
-
rejectAll(reason, replaced = false) {
|
|
640
|
-
this.#pending.rejectAll(reason, replaced);
|
|
641
|
-
for (const listener of this.#disconnectListeners)
|
|
642
|
-
listener();
|
|
643
|
-
this.#disconnectListeners.clear();
|
|
644
|
-
}
|
|
645
|
-
/**
|
|
646
|
-
* The connection that took this session's id over, once one has.
|
|
647
|
-
*
|
|
648
|
-
* Set by the bridge at the moment it displaces this session, so the two facts a replaced handle
|
|
649
|
-
* needs — that it was replaced, and by whom — arrive together. Without it, every tool call holding
|
|
650
|
-
* this handle could only report "session replaced by a newer connection claiming the same id", and
|
|
651
|
-
* the caller's only recovery was `reticle_sessions` plus a retry: two round trips to rediscover an
|
|
652
|
-
* id the daemon was already holding, and which had not even changed.
|
|
653
|
-
*/
|
|
654
|
-
#successor;
|
|
655
|
-
succeededBy(next) {
|
|
656
|
-
// A session is never its own replacement; guarding here keeps `command` from recursing forever
|
|
657
|
-
// if a registry ever re-adds the same object.
|
|
658
|
-
if (next !== this)
|
|
659
|
-
this.#successor = next;
|
|
660
|
-
}
|
|
661
|
-
/**
|
|
662
|
-
* The replacement, but only while it can actually answer.
|
|
663
|
-
*
|
|
664
|
-
* A successor is recorded once and never cleared, so without this a session that was replaced an
|
|
665
|
-
* hour ago keeps handing commands to a socket that has since closed — and the caller pays the full
|
|
666
|
-
* timeout to learn it, turning an instant "session replaced" into a wait. The point of delegating
|
|
667
|
-
* was to save the caller a round trip; delegating to a dead socket costs them more than the error
|
|
668
|
-
* did.
|
|
669
|
-
*/
|
|
670
|
-
#liveSuccessor() {
|
|
671
|
-
// Walked, not just read one hop. Two replacements in quick succession — a page that reloads
|
|
672
|
-
// twice — leave a CHAIN, and the handle the caller holds points at a session that is itself
|
|
673
|
-
// already displaced. Stopping at the first dead link fails safe and also fails: the open page is
|
|
674
|
-
// one hop further on, and the caller gets back exactly the error this exists to remove.
|
|
675
|
-
//
|
|
676
|
-
// Bounded, because `succeededBy` refuses self-succession but nothing prevents a cycle, and an
|
|
677
|
-
// unbounded walk over one is a hang — which is worse than the error it was trying to avoid.
|
|
678
|
-
let next = this.#successor;
|
|
679
|
-
for (let hops = 0; next !== undefined && hops < MAX_SUCCESSOR_HOPS; hops += 1) {
|
|
680
|
-
if (next.#socket.readyState === WS_OPEN)
|
|
681
|
-
return next;
|
|
682
|
-
next = next.#successor;
|
|
683
|
-
}
|
|
684
|
-
return undefined;
|
|
685
|
-
}
|
|
686
|
-
/** End this transport without letting a stale socket remove its replacement session. */
|
|
687
|
-
disconnect(reason, replaced = false) {
|
|
688
|
-
// "Longest run" means the longest SESSION, and it used to be fed a single tool call's duration
|
|
689
|
-
// - so the report's superlative was a number in milliseconds that never grew past a click.
|
|
690
|
-
recordImpact({}, { runMs: this.elapsed() }, this.artifactRoot);
|
|
691
|
-
this.rejectAll(reason, replaced);
|
|
692
|
-
try {
|
|
693
|
-
this.#socket.close(1008, reason);
|
|
694
|
-
}
|
|
695
|
-
catch {
|
|
696
|
-
// A fake or already-closed socket needs no further cleanup.
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
// ── Live-control: state machine + human→agent inbox (server-owned) ───────────────
|
|
700
|
-
getState() {
|
|
701
|
-
return this.#live.state();
|
|
702
|
-
}
|
|
703
|
-
isPaused() {
|
|
704
|
-
return this.#live.isPaused();
|
|
705
|
-
}
|
|
706
|
-
isEnded() {
|
|
707
|
-
return this.#live.isEnded();
|
|
708
|
-
}
|
|
709
|
-
/**
|
|
710
|
-
* Set the lifecycle state and echo it to the panel in ONE PRESENTER push. The SOLE pusher of
|
|
711
|
-
* PRESENTER for a transition. Optional `text` rides the same push (e.g. an end-of-session
|
|
712
|
-
* summary) so a transition never emits two PRESENTER commands.
|
|
713
|
-
*/
|
|
714
|
-
setState(next, text, tone) {
|
|
715
|
-
this.#live.setState(next);
|
|
716
|
-
this.pushPresenter(next, text, tone);
|
|
717
|
-
}
|
|
718
|
-
/** Push a human note onto the inbox (see LiveControl). */
|
|
719
|
-
pushMessage(text) {
|
|
720
|
-
this.#live.push(text, this.elapsed());
|
|
721
|
-
}
|
|
722
|
-
/** Queued human notes, cleared as they are read (delivered-once). */
|
|
723
|
-
drainInbox() {
|
|
724
|
-
return this.#live.drain();
|
|
725
|
-
}
|
|
726
|
-
/** Diagnostic read of the inbox depth (does not clear). */
|
|
727
|
-
inboxSize() {
|
|
728
|
-
return this.#live.size();
|
|
729
|
-
}
|
|
730
|
-
/** Everything the human has said this session, delivered or not. Never clears. */
|
|
731
|
-
inboxHistory() {
|
|
732
|
-
return this.#live.history();
|
|
733
|
-
}
|
|
734
|
-
// ── Human review marks: the "annotate the bug where you see it" inbox (server-owned) ──────────
|
|
735
|
-
/** Human marks still awaiting a fix (oldest first). Reading does not consume — resolveMark does. */
|
|
736
|
-
pendingMarks() {
|
|
737
|
-
return this.#review.pending();
|
|
738
|
-
}
|
|
739
|
-
/** Full mark history (pending + resolved), oldest first. */
|
|
740
|
-
allMarks() {
|
|
741
|
-
return this.#review.all();
|
|
742
|
-
}
|
|
743
|
-
/** Count of pending marks — surfaced as the panel badge / a session-health hint. */
|
|
744
|
-
pendingMarkCount() {
|
|
745
|
-
return this.#review.pendingCount();
|
|
746
|
-
}
|
|
747
|
-
/** Retire a mark the agent fixed. True on a real pending → resolved transition; false otherwise. */
|
|
748
|
-
resolveMark(id) {
|
|
749
|
-
return this.#review.resolve(id);
|
|
750
|
-
}
|
|
751
|
-
/**
|
|
752
|
-
* Apply a narrowed human control. LiveControl decides the transition; this applies it, so a real
|
|
753
|
-
* change pushes exactly one PRESENTER command and a no-op pushes none.
|
|
754
|
-
*/
|
|
755
|
-
applyHumanControl(data) {
|
|
756
|
-
const next = this.#live.nextStateFor(data);
|
|
757
|
-
if (next !== undefined)
|
|
758
|
-
this.setState(next);
|
|
759
|
-
if (data.kind === HumanControlKind.MESSAGE && data.text !== undefined) {
|
|
760
|
-
this.pushMessage(data.text);
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
/**
|
|
764
|
-
* Push a lifecycle state to the panel with optional human-facing `text`. State changes still flow
|
|
765
|
-
* through `setState`; an auto-ended session rides a `warn` tone so the panel can shout "agent stopped".
|
|
766
|
-
*/
|
|
767
|
-
/**
|
|
768
|
-
* Push the impact record to this tab's HUD.
|
|
769
|
-
*
|
|
770
|
-
* Debounced: the record changes on every tool call, and the panel does not need 200 frames to
|
|
771
|
-
* show a counter going up. The LAST state always lands, because the timer re-reads the store
|
|
772
|
-
* when it fires rather than capturing a snapshot when it was scheduled.
|
|
773
|
-
*/
|
|
774
|
-
pushImpact(read, immediate = false) {
|
|
775
|
-
if (immediate) {
|
|
776
|
-
// A tab that just connected has nothing to show yet, so its first record goes out at once -
|
|
777
|
-
// waiting a debounce here is a report that reads "nothing recorded" over a month of history.
|
|
778
|
-
const first = read();
|
|
779
|
-
if (first !== undefined)
|
|
780
|
-
this.#post(ReticleCommand.IMPACT, { snapshot: first });
|
|
781
|
-
return;
|
|
782
|
-
}
|
|
783
|
-
if (this.#impactTimer !== undefined)
|
|
784
|
-
return;
|
|
785
|
-
this.#impactTimer = setTimeout(() => {
|
|
786
|
-
this.#impactTimer = undefined;
|
|
787
|
-
const snapshot = read();
|
|
788
|
-
if (snapshot !== undefined)
|
|
789
|
-
this.#post(ReticleCommand.IMPACT, { snapshot });
|
|
790
|
-
}, IMPACT_PUSH_DEBOUNCE_MS);
|
|
791
|
-
this.#impactTimer.unref?.();
|
|
792
|
-
}
|
|
793
|
-
pushPresenter(state, text, tone) {
|
|
794
|
-
this.#post(ReticleCommand.PRESENTER, buildPresenterArgs(state, text, tone));
|
|
795
|
-
}
|
|
796
|
-
/** Fire-and-forget a narration row to the live panel (so a resolved mark shows "✓ fixed"). */
|
|
797
|
-
#impactTimer;
|
|
798
|
-
pushNarration(text) {
|
|
799
|
-
this.#post(ReticleCommand.NARRATE, { text, level: 'info' });
|
|
800
|
-
}
|
|
801
|
-
/** The one-time lease block on the first agent command, then undefined forever after. */
|
|
802
|
-
takeSessionLease() {
|
|
803
|
-
if (this.#firstCommandDone)
|
|
804
|
-
return undefined;
|
|
805
|
-
this.#firstCommandDone = true;
|
|
806
|
-
return buildSessionLease(this.id, this.#startedAt);
|
|
807
|
-
}
|
|
808
|
-
/**
|
|
809
|
-
* Returns a human-readable age warning after SESSION_LEASE.WARN_AFTER_MS (10 min), else undefined.
|
|
810
|
-
* Spliced onto every session-bound tool result so the agent is passively reminded to clean up
|
|
811
|
-
* without needing an explicit polling loop.
|
|
812
|
-
*/
|
|
813
|
-
ageWarning() {
|
|
814
|
-
const ageMs = this.#clock() - this.#startedAt;
|
|
815
|
-
if (ageMs < SESSION_LEASE.WARN_AFTER_MS)
|
|
816
|
-
return undefined;
|
|
817
|
-
const minutes = Math.floor(ageMs / 60_000);
|
|
818
|
-
return `Session ${this.id} has been open for ${String(minutes)} minutes. If your task is complete, call reticle_session{action:"end"} now.`;
|
|
819
|
-
}
|
|
820
|
-
/**
|
|
821
|
-
* The tabs that should SEE what this session is told, supplied by the SessionManager.
|
|
822
|
-
*
|
|
823
|
-
* `reticle drive` attaches to the running daemon and is handed a pooled HEADLESS context, so the
|
|
824
|
-
* whole HUD feed — the narration, the counters, the bug that was just raised — went to a browser
|
|
825
|
-
* with nobody in front of it, while the developer's own tab showed nothing. The feed is now a
|
|
826
|
-
* per-project broadcast: the driven tab is still the only one DRIVEN, and any other tab of the
|
|
827
|
-
* same app is a viewer.
|
|
828
|
-
*/
|
|
829
|
-
#viewers;
|
|
830
|
-
/** Wired by SessionManager.add, the one place every session registers. */
|
|
831
|
-
setViewers(read) {
|
|
832
|
-
this.#viewers = read;
|
|
833
|
-
}
|
|
834
|
-
/**
|
|
835
|
-
* Fire-and-forget command send — NOT registered in #pending (no correlated result expected).
|
|
836
|
-
*
|
|
837
|
-
* Mirrored to this project's other tabs, for the two commands that are a REPORT of what happened
|
|
838
|
-
* (narration, impact). PRESENTER is deliberately not among them: it is the glow and the lifecycle
|
|
839
|
-
* that say "the agent is driving THIS tab", and a viewer that showed it would be claiming
|
|
840
|
-
* something untrue about itself.
|
|
841
|
-
*/
|
|
842
|
-
#post(name, args) {
|
|
843
|
-
this.#send(name, args);
|
|
844
|
-
if (!MIRRORED_COMMANDS.has(name))
|
|
845
|
-
return;
|
|
846
|
-
for (const viewer of this.#viewers?.() ?? []) {
|
|
847
|
-
if (viewer === this)
|
|
848
|
-
continue;
|
|
849
|
-
// Straight to the raw send, so a mirrored row is never mirrored again.
|
|
850
|
-
viewer.#send(name, name === ReticleCommand.NARRATE ? this.#labelled(args) : args);
|
|
851
|
-
}
|
|
852
|
-
}
|
|
853
|
-
/** A narration row re-addressed to a tab that is watching rather than being driven. */
|
|
854
|
-
#labelled(args) {
|
|
855
|
-
const text = args['text'];
|
|
856
|
-
if ('string' !== typeof text)
|
|
857
|
-
return args;
|
|
858
|
-
return { ...args, text: mirroredNarration(this.id, text) };
|
|
859
|
-
}
|
|
860
|
-
#send(name, args) {
|
|
861
|
-
if (this.#socket.readyState !== WS_OPEN)
|
|
862
|
-
return;
|
|
863
|
-
// Shares the same counter as tracked commands, so a fire-and-forget id can never collide with
|
|
864
|
-
// one that IS awaiting a reply.
|
|
865
|
-
// Recorded HERE rather than at the tool call sites: this is the one place every driven action
|
|
866
|
-
// passes through, so act_sequence and flow replay count too. Doing it per-tool missed both, and
|
|
867
|
-
// an under-counted "exercised" reports worse coverage than reality — the safe direction, but
|
|
868
|
-
// still wrong, and it made the number depend on which tool the agent happened to use.
|
|
869
|
-
if (name === ReticleCommand.ACT) {
|
|
870
|
-
const ref = args['ref'];
|
|
871
|
-
if ('string' === typeof ref)
|
|
872
|
-
this.recordActedRef(ref);
|
|
873
|
-
}
|
|
874
|
-
const id = this.#pending.nextId(COMMAND_ID_PREFIX);
|
|
875
|
-
const payload = JSON.stringify({
|
|
876
|
-
kind: MessageKind.COMMAND,
|
|
877
|
-
id,
|
|
878
|
-
sessionId: this.id,
|
|
879
|
-
name,
|
|
880
|
-
args,
|
|
881
|
-
});
|
|
882
|
-
try {
|
|
883
|
-
this.#socket.send(payload);
|
|
884
|
-
}
|
|
885
|
-
catch {
|
|
886
|
-
// A closing/closed tab must never break event routing for the session.
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
/** Re-exported so the public import path (`./session.js`) is unchanged. */
|
|
891
|
-
export { SessionManager } from './session-manager.js';
|