@reticlehq/server 2.14.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +54 -136
- package/bin/reticle.js +1 -1
- package/dist/command/cli/adhoc-verdict.d.ts +64 -0
- package/dist/command/cli/adhoc-verdict.js +144 -0
- package/dist/command/cli/answers/status-next-action.d.ts +61 -0
- package/dist/command/cli/answers/status-next-action.js +84 -0
- package/dist/command/cli/auth/cloud-keystore.js +97 -0
- package/dist/command/cli/auth/device-flow.d.ts +76 -0
- package/dist/command/cli/auth/device-flow.js +56 -0
- package/dist/command/cli/cli-doctor.js +215 -0
- package/dist/command/cli/cli-flow-commands.d.ts +47 -0
- package/dist/command/cli/cli-flow-commands.js +255 -0
- package/dist/command/cli/cli-kill.d.ts +59 -0
- package/dist/command/cli/cli-kill.js +162 -0
- package/dist/command/cli/cli-parse-grammar.d.ts +29 -0
- package/dist/command/cli/cli-parse-grammar.js +39 -0
- package/dist/command/cli/cli-parse-verify.d.ts +22 -0
- package/dist/command/cli/cli-parse-verify.js +143 -0
- package/dist/command/cli/cli-parse.d.ts +193 -0
- package/dist/command/cli/cli-parse.js +833 -0
- package/dist/command/cli/cli-update-commands.js +112 -0
- package/dist/command/cli/cli-verify.d.ts +124 -0
- package/dist/command/cli/cli-verify.js +426 -0
- package/dist/command/cli/cloud-cli.js +694 -0
- package/dist/command/cli/cloud-kit.d.ts +37 -0
- package/dist/command/cli/cloud-kit.js +117 -0
- package/dist/command/cli/cloud-login.js +183 -0
- package/dist/command/cli/config/config-discovery.d.ts +48 -0
- package/dist/command/cli/config/config-discovery.js +183 -0
- package/dist/command/cli/daemon-start-options.d.ts +33 -0
- package/dist/command/cli/demo/demo-page.d.ts +78 -0
- package/dist/command/cli/demo/demo-page.js +238 -0
- package/dist/command/cli/demo/demo-run.d.ts +38 -0
- package/dist/command/cli/demo/demo-run.js +138 -0
- package/dist/command/cli/doctor/doctor-daemon-line.js +47 -0
- package/dist/command/cli/doctor/doctor-rows.d.ts +75 -0
- package/dist/command/cli/doctor/doctor-rows.js +77 -0
- package/dist/command/cli/doctor/doctor-sessions-line.js +69 -0
- package/dist/command/cli/drive/drive-attach.d.ts +113 -0
- package/dist/command/cli/drive/drive-attach.js +221 -0
- package/dist/command/cli/drive/drive-command.js +107 -0
- package/dist/command/cli/launch/cli-launch.d.ts +100 -0
- package/dist/command/cli/launch/cli-launch.js +216 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +33 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +198 -0
- package/dist/command/cli/mcp-command.js +176 -0
- package/dist/command/cli/ports/port-holder.js +123 -0
- package/dist/command/cli/ports/resolve/cli-port.d.ts +71 -0
- package/dist/command/cli/ports/resolve/cli-port.js +140 -0
- package/dist/command/cli/setup-mcp-cli.d.ts +29 -0
- package/dist/command/cli/setup-mcp-cli.js +107 -0
- package/dist/command/cli/status/status-lines.d.ts +28 -0
- package/dist/command/cli/status/status-lines.js +117 -0
- package/dist/command/cli/status-fields.d.ts +28 -0
- package/dist/command/cli/status-fields.js +29 -0
- package/dist/command/cli/tutorial.d.ts +116 -0
- package/dist/command/cli/tutorial.js +189 -0
- package/dist/command/cli-onboarding.d.ts +21 -0
- package/dist/command/cli-onboarding.js +27 -0
- package/dist/command/cli.d.ts +6 -0
- package/dist/command/cli.js +710 -0
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +48 -0
- package/dist/command/daemon/binding/loopback-reach.d.ts +42 -0
- package/dist/command/daemon/binding/loopback-reach.js +63 -0
- package/dist/command/daemon/daemon-resilience.d.ts +86 -0
- package/dist/command/daemon/daemon-resilience.js +339 -0
- package/dist/command/daemon/daemon-resolve.d.ts +113 -0
- package/dist/command/daemon/daemon-resolve.js +187 -0
- package/dist/command/daemon/daemon.d.ts +86 -0
- package/dist/command/daemon/daemon.js +333 -0
- package/dist/command/daemon/idle-shutdown.d.ts +54 -0
- package/dist/command/daemon/idle-shutdown.js +98 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +60 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.js +61 -0
- package/dist/command/daemon/lifetime/heartbeat.d.ts +119 -0
- package/dist/command/daemon/lifetime/heartbeat.js +151 -0
- package/dist/command/daemon/lifetime/idle-grace.d.ts +32 -0
- package/dist/command/daemon/lifetime/idle-grace.js +41 -0
- package/dist/command/daemon/lifetime/log-cap.d.ts +68 -0
- package/dist/command/daemon/lifetime/log-cap.js +115 -0
- package/dist/command/daemon/state-dir.js +59 -0
- package/dist/command/daemon/wake-decision.d.ts +32 -0
- package/dist/command/daemon/wake-decision.js +38 -0
- package/dist/command/dev/stale-issue-guard.d.ts +35 -0
- package/dist/command/dev/stale-issue-guard.js +69 -0
- package/dist/command/setup/agent-configs.d.ts +111 -0
- package/dist/command/setup/agent-configs.js +365 -0
- package/dist/command/setup/agent-notice-memory.d.ts +16 -0
- package/dist/command/setup/agent-notice-memory.js +65 -0
- package/dist/command/setup/agent-writer.d.ts +52 -0
- package/dist/command/setup/agent-writer.js +116 -0
- package/dist/command/setup/auto-approve.js +153 -0
- package/dist/command/setup/bringup/bridge-port.d.ts +15 -0
- package/dist/command/setup/bringup/bridge-port.js +24 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +69 -0
- package/dist/command/setup/bringup/dev-server-wait.js +83 -0
- package/dist/command/setup/bringup/ensure-daemon.js +58 -0
- package/dist/command/setup/init/init-host.js +37 -0
- package/dist/command/setup/init/init-runtime.d.ts +39 -0
- package/dist/command/setup/init/init-runtime.js +168 -0
- package/dist/command/setup/node-effects.d.ts +63 -0
- package/dist/command/setup/node-effects.js +225 -0
- package/dist/command/setup/probe/page-probe.d.ts +71 -0
- package/dist/command/setup/probe/page-probe.js +89 -0
- package/dist/command/setup/remaining-steps.js +53 -0
- package/dist/command/setup/run-setup.d.ts +123 -0
- package/dist/command/setup/run-setup.js +316 -0
- package/dist/command/setup/setup-command.d.ts +48 -0
- package/dist/command/setup/setup-command.js +224 -0
- package/dist/command/setup/setup-install.d.ts +18 -0
- package/dist/command/setup/setup-install.js +40 -0
- package/dist/command/setup/setup-mcp.d.ts +57 -0
- package/dist/command/setup/setup-mcp.js +92 -0
- package/dist/command/setup/setup-options.d.ts +66 -0
- package/dist/command/setup/setup-options.js +63 -0
- package/dist/command/setup/terminal/confirm.js +206 -0
- package/dist/command/setup/terminal/crash.d.ts +55 -0
- package/dist/command/setup/terminal/crash.js +74 -0
- package/dist/command/update/nudge-credit.js +53 -0
- package/dist/command/update/sdk-sync.d.ts +20 -0
- package/dist/command/update/sdk-sync.js +22 -0
- package/dist/command/update/update-checker.js +122 -0
- package/dist/command/update/update-nudge.d.ts +90 -0
- package/dist/command/update/update-nudge.js +211 -0
- package/dist/command/update/updater.d.ts +81 -0
- package/dist/command/update/updater.js +223 -0
- package/dist/command/version/identity/server-version.js +50 -0
- package/dist/command/version/peer-announce.js +32 -0
- package/dist/command/version/sdk-fix.js +127 -0
- package/dist/command/version/version-nudge.js +61 -0
- package/dist/command/version/version-skew.d.ts +113 -0
- package/dist/command/version/version-skew.js +192 -0
- package/dist/features/crawl/crawl-tools.d.ts +7 -0
- package/dist/features/crawl/crawl-tools.js +89 -0
- package/dist/features/crawl/crawl.d.ts +98 -0
- package/dist/features/crawl/crawl.js +444 -0
- package/dist/features/ee/audit-log.js +11 -0
- package/dist/features/harness/drive-report.d.ts +73 -0
- package/dist/features/harness/drive-report.js +196 -0
- package/dist/features/harness/driver.d.ts +50 -0
- package/dist/features/harness/driver.js +239 -0
- package/dist/features/harness/drivers.d.ts +19 -0
- package/dist/features/harness/drivers.js +19 -0
- package/dist/features/harness/fill-values.d.ts +67 -0
- package/dist/features/harness/fill-values.js +153 -0
- package/dist/features/harness/harness.d.ts +159 -0
- package/dist/features/harness/harness.js +203 -0
- package/dist/features/harness/jev-driver.d.ts +188 -0
- package/dist/features/harness/jev-driver.js +664 -0
- package/dist/features/harness/openai-driver.d.ts +46 -0
- package/dist/features/harness/openai-driver.js +197 -0
- package/dist/features/harness/platform-config.d.ts +52 -0
- package/dist/features/harness/platform-config.js +89 -0
- package/dist/features/harness/with-timeout.d.ts +18 -0
- package/dist/features/harness/with-timeout.js +34 -0
- package/dist/features/license/license-env.d.ts +24 -0
- package/dist/features/license/license-env.js +140 -0
- package/dist/features/license/license.d.ts +161 -0
- package/dist/features/license/license.js +287 -0
- package/dist/features/visual/visual-store.d.ts +22 -0
- package/dist/features/visual/visual-store.js +66 -0
- package/dist/features/visual/visual-tools.d.ts +26 -0
- package/dist/features/visual/visual-tools.js +352 -0
- package/dist/hooks/hook-bus.d.ts +53 -0
- package/dist/hooks/hook-bus.js +106 -0
- package/dist/hooks/hook-commands.d.ts +59 -0
- package/dist/hooks/hook-commands.js +184 -0
- package/dist/hooks/hook-emit.d.ts +44 -0
- package/dist/hooks/hook-emit.js +85 -0
- package/dist/import-graph.d.ts +48 -0
- package/dist/import-graph.js +106 -0
- package/dist/index.d.ts +91 -125
- package/dist/index.js +250 -160
- package/dist/judgement/capsule/capsule-store.d.ts +70 -0
- package/dist/judgement/capsule/capsule-store.js +113 -0
- package/dist/judgement/capsule/capsule.d.ts +42 -0
- package/dist/judgement/capsule/capsule.js +73 -0
- package/dist/judgement/capsule/causal-summary.d.ts +119 -0
- package/dist/judgement/capsule/causal-summary.js +172 -0
- package/dist/judgement/capsule/divergence.d.ts +26 -0
- package/dist/judgement/domain/domain-model.js +126 -0
- package/dist/judgement/domain/domain-tools.d.ts +2 -0
- package/dist/judgement/domain/domain-tools.js +96 -0
- package/dist/judgement/domain/flow-risk.js +80 -0
- package/dist/judgement/oracles/propose-consequences.d.ts +22 -0
- package/dist/judgement/oracles/propose-consequences.js +106 -0
- package/dist/judgement/outcome/predicate-to-expect.d.ts +44 -0
- package/dist/judgement/outcome/predicate-to-expect.js +148 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +34 -0
- package/dist/judgement/runs/artifact/build-verification-run.js +83 -0
- package/dist/judgement/runs/artifact/render-report.js +84 -0
- package/dist/judgement/runs/artifact/replay-mapping.js +34 -0
- package/dist/judgement/runs/artifact/run-store.d.ts +54 -0
- package/dist/judgement/runs/artifact/run-store.js +150 -0
- package/dist/judgement/runs/artifact/to-artifact.d.ts +119 -0
- package/dist/judgement/runs/artifact/to-artifact.js +83 -0
- package/dist/judgement/runs/context-tools.d.ts +2 -0
- package/dist/judgement/runs/context-tools.js +70 -0
- package/dist/judgement/runs/default-run-id.d.ts +8 -0
- package/dist/judgement/runs/default-run-id.js +11 -0
- package/dist/judgement/runs/drive-run.d.ts +61 -0
- package/dist/judgement/runs/drive-run.js +130 -0
- package/dist/judgement/runs/late-answer.d.ts +55 -0
- package/dist/judgement/runs/late-answer.js +81 -0
- package/dist/judgement/runs/reticle-runner.d.ts +60 -0
- package/dist/judgement/runs/reticle-runner.js +95 -0
- package/dist/judgement/runs/run-tools.d.ts +17 -0
- package/dist/judgement/runs/run-tools.js +97 -0
- package/dist/judgement/runs/runner-port.d.ts +11 -0
- package/dist/judgement/runs/runner-port.js +18 -0
- package/dist/judgement/runs/verification-sync.d.ts +13 -0
- package/dist/judgement/runs/verification-sync.js +93 -0
- package/dist/language/flows/affected-tools.d.ts +18 -0
- package/dist/language/flows/affected-tools.js +83 -0
- package/dist/language/flows/annotate-tools.d.ts +15 -0
- package/dist/language/flows/annotate-tools.js +179 -0
- package/dist/language/flows/change/affected.d.ts +24 -0
- package/dist/language/flows/change/affected.js +35 -0
- package/dist/language/flows/change/flow-sources.d.ts +19 -0
- package/dist/language/flows/change/flow-sources.js +55 -0
- package/dist/language/flows/change/gate.js +33 -0
- package/dist/language/flows/decision.d.ts +45 -0
- package/dist/language/flows/decision.js +371 -0
- package/dist/language/flows/empty-flow.js +24 -0
- package/dist/language/flows/fields/flow-secret-field.d.ts +53 -0
- package/dist/language/flows/fields/flow-secret-field.js +75 -0
- package/dist/language/flows/fields/flow-upload-resolve.d.ts +23 -0
- package/dist/language/flows/fields/flow-upload-resolve.js +46 -0
- package/dist/language/flows/flow-anchor.d.ts +59 -0
- package/dist/language/flows/flow-anchor.js +240 -0
- package/dist/language/flows/flow-classify.d.ts +73 -0
- package/dist/language/flows/flow-classify.js +146 -0
- package/dist/language/flows/flow-expect-grammar.d.ts +33 -0
- package/dist/language/flows/flow-expect-grammar.js +155 -0
- package/dist/language/flows/flow-intent.d.ts +52 -0
- package/dist/language/flows/flow-intent.js +123 -0
- package/dist/language/flows/flow-learning.d.ts +52 -0
- package/dist/language/flows/flow-learning.js +76 -0
- package/dist/language/flows/flow-mutate-tools.d.ts +14 -0
- package/dist/language/flows/flow-mutate-tools.js +82 -0
- package/dist/language/flows/flow-replay-run.d.ts +91 -0
- package/dist/language/flows/flow-replay-run.js +748 -0
- package/dist/language/flows/flow-replay-types.d.ts +37 -0
- package/dist/language/flows/flow-replay-types.js +1 -0
- package/dist/language/flows/flow-replay.d.ts +91 -0
- package/dist/language/flows/flow-replay.js +487 -0
- package/dist/language/flows/flow-result.d.ts +35 -0
- package/dist/language/flows/flow-result.js +26 -0
- package/dist/language/flows/flow-step-runners.d.ts +54 -0
- package/dist/language/flows/flow-step-runners.js +369 -0
- package/dist/language/flows/flow-store-for-session.d.ts +32 -0
- package/dist/language/flows/flow-success.d.ts +32 -0
- package/dist/language/flows/flow-success.js +181 -0
- package/dist/language/flows/flow-tools.d.ts +15 -0
- package/dist/language/flows/flow-tools.js +842 -0
- package/dist/language/flows/flows.d.ts +114 -0
- package/dist/language/flows/flows.js +492 -0
- package/dist/language/flows/heal-precondition.d.ts +28 -0
- package/dist/language/flows/heal-precondition.js +38 -0
- package/dist/language/flows/heal-run.d.ts +17 -0
- package/dist/language/flows/heal-run.js +186 -0
- package/dist/language/flows/heal.js +97 -0
- package/dist/language/flows/mutation-run.d.ts +33 -0
- package/dist/language/flows/mutation-run.js +60 -0
- package/dist/language/flows/narrow-write.d.ts +32 -0
- package/dist/language/flows/narrow-write.js +26 -0
- package/dist/language/flows/recording/flake.d.ts +56 -0
- package/dist/language/flows/recording/recording-backtrack.js +73 -0
- package/dist/language/flows/recording/tape/recordings.d.ts +134 -0
- package/dist/language/flows/recording/tape/recordings.js +144 -0
- package/dist/language/flows/replay.d.ts +83 -0
- package/dist/language/flows/replay.js +397 -0
- package/dist/language/flows/role-anchor-nearest.js +45 -0
- package/dist/language/flows/stores/assertion-tiers-store.d.ts +26 -0
- package/dist/language/flows/stores/assertion-tiers-store.js +107 -0
- package/dist/language/flows/stores/flake-store.d.ts +18 -0
- package/dist/language/flows/stores/flake-store.js +58 -0
- package/dist/language/flows/suite/server-verify.d.ts +15 -0
- package/dist/language/flows/suite/server-verify.js +56 -0
- package/dist/language/flows/suite/suite-flakes.d.ts +34 -0
- package/dist/language/flows/suite/suite-flakes.js +32 -0
- package/dist/language/flows/suite-selection.d.ts +45 -0
- package/dist/language/flows/suite-selection.js +84 -0
- package/dist/language/flows/verify-change-tools.d.ts +2 -0
- package/dist/language/flows/verify-change-tools.js +244 -0
- package/dist/machine/clock.d.ts +24 -0
- package/dist/machine/clock.js +1 -0
- package/dist/machine/repo-root.d.ts +16 -0
- package/dist/machine/repo-root.js +20 -0
- package/dist/memory/cloud/account-state.d.ts +20 -0
- package/dist/memory/cloud/account-state.js +70 -0
- package/dist/memory/cloud/cloud-config.d.ts +79 -0
- package/dist/memory/cloud/cloud-config.js +156 -0
- package/dist/memory/cloud/cloud-sync.d.ts +195 -0
- package/dist/memory/cloud/cloud-sync.js +359 -0
- package/dist/memory/cloud/harness-config.d.ts +10 -0
- package/dist/memory/cloud/harness-config.js +58 -0
- package/dist/memory/cloud/harness-offer.d.ts +44 -0
- package/dist/memory/cloud/harness-offer.js +146 -0
- package/dist/memory/cloud/harness-switch.d.ts +11 -0
- package/dist/memory/cloud/harness-switch.js +53 -0
- package/dist/memory/cloud/sync-cycle.d.ts +121 -0
- package/dist/memory/cloud/sync-cycle.js +295 -0
- package/dist/memory/cloud/sync-daemon.d.ts +73 -0
- package/dist/memory/cloud/sync-daemon.js +297 -0
- package/dist/memory/cloud/sync-disk.js +193 -0
- package/dist/memory/impact/impact-recorder.d.ts +54 -0
- package/dist/memory/impact/impact-recorder.js +160 -0
- package/dist/memory/impact/impact-store.d.ts +52 -0
- package/dist/memory/impact/impact-store.js +274 -0
- package/dist/memory/intent/inline-intent.d.ts +60 -0
- package/dist/memory/intent/inline-intent.js +206 -0
- package/dist/memory/intent/intent-shard-store.d.ts +87 -0
- package/dist/memory/intent/intent-shard-store.js +215 -0
- package/dist/memory/intent/intent-shard.d.ts +389 -0
- package/dist/memory/intent/intent-shard.js +153 -0
- package/dist/memory/intent/intent-store.d.ts +47 -0
- package/dist/memory/intent/intent-store.js +133 -0
- package/dist/memory/intent/intent-subject.d.ts +46 -0
- package/dist/memory/intent/intent-subject.js +175 -0
- package/dist/memory/intent/intent-tools.d.ts +2 -0
- package/dist/memory/intent/intent-tools.js +157 -0
- package/dist/memory/intent/open-intents.d.ts +36 -0
- package/dist/memory/intent/open-intents.js +58 -0
- package/dist/memory/journal/ambient-store.d.ts +13 -0
- package/dist/memory/journal/ambient-store.js +52 -0
- package/dist/memory/journal/attach-journal.d.ts +37 -0
- package/dist/memory/journal/attach-journal.js +26 -0
- package/dist/memory/journal/drive-flow.d.ts +74 -0
- package/dist/memory/journal/drive-flow.js +157 -0
- package/dist/memory/journal/drive-run-flush.d.ts +42 -0
- package/dist/memory/journal/drive-run-flush.js +82 -0
- package/dist/memory/journal/envelope-store.d.ts +16 -0
- package/dist/memory/journal/envelope-store.js +61 -0
- package/dist/memory/journal/envelope.d.ts +230 -0
- package/dist/memory/journal/journal-query.d.ts +66 -0
- package/dist/memory/journal/journal-query.js +98 -0
- package/dist/memory/journal/journal-recorder.d.ts +109 -0
- package/dist/memory/journal/journal-recorder.js +153 -0
- package/dist/memory/journal/on-disk/ambient-file.d.ts +21 -0
- package/dist/memory/journal/on-disk/ambient-file.js +15 -0
- package/dist/memory/journal/on-disk/retention.d.ts +141 -0
- package/dist/memory/journal/on-disk/retention.js +291 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +21 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.js +93 -0
- package/dist/memory/journal/self-observation.d.ts +3 -0
- package/dist/memory/journal/self-observation.js +67 -0
- package/dist/memory/journal/session-end.d.ts +112 -0
- package/dist/memory/journal/session-end.js +179 -0
- package/dist/memory/journal/session-journal.d.ts +134 -0
- package/dist/memory/journal/session-journal.js +614 -0
- package/dist/memory/project/artifact-root-resolver.d.ts +3 -0
- package/dist/memory/project/artifact-root-resolver.js +89 -0
- package/dist/memory/project/artifact-root.d.ts +109 -0
- package/dist/memory/project/artifact-root.js +157 -0
- package/dist/memory/project/dir/fill-value-store.d.ts +32 -0
- package/dist/memory/project/dir/fill-value-store.js +88 -0
- package/dist/memory/project/dir/reticle-dir.d.ts +139 -0
- package/dist/memory/project/dir/reticle-dir.js +229 -0
- package/dist/memory/project/fs/fs-port.d.ts +68 -0
- package/dist/memory/project/fs/fs-port.js +82 -0
- package/dist/memory/project/learned-routes.d.ts +38 -0
- package/dist/memory/project/learned-routes.js +79 -0
- package/dist/memory/project/memory-fs.d.ts +10 -0
- package/dist/memory/project/project-for-root.d.ts +30 -0
- package/dist/memory/project/project-for-root.js +43 -0
- package/dist/memory/project/project-store.d.ts +54 -0
- package/dist/memory/project/project-store.js +244 -0
- package/dist/memory/project/project-tools.d.ts +8 -0
- package/dist/memory/project/project-tools.js +160 -0
- package/dist/memory/project/reticle-deps.d.ts +15 -0
- package/dist/memory/project/reticle-deps.js +33 -0
- package/dist/memory/project/session-root.d.ts +52 -0
- package/dist/memory/project/session-root.js +100 -0
- package/dist/memory/recall/memory-tools.d.ts +2 -0
- package/dist/memory/recall/memory-tools.js +81 -0
- package/dist/memory/recall/prior/connection-memory.d.ts +65 -0
- package/dist/memory/recall/prior/connection-memory.js +114 -0
- package/dist/memory/recall/project-memory.d.ts +33 -0
- package/dist/portal/bridge/auth-failure-reason.d.ts +32 -0
- package/dist/portal/bridge/auth-failure-reason.js +68 -0
- package/dist/portal/bridge/bridge-security.d.ts +30 -0
- package/dist/portal/bridge/bridge-security.js +53 -0
- package/dist/portal/bridge/bridge.d.ts +109 -0
- package/dist/portal/bridge/bridge.js +808 -0
- package/dist/portal/input/drive-url-stamp.d.ts +14 -0
- package/dist/portal/input/drive-url-stamp.js +33 -0
- package/dist/portal/input/network-detail.d.ts +97 -0
- package/dist/portal/input/network-detail.js +138 -0
- package/dist/portal/input/network-mock-tools.d.ts +21 -0
- package/dist/portal/input/network-mock-tools.js +124 -0
- package/dist/portal/input/network-mock.js +83 -0
- package/dist/portal/input/network-mutation.d.ts +47 -0
- package/dist/portal/input/network-mutation.js +53 -0
- package/dist/portal/input/real-input.d.ts +261 -0
- package/dist/portal/input/real-input.js +488 -0
- package/dist/portal/input/scroll-find.js +111 -0
- package/dist/portal/input/scroll-tools.d.ts +2 -0
- package/dist/portal/input/scroll-tools.js +76 -0
- package/dist/portal/input/storage-fixture.d.ts +57 -0
- package/dist/portal/input/storage-fixture.js +92 -0
- package/dist/portal/input/viewport-tools.d.ts +2 -0
- package/dist/portal/input/viewport-tools.js +72 -0
- package/dist/portal/pool/browser-pool.d.ts +174 -0
- package/dist/portal/pool/browser-pool.js +559 -0
- package/dist/portal/pool/lease-reaper.js +40 -0
- package/dist/portal/pool/playwright-launcher.js +150 -0
- package/dist/portal/pool/pool-contract.d.ts +116 -0
- package/dist/portal/pool/pool-contract.js +8 -0
- package/dist/portal/pool/storage-seed.d.ts +23 -0
- package/dist/portal/realm/conformance-client.d.ts +43 -0
- package/dist/portal/realm/conformance-client.js +227 -0
- package/dist/portal/realm/http-witness.d.ts +48 -0
- package/dist/portal/realm/http-witness.js +135 -0
- package/dist/portal/realm/web-realm.d.ts +225 -0
- package/dist/portal/realm/web-realm.js +661 -0
- package/dist/portal/session/daemon-answers.d.ts +20 -0
- package/dist/portal/session/daemon-answers.js +20 -0
- package/dist/portal/session/dev-server/dev-server-probe.js +147 -0
- package/dist/portal/session/facts/handshake-facts.d.ts +56 -0
- package/dist/portal/session/facts/handshake-facts.js +1 -0
- package/dist/portal/session/facts/observed-state.d.ts +60 -0
- package/dist/portal/session/facts/observed-state.js +121 -0
- package/dist/portal/session/facts/session-replaced.d.ts +43 -0
- package/dist/portal/session/facts/session-replaced.js +51 -0
- package/dist/portal/session/live-control-tools.d.ts +15 -0
- package/dist/portal/session/live-control-tools.js +242 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +176 -0
- package/dist/portal/session/no-session-diagnosis.js +457 -0
- package/dist/portal/session/no-session-next-action.d.ts +76 -0
- package/dist/portal/session/no-session-next-action.js +211 -0
- package/dist/portal/session/no-session-watch.js +351 -0
- package/dist/portal/session/output-budget.d.ts +82 -0
- package/dist/portal/session/output-budget.js +108 -0
- package/dist/portal/session/page-commands/undeclared-command.d.ts +30 -0
- package/dist/portal/session/page-commands/undeclared-command.js +44 -0
- package/dist/portal/session/presence/session-recommendation.js +29 -0
- package/dist/portal/session/rebind.d.ts +18 -0
- package/dist/portal/session/rebind.js +38 -0
- package/dist/portal/session/session-health.d.ts +145 -0
- package/dist/portal/session/session-health.js +154 -0
- package/dist/portal/session/session-manager.d.ts +81 -0
- package/dist/portal/session/session-manager.js +504 -0
- package/dist/portal/session/session-reaper.d.ts +36 -0
- package/dist/portal/session/session-reaper.js +93 -0
- package/dist/portal/session/session-tools.d.ts +8 -0
- package/dist/portal/session/session-tools.js +42 -0
- package/dist/portal/session/session.d.ts +279 -0
- package/dist/portal/session/session.js +875 -0
- package/dist/portal/session/stall-clock.js +48 -0
- package/dist/portal/session/timing/command-timeout.d.ts +40 -0
- package/dist/portal/session/timing/command-timeout.js +42 -0
- package/dist/start-options.d.ts +51 -0
- package/dist/start-options.js +7 -0
- package/dist/status-payload.d.ts +16 -10
- package/dist/status-payload.js +5 -2
- package/dist/surface/http-server.d.ts +52 -0
- package/dist/surface/http-server.js +379 -0
- package/dist/surface/mcp/consumer-verdict-guard.d.ts +40 -0
- package/dist/surface/mcp/consumer-verdict-guard.js +57 -0
- package/dist/surface/mcp/faults/mcp-is-error.d.ts +13 -0
- package/dist/surface/mcp/faults/mcp-is-error.js +18 -0
- package/dist/surface/mcp/faults/mcp-outage.d.ts +33 -0
- package/dist/surface/mcp/faults/mcp-outage.js +71 -0
- package/dist/surface/mcp/mcp-proxy.d.ts +119 -0
- package/dist/surface/mcp/mcp-proxy.js +882 -0
- package/dist/surface/mcp/mcp.d.ts +89 -0
- package/dist/surface/mcp/mcp.js +676 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +109 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +22 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +71 -0
- package/dist/surface/mcp/proxy/proxy-handshake.js +192 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.d.ts +90 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.js +98 -0
- package/dist/surface/mcp/proxy/proxy-log.d.ts +57 -0
- package/dist/surface/mcp/proxy/proxy-log.js +117 -0
- package/dist/surface/mcp/server-instructions.d.ts +26 -0
- package/dist/surface/mcp/server-instructions.js +156 -0
- package/dist/surface/mcp/surface-vocabulary.d.ts +47 -0
- package/dist/surface/mcp/surface-vocabulary.js +56 -0
- package/dist/surface/mcp/tool-catalog-cache.d.ts +45 -0
- package/dist/surface/mcp/tool-catalog-cache.js +77 -0
- package/dist/surface/tools/act/act-danger.js +69 -0
- package/dist/surface/tools/act/act-helpers.d.ts +17 -0
- package/dist/surface/tools/act/act-helpers.js +40 -0
- package/dist/surface/tools/act/act-observation.d.ts +42 -0
- package/dist/surface/tools/act/act-observation.js +36 -0
- package/dist/surface/tools/act/act-preflight.d.ts +27 -0
- package/dist/surface/tools/act/act-preflight.js +168 -0
- package/dist/surface/tools/act/act-target.d.ts +10 -0
- package/dist/surface/tools/act/act-target.js +100 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +68 -0
- package/dist/surface/tools/act/resolve-target.js +115 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +79 -0
- package/dist/surface/tools/act/sequence-grade.js +104 -0
- package/dist/surface/tools/act-capsule.d.ts +33 -0
- package/dist/surface/tools/act-capsule.js +79 -0
- package/dist/surface/tools/act-merged.d.ts +20 -0
- package/dist/surface/tools/act-merged.js +53 -0
- package/dist/surface/tools/act-sequence-tool.js +330 -0
- package/dist/surface/tools/act-tools.d.ts +24 -0
- package/dist/surface/tools/act-tools.js +835 -0
- package/dist/surface/tools/args/numeric-bounds.d.ts +97 -0
- package/dist/surface/tools/args/numeric-bounds.js +133 -0
- package/dist/surface/tools/assert/assert-grade.d.ts +42 -0
- package/dist/surface/tools/assert/assert-grade.js +125 -0
- package/dist/surface/tools/assert/assert-source.d.ts +52 -0
- package/dist/surface/tools/assert/assert-source.js +74 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +48 -0
- package/dist/surface/tools/assert/assert-verdict.js +247 -0
- package/dist/surface/tools/browser-tools.d.ts +2 -0
- package/dist/surface/tools/browser-tools.js +115 -0
- package/dist/surface/tools/contract-tools.d.ts +2 -0
- package/dist/surface/tools/contract-tools.js +112 -0
- package/dist/surface/tools/coverage-tools.d.ts +18 -0
- package/dist/surface/tools/coverage-tools.js +178 -0
- package/dist/surface/tools/dynamic-tools.d.ts +17 -0
- package/dist/surface/tools/dynamic-tools.js +282 -0
- package/dist/surface/tools/error-recovery.d.ts +116 -0
- package/dist/surface/tools/error-recovery.js +527 -0
- package/dist/surface/tools/explore-tools.d.ts +14 -0
- package/dist/surface/tools/explore-tools.js +162 -0
- package/dist/surface/tools/feature-capture.d.ts +151 -0
- package/dist/surface/tools/feature-capture.js +235 -0
- package/dist/surface/tools/feedback-invite.d.ts +48 -0
- package/dist/surface/tools/feedback-invite.js +71 -0
- package/dist/surface/tools/feedback-tools.d.ts +35 -0
- package/dist/surface/tools/feedback-tools.js +280 -0
- package/dist/surface/tools/first-sentence.d.ts +24 -0
- package/dist/surface/tools/first-sentence.js +0 -0
- package/dist/surface/tools/gap-novelty.d.ts +39 -0
- package/dist/surface/tools/gap-novelty.js +69 -0
- package/dist/surface/tools/gaps/capability-absences.d.ts +39 -0
- package/dist/surface/tools/gaps/capability-absences.js +46 -0
- package/dist/surface/tools/harness-explore.d.ts +177 -0
- package/dist/surface/tools/harness-explore.js +453 -0
- package/dist/surface/tools/harness-plan.d.ts +76 -0
- package/dist/surface/tools/harness-plan.js +156 -0
- package/dist/surface/tools/harness-toolset.d.ts +35 -0
- package/dist/surface/tools/harness-toolset.js +144 -0
- package/dist/surface/tools/inspect-tool.d.ts +4 -0
- package/dist/surface/tools/inspect-tool.js +142 -0
- package/dist/surface/tools/invoke-tool.d.ts +10 -0
- package/dist/surface/tools/invoke-tool.js +668 -0
- package/dist/surface/tools/lease-hint.d.ts +50 -0
- package/dist/surface/tools/lease-hint.js +125 -0
- package/dist/surface/tools/lease-tools.d.ts +195 -0
- package/dist/surface/tools/lease-tools.js +797 -0
- package/dist/surface/tools/lineage-tools.d.ts +14 -0
- package/dist/surface/tools/lineage-tools.js +64 -0
- package/dist/surface/tools/live-call-text.d.ts +25 -0
- package/dist/surface/tools/live-call-text.js +191 -0
- package/dist/surface/tools/merge-tools.d.ts +68 -0
- package/dist/surface/tools/merge-tools.js +110 -0
- package/dist/surface/tools/merged-name-redirect.d.ts +36 -0
- package/dist/surface/tools/merged-name-redirect.js +107 -0
- package/dist/surface/tools/observe-tools.js +700 -0
- package/dist/surface/tools/read/query-windowed.d.ts +54 -0
- package/dist/surface/tools/read/query-windowed.js +75 -0
- package/dist/surface/tools/read/snapshot-delta.d.ts +92 -0
- package/dist/surface/tools/read/snapshot-delta.js +356 -0
- package/dist/surface/tools/read-tools.js +569 -0
- package/dist/surface/tools/real-input-attempt.d.ts +68 -0
- package/dist/surface/tools/real-input-attempt.js +360 -0
- package/dist/surface/tools/reconcile-tools.js +211 -0
- package/dist/surface/tools/tool-hit-rate.js +90 -0
- package/dist/surface/tools/tool-kit.d.ts +254 -0
- package/dist/surface/tools/tool-kit.js +123 -0
- package/dist/surface/tools/tool-surface.d.ts +195 -0
- package/dist/surface/tools/tool-surface.js +429 -0
- package/dist/surface/tools/tools-helpers.d.ts +40 -0
- package/dist/surface/tools/tools-helpers.js +76 -0
- package/dist/surface/tools/tools.d.ts +76 -0
- package/dist/surface/tools/tools.js +799 -0
- package/dist/surface/tools/unadvertised-help.js +60 -0
- package/dist/surface/tools/verify-next-baton.js +52 -0
- package/dist/telemetry/app-instrumented.d.ts +3 -5
- package/dist/telemetry/app-instrumented.js +17 -6
- package/dist/telemetry/argument-shape.js +4 -4
- package/dist/telemetry/bug-found.js +49 -27
- package/dist/telemetry/cli-telemetry.js +27 -10
- package/dist/telemetry/daemon-telemetry.d.ts +7 -13
- package/dist/telemetry/daemon-telemetry.js +15 -22
- package/dist/telemetry/error-fingerprint.js +26 -1
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +2 -2
- package/dist/telemetry/feedback-context.js +4 -4
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/harness-drive.d.ts +6 -0
- package/dist/telemetry/harness-drive.js +39 -0
- package/dist/telemetry/install-source.js +1 -1
- package/dist/telemetry/install-trace.d.ts +8 -0
- package/dist/telemetry/install-trace.js +74 -0
- package/dist/telemetry/license-activation.js +1 -1
- package/dist/telemetry/mcp-connection.d.ts +14 -1
- package/dist/telemetry/mcp-connection.js +17 -2
- package/dist/telemetry/onboarding-firsts.d.ts +40 -0
- package/dist/telemetry/onboarding-firsts.js +109 -0
- package/dist/telemetry/onboarding-funnel.d.ts +26 -0
- package/dist/telemetry/onboarding-funnel.js +60 -0
- package/dist/telemetry/project-profile.js +1 -1
- package/dist/telemetry/run-telemetry.js +13 -0
- package/dist/telemetry/session-metrics.d.ts +6 -7
- package/dist/telemetry/session-metrics.js +14 -21
- package/dist/telemetry/telemetry.d.ts +8 -1
- package/dist/telemetry/telemetry.js +6 -5
- package/dist/telemetry/verification-of.d.ts +6 -8
- package/dist/telemetry/verification-of.js +38 -12
- package/dist/workspace-packages.d.ts +22 -0
- package/dist/workspace-packages.js +57 -0
- package/docs/README.md +29 -23
- package/docs/actions.mdx +4 -4
- package/docs/adapters.md +75 -0
- package/docs/agent-cheatsheet.md +37 -27
- package/docs/architecture.md +3 -2
- package/docs/autodrive.md +99 -0
- package/docs/benchmarks.md +1 -1
- package/docs/best-practices.mdx +3 -3
- package/docs/capabilities.mdx +4 -4
- package/docs/cli/cloud.mdx +4 -4
- package/docs/cli/doctor.mdx +1 -0
- package/docs/cli/feedback.mdx +1 -1
- package/docs/cli/init.mdx +3 -3
- package/docs/cli/mcp.mdx +1 -1
- package/docs/cli/status.mdx +35 -20
- package/docs/cli/watch.mdx +1 -1
- package/docs/cli.mdx +15 -25
- package/docs/desktop.mdx +1 -1
- package/docs/enterprise.md +3 -2
- package/docs/faq.mdx +4 -4
- package/docs/first-drive.md +5 -5
- package/docs/flows.md +5 -5
- package/docs/for-agents.md +2 -1
- package/docs/frameworks.mdx +1 -1
- package/docs/getting-started.md +30 -21
- package/docs/http-transport.md +1 -1
- package/docs/index.mdx +28 -10
- package/docs/install-agentic.mdx +12 -4
- package/docs/install-manual.mdx +23 -7
- package/docs/instrumentation.mdx +3 -3
- package/docs/local-registry.md +15 -4
- package/docs/packages/babel-plugin.mdx +1 -1
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/core.mdx +2 -2
- package/docs/packages/engine.mdx +40 -0
- package/docs/packages/open-verification.mdx +40 -0
- package/docs/packages/tauri.mdx +1 -1
- package/docs/packages.mdx +22 -2
- package/docs/platform-integration.md +3 -3
- package/docs/predicates.mdx +19 -3
- package/docs/protocol.mdx +60 -0
- package/docs/quickstart.mdx +48 -13
- package/docs/recipes.mdx +1 -1
- package/docs/required-checks.md +37 -0
- package/docs/skill-file.mdx +2 -2
- package/docs/skill-setup.md +104 -0
- package/docs/state-files.md +46 -0
- package/docs/state-management.mdx +1 -1
- package/docs/system-map.md +8 -6
- package/docs/telemetry.md +4 -3
- package/docs/testing.md +12 -3
- package/docs/token-efficiency.md +3 -3
- package/docs/tools/act-and-wait.mdx +173 -0
- package/docs/tools/act-sequence.mdx +160 -0
- package/docs/tools/act.mdx +95 -0
- package/docs/tools/assert.mdx +129 -0
- package/docs/tools/console.mdx +70 -0
- package/docs/tools/inspect.mdx +95 -0
- package/docs/tools/navigate.mdx +107 -0
- package/docs/tools/network.mdx +126 -0
- package/docs/tools/observe.mdx +145 -0
- package/docs/tools/overview.mdx +163 -0
- package/docs/tools/query.mdx +133 -0
- package/docs/tools/sessions.mdx +101 -0
- package/docs/tools/snapshot.mdx +136 -0
- package/docs/tools/state.mdx +111 -0
- package/docs/tools/wait-for.mdx +92 -0
- package/docs/troubleshooting.mdx +43 -9
- package/docs/usage.md +59 -59
- package/package.json +31 -13
- package/dist/bridge/auth-failure-reason.d.ts +0 -23
- package/dist/bridge/auth-failure-reason.js +0 -47
- package/dist/bridge/bridge-security.d.ts +0 -30
- package/dist/bridge/bridge-security.js +0 -53
- package/dist/bridge/bridge.d.ts +0 -95
- package/dist/bridge/bridge.js +0 -713
- package/dist/bridge/bridge.test-harness.d.ts +0 -65
- package/dist/bridge/bridge.test-harness.js +0 -230
- package/dist/capsule/capsule-store.d.ts +0 -71
- package/dist/capsule/capsule-store.js +0 -114
- package/dist/capsule/capsule.d.ts +0 -18
- package/dist/capsule/capsule.js +0 -35
- package/dist/capsule/causal-summary.d.ts +0 -119
- package/dist/capsule/causal-summary.js +0 -172
- package/dist/capsule/divergence.d.ts +0 -35
- package/dist/capsule/predicate-to-links.d.ts +0 -8
- package/dist/capsule/predicate-to-links.js +0 -33
- package/dist/cli/adhoc-verdict.d.ts +0 -58
- package/dist/cli/adhoc-verdict.js +0 -115
- package/dist/cli/cli-doctor.js +0 -195
- package/dist/cli/cli-flow-commands.d.ts +0 -46
- package/dist/cli/cli-flow-commands.js +0 -255
- package/dist/cli/cli-kill.d.ts +0 -59
- package/dist/cli/cli-kill.js +0 -162
- package/dist/cli/cli-launch.d.ts +0 -92
- package/dist/cli/cli-launch.js +0 -223
- package/dist/cli/cli-parse.d.ts +0 -171
- package/dist/cli/cli-parse.js +0 -874
- package/dist/cli/cli-port.d.ts +0 -70
- package/dist/cli/cli-port.js +0 -136
- package/dist/cli/cli-update-commands.js +0 -112
- package/dist/cli/cli-verify.d.ts +0 -86
- package/dist/cli/cli-verify.js +0 -340
- package/dist/cli/cloud-cli.js +0 -694
- package/dist/cli/cloud-keystore.js +0 -97
- package/dist/cli/cloud-kit.d.ts +0 -37
- package/dist/cli/cloud-kit.js +0 -121
- package/dist/cli/cloud-login.js +0 -183
- package/dist/cli/config-discovery.d.ts +0 -36
- package/dist/cli/config-discovery.js +0 -164
- package/dist/cli/daemon-start-options.d.ts +0 -33
- package/dist/cli/device-flow.d.ts +0 -76
- package/dist/cli/device-flow.js +0 -56
- package/dist/cli/doctor-daemon-line.js +0 -47
- package/dist/cli/doctor-rows.d.ts +0 -63
- package/dist/cli/doctor-rows.js +0 -65
- package/dist/cli/doctor-sessions-line.js +0 -69
- package/dist/cli/drive-attach.d.ts +0 -113
- package/dist/cli/drive-attach.js +0 -221
- package/dist/cli/drive-command.js +0 -107
- package/dist/cli/mcp-command.js +0 -174
- package/dist/cli/port-holder.js +0 -123
- package/dist/cli/status-next-action.d.ts +0 -51
- package/dist/cli/status-next-action.js +0 -60
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +0 -828
- package/dist/cloud/account-state.d.ts +0 -20
- package/dist/cloud/account-state.js +0 -65
- package/dist/cloud/cloud-config.d.ts +0 -57
- package/dist/cloud/cloud-config.js +0 -145
- package/dist/cloud/cloud-sync.d.ts +0 -190
- package/dist/cloud/cloud-sync.js +0 -354
- package/dist/cloud/sync-cycle.d.ts +0 -111
- package/dist/cloud/sync-cycle.js +0 -270
- package/dist/cloud/sync-daemon.d.ts +0 -53
- package/dist/cloud/sync-daemon.js +0 -260
- package/dist/cloud/sync-disk.js +0 -191
- package/dist/crawl/crawl-tools.d.ts +0 -7
- package/dist/crawl/crawl-tools.js +0 -87
- package/dist/crawl/crawl.d.ts +0 -98
- package/dist/crawl/crawl.js +0 -441
- package/dist/daemon/daemon-resilience.d.ts +0 -74
- package/dist/daemon/daemon-resilience.js +0 -318
- package/dist/daemon/daemon-resolve.d.ts +0 -113
- package/dist/daemon/daemon-resolve.js +0 -187
- package/dist/daemon/daemon-usefulness.d.ts +0 -61
- package/dist/daemon/daemon-usefulness.js +0 -62
- package/dist/daemon/daemon.d.ts +0 -95
- package/dist/daemon/daemon.js +0 -336
- package/dist/daemon/heartbeat.d.ts +0 -111
- package/dist/daemon/heartbeat.js +0 -141
- package/dist/daemon/idle-grace.d.ts +0 -32
- package/dist/daemon/idle-grace.js +0 -41
- package/dist/daemon/idle-shutdown.d.ts +0 -54
- package/dist/daemon/idle-shutdown.js +0 -98
- package/dist/daemon/state-dir.js +0 -59
- package/dist/daemon/wake-decision.d.ts +0 -32
- package/dist/daemon/wake-decision.js +0 -38
- package/dist/dev/stale-issue-guard.d.ts +0 -41
- package/dist/dev/stale-issue-guard.js +0 -75
- package/dist/domain/domain-model.js +0 -126
- package/dist/domain/domain-tools.d.ts +0 -2
- package/dist/domain/domain-tools.js +0 -94
- package/dist/domain/flow-risk.js +0 -80
- package/dist/ee/audit-log.js +0 -11
- package/dist/events/body-failures.d.ts +0 -4
- package/dist/events/body-failures.js +0 -113
- package/dist/events/contradiction-folds.d.ts +0 -45
- package/dist/events/contradiction-folds.js +0 -42
- package/dist/events/contradictions.d.ts +0 -170
- package/dist/events/contradictions.js +0 -718
- package/dist/events/declared.d.ts +0 -74
- package/dist/events/declared.js +0 -171
- package/dist/events/echo-mismatch.d.ts +0 -10
- package/dist/events/echo-mismatch.js +0 -299
- package/dist/events/event-filters.d.ts +0 -121
- package/dist/events/event-filters.js +0 -215
- package/dist/events/json-salvage.d.ts +0 -33
- package/dist/events/json-salvage.js +0 -96
- package/dist/events/lineage.d.ts +0 -52
- package/dist/events/lineage.js +0 -122
- package/dist/events/net-evidence.d.ts +0 -21
- package/dist/events/net-evidence.js +0 -81
- package/dist/events/observed-in-window.d.ts +0 -24
- package/dist/events/observed-in-window.js +0 -38
- package/dist/events/predicate-asks.d.ts +0 -30
- package/dist/events/predicate-asks.js +0 -48
- package/dist/events/predicate-console.d.ts +0 -13
- package/dist/events/predicate-console.js +0 -138
- package/dist/events/predicate-element.d.ts +0 -13
- package/dist/events/predicate-element.js +0 -214
- package/dist/events/predicate-eval.d.ts +0 -101
- package/dist/events/predicate-eval.js +0 -834
- package/dist/events/predicate-parse.d.ts +0 -17
- package/dist/events/predicate-parse.js +0 -175
- package/dist/events/predicate-precheck.d.ts +0 -8
- package/dist/events/predicate-precheck.js +0 -41
- package/dist/events/predicate-request-body.d.ts +0 -50
- package/dist/events/predicate-request-body.js +0 -120
- package/dist/events/predicate-route.d.ts +0 -66
- package/dist/events/predicate-route.js +0 -258
- package/dist/events/predicate-schema.d.ts +0 -168
- package/dist/events/predicate-schema.js +0 -501
- package/dist/events/predicate.d.ts +0 -74
- package/dist/events/predicate.js +0 -725
- package/dist/events/reaction.d.ts +0 -33
- package/dist/events/reaction.js +0 -59
- package/dist/events/reconcile.d.ts +0 -39
- package/dist/events/reconcile.js +0 -211
- package/dist/events/ring-buffer.d.ts +0 -41
- package/dist/events/ring-buffer.js +0 -151
- package/dist/events/split-text-miss.d.ts +0 -32
- package/dist/events/split-text-miss.js +0 -51
- package/dist/events/stale-response.d.ts +0 -3
- package/dist/events/stale-response.js +0 -186
- package/dist/events/testid-near-miss.d.ts +0 -22
- package/dist/events/testid-near-miss.js +0 -33
- package/dist/events/unit-mismatch.d.ts +0 -16
- package/dist/events/unit-mismatch.js +0 -167
- package/dist/flows/affected-tools.d.ts +0 -18
- package/dist/flows/affected-tools.js +0 -80
- package/dist/flows/affected.d.ts +0 -24
- package/dist/flows/affected.js +0 -35
- package/dist/flows/annotate-tools.d.ts +0 -15
- package/dist/flows/annotate-tools.js +0 -179
- package/dist/flows/assertion-tiers-store.d.ts +0 -16
- package/dist/flows/assertion-tiers-store.js +0 -98
- package/dist/flows/decision.d.ts +0 -25
- package/dist/flows/decision.js +0 -201
- package/dist/flows/empty-flow.js +0 -24
- package/dist/flows/flake-store.d.ts +0 -18
- package/dist/flows/flake-store.js +0 -58
- package/dist/flows/flake.d.ts +0 -56
- package/dist/flows/flow-classify.d.ts +0 -51
- package/dist/flows/flow-classify.js +0 -102
- package/dist/flows/flow-expect-grammar.d.ts +0 -33
- package/dist/flows/flow-expect-grammar.js +0 -155
- package/dist/flows/flow-intent.d.ts +0 -52
- package/dist/flows/flow-intent.js +0 -123
- package/dist/flows/flow-replay-run.d.ts +0 -43
- package/dist/flows/flow-replay-run.js +0 -478
- package/dist/flows/flow-replay.d.ts +0 -82
- package/dist/flows/flow-replay.js +0 -519
- package/dist/flows/flow-secret-field.d.ts +0 -14
- package/dist/flows/flow-secret-field.js +0 -22
- package/dist/flows/flow-sources.d.ts +0 -19
- package/dist/flows/flow-sources.js +0 -32
- package/dist/flows/flow-step-runners.d.ts +0 -52
- package/dist/flows/flow-step-runners.js +0 -315
- package/dist/flows/flow-store-for-session.d.ts +0 -31
- package/dist/flows/flow-success.d.ts +0 -32
- package/dist/flows/flow-success.js +0 -169
- package/dist/flows/flow-tools.d.ts +0 -15
- package/dist/flows/flow-tools.js +0 -639
- package/dist/flows/flow-upload-resolve.d.ts +0 -23
- package/dist/flows/flow-upload-resolve.js +0 -46
- package/dist/flows/flows.d.ts +0 -130
- package/dist/flows/flows.js +0 -870
- package/dist/flows/gate.js +0 -33
- package/dist/flows/heal-run.d.ts +0 -10
- package/dist/flows/heal-run.js +0 -139
- package/dist/flows/heal.js +0 -97
- package/dist/flows/predicate-to-expect.d.ts +0 -44
- package/dist/flows/predicate-to-expect.js +0 -130
- package/dist/flows/recording-backtrack.js +0 -73
- package/dist/flows/recordings.d.ts +0 -63
- package/dist/flows/recordings.js +0 -57
- package/dist/flows/replay.d.ts +0 -62
- package/dist/flows/replay.js +0 -337
- package/dist/flows/role-anchor-nearest.js +0 -45
- package/dist/flows/server-verify.d.ts +0 -15
- package/dist/flows/server-verify.js +0 -56
- package/dist/flows/suite-flakes.d.ts +0 -34
- package/dist/flows/suite-flakes.js +0 -32
- package/dist/flows/verify-change-tools.d.ts +0 -2
- package/dist/flows/verify-change-tools.js +0 -231
- package/dist/honesty/accepted-write.d.ts +0 -17
- package/dist/honesty/accepted-write.js +0 -22
- package/dist/honesty/already-true.d.ts +0 -16
- package/dist/honesty/already-true.js +0 -89
- package/dist/honesty/blind-spots.d.ts +0 -133
- package/dist/honesty/blind-spots.js +0 -248
- package/dist/honesty/body-capture-remedy.d.ts +0 -42
- package/dist/honesty/body-capture-remedy.js +0 -95
- package/dist/honesty/feature-capture.d.ts +0 -151
- package/dist/honesty/feature-capture.js +0 -233
- package/dist/honesty/gap-ledger.d.ts +0 -52
- package/dist/honesty/gap-ledger.js +0 -63
- package/dist/honesty/honesty.d.ts +0 -103
- package/dist/honesty/honesty.js +0 -95
- package/dist/honesty/instrumentation-gaps.d.ts +0 -95
- package/dist/honesty/instrumentation-gaps.js +0 -114
- package/dist/honesty/observability.d.ts +0 -38
- package/dist/honesty/observability.js +0 -40
- package/dist/honesty/tool-hit-rate.js +0 -90
- package/dist/honesty/uncaptured-bodies.d.ts +0 -23
- package/dist/honesty/uncaptured-bodies.js +0 -41
- package/dist/honesty/undeclared-change.d.ts +0 -51
- package/dist/honesty/undeclared-change.js +0 -56
- package/dist/honesty/unread-outcome.d.ts +0 -10
- package/dist/honesty/unread-outcome.js +0 -77
- package/dist/honesty/unsettled.d.ts +0 -58
- package/dist/honesty/unsettled.js +0 -127
- package/dist/honesty/verified.d.ts +0 -148
- package/dist/honesty/verified.js +0 -330
- package/dist/http-server.d.ts +0 -52
- package/dist/http-server.js +0 -381
- package/dist/impact/impact-recorder.d.ts +0 -46
- package/dist/impact/impact-recorder.js +0 -159
- package/dist/impact/impact-store.d.ts +0 -47
- package/dist/impact/impact-store.js +0 -255
- package/dist/input/network-detail.d.ts +0 -104
- package/dist/input/network-detail.js +0 -211
- package/dist/input/network-mock-tools.d.ts +0 -21
- package/dist/input/network-mock-tools.js +0 -124
- package/dist/input/network-mock.js +0 -61
- package/dist/input/real-input.d.ts +0 -222
- package/dist/input/real-input.js +0 -405
- package/dist/input/scroll-find.js +0 -111
- package/dist/input/scroll-tools.d.ts +0 -2
- package/dist/input/scroll-tools.js +0 -76
- package/dist/input/viewport-tools.d.ts +0 -2
- package/dist/input/viewport-tools.js +0 -72
- package/dist/intent/inline-intent.d.ts +0 -27
- package/dist/intent/inline-intent.js +0 -193
- package/dist/intent/intent-shard-store.d.ts +0 -73
- package/dist/intent/intent-shard-store.js +0 -203
- package/dist/intent/intent-shard.d.ts +0 -411
- package/dist/intent/intent-shard.js +0 -176
- package/dist/intent/intent-store.d.ts +0 -49
- package/dist/intent/intent-store.js +0 -133
- package/dist/intent/intent-subject.d.ts +0 -46
- package/dist/intent/intent-subject.js +0 -177
- package/dist/intent/intent-tools.d.ts +0 -2
- package/dist/intent/intent-tools.js +0 -143
- package/dist/intent/open-intents.d.ts +0 -43
- package/dist/intent/open-intents.js +0 -40
- package/dist/journal/ambient-store.d.ts +0 -13
- package/dist/journal/ambient-store.js +0 -45
- package/dist/journal/ambient.d.ts +0 -47
- package/dist/journal/ambient.js +0 -47
- package/dist/journal/attach-journal.d.ts +0 -30
- package/dist/journal/attach-journal.js +0 -30
- package/dist/journal/envelope-store.d.ts +0 -16
- package/dist/journal/envelope-store.js +0 -61
- package/dist/journal/envelope.d.ts +0 -230
- package/dist/journal/journal-query.d.ts +0 -32
- package/dist/journal/journal-query.js +0 -52
- package/dist/journal/journal-recorder.d.ts +0 -61
- package/dist/journal/journal-recorder.js +0 -115
- package/dist/journal/retention.d.ts +0 -20
- package/dist/journal/retention.js +0 -49
- package/dist/journal/session-end.d.ts +0 -32
- package/dist/journal/session-end.js +0 -51
- package/dist/journal/session-journal.d.ts +0 -24
- package/dist/journal/session-journal.js +0 -167
- package/dist/journal/workspace-gitignore.d.ts +0 -10
- package/dist/journal/workspace-gitignore.js +0 -59
- package/dist/license/license-env.d.ts +0 -29
- package/dist/license/license-env.js +0 -148
- package/dist/license/license.d.ts +0 -169
- package/dist/license/license.js +0 -289
- package/dist/mcp/mcp-is-error.d.ts +0 -13
- package/dist/mcp/mcp-is-error.js +0 -18
- package/dist/mcp/mcp-outage.d.ts +0 -32
- package/dist/mcp/mcp-outage.js +0 -55
- package/dist/mcp/mcp-post-transport.js +0 -109
- package/dist/mcp/mcp-proxy.d.ts +0 -110
- package/dist/mcp/mcp-proxy.js +0 -872
- package/dist/mcp/mcp.d.ts +0 -80
- package/dist/mcp/mcp.js +0 -536
- package/dist/mcp/proxy-daemon-probe.d.ts +0 -9
- package/dist/mcp/proxy-daemon-probe.js +0 -54
- package/dist/mcp/proxy-handshake.js +0 -192
- package/dist/mcp/proxy-lifecycle.d.ts +0 -92
- package/dist/mcp/proxy-lifecycle.js +0 -100
- package/dist/mcp/proxy-log.d.ts +0 -63
- package/dist/mcp/proxy-log.js +0 -132
- package/dist/mcp/server-instructions.d.ts +0 -18
- package/dist/mcp/server-instructions.js +0 -98
- package/dist/mcp/tool-catalog-cache.d.ts +0 -45
- package/dist/mcp/tool-catalog-cache.js +0 -77
- package/dist/memory/memory-tools.d.ts +0 -2
- package/dist/memory/memory-tools.js +0 -82
- package/dist/memory/project-memory.d.ts +0 -33
- package/dist/oracles/propose-consequences.d.ts +0 -22
- package/dist/oracles/propose-consequences.js +0 -106
- package/dist/pool/browser-pool.d.ts +0 -282
- package/dist/pool/browser-pool.js +0 -560
- package/dist/pool/lease-reaper.js +0 -40
- package/dist/pool/playwright-launcher.js +0 -150
- package/dist/pool/storage-seed.d.ts +0 -23
- package/dist/project/artifact-root.d.ts +0 -84
- package/dist/project/artifact-root.js +0 -112
- package/dist/project/fs-port.d.ts +0 -47
- package/dist/project/fs-port.js +0 -54
- package/dist/project/learned-routes.d.ts +0 -24
- package/dist/project/learned-routes.js +0 -63
- package/dist/project/memory-fs.d.ts +0 -10
- package/dist/project/project-store.d.ts +0 -54
- package/dist/project/project-store.js +0 -201
- package/dist/project/project-tools.d.ts +0 -2
- package/dist/project/project-tools.js +0 -155
- package/dist/project/reticle-dir.d.ts +0 -102
- package/dist/project/reticle-dir.js +0 -188
- package/dist/project/session-root.d.ts +0 -23
- package/dist/project/session-root.js +0 -38
- package/dist/runs/build-verification-run.d.ts +0 -29
- package/dist/runs/build-verification-run.js +0 -70
- package/dist/runs/context-tools.d.ts +0 -2
- package/dist/runs/context-tools.js +0 -89
- package/dist/runs/render-report.js +0 -69
- package/dist/runs/replay-mapping.js +0 -34
- package/dist/runs/reticle-runner.d.ts +0 -60
- package/dist/runs/reticle-runner.js +0 -95
- package/dist/runs/run-store.d.ts +0 -54
- package/dist/runs/run-store.js +0 -147
- package/dist/runs/run-tools.d.ts +0 -9
- package/dist/runs/run-tools.js +0 -82
- package/dist/runs/runner-port.d.ts +0 -13
- package/dist/runs/runner-port.js +0 -22
- package/dist/runs/verification-sync.d.ts +0 -12
- package/dist/runs/verification-sync.js +0 -87
- package/dist/session/command-timeout.d.ts +0 -46
- package/dist/session/command-timeout.js +0 -42
- package/dist/session/connection-memory.d.ts +0 -59
- package/dist/session/connection-memory.js +0 -108
- package/dist/session/dev-server-probe.js +0 -147
- package/dist/session/live-control-tools.d.ts +0 -15
- package/dist/session/live-control-tools.js +0 -242
- package/dist/session/no-session-diagnosis.d.ts +0 -176
- package/dist/session/no-session-diagnosis.js +0 -477
- package/dist/session/no-session-next-action.d.ts +0 -72
- package/dist/session/no-session-next-action.js +0 -174
- package/dist/session/no-session-watch.js +0 -335
- package/dist/session/observed-state.d.ts +0 -60
- package/dist/session/observed-state.js +0 -121
- package/dist/session/output-budget.d.ts +0 -49
- package/dist/session/output-budget.js +0 -67
- package/dist/session/session-health.d.ts +0 -138
- package/dist/session/session-health.js +0 -154
- package/dist/session/session-manager.d.ts +0 -76
- package/dist/session/session-manager.js +0 -464
- package/dist/session/session-reaper.d.ts +0 -36
- package/dist/session/session-reaper.js +0 -93
- package/dist/session/session-recommendation.js +0 -29
- package/dist/session/session-replaced.d.ts +0 -24
- package/dist/session/session-replaced.js +0 -29
- package/dist/session/session-tools.d.ts +0 -8
- package/dist/session/session-tools.js +0 -42
- package/dist/session/session.d.ts +0 -280
- package/dist/session/session.js +0 -891
- package/dist/session/stall-clock.js +0 -48
- package/dist/setup/agent-configs.d.ts +0 -97
- package/dist/setup/agent-configs.js +0 -333
- package/dist/setup/agent-writer.d.ts +0 -52
- package/dist/setup/agent-writer.js +0 -115
- package/dist/setup/auto-approve.js +0 -153
- package/dist/setup/bridge-port.d.ts +0 -15
- package/dist/setup/bridge-port.js +0 -24
- package/dist/setup/confirm.js +0 -205
- package/dist/setup/dev-server-wait.d.ts +0 -68
- package/dist/setup/dev-server-wait.js +0 -67
- package/dist/setup/drive-agent.d.ts +0 -70
- package/dist/setup/drive-agent.js +0 -171
- package/dist/setup/drive-plan.d.ts +0 -69
- package/dist/setup/drive-plan.js +0 -130
- package/dist/setup/ensure-daemon.js +0 -58
- package/dist/setup/init-host.js +0 -26
- package/dist/setup/init-runtime.d.ts +0 -41
- package/dist/setup/init-runtime.js +0 -167
- package/dist/setup/node-effects.d.ts +0 -63
- package/dist/setup/node-effects.js +0 -225
- package/dist/setup/page-probe.d.ts +0 -44
- package/dist/setup/page-probe.js +0 -49
- package/dist/setup/remaining-steps.js +0 -31
- package/dist/setup/run-setup.d.ts +0 -103
- package/dist/setup/run-setup.js +0 -294
- package/dist/setup/setup-command.d.ts +0 -46
- package/dist/setup/setup-command.js +0 -207
- package/dist/setup/setup-options.d.ts +0 -76
- package/dist/setup/setup-options.js +0 -68
- package/dist/tools/act-capsule.d.ts +0 -33
- package/dist/tools/act-capsule.js +0 -53
- package/dist/tools/act-danger.js +0 -69
- package/dist/tools/act-helpers.d.ts +0 -17
- package/dist/tools/act-helpers.js +0 -40
- package/dist/tools/act-observation.d.ts +0 -42
- package/dist/tools/act-observation.js +0 -36
- package/dist/tools/act-preflight.d.ts +0 -20
- package/dist/tools/act-preflight.js +0 -103
- package/dist/tools/act-sequence-tool.js +0 -135
- package/dist/tools/act-target.d.ts +0 -18
- package/dist/tools/act-target.js +0 -56
- package/dist/tools/act-tools.d.ts +0 -20
- package/dist/tools/act-tools.js +0 -763
- package/dist/tools/assert-grade.d.ts +0 -42
- package/dist/tools/assert-grade.js +0 -108
- package/dist/tools/assert-source.d.ts +0 -52
- package/dist/tools/assert-source.js +0 -74
- package/dist/tools/assert-verdict.d.ts +0 -48
- package/dist/tools/assert-verdict.js +0 -197
- package/dist/tools/browser-tools.d.ts +0 -2
- package/dist/tools/browser-tools.js +0 -115
- package/dist/tools/contract-tools.d.ts +0 -2
- package/dist/tools/contract-tools.js +0 -98
- package/dist/tools/coverage-tools.d.ts +0 -18
- package/dist/tools/coverage-tools.js +0 -175
- package/dist/tools/dynamic-tools.d.ts +0 -7
- package/dist/tools/dynamic-tools.js +0 -257
- package/dist/tools/error-recovery.d.ts +0 -110
- package/dist/tools/error-recovery.js +0 -499
- package/dist/tools/feedback-invite.d.ts +0 -48
- package/dist/tools/feedback-invite.js +0 -71
- package/dist/tools/feedback-tools.d.ts +0 -35
- package/dist/tools/feedback-tools.js +0 -228
- package/dist/tools/invoke-tool.d.ts +0 -10
- package/dist/tools/invoke-tool.js +0 -569
- package/dist/tools/lease-hint.d.ts +0 -49
- package/dist/tools/lease-hint.js +0 -124
- package/dist/tools/lease-tools.d.ts +0 -143
- package/dist/tools/lease-tools.js +0 -688
- package/dist/tools/lineage-tools.d.ts +0 -14
- package/dist/tools/lineage-tools.js +0 -64
- package/dist/tools/merge-tools.d.ts +0 -51
- package/dist/tools/merge-tools.js +0 -69
- package/dist/tools/merged-name-redirect.d.ts +0 -26
- package/dist/tools/merged-name-redirect.js +0 -77
- package/dist/tools/navigate-arrival.d.ts +0 -68
- package/dist/tools/numeric-bounds.d.ts +0 -89
- package/dist/tools/numeric-bounds.js +0 -125
- package/dist/tools/observe-tools.js +0 -578
- package/dist/tools/read-tools.js +0 -569
- package/dist/tools/real-input-attempt.d.ts +0 -68
- package/dist/tools/real-input-attempt.js +0 -360
- package/dist/tools/reconcile-tools.js +0 -126
- package/dist/tools/resolve-target.js +0 -116
- package/dist/tools/snapshot-delta.d.ts +0 -92
- package/dist/tools/snapshot-delta.js +0 -356
- package/dist/tools/tool-kit.d.ts +0 -221
- package/dist/tools/tool-kit.js +0 -114
- package/dist/tools/tool-names.d.ts +0 -112
- package/dist/tools/tool-names.js +0 -112
- package/dist/tools/tool-surface.d.ts +0 -222
- package/dist/tools/tool-surface.js +0 -439
- package/dist/tools/tools-helpers.d.ts +0 -42
- package/dist/tools/tools-helpers.js +0 -87
- package/dist/tools/tools.d.ts +0 -20
- package/dist/tools/tools.js +0 -739
- package/dist/tools/unadvertised-help.js +0 -42
- package/dist/tools/verify-next-baton.js +0 -52
- package/dist/update/nudge-credit.js +0 -53
- package/dist/update/reticle-deps.d.ts +0 -9
- package/dist/update/reticle-deps.js +0 -27
- package/dist/update/sdk-sync.d.ts +0 -20
- package/dist/update/sdk-sync.js +0 -22
- package/dist/update/update-checker.js +0 -122
- package/dist/update/update-nudge.d.ts +0 -92
- package/dist/update/update-nudge.js +0 -214
- package/dist/update/updater.d.ts +0 -54
- package/dist/update/updater.js +0 -190
- package/dist/version/peer-announce.js +0 -32
- package/dist/version/sdk-fix.js +0 -127
- package/dist/version/server-version.js +0 -13
- package/dist/version/version-nudge.js +0 -61
- package/dist/version/version-skew.d.ts +0 -93
- package/dist/version/version-skew.js +0 -147
- package/dist/visual/visual-store.d.ts +0 -22
- package/dist/visual/visual-store.js +0 -66
- package/dist/visual/visual-tools.d.ts +0 -26
- package/dist/visual/visual-tools.js +0 -328
- package/docs/docs.json +0 -369
- package/docs/fixtures.md +0 -51
- package/docs/gate-plan.md +0 -104
- package/docs/gates.md +0 -131
- package/docs/style.css +0 -14
- package/docs/telemetry-contract.md +0 -390
- package/docs/telemetry-events.mdx +0 -442
- package/docs/tools-act-and-wait.mdx +0 -173
- package/docs/tools-act-sequence.mdx +0 -153
- package/docs/tools-act.mdx +0 -95
- package/docs/tools-assert.mdx +0 -129
- package/docs/tools-console.mdx +0 -63
- package/docs/tools-inspect.mdx +0 -88
- package/docs/tools-navigate.mdx +0 -107
- package/docs/tools-network.mdx +0 -119
- package/docs/tools-observe.mdx +0 -145
- package/docs/tools-overview.mdx +0 -160
- package/docs/tools-query.mdx +0 -126
- package/docs/tools-sessions.mdx +0 -94
- package/docs/tools-snapshot.mdx +0 -129
- package/docs/tools-state.mdx +0 -104
- package/docs/tools-wait-for.mdx +0 -85
- /package/dist/{cli → command/cli/answers}/gate-exit.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-exit.js +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.js +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.js +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-keystore.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.js +0 -0
- /package/dist/{cli → command/cli}/cli-doctor.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.js +0 -0
- /package/dist/{cli → command/cli}/cli-update-commands.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-cli.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-login.d.ts +0 -0
- /package/dist/{cli → command/cli}/daemon-start-options.js +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-daemon-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-sessions-line.d.ts +0 -0
- /package/dist/{cli → command/cli/drive}/drive-command.d.ts +0 -0
- /package/dist/{cli → command/cli}/mcp-command.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/port-holder.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.js +0 -0
- /package/dist/{cli → command/cli}/project-name.d.ts +0 -0
- /package/dist/{cli → command/cli}/project-name.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.js +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.d.ts +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.js +0 -0
- /package/dist/{daemon → command/daemon}/state-dir.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.js +0 -0
- /package/dist/{setup → command/setup}/approval-migration.d.ts +0 -0
- /package/dist/{setup → command/setup}/approval-migration.js +0 -0
- /package/dist/{setup → command/setup}/auto-approve.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/ensure-daemon.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.js +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.d.ts +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.js +0 -0
- /package/dist/{setup → command/setup/init}/init-host.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.js +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.js +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.js +0 -0
- /package/dist/{setup → command/setup}/remaining-steps.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.js +0 -0
- /package/dist/{setup → command/setup/terminal}/confirm.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.js +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.js +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.js +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.js +0 -0
- /package/dist/{update → command/update}/nudge-credit.d.ts +0 -0
- /package/dist/{update → command/update}/update-checker.d.ts +0 -0
- /package/dist/{version → command/version/identity}/server-version.d.ts +0 -0
- /package/dist/{version → command/version}/peer-announce.d.ts +0 -0
- /package/dist/{version → command/version}/sdk-fix.d.ts +0 -0
- /package/dist/{version → command/version}/version-nudge.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.js +0 -0
- /package/dist/{ee → features/ee}/audit-log.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.js +0 -0
- /package/dist/{visual → features/visual}/visual-diff.d.ts +0 -0
- /package/dist/{visual → features/visual}/visual-diff.js +0 -0
- /package/dist/{capsule → judgement/capsule}/divergence.js +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.d.ts +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.js +0 -0
- /package/dist/{domain → judgement/domain}/domain-model.d.ts +0 -0
- /package/dist/{domain → judgement/domain}/flow-risk.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.js +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.js +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.js +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.js +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.js +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.js +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.js +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.d.ts +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/render-report.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/replay-mapping.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.js +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.js +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.js +0 -0
- /package/dist/{flows → language/flows}/buddy-status.d.ts +0 -0
- /package/dist/{flows → language/flows}/buddy-status.js +0 -0
- /package/dist/{flows → language/flows/change}/gate.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.js +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.js +0 -0
- /package/dist/{flows → language/flows}/empty-flow.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.js +0 -0
- /package/dist/{flows → language/flows}/flow-report.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-report.js +0 -0
- /package/dist/{flows → language/flows}/flow-scope.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-scope.js +0 -0
- /package/dist/{flows → language/flows}/flow-store-for-session.js +0 -0
- /package/dist/{flows → language/flows}/heal.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/flake.js +0 -0
- /package/dist/{flows → language/flows/recording}/recording-backtrack.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.js +0 -0
- /package/dist/{flows → language/flows}/role-anchor-nearest.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.js +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.js +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.js +0 -0
- /package/dist/{platform.d.ts → machine/platform.d.ts} +0 -0
- /package/dist/{platform.js → machine/platform.js} +0 -0
- /package/dist/{temp-dir.d.ts → machine/temp-dir.d.ts} +0 -0
- /package/dist/{temp-dir.js → machine/temp-dir.js} +0 -0
- /package/dist/{cloud → memory/cloud}/sync-disk.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.js +0 -0
- /package/dist/{journal → memory/journal}/envelope.js +0 -0
- /package/dist/{journal → memory/journal}/rollups.d.ts +0 -0
- /package/dist/{journal → memory/journal}/rollups.js +0 -0
- /package/dist/{project → memory/project}/baselines.d.ts +0 -0
- /package/dist/{project → memory/project}/baselines.js +0 -0
- /package/dist/{project → memory/project}/file-lock.d.ts +0 -0
- /package/dist/{project → memory/project}/file-lock.js +0 -0
- /package/dist/{project → memory/project}/memory-fs.js +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.d.ts +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.js +0 -0
- /package/dist/memory/{project-memory.js → recall/project-memory.js} +0 -0
- /package/dist/{session → memory/recall}/registered-projects.d.ts +0 -0
- /package/dist/{session → memory/recall}/registered-projects.js +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.js +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.js +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.js +0 -0
- /package/dist/{input → portal/input}/driven-redaction.d.ts +0 -0
- /package/dist/{input → portal/input}/driven-redaction.js +0 -0
- /package/dist/{input → portal/input}/network-mock.d.ts +0 -0
- /package/dist/{input → portal/input}/scroll-find.d.ts +0 -0
- /package/dist/{pool → portal/pool}/lease-reaper.d.ts +0 -0
- /package/dist/{pool → portal/pool}/playwright-launcher.d.ts +0 -0
- /package/dist/{pool → portal/pool}/storage-seed.js +0 -0
- /package/dist/{session → portal/session}/control-envelope.d.ts +0 -0
- /package/dist/{session → portal/session}/control-envelope.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.d.ts +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-server-probe.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.js +0 -0
- /package/dist/{session → portal/session}/fake-session.d.ts +0 -0
- /package/dist/{session → portal/session}/fake-session.js +0 -0
- /package/dist/{session → portal/session/human}/live-control.d.ts +0 -0
- /package/dist/{session → portal/session/human}/live-control.js +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.d.ts +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.js +0 -0
- /package/dist/{session → portal/session/human}/review-store.d.ts +0 -0
- /package/dist/{session → portal/session/human}/review-store.js +0 -0
- /package/dist/{session → portal/session}/last-act.d.ts +0 -0
- /package/dist/{session → portal/session}/last-act.js +0 -0
- /package/dist/{session → portal/session}/lease-visibility.d.ts +0 -0
- /package/dist/{session → portal/session}/lease-visibility.js +0 -0
- /package/dist/{session → portal/session}/no-session-watch.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.js +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.js +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.js +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.js +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.js +0 -0
- /package/dist/{session → portal/session/presence}/session-recommendation.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.js +0 -0
- /package/dist/{session → portal/session}/session-reconnect.d.ts +0 -0
- /package/dist/{session → portal/session}/session-reconnect.js +0 -0
- /package/dist/{session → portal/session}/session-successor.d.ts +0 -0
- /package/dist/{session → portal/session}/session-successor.js +0 -0
- /package/dist/{session → portal/session}/stall-clock.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.js +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.js +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.js +0 -0
- /package/dist/{loopback-agent.d.ts → surface/loopback-agent.d.ts} +0 -0
- /package/dist/{loopback-agent.js → surface/loopback-agent.js} +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.js +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/mcp-post-transport.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-handshake.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.js +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.js +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-danger.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-arrival.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.js +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.js +0 -0
- /package/dist/{tools → surface/tools/act}/resolve-target.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.js +0 -0
- /package/dist/{tools → surface/tools}/act-sequence-tool.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.js +0 -0
- /package/dist/{tools → surface/tools}/observe-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.js +0 -0
- /package/dist/{tools → surface/tools}/read-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools}/reconcile-tools.d.ts +0 -0
- /package/dist/{honesty → surface/tools}/tool-hit-rate.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.js +0 -0
- /package/dist/{tools → surface/tools}/unadvertised-help.d.ts +0 -0
- /package/dist/{tools → surface/tools}/verify-next-baton.d.ts +0 -0
- /package/docs/{tools-session-and-feedback.mdx → tools/session-and-feedback.mdx} +0 -0
- /package/docs/{tools-tools-and-run.mdx → tools/tools-and-run.mdx} +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "No browser session connected", as something an agent can RUN.
|
|
3
|
+
*
|
|
4
|
+
* The prose diagnosis next door is good and it is prose: the agent has to read four hedged sentences
|
|
5
|
+
* and decide which of them is about its situation. This is the same decision, decided here, as one
|
|
6
|
+
* value plus one literal command — so the branch happens in the daemon, which has the evidence,
|
|
7
|
+
* rather than in the agent, which does not.
|
|
8
|
+
*
|
|
9
|
+
* The rule that outranks helpfulness: never invent a command. If the project has no dev script, this
|
|
10
|
+
* says there is none. A command that does not exist sends the agent chasing a phantom error in its
|
|
11
|
+
* own repo.
|
|
12
|
+
*
|
|
13
|
+
* Pure. The facts arrive from the watch; nothing here touches the disk or the clock.
|
|
14
|
+
*/
|
|
15
|
+
import { NoSessionAction, ReticleEnv } from '@reticlehq/core';
|
|
16
|
+
/** `reticle init`, the only command here that is Reticle's own and so cannot be wrong. */
|
|
17
|
+
const INIT_COMMAND = 'reticle init';
|
|
18
|
+
const OPEN_COMMAND = 'reticle open';
|
|
19
|
+
const LOCALHOST = 'http://localhost';
|
|
20
|
+
export function nextActionFor(facts) {
|
|
21
|
+
// FIRST, above every other cause, because it is the only one supported by positive evidence about
|
|
22
|
+
// a daemon rather than by an absence. This project's own connection record names a live daemon
|
|
23
|
+
// that is not this one, which means the app is up and instrumented and the agent is simply looking
|
|
24
|
+
// at the wrong process. Every branch below would send it to fix something that is not broken —
|
|
25
|
+
// start a dev server that is running, open a page that is open, or re-run `init` over a config
|
|
26
|
+
// that works — and the agent has no way to suspect the real cause from here.
|
|
27
|
+
const splitBrain = facts.splitBrain;
|
|
28
|
+
if (splitBrain !== undefined) {
|
|
29
|
+
return { action: NoSessionAction.DAEMON_SPLIT, reason: splitBrain };
|
|
30
|
+
}
|
|
31
|
+
// `authRefused` is checked here and not only further down, because this branch short-circuits.
|
|
32
|
+
//
|
|
33
|
+
// Both refusal branches below were already written and already right, and neither could be
|
|
34
|
+
// reached once a session had ever connected: `everConnected` is a LIFETIME fact and won. The
|
|
35
|
+
// payload then disagreed with itself — the message said the daemon had refused a page on its
|
|
36
|
+
// token while the next action beside it said the tab had been closed and offered to reopen it,
|
|
37
|
+
// which reopens a page that will be refused again. Measured on a token rotation: `status` said
|
|
38
|
+
// "reopen the tab" while the daemon's own log said `authentication failed: wrong pairing token`.
|
|
39
|
+
//
|
|
40
|
+
// This is only correct because `authRefused` means "refused, and nothing has connected since"
|
|
41
|
+
// (`connectedSinceLastClosure` in the manager). Read as the weaker "a refusal was recorded at
|
|
42
|
+
// some point", the flip trades this bug for its mirror image and blames the token for a tab the
|
|
43
|
+
// human closed. The ordering belongs to the fact; what this branch does with it is then obvious.
|
|
44
|
+
if (facts.everConnected && true !== facts.authRefused) {
|
|
45
|
+
const listening = facts.listening;
|
|
46
|
+
const only = 1 === listening.length ? listening[0] : undefined;
|
|
47
|
+
const bound = 0 === listening.length
|
|
48
|
+
? ''
|
|
49
|
+
: only === undefined
|
|
50
|
+
? ` An app is already listening on ${listening.join(', ')}; just open the URL the human names — do not start a second stack.`
|
|
51
|
+
: ` An app is already listening on ${String(only)}; just open ${LOCALHOST}:${String(only)} — do not start a second stack.`;
|
|
52
|
+
return {
|
|
53
|
+
action: NoSessionAction.REOPEN_APP,
|
|
54
|
+
...(only === undefined
|
|
55
|
+
? {}
|
|
56
|
+
: { command: `${OPEN_COMMAND} ${LOCALHOST}:${String(only)}`, port: only }),
|
|
57
|
+
reason: 'a session was connected to this daemon earlier, so the wiring is correct — the tab was ' +
|
|
58
|
+
'closed, reloaded, or the lease aged out. Reopen the app, or take one you own with ' +
|
|
59
|
+
'reticle_lease {action:"acquire", url}.' +
|
|
60
|
+
bound,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const configsElsewhere = facts.configsElsewhere ?? [];
|
|
64
|
+
if (!facts.initialized && configsElsewhere.length > 0) {
|
|
65
|
+
const named = configsElsewhere
|
|
66
|
+
.map((config) => config.projectId === undefined
|
|
67
|
+
? config.directory
|
|
68
|
+
: `${config.directory} ('${config.projectId}')`)
|
|
69
|
+
.join(', ');
|
|
70
|
+
const projectIds = configsElsewhere.flatMap((config) => config.projectId === undefined ? [] : [config.projectId]);
|
|
71
|
+
const leaseAlternative = 0 === projectIds.length
|
|
72
|
+
? ''
|
|
73
|
+
: ' Alternatively, acquire the app URL explicitly with reticle_lease ' +
|
|
74
|
+
'{action:"acquire", url, projectId} using the matching projectId above.';
|
|
75
|
+
return {
|
|
76
|
+
action: NoSessionAction.OPEN_APP,
|
|
77
|
+
reason: `a \`.reticle.json\` was found outside this daemon's directory: ${named}. This is a ` +
|
|
78
|
+
"scope problem, not an install problem. Restart the daemon from the app's directory (or " +
|
|
79
|
+
`point it there), then open the app.${leaseAlternative}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (0 === facts.listening.length) {
|
|
83
|
+
const dev = facts.dev;
|
|
84
|
+
if (dev === undefined) {
|
|
85
|
+
return {
|
|
86
|
+
action: NoSessionAction.START_DEV_SERVER,
|
|
87
|
+
reason: 'nothing is listening on the ports Reticle scans, so the app is probably not running — ' +
|
|
88
|
+
'but this project declares no dev script (no `dev`, `develop` or `start` in its ' +
|
|
89
|
+
'package.json), so there is no command to hand you. Ask the human how their app is ' +
|
|
90
|
+
'started, and for the URL it serves on.',
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
action: NoSessionAction.START_DEV_SERVER,
|
|
95
|
+
command: dev.command,
|
|
96
|
+
...(dev.port === undefined ? {} : { port: dev.port }),
|
|
97
|
+
// "Probably", to match the branch above it and the paragraph beside it.
|
|
98
|
+
//
|
|
99
|
+
// The same fact was stated at two confidence levels by one function: no dev script said the
|
|
100
|
+
// app was "probably not running", and THIS branch — the one that hands over a command to run
|
|
101
|
+
// — asserted it flatly. That is the branch where being wrong costs something, because the
|
|
102
|
+
// agent then starts a SECOND dev server on a second port, which the guard below calls the
|
|
103
|
+
// exact confusion this probe exists to prevent.
|
|
104
|
+
//
|
|
105
|
+
// It also contradicted its own payload: the prose beside it says the scan is narrow, that a
|
|
106
|
+
// server on any other port is invisible to it, and that a running app should be checked for
|
|
107
|
+
// rather than assumed away. Measured on a machine with three dev servers up on ports the scan
|
|
108
|
+
// does not cover, it reported the app was not running.
|
|
109
|
+
reason: 'nothing is listening on the ports Reticle scans, so the app is probably not running — ' +
|
|
110
|
+
'though that scan is narrow, so if it IS up on another port, ask for its URL instead of ' +
|
|
111
|
+
`starting a second one. This is the project's own \`${dev.script}\` script — run it in the ` +
|
|
112
|
+
'background, tell the human it is running, then call reticle_sessions again.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Something IS up. Whatever else is true, do NOT hand back a start command: a second dev server on
|
|
116
|
+
// a second port is the exact confusion the probe exists to prevent.
|
|
117
|
+
const ports = facts.listening.join(', ');
|
|
118
|
+
const only = 1 === facts.listening.length ? facts.listening[0] : undefined;
|
|
119
|
+
// A refused dial outranks the absence of a local config, for the same reason `previouslyConnected`
|
|
120
|
+
// does: it is positive evidence about the app, and `initialized` only ever answers "is there a
|
|
121
|
+
// `.reticle.json` in the ONE directory this daemon stands in". A globally-registered daemon stands
|
|
122
|
+
// in `/` or `$HOME`, so that answer is no for every project it serves -- and every page it turns
|
|
123
|
+
// away is proof that the project it turned away is wired.
|
|
124
|
+
// A refusal against a project that IS initialised here. The daemon has the config, so this is not
|
|
125
|
+
// a scope problem — the page reached the right daemon and presented a credential it would not
|
|
126
|
+
// accept. The usual cause is a dev server that shares no filesystem with the daemon (Docker, a
|
|
127
|
+
// devcontainer, WSL): the build plugin reads-or-mints the pairing token from `$HOME/.reticle`,
|
|
128
|
+
// which over there is a different file, so it mints its own and every page is refused. The daemon
|
|
129
|
+
// holds every fact needed to say so, which is why the reason below says it rather than repeating
|
|
130
|
+
// `authentication failed`.
|
|
131
|
+
if (true === facts.initialized && true === facts.authRefused) {
|
|
132
|
+
return {
|
|
133
|
+
action: NoSessionAction.OPEN_APP,
|
|
134
|
+
...(only === undefined ? {} : { port: only }),
|
|
135
|
+
reason: `a page dialled this daemon and was refused on the pairing token (${ports} listening), so ` +
|
|
136
|
+
'the app IS running and instrumented and this project IS wired — the page simply presented ' +
|
|
137
|
+
'a token this daemon does not own. The usual cause is a dev server that does not share a ' +
|
|
138
|
+
'filesystem with the daemon (Docker, a devcontainer, WSL): the build plugin reads the token ' +
|
|
139
|
+
'from `$HOME/.reticle/pairing-token`, which over there is a different file, so it mints its ' +
|
|
140
|
+
"own. Point the plugin at the daemon's copy — mount `~/.reticle/pairing-token` into the " +
|
|
141
|
+
`container read-only and set \`${ReticleEnv.PAIRING_TOKEN_DIR}\` to the directory holding ` +
|
|
142
|
+
'it — then ' +
|
|
143
|
+
'restart the dev server, because the token is inlined when Vite resolves its config and ' +
|
|
144
|
+
'kept in the prebundled module. Reloading the page serves that same token, whether the ' +
|
|
145
|
+
'dev server is on this machine or in a container.',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (!facts.initialized && true === facts.authRefused) {
|
|
149
|
+
return {
|
|
150
|
+
action: NoSessionAction.OPEN_APP,
|
|
151
|
+
...(only === undefined ? {} : { port: only }),
|
|
152
|
+
reason: `a page dialled this daemon and was refused on the pairing token, so the app IS running ` +
|
|
153
|
+
`and instrumented (${ports} listening) — this is a SCOPE problem, not an install problem. ` +
|
|
154
|
+
'This daemon was started outside the project (an IDE that registers the MCP server ' +
|
|
155
|
+
'globally starts it in `/` or your home directory), so it has no `.reticle.json` to match ' +
|
|
156
|
+
'the page against. Do NOT run `reticle init`: the config it would write is already correct ' +
|
|
157
|
+
'somewhere else. Take a context you own instead with reticle_lease {action:"acquire", url, ' +
|
|
158
|
+
"projectId}, or restart the daemon from the app's own directory.",
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if (!facts.initialized && true !== facts.previouslyConnected) {
|
|
162
|
+
return {
|
|
163
|
+
action: NoSessionAction.RUN_INIT,
|
|
164
|
+
command: INIT_COMMAND,
|
|
165
|
+
...(only === undefined ? {} : { port: only }),
|
|
166
|
+
reason: `something is listening (${ports}) but no \`.reticle.json\` was found, so the app may ` +
|
|
167
|
+
"carry no Reticle SDK. Run this in the APP's own directory — in a monorepo that is not " +
|
|
168
|
+
'where this daemon stands — then restart the dev server.',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
if (only === undefined) {
|
|
172
|
+
return {
|
|
173
|
+
action: NoSessionAction.OPEN_APP,
|
|
174
|
+
reason: `this project is wired and no page is open. Several ports are listening (${ports}) and ` +
|
|
175
|
+
'none of them can be attributed to this project, so open the one the human names: ' +
|
|
176
|
+
`\`${OPEN_COMMAND} <url>\`.`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Two causes sit under this branch and only one of them is fixed by opening a page.
|
|
180
|
+
//
|
|
181
|
+
// The prose diagnosis next door already ranks them and puts the stale bundle first: `init` writes
|
|
182
|
+
// the plugin into a config the RUNNING dev server has already read, so the served bundle carries
|
|
183
|
+
// no SDK and reloading it cannot ever produce a session. This function — the half an agent
|
|
184
|
+
// actually executes — used to say only "open the app", which is the answer to the OTHER cause.
|
|
185
|
+
// An agent that follows it opens a bundle with no Reticle in it, sees no session, and has been
|
|
186
|
+
// given no reason to suspect the one thing that would have worked.
|
|
187
|
+
//
|
|
188
|
+
// Named only while nothing has EVER connected. Once a session has been here the wiring is proven
|
|
189
|
+
// and sending an agent to restart a working dev server is a wild goose chase.
|
|
190
|
+
const neverConnected = true !== facts.previouslyConnected;
|
|
191
|
+
return {
|
|
192
|
+
action: NoSessionAction.OPEN_APP,
|
|
193
|
+
command: `${OPEN_COMMAND} ${LOCALHOST}:${String(only)}`,
|
|
194
|
+
port: only,
|
|
195
|
+
reason: neverConnected
|
|
196
|
+
? 'this project is wired and a dev server is listening, but no app has ever connected to ' +
|
|
197
|
+
'this daemon — Reticle only ever sees a page a browser has LOADED, and nothing has loaded ' +
|
|
198
|
+
'one. If opening it does not produce a session, the dev server is older than the Reticle ' +
|
|
199
|
+
'plugin and its bundle carries no SDK: restart the dev server (do not rely on HMR) and ' +
|
|
200
|
+
'load the page again.'
|
|
201
|
+
: 'this project is wired and a dev server is listening — Reticle only ever sees a page a ' +
|
|
202
|
+
'browser has LOADED, and nothing has loaded one.',
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** The same action as one sentence, for the prose message the human reads. */
|
|
206
|
+
export function renderNextAction(next) {
|
|
207
|
+
const command = next.command;
|
|
208
|
+
return command === undefined
|
|
209
|
+
? `NEXT ACTION: ${next.reason}`
|
|
210
|
+
: `NEXT ACTION: run \`${command}\` — ${next.reason}`;
|
|
211
|
+
}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps the "why is nothing connected" diagnosis fresh, without putting a probe on the hot path.
|
|
3
|
+
*
|
|
4
|
+
* `SessionManager.resolve` is synchronous and runs on every tool call, so it cannot await a port
|
|
5
|
+
* scan. This refreshes the answer in the background and hands the manager a closure that reads the
|
|
6
|
+
* cached result — a hint in an error message is exactly the sort of thing that may be a few seconds
|
|
7
|
+
* stale.
|
|
8
|
+
*
|
|
9
|
+
* It only probes while NOTHING is connected. Once a session is live the question is moot, and a
|
|
10
|
+
* daemon that outlives the agent by hours has no business scanning ports it does not need.
|
|
11
|
+
*/
|
|
12
|
+
import { probeDevServers, probeDevServerStates } from './dev-server/dev-server-probe.js';
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
import { registeredElsewhere } from '../../memory/recall/registered-projects.js';
|
|
15
|
+
import { explainNoSession } from './no-session-diagnosis.js';
|
|
16
|
+
import { detectDevCommand } from './dev-server/dev-command.js';
|
|
17
|
+
import { nextActionFor, renderNextAction } from './no-session-next-action.js';
|
|
18
|
+
import { readProjectFramework, readProjectId, readProjectPort, } from '../../command/cli/ports/resolve/cli-port.js';
|
|
19
|
+
import { discoverProjectConfigs } from '../../command/cli/config/config-discovery.js';
|
|
20
|
+
import { hasProjectConnectedBefore, rememberConnected, } from '../../memory/recall/prior/connection-memory.js';
|
|
21
|
+
import { isAlive, reticleStateHome } from '../../command/daemon/daemon.js';
|
|
22
|
+
import { daemonsServingProjectElsewhere, splitBrainNote } from '../../command/daemon/daemon-resolve.js';
|
|
23
|
+
import { stallUptime } from './stall-clock.js';
|
|
24
|
+
import { probeDaemon } from '../../surface/mcp/mcp-proxy.js';
|
|
25
|
+
import { findOccupiedSiblings } from '../../command/cli/ports/sibling-ports.js';
|
|
26
|
+
import { isAuthRefusalReason } from '../bridge/auth-failure-reason.js';
|
|
27
|
+
/** Slow enough to be free, fast enough that a dev server started 15s ago is already reflected. */
|
|
28
|
+
const REFRESH_MS = 15_000;
|
|
29
|
+
/** The URL an auto-attach opens. `localhost` for the same reason the probe uses it: both stacks. */
|
|
30
|
+
const LOCALHOST = 'http://localhost';
|
|
31
|
+
/**
|
|
32
|
+
* What the failure path says, always naming the reason rather than swallowing it.
|
|
33
|
+
*
|
|
34
|
+
* An auto-attach that fails silently is the same class of defect as the message it replaces: the
|
|
35
|
+
* agent is told absence and never learns that Reticle tried and could not.
|
|
36
|
+
*/
|
|
37
|
+
function attachFailureClause(port, reason) {
|
|
38
|
+
const collision = /EADDRINUSE|address already in use/i.test(reason);
|
|
39
|
+
return (` Reticle also tried to open ${LOCALHOST}:${String(port)} in a browser it owns and could not: ` +
|
|
40
|
+
`${reason}.` +
|
|
41
|
+
(collision
|
|
42
|
+
? ' That is a port collision — something already holds the port this daemon needs, so the ' +
|
|
43
|
+
'browser Reticle drives could not be started. Stop the other Reticle process and retry, ' +
|
|
44
|
+
'rather than treating this as a problem with the app.'
|
|
45
|
+
: ''));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Start the watch. Returns a stop function; the timer is unref'd so it never holds the daemon up.
|
|
49
|
+
*
|
|
50
|
+
* Exported for the test that pins the after-boot config read below — the daemon itself starts this
|
|
51
|
+
* through `wireSessionScope`.
|
|
52
|
+
*/
|
|
53
|
+
export function startNoSessionWatch(options) {
|
|
54
|
+
const probe = options.probe ?? (() => probeDevServers());
|
|
55
|
+
let listening = [];
|
|
56
|
+
/**
|
|
57
|
+
* Ports that accepted a connection and then answered nothing in time.
|
|
58
|
+
*
|
|
59
|
+
* Tracked beside `listening` rather than folded into it: they are not dev servers as far as the
|
|
60
|
+
* probe knows, so they must not be spent as proof the app is up, and they are not absent either,
|
|
61
|
+
* so the diagnosis must stop telling people to start a server that is already running. A custom
|
|
62
|
+
* `options.probe` returns only the serving set, so this stays empty for injected probes.
|
|
63
|
+
*/
|
|
64
|
+
let slowListeners = [];
|
|
65
|
+
let siblingListeners = [];
|
|
66
|
+
let running = false;
|
|
67
|
+
/** Ports auto-attach has already spent its one attempt on. Bounded: never a loop, never a retry. */
|
|
68
|
+
const attempted = new Set();
|
|
69
|
+
/** Set only when an attempt actually failed, so the diagnosis can say so instead of hiding it. */
|
|
70
|
+
let attachFailure;
|
|
71
|
+
const directory = options.directory ?? process.cwd();
|
|
72
|
+
// The boot answer still counts (it is what the daemon scoped its sessions with), but `.reticle.json`
|
|
73
|
+
// is routinely written by `init` AFTER this daemon started, so re-read rather than cache. See the
|
|
74
|
+
// `initialized` comment below, which this shares.
|
|
75
|
+
const isWired = () => options.initialized || readProjectId(directory) !== undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the daemon's current project scope once for both halves of a sessions response.
|
|
78
|
+
*
|
|
79
|
+
* This remains a live read because `init` commonly writes the config after the daemon starts.
|
|
80
|
+
*/
|
|
81
|
+
const projectScopeFacts = () => {
|
|
82
|
+
const initialized = isWired();
|
|
83
|
+
if (initialized)
|
|
84
|
+
return { initialized };
|
|
85
|
+
const discovery = discoverProjectConfigs(directory);
|
|
86
|
+
const elsewhere = discovery.found.filter((config) => config.directory !== directory);
|
|
87
|
+
if (elsewhere.length > 0) {
|
|
88
|
+
return {
|
|
89
|
+
initialized,
|
|
90
|
+
configsElsewhere: elsewhere.map((config) => ({
|
|
91
|
+
directory: config.directory,
|
|
92
|
+
...(config.projectId === undefined ? {} : { projectId: config.projectId }),
|
|
93
|
+
})),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// The walk found nothing — which is the honest answer from a daemon standing at `/` or `$HOME`,
|
|
97
|
+
// where several IDEs start a GLOBALLY registered MCP server. There is nothing above `/` and no
|
|
98
|
+
// repo root at either, so the walk cannot reach a project it has nonetheless paired with before.
|
|
99
|
+
// The registry can. See registeredElsewhere: "I am standing in the wrong place" and "you never
|
|
100
|
+
// installed this" are opposite diagnoses with opposite fixes, and without this we gave the
|
|
101
|
+
// second one — six times, on projects that were already correctly instrumented.
|
|
102
|
+
const registered = registeredElsewhere(homedir(), directory);
|
|
103
|
+
if (registered.length > 0) {
|
|
104
|
+
return {
|
|
105
|
+
initialized,
|
|
106
|
+
configsElsewhere: registered.map((project) => ({
|
|
107
|
+
directory: project.directory,
|
|
108
|
+
...(project.projectId === undefined ? {} : { projectId: project.projectId }),
|
|
109
|
+
})),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return { initialized, searchedDirectories: discovery.searched };
|
|
113
|
+
};
|
|
114
|
+
// Read at boot: the daemon's own identity does not change under it, and this is the key the
|
|
115
|
+
// durable bit is stored under.
|
|
116
|
+
const stateDir = options.stateDir ?? reticleStateHome();
|
|
117
|
+
/**
|
|
118
|
+
* Only ever asked ABOUT A NAMED PROJECT.
|
|
119
|
+
*
|
|
120
|
+
* With no projectId the memory can still answer the weaker "has anything connected on this port",
|
|
121
|
+
* and that answer must not be spent here: a shared 4400 on a machine with several repos would
|
|
122
|
+
* then soften a genuinely-unwired directory's diagnosis on the strength of an unrelated app. That
|
|
123
|
+
* is the same over-confident claim this whole file exists to remove, pointing the other way.
|
|
124
|
+
*/
|
|
125
|
+
const connectedBefore = () => hasProjectConnectedBefore(stateDir, options.port, readProjectId(directory));
|
|
126
|
+
/**
|
|
127
|
+
* The split brain, asked fresh every time like everything else here.
|
|
128
|
+
*
|
|
129
|
+
* Cheap — a directory listing of `~/.reticle` and a few small JSON reads — and only ever reached
|
|
130
|
+
* on a daemon with no session, which is the state this whole file exists for. Reading it once at
|
|
131
|
+
* boot would miss the ordinary case entirely: the app connects to the other daemon SECONDS after
|
|
132
|
+
* this one starts, which is precisely the window the agent then spends being told to start a dev
|
|
133
|
+
* server that is already running.
|
|
134
|
+
*/
|
|
135
|
+
const splitBrain = () => {
|
|
136
|
+
const projectId = readProjectId(directory);
|
|
137
|
+
return splitBrainNote(options.port, daemonsServingProjectElsewhere(projectId, options.port, stateDir, isAlive, (port) => hasProjectConnectedBefore(stateDir, port, projectId)));
|
|
138
|
+
};
|
|
139
|
+
// Every path that registers a session goes through SessionManager.add, so this is the one hook
|
|
140
|
+
// that makes the bit durable. Recorded per port + projectId so a shared 4400 cannot make one
|
|
141
|
+
// project's success into evidence about another's.
|
|
142
|
+
options.sessions.setConnectionRecorder((projectId) => {
|
|
143
|
+
rememberConnected(stateDir, options.port, projectId);
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Open the app ourselves when there is exactly one unambiguous candidate.
|
|
147
|
+
*
|
|
148
|
+
* AUTOMATIC, not offered — the deliberate call. Offering means a round trip and a decision by an
|
|
149
|
+
* agent that has strictly less evidence than this daemon does, on the one case where there is
|
|
150
|
+
* nothing left to decide: the project is wired, so a page WILL connect, and exactly one dev server
|
|
151
|
+
* is listening, so there is no ambiguity about which. That case is the bulk of the loss. Every
|
|
152
|
+
* other shape (several listeners, an unwired project, no listener) still returns prose, because
|
|
153
|
+
* there the daemon would be guessing and a guess that opens a browser is worse than a sentence.
|
|
154
|
+
*
|
|
155
|
+
* Bounded by construction: one attempt per port per daemon. A failure is recorded, never retried —
|
|
156
|
+
* a retry loop against a broken Chromium install would spin for the daemon's whole life.
|
|
157
|
+
*/
|
|
158
|
+
const autoAttach = async (ports) => {
|
|
159
|
+
const attach = options.attach;
|
|
160
|
+
if (attach === undefined)
|
|
161
|
+
return;
|
|
162
|
+
if (1 !== ports.length)
|
|
163
|
+
return;
|
|
164
|
+
const [only] = ports;
|
|
165
|
+
if (only === undefined || attempted.has(only))
|
|
166
|
+
return;
|
|
167
|
+
if (!isWired())
|
|
168
|
+
return;
|
|
169
|
+
attempted.add(only);
|
|
170
|
+
try {
|
|
171
|
+
await attach(`${LOCALHOST}:${String(only)}`);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
attachFailure = attachFailureClause(only, error instanceof Error ? error.message : String(error));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const refresh = () => {
|
|
178
|
+
// Nothing to diagnose while a session is live, and no reason to scan.
|
|
179
|
+
if (running || options.sessions.count() > 0)
|
|
180
|
+
return;
|
|
181
|
+
running = true;
|
|
182
|
+
void (options.probe === undefined
|
|
183
|
+
? probeDevServerStates().then((states) => {
|
|
184
|
+
slowListeners = states.slow;
|
|
185
|
+
return states.serving;
|
|
186
|
+
})
|
|
187
|
+
: probe())
|
|
188
|
+
.then(async (ports) => {
|
|
189
|
+
listening = ports;
|
|
190
|
+
siblingListeners =
|
|
191
|
+
options.occupiedSiblings !== undefined
|
|
192
|
+
? await options.occupiedSiblings()
|
|
193
|
+
: options.probe === undefined
|
|
194
|
+
? await findOccupiedSiblings(options.port, probeDaemon)
|
|
195
|
+
: [];
|
|
196
|
+
await autoAttach(ports);
|
|
197
|
+
})
|
|
198
|
+
.catch(() => {
|
|
199
|
+
/* a diagnostic hint must never take the daemon down */
|
|
200
|
+
})
|
|
201
|
+
.finally(() => {
|
|
202
|
+
running = false;
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
refresh();
|
|
206
|
+
const timer = setInterval(refresh, REFRESH_MS);
|
|
207
|
+
timer.unref();
|
|
208
|
+
/**
|
|
209
|
+
* Is a refusal on the pairing token the CURRENT state of the bridge?
|
|
210
|
+
*
|
|
211
|
+
* The bridge records the refusal (the sentence it closed the socket with) and nothing read it
|
|
212
|
+
* as a DIAGNOSIS. It is the one fact that proves an app is running and instrumented: only an SDK
|
|
213
|
+
* dials the bridge, so a refused hello means the wiring works and this daemon would not serve it.
|
|
214
|
+
*
|
|
215
|
+
* Two clauses, because `lastClosure` alone answers a slightly different question than the one the
|
|
216
|
+
* diagnosis asks. It records only the closes the BRIDGE initiated, so an ordinary disconnect never
|
|
217
|
+
* reaches it: a refusal, then a good session, then a closed tab leaves it still reading
|
|
218
|
+
* `AUTH_FAILED` hours later. `connectedSinceLastClosure` is the ordering fact that tells a live
|
|
219
|
+
* refusal from a remembered one, and without it this reports a token problem for a closed tab.
|
|
220
|
+
*
|
|
221
|
+
* Called optionally because this watch is constructed against a structural slice of the manager,
|
|
222
|
+
* and several callers pass a double that predates these methods. A manager that cannot answer has
|
|
223
|
+
* recorded no refusal, which falls through to the behaviour that was there before -- the safe
|
|
224
|
+
* direction for a fact whose job is to SUPPRESS advice rather than to add any.
|
|
225
|
+
*/
|
|
226
|
+
const lastCloseWasAuthFailure = () => isAuthRefusalReason(options.sessions.lastClosure?.()?.reason) &&
|
|
227
|
+
true !== options.sessions.connectedSinceLastClosure?.();
|
|
228
|
+
const nextAction = (scope) => {
|
|
229
|
+
const split = splitBrain();
|
|
230
|
+
return nextActionFor({
|
|
231
|
+
everConnected: options.sessions.everConnected(),
|
|
232
|
+
initialized: scope.initialized,
|
|
233
|
+
...(scope.configsElsewhere === undefined ? {} : { configsElsewhere: scope.configsElsewhere }),
|
|
234
|
+
previouslyConnected: connectedBefore(),
|
|
235
|
+
// Read when asked, like every other fact here: a page can dial at any moment, and a daemon
|
|
236
|
+
// that cached "nothing has been refused" at boot would keep saying so.
|
|
237
|
+
authRefused: lastCloseWasAuthFailure(),
|
|
238
|
+
...(split === undefined ? {} : { splitBrain: split }),
|
|
239
|
+
listening,
|
|
240
|
+
// Read when asked, like everything else here: a `package.json` can gain a dev script, and a
|
|
241
|
+
// daemon that cached "there is none" at boot would keep saying so for the rest of the day.
|
|
242
|
+
dev: detectDevCommand(directory),
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
options.sessions.setNoSessionNextAction(() => nextAction(projectScopeFacts()));
|
|
246
|
+
// ONE call for both registrations below. The prose and the branch code have to come from the
|
|
247
|
+
// same evaluation or they can describe different branches - the facts are read when asked, so two
|
|
248
|
+
// calls a moment apart can genuinely disagree (#615).
|
|
249
|
+
const explain = () => {
|
|
250
|
+
const scope = projectScopeFacts();
|
|
251
|
+
return explainNoSession({
|
|
252
|
+
everConnected: options.sessions.everConnected(),
|
|
253
|
+
// Read WHEN ASKED, for the same reason `projectPort` below is: `.reticle.json` is routinely
|
|
254
|
+
// written by `init` after this daemon started — that is the ordinary first-install order — and
|
|
255
|
+
// the boot-time answer is then permanently stale. Reported from the field as `reticle status`
|
|
256
|
+
// saying the project had never been through `init` about a project whose config named its
|
|
257
|
+
// framework and its projectId, and whose real problem was a dev server older than the plugin.
|
|
258
|
+
// The boot value still counts: it is the one the daemon scoped its sessions with.
|
|
259
|
+
...scope,
|
|
260
|
+
listening,
|
|
261
|
+
slowListeners,
|
|
262
|
+
port: options.port,
|
|
263
|
+
// The directory `initialized` was decided in. Named in the message because "there is no
|
|
264
|
+
// `.reticle.json`" is a claim about ONE directory, and a reader standing somewhere else
|
|
265
|
+
// cannot tell whether it is a claim about their app at all.
|
|
266
|
+
directory,
|
|
267
|
+
// The one fact that outranks every absence below it, and the reason a fresh daemon stopped
|
|
268
|
+
// claiming that an install which has demonstrably worked has never worked.
|
|
269
|
+
previouslyConnected: connectedBefore(),
|
|
270
|
+
// Already read for the NEXT ACTION and, until now, not for the message — so the daemon could
|
|
271
|
+
// suppress an `init` suggestion because it knew a page had been refused, while the sentence
|
|
272
|
+
// beside it still said the tab had been closed. One fact, two answers, and only one of them
|
|
273
|
+
// was right. Read when asked, like the rest: a page can be refused at any moment.
|
|
274
|
+
authRefused: lastCloseWasAuthFailure(),
|
|
275
|
+
// Ranks the causes. Read when asked, like the rest: `init` writes this file after the daemon
|
|
276
|
+
// starts on an ordinary first install.
|
|
277
|
+
...(() => {
|
|
278
|
+
const framework = readProjectFramework(directory);
|
|
279
|
+
return framework === undefined ? {} : { framework };
|
|
280
|
+
})(),
|
|
281
|
+
// Decided from the session that actually went away, not from a lifetime tally: the lease
|
|
282
|
+
// sentence is only right when the thing that vanished WAS a lease.
|
|
283
|
+
leaseExpired: (() => {
|
|
284
|
+
const departed = options.sessions.lastDeparted();
|
|
285
|
+
return departed === undefined ? false : (options.wasReapedLease?.(departed) ?? false);
|
|
286
|
+
})(),
|
|
287
|
+
// The URL of the session that went away, when the tombstone still holds it. Optional: a
|
|
288
|
+
// stub SessionManager in tests has no lastKnown, and a daemon that never saw a session
|
|
289
|
+
// has none to name.
|
|
290
|
+
...(() => {
|
|
291
|
+
const known = options.sessions.lastKnown?.();
|
|
292
|
+
return undefined === known ? {} : { lastKnownUrl: known.url };
|
|
293
|
+
})(),
|
|
294
|
+
// How long this daemon has been waiting with no app. The diagnosis uses it to surface
|
|
295
|
+
// "install never finished" — the same condition telemetry already knows about.
|
|
296
|
+
...(() => {
|
|
297
|
+
const upMs = stallUptime(Date.now());
|
|
298
|
+
return upMs === undefined ? {} : { daemonUpMs: upMs };
|
|
299
|
+
})(),
|
|
300
|
+
// Read here rather than at boot: `.reticle.json` can be written by `init` after this daemon
|
|
301
|
+
// started, which is the ordinary first-install order, and a port cached from before it existed
|
|
302
|
+
// would make the daemon confidently report no mismatch on the one run where there is one.
|
|
303
|
+
...(() => {
|
|
304
|
+
const configured = readProjectPort(directory);
|
|
305
|
+
return configured === undefined ? {} : { projectPort: configured };
|
|
306
|
+
})(),
|
|
307
|
+
...(0 === siblingListeners.length ? {} : { siblingListeners }),
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
// The lead, then the literal command, then the differential. Both renderings consume the same
|
|
311
|
+
// scope facts so a discovered workspace config cannot become an `init` recommendation below it,
|
|
312
|
+
// and both come from ONE `explain()` call so they cannot describe different branches.
|
|
313
|
+
const rendered = () => {
|
|
314
|
+
const scope = projectScopeFacts();
|
|
315
|
+
const { message, detail } = explain();
|
|
316
|
+
const lead = `${message} ${renderNextAction(nextAction(scope))}${attachFailure ?? ''}`;
|
|
317
|
+
return { lead, full: undefined === detail ? lead : `${lead} ${detail}` };
|
|
318
|
+
};
|
|
319
|
+
options.sessions.setNoSessionHint(() => rendered().full);
|
|
320
|
+
options.sessions.setNoSessionLead(() => rendered().lead);
|
|
321
|
+
options.sessions.setNoSessionReason(() => explain().reason);
|
|
322
|
+
return () => {
|
|
323
|
+
clearInterval(timer);
|
|
324
|
+
options.sessions.setConnectionRecorder(undefined);
|
|
325
|
+
options.sessions.setNoSessionHint(undefined);
|
|
326
|
+
options.sessions.setNoSessionLead(undefined);
|
|
327
|
+
options.sessions.setNoSessionReason(undefined);
|
|
328
|
+
options.sessions.setNoSessionNextAction(undefined);
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* The daemon's whole session-scoping decision in one call: scope auto-selection to the active
|
|
333
|
+
* project, and keep the no-session diagnosis fresh. Both derive from the same one fact — whether
|
|
334
|
+
* this directory has been through `reticle init` — so they belong together rather than as two
|
|
335
|
+
* adjacent blocks in the bootstrap.
|
|
336
|
+
*/
|
|
337
|
+
export function wireSessionScope(sessions, activeProjectId, port,
|
|
338
|
+
/** Asks the pool whether a session id was a lease it aged out; omitted when there is no pool. */
|
|
339
|
+
wasReapedLease,
|
|
340
|
+
/** Opens a URL in a Reticle-owned browser (the pool). Omitted ⇒ auto-attach is off. */
|
|
341
|
+
attach) {
|
|
342
|
+
if (activeProjectId !== undefined)
|
|
343
|
+
sessions.setDefaultScope({ projectId: activeProjectId });
|
|
344
|
+
return startNoSessionWatch({
|
|
345
|
+
sessions,
|
|
346
|
+
port,
|
|
347
|
+
initialized: activeProjectId !== undefined,
|
|
348
|
+
...(wasReapedLease === undefined ? {} : { wasReapedLease }),
|
|
349
|
+
...(attach === undefined ? {} : { attach }),
|
|
350
|
+
});
|
|
351
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type ReticleEvent } from '@reticlehq/core';
|
|
2
|
+
/**
|
|
3
|
+
* A self-budgeting hint returned on event-bearing tool results so the agent can decide whether to
|
|
4
|
+
* narrow its next call (large results are a real token tax). `bytes` is the JSON
|
|
5
|
+
* size of the payload; `droppedOldest` is present only when a cap actually truncated the timeline —
|
|
6
|
+
* never a silent cap.
|
|
7
|
+
*/
|
|
8
|
+
interface CostHint {
|
|
9
|
+
events: number;
|
|
10
|
+
bytes: number;
|
|
11
|
+
droppedOldest?: number;
|
|
12
|
+
/** Present when the timeline is large — tells the agent to scope its NEXT call (cut tokens). */
|
|
13
|
+
recommendation?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Default cap for reticle_network / reticle_console when the caller passes no `limit`. Those tools
|
|
17
|
+
* default `since` to 0 (the whole session), so a long-lived or event-flooded session produced an
|
|
18
|
+
* UNBOUNDED result — a measured 1-hour flood is ~72,000 calls / ~1M tokens in a single tool result.
|
|
19
|
+
* Capping to the most-recent N (with `total`/`droppedOldest` disclosed, so nothing is hidden and the
|
|
20
|
+
* agent can page with since/until or a higher explicit limit) bounds the cost without changing the
|
|
21
|
+
* window. 200 comfortably covers a real flow's traffic while killing the pathological case.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_QUERY_LIMIT = 200;
|
|
24
|
+
/**
|
|
25
|
+
* Default cap for `reticle_observe`'s timeline when the caller passes no `max_events`.
|
|
26
|
+
*
|
|
27
|
+
* Without one, the whole window is returned. That is fine for a quiet page and pathological for a
|
|
28
|
+
* busy one: a page with count-up animations emits an event per frame, and a single observe result
|
|
29
|
+
* was measured at ~60KB. The sibling tools (`reticle_network`, `reticle_console`) have had a default
|
|
30
|
+
* for exactly this reason; observe was simply missed.
|
|
31
|
+
*
|
|
32
|
+
* Capping is safe for accuracy — and that is the only reason it is allowed. Contradiction detection
|
|
33
|
+
* runs over the FILTERED-BUT-UNBUDGETED window (see `observe-tools.ts`), so a finding can never
|
|
34
|
+
* disappear because the timeline was trimmed for tokens. What the cap changes is how much of the
|
|
35
|
+
* timeline is printed, never what was examined.
|
|
36
|
+
*
|
|
37
|
+
* Nothing is hidden: whenever the cap bites, `cost.droppedOldest` says how many older events fell
|
|
38
|
+
* outside it, and the caller can pass a larger `max_events` to see them.
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_OBSERVE_EVENT_LIMIT = 200;
|
|
41
|
+
/**
|
|
42
|
+
* Trim a timeline to `maxEvents`, sacrificing noise before evidence.
|
|
43
|
+
*
|
|
44
|
+
* The obvious rule -- keep the most recent N -- is wrong here, and a live session showed why. A page
|
|
45
|
+
* emits a health heartbeat every few seconds forever, so on any idle app the most recent events are
|
|
46
|
+
* all heartbeats. A real observe call came back with 200 events and 46 KB whose own summary read:
|
|
47
|
+
* zero network, zero DOM changes, zero route changes, zero console errors, zero signals. The budget
|
|
48
|
+
* had been spent entirely on heartbeats, and the click the caller was asking about had been dropped
|
|
49
|
+
* for being older.
|
|
50
|
+
*
|
|
51
|
+
* So evidence is kept first, and `CHURN_TYPES` -- which core already defines as the high-volume,
|
|
52
|
+
* low-signal events that are "the ONLY thing that should be sacrificed when a buffer is full" -- is
|
|
53
|
+
* used to fill whatever room is left. That rule already governed buffer eviction; it governs this
|
|
54
|
+
* budget now too, so both agree on what is worth keeping.
|
|
55
|
+
*
|
|
56
|
+
* Order is preserved: the result reads oldest-first, like the timeline it came from.
|
|
57
|
+
*/
|
|
58
|
+
export declare function applyEventBudget(events: ReticleEvent[], maxEvents: number | undefined): {
|
|
59
|
+
events: ReticleEvent[];
|
|
60
|
+
droppedOldest: number;
|
|
61
|
+
};
|
|
62
|
+
/** Build a cost hint from a payload + the event count it carries. */
|
|
63
|
+
export declare function costHint(payload: unknown, events: number, droppedOldest?: number): CostHint;
|
|
64
|
+
export declare function estimateTokens(text: string): number;
|
|
65
|
+
/**
|
|
66
|
+
* A size preview for non-event read results (snapshot, query). Same intent as CostHint but for
|
|
67
|
+
* payloads measured by size rather than event count: the agent can bail and re-scope (mode:status,
|
|
68
|
+
* a tighter scope, a more specific query) before spending context on a large body. The token
|
|
69
|
+
* figure is an estimate (see estimateTokens).
|
|
70
|
+
*/
|
|
71
|
+
interface SizeCost {
|
|
72
|
+
bytes: number;
|
|
73
|
+
tokens: number;
|
|
74
|
+
}
|
|
75
|
+
export declare function sizeCost(payload: unknown): SizeCost;
|
|
76
|
+
/**
|
|
77
|
+
* Attach a `cost` size preview to a read result. Pure: the cost is computed over the result BEFORE
|
|
78
|
+
* the cost field is added (so it measures the body the agent will actually read), then merged in.
|
|
79
|
+
* Non-object results (e.g. a thrown-error envelope) pass through unchanged.
|
|
80
|
+
*/
|
|
81
|
+
export declare function withSizeCost<T>(result: T): T;
|
|
82
|
+
export {};
|