@reticlehq/server 2.14.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +54 -136
- package/bin/reticle.js +1 -1
- package/dist/command/cli/adhoc-verdict.d.ts +64 -0
- package/dist/command/cli/adhoc-verdict.js +144 -0
- package/dist/command/cli/answers/status-next-action.d.ts +61 -0
- package/dist/command/cli/answers/status-next-action.js +84 -0
- package/dist/command/cli/auth/cloud-keystore.js +97 -0
- package/dist/command/cli/auth/device-flow.d.ts +76 -0
- package/dist/command/cli/auth/device-flow.js +56 -0
- package/dist/command/cli/cli-doctor.js +215 -0
- package/dist/command/cli/cli-flow-commands.d.ts +47 -0
- package/dist/command/cli/cli-flow-commands.js +255 -0
- package/dist/command/cli/cli-kill.d.ts +59 -0
- package/dist/command/cli/cli-kill.js +162 -0
- package/dist/command/cli/cli-parse-grammar.d.ts +29 -0
- package/dist/command/cli/cli-parse-grammar.js +39 -0
- package/dist/command/cli/cli-parse-verify.d.ts +22 -0
- package/dist/command/cli/cli-parse-verify.js +143 -0
- package/dist/command/cli/cli-parse.d.ts +193 -0
- package/dist/command/cli/cli-parse.js +833 -0
- package/dist/command/cli/cli-update-commands.js +112 -0
- package/dist/command/cli/cli-verify.d.ts +124 -0
- package/dist/command/cli/cli-verify.js +426 -0
- package/dist/command/cli/cloud-cli.js +694 -0
- package/dist/command/cli/cloud-kit.d.ts +37 -0
- package/dist/command/cli/cloud-kit.js +117 -0
- package/dist/command/cli/cloud-login.js +183 -0
- package/dist/command/cli/config/config-discovery.d.ts +48 -0
- package/dist/command/cli/config/config-discovery.js +183 -0
- package/dist/command/cli/daemon-start-options.d.ts +33 -0
- package/dist/command/cli/demo/demo-page.d.ts +78 -0
- package/dist/command/cli/demo/demo-page.js +238 -0
- package/dist/command/cli/demo/demo-run.d.ts +38 -0
- package/dist/command/cli/demo/demo-run.js +138 -0
- package/dist/command/cli/doctor/doctor-daemon-line.js +47 -0
- package/dist/command/cli/doctor/doctor-rows.d.ts +75 -0
- package/dist/command/cli/doctor/doctor-rows.js +77 -0
- package/dist/command/cli/doctor/doctor-sessions-line.js +69 -0
- package/dist/command/cli/drive/drive-attach.d.ts +113 -0
- package/dist/command/cli/drive/drive-attach.js +221 -0
- package/dist/command/cli/drive/drive-command.js +107 -0
- package/dist/command/cli/launch/cli-launch.d.ts +100 -0
- package/dist/command/cli/launch/cli-launch.js +216 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +33 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +198 -0
- package/dist/command/cli/mcp-command.js +176 -0
- package/dist/command/cli/ports/port-holder.js +123 -0
- package/dist/command/cli/ports/resolve/cli-port.d.ts +71 -0
- package/dist/command/cli/ports/resolve/cli-port.js +140 -0
- package/dist/command/cli/setup-mcp-cli.d.ts +29 -0
- package/dist/command/cli/setup-mcp-cli.js +107 -0
- package/dist/command/cli/status/status-lines.d.ts +28 -0
- package/dist/command/cli/status/status-lines.js +117 -0
- package/dist/command/cli/status-fields.d.ts +28 -0
- package/dist/command/cli/status-fields.js +29 -0
- package/dist/command/cli/tutorial.d.ts +116 -0
- package/dist/command/cli/tutorial.js +189 -0
- package/dist/command/cli-onboarding.d.ts +21 -0
- package/dist/command/cli-onboarding.js +27 -0
- package/dist/command/cli.d.ts +6 -0
- package/dist/command/cli.js +710 -0
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +48 -0
- package/dist/command/daemon/binding/loopback-reach.d.ts +42 -0
- package/dist/command/daemon/binding/loopback-reach.js +63 -0
- package/dist/command/daemon/daemon-resilience.d.ts +86 -0
- package/dist/command/daemon/daemon-resilience.js +339 -0
- package/dist/command/daemon/daemon-resolve.d.ts +113 -0
- package/dist/command/daemon/daemon-resolve.js +187 -0
- package/dist/command/daemon/daemon.d.ts +86 -0
- package/dist/command/daemon/daemon.js +333 -0
- package/dist/command/daemon/idle-shutdown.d.ts +54 -0
- package/dist/command/daemon/idle-shutdown.js +98 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +60 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.js +61 -0
- package/dist/command/daemon/lifetime/heartbeat.d.ts +119 -0
- package/dist/command/daemon/lifetime/heartbeat.js +151 -0
- package/dist/command/daemon/lifetime/idle-grace.d.ts +32 -0
- package/dist/command/daemon/lifetime/idle-grace.js +41 -0
- package/dist/command/daemon/lifetime/log-cap.d.ts +68 -0
- package/dist/command/daemon/lifetime/log-cap.js +115 -0
- package/dist/command/daemon/state-dir.js +59 -0
- package/dist/command/daemon/wake-decision.d.ts +32 -0
- package/dist/command/daemon/wake-decision.js +38 -0
- package/dist/command/dev/stale-issue-guard.d.ts +35 -0
- package/dist/command/dev/stale-issue-guard.js +69 -0
- package/dist/command/setup/agent-configs.d.ts +111 -0
- package/dist/command/setup/agent-configs.js +365 -0
- package/dist/command/setup/agent-notice-memory.d.ts +16 -0
- package/dist/command/setup/agent-notice-memory.js +65 -0
- package/dist/command/setup/agent-writer.d.ts +52 -0
- package/dist/command/setup/agent-writer.js +116 -0
- package/dist/command/setup/auto-approve.js +153 -0
- package/dist/command/setup/bringup/bridge-port.d.ts +15 -0
- package/dist/command/setup/bringup/bridge-port.js +24 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +69 -0
- package/dist/command/setup/bringup/dev-server-wait.js +83 -0
- package/dist/command/setup/bringup/ensure-daemon.js +58 -0
- package/dist/command/setup/init/init-host.js +37 -0
- package/dist/command/setup/init/init-runtime.d.ts +39 -0
- package/dist/command/setup/init/init-runtime.js +168 -0
- package/dist/command/setup/node-effects.d.ts +63 -0
- package/dist/command/setup/node-effects.js +225 -0
- package/dist/command/setup/probe/page-probe.d.ts +71 -0
- package/dist/command/setup/probe/page-probe.js +89 -0
- package/dist/command/setup/remaining-steps.js +53 -0
- package/dist/command/setup/run-setup.d.ts +123 -0
- package/dist/command/setup/run-setup.js +316 -0
- package/dist/command/setup/setup-command.d.ts +48 -0
- package/dist/command/setup/setup-command.js +224 -0
- package/dist/command/setup/setup-install.d.ts +18 -0
- package/dist/command/setup/setup-install.js +40 -0
- package/dist/command/setup/setup-mcp.d.ts +57 -0
- package/dist/command/setup/setup-mcp.js +92 -0
- package/dist/command/setup/setup-options.d.ts +66 -0
- package/dist/command/setup/setup-options.js +63 -0
- package/dist/command/setup/terminal/confirm.js +206 -0
- package/dist/command/setup/terminal/crash.d.ts +55 -0
- package/dist/command/setup/terminal/crash.js +74 -0
- package/dist/command/update/nudge-credit.js +53 -0
- package/dist/command/update/sdk-sync.d.ts +20 -0
- package/dist/command/update/sdk-sync.js +22 -0
- package/dist/command/update/update-checker.js +122 -0
- package/dist/command/update/update-nudge.d.ts +90 -0
- package/dist/command/update/update-nudge.js +211 -0
- package/dist/command/update/updater.d.ts +81 -0
- package/dist/command/update/updater.js +223 -0
- package/dist/command/version/identity/server-version.js +50 -0
- package/dist/command/version/peer-announce.js +32 -0
- package/dist/command/version/sdk-fix.js +127 -0
- package/dist/command/version/version-nudge.js +61 -0
- package/dist/command/version/version-skew.d.ts +113 -0
- package/dist/command/version/version-skew.js +192 -0
- package/dist/features/crawl/crawl-tools.d.ts +7 -0
- package/dist/features/crawl/crawl-tools.js +89 -0
- package/dist/features/crawl/crawl.d.ts +98 -0
- package/dist/features/crawl/crawl.js +444 -0
- package/dist/features/ee/audit-log.js +11 -0
- package/dist/features/harness/drive-report.d.ts +73 -0
- package/dist/features/harness/drive-report.js +196 -0
- package/dist/features/harness/driver.d.ts +50 -0
- package/dist/features/harness/driver.js +239 -0
- package/dist/features/harness/drivers.d.ts +19 -0
- package/dist/features/harness/drivers.js +19 -0
- package/dist/features/harness/fill-values.d.ts +67 -0
- package/dist/features/harness/fill-values.js +153 -0
- package/dist/features/harness/harness.d.ts +159 -0
- package/dist/features/harness/harness.js +203 -0
- package/dist/features/harness/jev-driver.d.ts +188 -0
- package/dist/features/harness/jev-driver.js +664 -0
- package/dist/features/harness/openai-driver.d.ts +46 -0
- package/dist/features/harness/openai-driver.js +197 -0
- package/dist/features/harness/platform-config.d.ts +52 -0
- package/dist/features/harness/platform-config.js +89 -0
- package/dist/features/harness/with-timeout.d.ts +18 -0
- package/dist/features/harness/with-timeout.js +34 -0
- package/dist/features/license/license-env.d.ts +24 -0
- package/dist/features/license/license-env.js +140 -0
- package/dist/features/license/license.d.ts +161 -0
- package/dist/features/license/license.js +287 -0
- package/dist/features/visual/visual-store.d.ts +22 -0
- package/dist/features/visual/visual-store.js +66 -0
- package/dist/features/visual/visual-tools.d.ts +26 -0
- package/dist/features/visual/visual-tools.js +352 -0
- package/dist/hooks/hook-bus.d.ts +53 -0
- package/dist/hooks/hook-bus.js +106 -0
- package/dist/hooks/hook-commands.d.ts +59 -0
- package/dist/hooks/hook-commands.js +184 -0
- package/dist/hooks/hook-emit.d.ts +44 -0
- package/dist/hooks/hook-emit.js +85 -0
- package/dist/import-graph.d.ts +48 -0
- package/dist/import-graph.js +106 -0
- package/dist/index.d.ts +91 -125
- package/dist/index.js +250 -160
- package/dist/judgement/capsule/capsule-store.d.ts +70 -0
- package/dist/judgement/capsule/capsule-store.js +113 -0
- package/dist/judgement/capsule/capsule.d.ts +42 -0
- package/dist/judgement/capsule/capsule.js +73 -0
- package/dist/judgement/capsule/causal-summary.d.ts +119 -0
- package/dist/judgement/capsule/causal-summary.js +172 -0
- package/dist/judgement/capsule/divergence.d.ts +26 -0
- package/dist/judgement/domain/domain-model.js +126 -0
- package/dist/judgement/domain/domain-tools.d.ts +2 -0
- package/dist/judgement/domain/domain-tools.js +96 -0
- package/dist/judgement/domain/flow-risk.js +80 -0
- package/dist/judgement/oracles/propose-consequences.d.ts +22 -0
- package/dist/judgement/oracles/propose-consequences.js +106 -0
- package/dist/judgement/outcome/predicate-to-expect.d.ts +44 -0
- package/dist/judgement/outcome/predicate-to-expect.js +148 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +34 -0
- package/dist/judgement/runs/artifact/build-verification-run.js +83 -0
- package/dist/judgement/runs/artifact/render-report.js +84 -0
- package/dist/judgement/runs/artifact/replay-mapping.js +34 -0
- package/dist/judgement/runs/artifact/run-store.d.ts +54 -0
- package/dist/judgement/runs/artifact/run-store.js +150 -0
- package/dist/judgement/runs/artifact/to-artifact.d.ts +119 -0
- package/dist/judgement/runs/artifact/to-artifact.js +83 -0
- package/dist/judgement/runs/context-tools.d.ts +2 -0
- package/dist/judgement/runs/context-tools.js +70 -0
- package/dist/judgement/runs/default-run-id.d.ts +8 -0
- package/dist/judgement/runs/default-run-id.js +11 -0
- package/dist/judgement/runs/drive-run.d.ts +61 -0
- package/dist/judgement/runs/drive-run.js +130 -0
- package/dist/judgement/runs/late-answer.d.ts +55 -0
- package/dist/judgement/runs/late-answer.js +81 -0
- package/dist/judgement/runs/reticle-runner.d.ts +60 -0
- package/dist/judgement/runs/reticle-runner.js +95 -0
- package/dist/judgement/runs/run-tools.d.ts +17 -0
- package/dist/judgement/runs/run-tools.js +97 -0
- package/dist/judgement/runs/runner-port.d.ts +11 -0
- package/dist/judgement/runs/runner-port.js +18 -0
- package/dist/judgement/runs/verification-sync.d.ts +13 -0
- package/dist/judgement/runs/verification-sync.js +93 -0
- package/dist/language/flows/affected-tools.d.ts +18 -0
- package/dist/language/flows/affected-tools.js +83 -0
- package/dist/language/flows/annotate-tools.d.ts +15 -0
- package/dist/language/flows/annotate-tools.js +179 -0
- package/dist/language/flows/change/affected.d.ts +24 -0
- package/dist/language/flows/change/affected.js +35 -0
- package/dist/language/flows/change/flow-sources.d.ts +19 -0
- package/dist/language/flows/change/flow-sources.js +55 -0
- package/dist/language/flows/change/gate.js +33 -0
- package/dist/language/flows/decision.d.ts +45 -0
- package/dist/language/flows/decision.js +371 -0
- package/dist/language/flows/empty-flow.js +24 -0
- package/dist/language/flows/fields/flow-secret-field.d.ts +53 -0
- package/dist/language/flows/fields/flow-secret-field.js +75 -0
- package/dist/language/flows/fields/flow-upload-resolve.d.ts +23 -0
- package/dist/language/flows/fields/flow-upload-resolve.js +46 -0
- package/dist/language/flows/flow-anchor.d.ts +59 -0
- package/dist/language/flows/flow-anchor.js +240 -0
- package/dist/language/flows/flow-classify.d.ts +73 -0
- package/dist/language/flows/flow-classify.js +146 -0
- package/dist/language/flows/flow-expect-grammar.d.ts +33 -0
- package/dist/language/flows/flow-expect-grammar.js +155 -0
- package/dist/language/flows/flow-intent.d.ts +52 -0
- package/dist/language/flows/flow-intent.js +123 -0
- package/dist/language/flows/flow-learning.d.ts +52 -0
- package/dist/language/flows/flow-learning.js +76 -0
- package/dist/language/flows/flow-mutate-tools.d.ts +14 -0
- package/dist/language/flows/flow-mutate-tools.js +82 -0
- package/dist/language/flows/flow-replay-run.d.ts +91 -0
- package/dist/language/flows/flow-replay-run.js +748 -0
- package/dist/language/flows/flow-replay-types.d.ts +37 -0
- package/dist/language/flows/flow-replay-types.js +1 -0
- package/dist/language/flows/flow-replay.d.ts +91 -0
- package/dist/language/flows/flow-replay.js +487 -0
- package/dist/language/flows/flow-result.d.ts +35 -0
- package/dist/language/flows/flow-result.js +26 -0
- package/dist/language/flows/flow-step-runners.d.ts +54 -0
- package/dist/language/flows/flow-step-runners.js +369 -0
- package/dist/language/flows/flow-store-for-session.d.ts +32 -0
- package/dist/language/flows/flow-success.d.ts +32 -0
- package/dist/language/flows/flow-success.js +181 -0
- package/dist/language/flows/flow-tools.d.ts +15 -0
- package/dist/language/flows/flow-tools.js +842 -0
- package/dist/language/flows/flows.d.ts +114 -0
- package/dist/language/flows/flows.js +492 -0
- package/dist/language/flows/heal-precondition.d.ts +28 -0
- package/dist/language/flows/heal-precondition.js +38 -0
- package/dist/language/flows/heal-run.d.ts +17 -0
- package/dist/language/flows/heal-run.js +186 -0
- package/dist/language/flows/heal.js +97 -0
- package/dist/language/flows/mutation-run.d.ts +33 -0
- package/dist/language/flows/mutation-run.js +60 -0
- package/dist/language/flows/narrow-write.d.ts +32 -0
- package/dist/language/flows/narrow-write.js +26 -0
- package/dist/language/flows/recording/flake.d.ts +56 -0
- package/dist/language/flows/recording/recording-backtrack.js +73 -0
- package/dist/language/flows/recording/tape/recordings.d.ts +134 -0
- package/dist/language/flows/recording/tape/recordings.js +144 -0
- package/dist/language/flows/replay.d.ts +83 -0
- package/dist/language/flows/replay.js +397 -0
- package/dist/language/flows/role-anchor-nearest.js +45 -0
- package/dist/language/flows/stores/assertion-tiers-store.d.ts +26 -0
- package/dist/language/flows/stores/assertion-tiers-store.js +107 -0
- package/dist/language/flows/stores/flake-store.d.ts +18 -0
- package/dist/language/flows/stores/flake-store.js +58 -0
- package/dist/language/flows/suite/server-verify.d.ts +15 -0
- package/dist/language/flows/suite/server-verify.js +56 -0
- package/dist/language/flows/suite/suite-flakes.d.ts +34 -0
- package/dist/language/flows/suite/suite-flakes.js +32 -0
- package/dist/language/flows/suite-selection.d.ts +45 -0
- package/dist/language/flows/suite-selection.js +84 -0
- package/dist/language/flows/verify-change-tools.d.ts +2 -0
- package/dist/language/flows/verify-change-tools.js +244 -0
- package/dist/machine/clock.d.ts +24 -0
- package/dist/machine/clock.js +1 -0
- package/dist/machine/repo-root.d.ts +16 -0
- package/dist/machine/repo-root.js +20 -0
- package/dist/memory/cloud/account-state.d.ts +20 -0
- package/dist/memory/cloud/account-state.js +70 -0
- package/dist/memory/cloud/cloud-config.d.ts +79 -0
- package/dist/memory/cloud/cloud-config.js +156 -0
- package/dist/memory/cloud/cloud-sync.d.ts +195 -0
- package/dist/memory/cloud/cloud-sync.js +359 -0
- package/dist/memory/cloud/harness-config.d.ts +10 -0
- package/dist/memory/cloud/harness-config.js +58 -0
- package/dist/memory/cloud/harness-offer.d.ts +44 -0
- package/dist/memory/cloud/harness-offer.js +146 -0
- package/dist/memory/cloud/harness-switch.d.ts +11 -0
- package/dist/memory/cloud/harness-switch.js +53 -0
- package/dist/memory/cloud/sync-cycle.d.ts +121 -0
- package/dist/memory/cloud/sync-cycle.js +295 -0
- package/dist/memory/cloud/sync-daemon.d.ts +73 -0
- package/dist/memory/cloud/sync-daemon.js +297 -0
- package/dist/memory/cloud/sync-disk.js +193 -0
- package/dist/memory/impact/impact-recorder.d.ts +54 -0
- package/dist/memory/impact/impact-recorder.js +160 -0
- package/dist/memory/impact/impact-store.d.ts +52 -0
- package/dist/memory/impact/impact-store.js +274 -0
- package/dist/memory/intent/inline-intent.d.ts +60 -0
- package/dist/memory/intent/inline-intent.js +206 -0
- package/dist/memory/intent/intent-shard-store.d.ts +87 -0
- package/dist/memory/intent/intent-shard-store.js +215 -0
- package/dist/memory/intent/intent-shard.d.ts +389 -0
- package/dist/memory/intent/intent-shard.js +153 -0
- package/dist/memory/intent/intent-store.d.ts +47 -0
- package/dist/memory/intent/intent-store.js +133 -0
- package/dist/memory/intent/intent-subject.d.ts +46 -0
- package/dist/memory/intent/intent-subject.js +175 -0
- package/dist/memory/intent/intent-tools.d.ts +2 -0
- package/dist/memory/intent/intent-tools.js +157 -0
- package/dist/memory/intent/open-intents.d.ts +36 -0
- package/dist/memory/intent/open-intents.js +58 -0
- package/dist/memory/journal/ambient-store.d.ts +13 -0
- package/dist/memory/journal/ambient-store.js +52 -0
- package/dist/memory/journal/attach-journal.d.ts +37 -0
- package/dist/memory/journal/attach-journal.js +26 -0
- package/dist/memory/journal/drive-flow.d.ts +74 -0
- package/dist/memory/journal/drive-flow.js +157 -0
- package/dist/memory/journal/drive-run-flush.d.ts +42 -0
- package/dist/memory/journal/drive-run-flush.js +82 -0
- package/dist/memory/journal/envelope-store.d.ts +16 -0
- package/dist/memory/journal/envelope-store.js +61 -0
- package/dist/memory/journal/envelope.d.ts +230 -0
- package/dist/memory/journal/journal-query.d.ts +66 -0
- package/dist/memory/journal/journal-query.js +98 -0
- package/dist/memory/journal/journal-recorder.d.ts +109 -0
- package/dist/memory/journal/journal-recorder.js +153 -0
- package/dist/memory/journal/on-disk/ambient-file.d.ts +21 -0
- package/dist/memory/journal/on-disk/ambient-file.js +15 -0
- package/dist/memory/journal/on-disk/retention.d.ts +141 -0
- package/dist/memory/journal/on-disk/retention.js +291 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +21 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.js +93 -0
- package/dist/memory/journal/self-observation.d.ts +3 -0
- package/dist/memory/journal/self-observation.js +67 -0
- package/dist/memory/journal/session-end.d.ts +112 -0
- package/dist/memory/journal/session-end.js +179 -0
- package/dist/memory/journal/session-journal.d.ts +134 -0
- package/dist/memory/journal/session-journal.js +614 -0
- package/dist/memory/project/artifact-root-resolver.d.ts +3 -0
- package/dist/memory/project/artifact-root-resolver.js +89 -0
- package/dist/memory/project/artifact-root.d.ts +109 -0
- package/dist/memory/project/artifact-root.js +157 -0
- package/dist/memory/project/dir/fill-value-store.d.ts +32 -0
- package/dist/memory/project/dir/fill-value-store.js +88 -0
- package/dist/memory/project/dir/reticle-dir.d.ts +139 -0
- package/dist/memory/project/dir/reticle-dir.js +229 -0
- package/dist/memory/project/fs/fs-port.d.ts +68 -0
- package/dist/memory/project/fs/fs-port.js +82 -0
- package/dist/memory/project/learned-routes.d.ts +38 -0
- package/dist/memory/project/learned-routes.js +79 -0
- package/dist/memory/project/memory-fs.d.ts +10 -0
- package/dist/memory/project/project-for-root.d.ts +30 -0
- package/dist/memory/project/project-for-root.js +43 -0
- package/dist/memory/project/project-store.d.ts +54 -0
- package/dist/memory/project/project-store.js +244 -0
- package/dist/memory/project/project-tools.d.ts +8 -0
- package/dist/memory/project/project-tools.js +160 -0
- package/dist/memory/project/reticle-deps.d.ts +15 -0
- package/dist/memory/project/reticle-deps.js +33 -0
- package/dist/memory/project/session-root.d.ts +52 -0
- package/dist/memory/project/session-root.js +100 -0
- package/dist/memory/recall/memory-tools.d.ts +2 -0
- package/dist/memory/recall/memory-tools.js +81 -0
- package/dist/memory/recall/prior/connection-memory.d.ts +65 -0
- package/dist/memory/recall/prior/connection-memory.js +114 -0
- package/dist/memory/recall/project-memory.d.ts +33 -0
- package/dist/portal/bridge/auth-failure-reason.d.ts +32 -0
- package/dist/portal/bridge/auth-failure-reason.js +68 -0
- package/dist/portal/bridge/bridge-security.d.ts +30 -0
- package/dist/portal/bridge/bridge-security.js +53 -0
- package/dist/portal/bridge/bridge.d.ts +109 -0
- package/dist/portal/bridge/bridge.js +808 -0
- package/dist/portal/input/drive-url-stamp.d.ts +14 -0
- package/dist/portal/input/drive-url-stamp.js +33 -0
- package/dist/portal/input/network-detail.d.ts +97 -0
- package/dist/portal/input/network-detail.js +138 -0
- package/dist/portal/input/network-mock-tools.d.ts +21 -0
- package/dist/portal/input/network-mock-tools.js +124 -0
- package/dist/portal/input/network-mock.js +83 -0
- package/dist/portal/input/network-mutation.d.ts +47 -0
- package/dist/portal/input/network-mutation.js +53 -0
- package/dist/portal/input/real-input.d.ts +261 -0
- package/dist/portal/input/real-input.js +488 -0
- package/dist/portal/input/scroll-find.js +111 -0
- package/dist/portal/input/scroll-tools.d.ts +2 -0
- package/dist/portal/input/scroll-tools.js +76 -0
- package/dist/portal/input/storage-fixture.d.ts +57 -0
- package/dist/portal/input/storage-fixture.js +92 -0
- package/dist/portal/input/viewport-tools.d.ts +2 -0
- package/dist/portal/input/viewport-tools.js +72 -0
- package/dist/portal/pool/browser-pool.d.ts +174 -0
- package/dist/portal/pool/browser-pool.js +559 -0
- package/dist/portal/pool/lease-reaper.js +40 -0
- package/dist/portal/pool/playwright-launcher.js +150 -0
- package/dist/portal/pool/pool-contract.d.ts +116 -0
- package/dist/portal/pool/pool-contract.js +8 -0
- package/dist/portal/pool/storage-seed.d.ts +23 -0
- package/dist/portal/realm/conformance-client.d.ts +43 -0
- package/dist/portal/realm/conformance-client.js +227 -0
- package/dist/portal/realm/http-witness.d.ts +48 -0
- package/dist/portal/realm/http-witness.js +135 -0
- package/dist/portal/realm/web-realm.d.ts +225 -0
- package/dist/portal/realm/web-realm.js +661 -0
- package/dist/portal/session/daemon-answers.d.ts +20 -0
- package/dist/portal/session/daemon-answers.js +20 -0
- package/dist/portal/session/dev-server/dev-server-probe.js +147 -0
- package/dist/portal/session/facts/handshake-facts.d.ts +56 -0
- package/dist/portal/session/facts/handshake-facts.js +1 -0
- package/dist/portal/session/facts/observed-state.d.ts +60 -0
- package/dist/portal/session/facts/observed-state.js +121 -0
- package/dist/portal/session/facts/session-replaced.d.ts +43 -0
- package/dist/portal/session/facts/session-replaced.js +51 -0
- package/dist/portal/session/live-control-tools.d.ts +15 -0
- package/dist/portal/session/live-control-tools.js +242 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +176 -0
- package/dist/portal/session/no-session-diagnosis.js +457 -0
- package/dist/portal/session/no-session-next-action.d.ts +76 -0
- package/dist/portal/session/no-session-next-action.js +211 -0
- package/dist/portal/session/no-session-watch.js +351 -0
- package/dist/portal/session/output-budget.d.ts +82 -0
- package/dist/portal/session/output-budget.js +108 -0
- package/dist/portal/session/page-commands/undeclared-command.d.ts +30 -0
- package/dist/portal/session/page-commands/undeclared-command.js +44 -0
- package/dist/portal/session/presence/session-recommendation.js +29 -0
- package/dist/portal/session/rebind.d.ts +18 -0
- package/dist/portal/session/rebind.js +38 -0
- package/dist/portal/session/session-health.d.ts +145 -0
- package/dist/portal/session/session-health.js +154 -0
- package/dist/portal/session/session-manager.d.ts +81 -0
- package/dist/portal/session/session-manager.js +504 -0
- package/dist/portal/session/session-reaper.d.ts +36 -0
- package/dist/portal/session/session-reaper.js +93 -0
- package/dist/portal/session/session-tools.d.ts +8 -0
- package/dist/portal/session/session-tools.js +42 -0
- package/dist/portal/session/session.d.ts +279 -0
- package/dist/portal/session/session.js +875 -0
- package/dist/portal/session/stall-clock.js +48 -0
- package/dist/portal/session/timing/command-timeout.d.ts +40 -0
- package/dist/portal/session/timing/command-timeout.js +42 -0
- package/dist/start-options.d.ts +51 -0
- package/dist/start-options.js +7 -0
- package/dist/status-payload.d.ts +16 -10
- package/dist/status-payload.js +5 -2
- package/dist/surface/http-server.d.ts +52 -0
- package/dist/surface/http-server.js +379 -0
- package/dist/surface/mcp/consumer-verdict-guard.d.ts +40 -0
- package/dist/surface/mcp/consumer-verdict-guard.js +57 -0
- package/dist/surface/mcp/faults/mcp-is-error.d.ts +13 -0
- package/dist/surface/mcp/faults/mcp-is-error.js +18 -0
- package/dist/surface/mcp/faults/mcp-outage.d.ts +33 -0
- package/dist/surface/mcp/faults/mcp-outage.js +71 -0
- package/dist/surface/mcp/mcp-proxy.d.ts +119 -0
- package/dist/surface/mcp/mcp-proxy.js +882 -0
- package/dist/surface/mcp/mcp.d.ts +89 -0
- package/dist/surface/mcp/mcp.js +676 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +109 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +22 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +71 -0
- package/dist/surface/mcp/proxy/proxy-handshake.js +192 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.d.ts +90 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.js +98 -0
- package/dist/surface/mcp/proxy/proxy-log.d.ts +57 -0
- package/dist/surface/mcp/proxy/proxy-log.js +117 -0
- package/dist/surface/mcp/server-instructions.d.ts +26 -0
- package/dist/surface/mcp/server-instructions.js +156 -0
- package/dist/surface/mcp/surface-vocabulary.d.ts +47 -0
- package/dist/surface/mcp/surface-vocabulary.js +56 -0
- package/dist/surface/mcp/tool-catalog-cache.d.ts +45 -0
- package/dist/surface/mcp/tool-catalog-cache.js +77 -0
- package/dist/surface/tools/act/act-danger.js +69 -0
- package/dist/surface/tools/act/act-helpers.d.ts +17 -0
- package/dist/surface/tools/act/act-helpers.js +40 -0
- package/dist/surface/tools/act/act-observation.d.ts +42 -0
- package/dist/surface/tools/act/act-observation.js +36 -0
- package/dist/surface/tools/act/act-preflight.d.ts +27 -0
- package/dist/surface/tools/act/act-preflight.js +168 -0
- package/dist/surface/tools/act/act-target.d.ts +10 -0
- package/dist/surface/tools/act/act-target.js +100 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +68 -0
- package/dist/surface/tools/act/resolve-target.js +115 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +79 -0
- package/dist/surface/tools/act/sequence-grade.js +104 -0
- package/dist/surface/tools/act-capsule.d.ts +33 -0
- package/dist/surface/tools/act-capsule.js +79 -0
- package/dist/surface/tools/act-merged.d.ts +20 -0
- package/dist/surface/tools/act-merged.js +53 -0
- package/dist/surface/tools/act-sequence-tool.js +330 -0
- package/dist/surface/tools/act-tools.d.ts +24 -0
- package/dist/surface/tools/act-tools.js +835 -0
- package/dist/surface/tools/args/numeric-bounds.d.ts +97 -0
- package/dist/surface/tools/args/numeric-bounds.js +133 -0
- package/dist/surface/tools/assert/assert-grade.d.ts +42 -0
- package/dist/surface/tools/assert/assert-grade.js +125 -0
- package/dist/surface/tools/assert/assert-source.d.ts +52 -0
- package/dist/surface/tools/assert/assert-source.js +74 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +48 -0
- package/dist/surface/tools/assert/assert-verdict.js +247 -0
- package/dist/surface/tools/browser-tools.d.ts +2 -0
- package/dist/surface/tools/browser-tools.js +115 -0
- package/dist/surface/tools/contract-tools.d.ts +2 -0
- package/dist/surface/tools/contract-tools.js +112 -0
- package/dist/surface/tools/coverage-tools.d.ts +18 -0
- package/dist/surface/tools/coverage-tools.js +178 -0
- package/dist/surface/tools/dynamic-tools.d.ts +17 -0
- package/dist/surface/tools/dynamic-tools.js +282 -0
- package/dist/surface/tools/error-recovery.d.ts +116 -0
- package/dist/surface/tools/error-recovery.js +527 -0
- package/dist/surface/tools/explore-tools.d.ts +14 -0
- package/dist/surface/tools/explore-tools.js +162 -0
- package/dist/surface/tools/feature-capture.d.ts +151 -0
- package/dist/surface/tools/feature-capture.js +235 -0
- package/dist/surface/tools/feedback-invite.d.ts +48 -0
- package/dist/surface/tools/feedback-invite.js +71 -0
- package/dist/surface/tools/feedback-tools.d.ts +35 -0
- package/dist/surface/tools/feedback-tools.js +280 -0
- package/dist/surface/tools/first-sentence.d.ts +24 -0
- package/dist/surface/tools/first-sentence.js +0 -0
- package/dist/surface/tools/gap-novelty.d.ts +39 -0
- package/dist/surface/tools/gap-novelty.js +69 -0
- package/dist/surface/tools/gaps/capability-absences.d.ts +39 -0
- package/dist/surface/tools/gaps/capability-absences.js +46 -0
- package/dist/surface/tools/harness-explore.d.ts +177 -0
- package/dist/surface/tools/harness-explore.js +453 -0
- package/dist/surface/tools/harness-plan.d.ts +76 -0
- package/dist/surface/tools/harness-plan.js +156 -0
- package/dist/surface/tools/harness-toolset.d.ts +35 -0
- package/dist/surface/tools/harness-toolset.js +144 -0
- package/dist/surface/tools/inspect-tool.d.ts +4 -0
- package/dist/surface/tools/inspect-tool.js +142 -0
- package/dist/surface/tools/invoke-tool.d.ts +10 -0
- package/dist/surface/tools/invoke-tool.js +668 -0
- package/dist/surface/tools/lease-hint.d.ts +50 -0
- package/dist/surface/tools/lease-hint.js +125 -0
- package/dist/surface/tools/lease-tools.d.ts +195 -0
- package/dist/surface/tools/lease-tools.js +797 -0
- package/dist/surface/tools/lineage-tools.d.ts +14 -0
- package/dist/surface/tools/lineage-tools.js +64 -0
- package/dist/surface/tools/live-call-text.d.ts +25 -0
- package/dist/surface/tools/live-call-text.js +191 -0
- package/dist/surface/tools/merge-tools.d.ts +68 -0
- package/dist/surface/tools/merge-tools.js +110 -0
- package/dist/surface/tools/merged-name-redirect.d.ts +36 -0
- package/dist/surface/tools/merged-name-redirect.js +107 -0
- package/dist/surface/tools/observe-tools.js +700 -0
- package/dist/surface/tools/read/query-windowed.d.ts +54 -0
- package/dist/surface/tools/read/query-windowed.js +75 -0
- package/dist/surface/tools/read/snapshot-delta.d.ts +92 -0
- package/dist/surface/tools/read/snapshot-delta.js +356 -0
- package/dist/surface/tools/read-tools.js +569 -0
- package/dist/surface/tools/real-input-attempt.d.ts +68 -0
- package/dist/surface/tools/real-input-attempt.js +360 -0
- package/dist/surface/tools/reconcile-tools.js +211 -0
- package/dist/surface/tools/tool-hit-rate.js +90 -0
- package/dist/surface/tools/tool-kit.d.ts +254 -0
- package/dist/surface/tools/tool-kit.js +123 -0
- package/dist/surface/tools/tool-surface.d.ts +195 -0
- package/dist/surface/tools/tool-surface.js +429 -0
- package/dist/surface/tools/tools-helpers.d.ts +40 -0
- package/dist/surface/tools/tools-helpers.js +76 -0
- package/dist/surface/tools/tools.d.ts +76 -0
- package/dist/surface/tools/tools.js +799 -0
- package/dist/surface/tools/unadvertised-help.js +60 -0
- package/dist/surface/tools/verify-next-baton.js +52 -0
- package/dist/telemetry/app-instrumented.d.ts +3 -5
- package/dist/telemetry/app-instrumented.js +17 -6
- package/dist/telemetry/argument-shape.js +4 -4
- package/dist/telemetry/bug-found.js +49 -27
- package/dist/telemetry/cli-telemetry.js +27 -10
- package/dist/telemetry/daemon-telemetry.d.ts +7 -13
- package/dist/telemetry/daemon-telemetry.js +15 -22
- package/dist/telemetry/error-fingerprint.js +26 -1
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +2 -2
- package/dist/telemetry/feedback-context.js +4 -4
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/harness-drive.d.ts +6 -0
- package/dist/telemetry/harness-drive.js +39 -0
- package/dist/telemetry/install-source.js +1 -1
- package/dist/telemetry/install-trace.d.ts +8 -0
- package/dist/telemetry/install-trace.js +74 -0
- package/dist/telemetry/license-activation.js +1 -1
- package/dist/telemetry/mcp-connection.d.ts +14 -1
- package/dist/telemetry/mcp-connection.js +17 -2
- package/dist/telemetry/onboarding-firsts.d.ts +40 -0
- package/dist/telemetry/onboarding-firsts.js +109 -0
- package/dist/telemetry/onboarding-funnel.d.ts +26 -0
- package/dist/telemetry/onboarding-funnel.js +60 -0
- package/dist/telemetry/project-profile.js +1 -1
- package/dist/telemetry/run-telemetry.js +13 -0
- package/dist/telemetry/session-metrics.d.ts +6 -7
- package/dist/telemetry/session-metrics.js +14 -21
- package/dist/telemetry/telemetry.d.ts +8 -1
- package/dist/telemetry/telemetry.js +6 -5
- package/dist/telemetry/verification-of.d.ts +6 -8
- package/dist/telemetry/verification-of.js +38 -12
- package/dist/workspace-packages.d.ts +22 -0
- package/dist/workspace-packages.js +57 -0
- package/docs/README.md +29 -23
- package/docs/actions.mdx +4 -4
- package/docs/adapters.md +75 -0
- package/docs/agent-cheatsheet.md +37 -27
- package/docs/architecture.md +3 -2
- package/docs/autodrive.md +99 -0
- package/docs/benchmarks.md +1 -1
- package/docs/best-practices.mdx +3 -3
- package/docs/capabilities.mdx +4 -4
- package/docs/cli/cloud.mdx +4 -4
- package/docs/cli/doctor.mdx +1 -0
- package/docs/cli/feedback.mdx +1 -1
- package/docs/cli/init.mdx +3 -3
- package/docs/cli/mcp.mdx +1 -1
- package/docs/cli/status.mdx +35 -20
- package/docs/cli/watch.mdx +1 -1
- package/docs/cli.mdx +15 -25
- package/docs/desktop.mdx +1 -1
- package/docs/enterprise.md +3 -2
- package/docs/faq.mdx +4 -4
- package/docs/first-drive.md +5 -5
- package/docs/flows.md +5 -5
- package/docs/for-agents.md +2 -1
- package/docs/frameworks.mdx +1 -1
- package/docs/getting-started.md +30 -21
- package/docs/http-transport.md +1 -1
- package/docs/index.mdx +28 -10
- package/docs/install-agentic.mdx +12 -4
- package/docs/install-manual.mdx +23 -7
- package/docs/instrumentation.mdx +3 -3
- package/docs/local-registry.md +15 -4
- package/docs/packages/babel-plugin.mdx +1 -1
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/core.mdx +2 -2
- package/docs/packages/engine.mdx +40 -0
- package/docs/packages/open-verification.mdx +40 -0
- package/docs/packages/tauri.mdx +1 -1
- package/docs/packages.mdx +22 -2
- package/docs/platform-integration.md +3 -3
- package/docs/predicates.mdx +19 -3
- package/docs/protocol.mdx +60 -0
- package/docs/quickstart.mdx +48 -13
- package/docs/recipes.mdx +1 -1
- package/docs/required-checks.md +37 -0
- package/docs/skill-file.mdx +2 -2
- package/docs/skill-setup.md +104 -0
- package/docs/state-files.md +46 -0
- package/docs/state-management.mdx +1 -1
- package/docs/system-map.md +8 -6
- package/docs/telemetry.md +4 -3
- package/docs/testing.md +12 -3
- package/docs/token-efficiency.md +3 -3
- package/docs/tools/act-and-wait.mdx +173 -0
- package/docs/tools/act-sequence.mdx +160 -0
- package/docs/tools/act.mdx +95 -0
- package/docs/tools/assert.mdx +129 -0
- package/docs/tools/console.mdx +70 -0
- package/docs/tools/inspect.mdx +95 -0
- package/docs/tools/navigate.mdx +107 -0
- package/docs/tools/network.mdx +126 -0
- package/docs/tools/observe.mdx +145 -0
- package/docs/tools/overview.mdx +163 -0
- package/docs/tools/query.mdx +133 -0
- package/docs/tools/sessions.mdx +101 -0
- package/docs/tools/snapshot.mdx +136 -0
- package/docs/tools/state.mdx +111 -0
- package/docs/tools/wait-for.mdx +92 -0
- package/docs/troubleshooting.mdx +43 -9
- package/docs/usage.md +59 -59
- package/package.json +31 -13
- package/dist/bridge/auth-failure-reason.d.ts +0 -23
- package/dist/bridge/auth-failure-reason.js +0 -47
- package/dist/bridge/bridge-security.d.ts +0 -30
- package/dist/bridge/bridge-security.js +0 -53
- package/dist/bridge/bridge.d.ts +0 -95
- package/dist/bridge/bridge.js +0 -713
- package/dist/bridge/bridge.test-harness.d.ts +0 -65
- package/dist/bridge/bridge.test-harness.js +0 -230
- package/dist/capsule/capsule-store.d.ts +0 -71
- package/dist/capsule/capsule-store.js +0 -114
- package/dist/capsule/capsule.d.ts +0 -18
- package/dist/capsule/capsule.js +0 -35
- package/dist/capsule/causal-summary.d.ts +0 -119
- package/dist/capsule/causal-summary.js +0 -172
- package/dist/capsule/divergence.d.ts +0 -35
- package/dist/capsule/predicate-to-links.d.ts +0 -8
- package/dist/capsule/predicate-to-links.js +0 -33
- package/dist/cli/adhoc-verdict.d.ts +0 -58
- package/dist/cli/adhoc-verdict.js +0 -115
- package/dist/cli/cli-doctor.js +0 -195
- package/dist/cli/cli-flow-commands.d.ts +0 -46
- package/dist/cli/cli-flow-commands.js +0 -255
- package/dist/cli/cli-kill.d.ts +0 -59
- package/dist/cli/cli-kill.js +0 -162
- package/dist/cli/cli-launch.d.ts +0 -92
- package/dist/cli/cli-launch.js +0 -223
- package/dist/cli/cli-parse.d.ts +0 -171
- package/dist/cli/cli-parse.js +0 -874
- package/dist/cli/cli-port.d.ts +0 -70
- package/dist/cli/cli-port.js +0 -136
- package/dist/cli/cli-update-commands.js +0 -112
- package/dist/cli/cli-verify.d.ts +0 -86
- package/dist/cli/cli-verify.js +0 -340
- package/dist/cli/cloud-cli.js +0 -694
- package/dist/cli/cloud-keystore.js +0 -97
- package/dist/cli/cloud-kit.d.ts +0 -37
- package/dist/cli/cloud-kit.js +0 -121
- package/dist/cli/cloud-login.js +0 -183
- package/dist/cli/config-discovery.d.ts +0 -36
- package/dist/cli/config-discovery.js +0 -164
- package/dist/cli/daemon-start-options.d.ts +0 -33
- package/dist/cli/device-flow.d.ts +0 -76
- package/dist/cli/device-flow.js +0 -56
- package/dist/cli/doctor-daemon-line.js +0 -47
- package/dist/cli/doctor-rows.d.ts +0 -63
- package/dist/cli/doctor-rows.js +0 -65
- package/dist/cli/doctor-sessions-line.js +0 -69
- package/dist/cli/drive-attach.d.ts +0 -113
- package/dist/cli/drive-attach.js +0 -221
- package/dist/cli/drive-command.js +0 -107
- package/dist/cli/mcp-command.js +0 -174
- package/dist/cli/port-holder.js +0 -123
- package/dist/cli/status-next-action.d.ts +0 -51
- package/dist/cli/status-next-action.js +0 -60
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +0 -828
- package/dist/cloud/account-state.d.ts +0 -20
- package/dist/cloud/account-state.js +0 -65
- package/dist/cloud/cloud-config.d.ts +0 -57
- package/dist/cloud/cloud-config.js +0 -145
- package/dist/cloud/cloud-sync.d.ts +0 -190
- package/dist/cloud/cloud-sync.js +0 -354
- package/dist/cloud/sync-cycle.d.ts +0 -111
- package/dist/cloud/sync-cycle.js +0 -270
- package/dist/cloud/sync-daemon.d.ts +0 -53
- package/dist/cloud/sync-daemon.js +0 -260
- package/dist/cloud/sync-disk.js +0 -191
- package/dist/crawl/crawl-tools.d.ts +0 -7
- package/dist/crawl/crawl-tools.js +0 -87
- package/dist/crawl/crawl.d.ts +0 -98
- package/dist/crawl/crawl.js +0 -441
- package/dist/daemon/daemon-resilience.d.ts +0 -74
- package/dist/daemon/daemon-resilience.js +0 -318
- package/dist/daemon/daemon-resolve.d.ts +0 -113
- package/dist/daemon/daemon-resolve.js +0 -187
- package/dist/daemon/daemon-usefulness.d.ts +0 -61
- package/dist/daemon/daemon-usefulness.js +0 -62
- package/dist/daemon/daemon.d.ts +0 -95
- package/dist/daemon/daemon.js +0 -336
- package/dist/daemon/heartbeat.d.ts +0 -111
- package/dist/daemon/heartbeat.js +0 -141
- package/dist/daemon/idle-grace.d.ts +0 -32
- package/dist/daemon/idle-grace.js +0 -41
- package/dist/daemon/idle-shutdown.d.ts +0 -54
- package/dist/daemon/idle-shutdown.js +0 -98
- package/dist/daemon/state-dir.js +0 -59
- package/dist/daemon/wake-decision.d.ts +0 -32
- package/dist/daemon/wake-decision.js +0 -38
- package/dist/dev/stale-issue-guard.d.ts +0 -41
- package/dist/dev/stale-issue-guard.js +0 -75
- package/dist/domain/domain-model.js +0 -126
- package/dist/domain/domain-tools.d.ts +0 -2
- package/dist/domain/domain-tools.js +0 -94
- package/dist/domain/flow-risk.js +0 -80
- package/dist/ee/audit-log.js +0 -11
- package/dist/events/body-failures.d.ts +0 -4
- package/dist/events/body-failures.js +0 -113
- package/dist/events/contradiction-folds.d.ts +0 -45
- package/dist/events/contradiction-folds.js +0 -42
- package/dist/events/contradictions.d.ts +0 -170
- package/dist/events/contradictions.js +0 -718
- package/dist/events/declared.d.ts +0 -74
- package/dist/events/declared.js +0 -171
- package/dist/events/echo-mismatch.d.ts +0 -10
- package/dist/events/echo-mismatch.js +0 -299
- package/dist/events/event-filters.d.ts +0 -121
- package/dist/events/event-filters.js +0 -215
- package/dist/events/json-salvage.d.ts +0 -33
- package/dist/events/json-salvage.js +0 -96
- package/dist/events/lineage.d.ts +0 -52
- package/dist/events/lineage.js +0 -122
- package/dist/events/net-evidence.d.ts +0 -21
- package/dist/events/net-evidence.js +0 -81
- package/dist/events/observed-in-window.d.ts +0 -24
- package/dist/events/observed-in-window.js +0 -38
- package/dist/events/predicate-asks.d.ts +0 -30
- package/dist/events/predicate-asks.js +0 -48
- package/dist/events/predicate-console.d.ts +0 -13
- package/dist/events/predicate-console.js +0 -138
- package/dist/events/predicate-element.d.ts +0 -13
- package/dist/events/predicate-element.js +0 -214
- package/dist/events/predicate-eval.d.ts +0 -101
- package/dist/events/predicate-eval.js +0 -834
- package/dist/events/predicate-parse.d.ts +0 -17
- package/dist/events/predicate-parse.js +0 -175
- package/dist/events/predicate-precheck.d.ts +0 -8
- package/dist/events/predicate-precheck.js +0 -41
- package/dist/events/predicate-request-body.d.ts +0 -50
- package/dist/events/predicate-request-body.js +0 -120
- package/dist/events/predicate-route.d.ts +0 -66
- package/dist/events/predicate-route.js +0 -258
- package/dist/events/predicate-schema.d.ts +0 -168
- package/dist/events/predicate-schema.js +0 -501
- package/dist/events/predicate.d.ts +0 -74
- package/dist/events/predicate.js +0 -725
- package/dist/events/reaction.d.ts +0 -33
- package/dist/events/reaction.js +0 -59
- package/dist/events/reconcile.d.ts +0 -39
- package/dist/events/reconcile.js +0 -211
- package/dist/events/ring-buffer.d.ts +0 -41
- package/dist/events/ring-buffer.js +0 -151
- package/dist/events/split-text-miss.d.ts +0 -32
- package/dist/events/split-text-miss.js +0 -51
- package/dist/events/stale-response.d.ts +0 -3
- package/dist/events/stale-response.js +0 -186
- package/dist/events/testid-near-miss.d.ts +0 -22
- package/dist/events/testid-near-miss.js +0 -33
- package/dist/events/unit-mismatch.d.ts +0 -16
- package/dist/events/unit-mismatch.js +0 -167
- package/dist/flows/affected-tools.d.ts +0 -18
- package/dist/flows/affected-tools.js +0 -80
- package/dist/flows/affected.d.ts +0 -24
- package/dist/flows/affected.js +0 -35
- package/dist/flows/annotate-tools.d.ts +0 -15
- package/dist/flows/annotate-tools.js +0 -179
- package/dist/flows/assertion-tiers-store.d.ts +0 -16
- package/dist/flows/assertion-tiers-store.js +0 -98
- package/dist/flows/decision.d.ts +0 -25
- package/dist/flows/decision.js +0 -201
- package/dist/flows/empty-flow.js +0 -24
- package/dist/flows/flake-store.d.ts +0 -18
- package/dist/flows/flake-store.js +0 -58
- package/dist/flows/flake.d.ts +0 -56
- package/dist/flows/flow-classify.d.ts +0 -51
- package/dist/flows/flow-classify.js +0 -102
- package/dist/flows/flow-expect-grammar.d.ts +0 -33
- package/dist/flows/flow-expect-grammar.js +0 -155
- package/dist/flows/flow-intent.d.ts +0 -52
- package/dist/flows/flow-intent.js +0 -123
- package/dist/flows/flow-replay-run.d.ts +0 -43
- package/dist/flows/flow-replay-run.js +0 -478
- package/dist/flows/flow-replay.d.ts +0 -82
- package/dist/flows/flow-replay.js +0 -519
- package/dist/flows/flow-secret-field.d.ts +0 -14
- package/dist/flows/flow-secret-field.js +0 -22
- package/dist/flows/flow-sources.d.ts +0 -19
- package/dist/flows/flow-sources.js +0 -32
- package/dist/flows/flow-step-runners.d.ts +0 -52
- package/dist/flows/flow-step-runners.js +0 -315
- package/dist/flows/flow-store-for-session.d.ts +0 -31
- package/dist/flows/flow-success.d.ts +0 -32
- package/dist/flows/flow-success.js +0 -169
- package/dist/flows/flow-tools.d.ts +0 -15
- package/dist/flows/flow-tools.js +0 -639
- package/dist/flows/flow-upload-resolve.d.ts +0 -23
- package/dist/flows/flow-upload-resolve.js +0 -46
- package/dist/flows/flows.d.ts +0 -130
- package/dist/flows/flows.js +0 -870
- package/dist/flows/gate.js +0 -33
- package/dist/flows/heal-run.d.ts +0 -10
- package/dist/flows/heal-run.js +0 -139
- package/dist/flows/heal.js +0 -97
- package/dist/flows/predicate-to-expect.d.ts +0 -44
- package/dist/flows/predicate-to-expect.js +0 -130
- package/dist/flows/recording-backtrack.js +0 -73
- package/dist/flows/recordings.d.ts +0 -63
- package/dist/flows/recordings.js +0 -57
- package/dist/flows/replay.d.ts +0 -62
- package/dist/flows/replay.js +0 -337
- package/dist/flows/role-anchor-nearest.js +0 -45
- package/dist/flows/server-verify.d.ts +0 -15
- package/dist/flows/server-verify.js +0 -56
- package/dist/flows/suite-flakes.d.ts +0 -34
- package/dist/flows/suite-flakes.js +0 -32
- package/dist/flows/verify-change-tools.d.ts +0 -2
- package/dist/flows/verify-change-tools.js +0 -231
- package/dist/honesty/accepted-write.d.ts +0 -17
- package/dist/honesty/accepted-write.js +0 -22
- package/dist/honesty/already-true.d.ts +0 -16
- package/dist/honesty/already-true.js +0 -89
- package/dist/honesty/blind-spots.d.ts +0 -133
- package/dist/honesty/blind-spots.js +0 -248
- package/dist/honesty/body-capture-remedy.d.ts +0 -42
- package/dist/honesty/body-capture-remedy.js +0 -95
- package/dist/honesty/feature-capture.d.ts +0 -151
- package/dist/honesty/feature-capture.js +0 -233
- package/dist/honesty/gap-ledger.d.ts +0 -52
- package/dist/honesty/gap-ledger.js +0 -63
- package/dist/honesty/honesty.d.ts +0 -103
- package/dist/honesty/honesty.js +0 -95
- package/dist/honesty/instrumentation-gaps.d.ts +0 -95
- package/dist/honesty/instrumentation-gaps.js +0 -114
- package/dist/honesty/observability.d.ts +0 -38
- package/dist/honesty/observability.js +0 -40
- package/dist/honesty/tool-hit-rate.js +0 -90
- package/dist/honesty/uncaptured-bodies.d.ts +0 -23
- package/dist/honesty/uncaptured-bodies.js +0 -41
- package/dist/honesty/undeclared-change.d.ts +0 -51
- package/dist/honesty/undeclared-change.js +0 -56
- package/dist/honesty/unread-outcome.d.ts +0 -10
- package/dist/honesty/unread-outcome.js +0 -77
- package/dist/honesty/unsettled.d.ts +0 -58
- package/dist/honesty/unsettled.js +0 -127
- package/dist/honesty/verified.d.ts +0 -148
- package/dist/honesty/verified.js +0 -330
- package/dist/http-server.d.ts +0 -52
- package/dist/http-server.js +0 -381
- package/dist/impact/impact-recorder.d.ts +0 -46
- package/dist/impact/impact-recorder.js +0 -159
- package/dist/impact/impact-store.d.ts +0 -47
- package/dist/impact/impact-store.js +0 -255
- package/dist/input/network-detail.d.ts +0 -104
- package/dist/input/network-detail.js +0 -211
- package/dist/input/network-mock-tools.d.ts +0 -21
- package/dist/input/network-mock-tools.js +0 -124
- package/dist/input/network-mock.js +0 -61
- package/dist/input/real-input.d.ts +0 -222
- package/dist/input/real-input.js +0 -405
- package/dist/input/scroll-find.js +0 -111
- package/dist/input/scroll-tools.d.ts +0 -2
- package/dist/input/scroll-tools.js +0 -76
- package/dist/input/viewport-tools.d.ts +0 -2
- package/dist/input/viewport-tools.js +0 -72
- package/dist/intent/inline-intent.d.ts +0 -27
- package/dist/intent/inline-intent.js +0 -193
- package/dist/intent/intent-shard-store.d.ts +0 -73
- package/dist/intent/intent-shard-store.js +0 -203
- package/dist/intent/intent-shard.d.ts +0 -411
- package/dist/intent/intent-shard.js +0 -176
- package/dist/intent/intent-store.d.ts +0 -49
- package/dist/intent/intent-store.js +0 -133
- package/dist/intent/intent-subject.d.ts +0 -46
- package/dist/intent/intent-subject.js +0 -177
- package/dist/intent/intent-tools.d.ts +0 -2
- package/dist/intent/intent-tools.js +0 -143
- package/dist/intent/open-intents.d.ts +0 -43
- package/dist/intent/open-intents.js +0 -40
- package/dist/journal/ambient-store.d.ts +0 -13
- package/dist/journal/ambient-store.js +0 -45
- package/dist/journal/ambient.d.ts +0 -47
- package/dist/journal/ambient.js +0 -47
- package/dist/journal/attach-journal.d.ts +0 -30
- package/dist/journal/attach-journal.js +0 -30
- package/dist/journal/envelope-store.d.ts +0 -16
- package/dist/journal/envelope-store.js +0 -61
- package/dist/journal/envelope.d.ts +0 -230
- package/dist/journal/journal-query.d.ts +0 -32
- package/dist/journal/journal-query.js +0 -52
- package/dist/journal/journal-recorder.d.ts +0 -61
- package/dist/journal/journal-recorder.js +0 -115
- package/dist/journal/retention.d.ts +0 -20
- package/dist/journal/retention.js +0 -49
- package/dist/journal/session-end.d.ts +0 -32
- package/dist/journal/session-end.js +0 -51
- package/dist/journal/session-journal.d.ts +0 -24
- package/dist/journal/session-journal.js +0 -167
- package/dist/journal/workspace-gitignore.d.ts +0 -10
- package/dist/journal/workspace-gitignore.js +0 -59
- package/dist/license/license-env.d.ts +0 -29
- package/dist/license/license-env.js +0 -148
- package/dist/license/license.d.ts +0 -169
- package/dist/license/license.js +0 -289
- package/dist/mcp/mcp-is-error.d.ts +0 -13
- package/dist/mcp/mcp-is-error.js +0 -18
- package/dist/mcp/mcp-outage.d.ts +0 -32
- package/dist/mcp/mcp-outage.js +0 -55
- package/dist/mcp/mcp-post-transport.js +0 -109
- package/dist/mcp/mcp-proxy.d.ts +0 -110
- package/dist/mcp/mcp-proxy.js +0 -872
- package/dist/mcp/mcp.d.ts +0 -80
- package/dist/mcp/mcp.js +0 -536
- package/dist/mcp/proxy-daemon-probe.d.ts +0 -9
- package/dist/mcp/proxy-daemon-probe.js +0 -54
- package/dist/mcp/proxy-handshake.js +0 -192
- package/dist/mcp/proxy-lifecycle.d.ts +0 -92
- package/dist/mcp/proxy-lifecycle.js +0 -100
- package/dist/mcp/proxy-log.d.ts +0 -63
- package/dist/mcp/proxy-log.js +0 -132
- package/dist/mcp/server-instructions.d.ts +0 -18
- package/dist/mcp/server-instructions.js +0 -98
- package/dist/mcp/tool-catalog-cache.d.ts +0 -45
- package/dist/mcp/tool-catalog-cache.js +0 -77
- package/dist/memory/memory-tools.d.ts +0 -2
- package/dist/memory/memory-tools.js +0 -82
- package/dist/memory/project-memory.d.ts +0 -33
- package/dist/oracles/propose-consequences.d.ts +0 -22
- package/dist/oracles/propose-consequences.js +0 -106
- package/dist/pool/browser-pool.d.ts +0 -282
- package/dist/pool/browser-pool.js +0 -560
- package/dist/pool/lease-reaper.js +0 -40
- package/dist/pool/playwright-launcher.js +0 -150
- package/dist/pool/storage-seed.d.ts +0 -23
- package/dist/project/artifact-root.d.ts +0 -84
- package/dist/project/artifact-root.js +0 -112
- package/dist/project/fs-port.d.ts +0 -47
- package/dist/project/fs-port.js +0 -54
- package/dist/project/learned-routes.d.ts +0 -24
- package/dist/project/learned-routes.js +0 -63
- package/dist/project/memory-fs.d.ts +0 -10
- package/dist/project/project-store.d.ts +0 -54
- package/dist/project/project-store.js +0 -201
- package/dist/project/project-tools.d.ts +0 -2
- package/dist/project/project-tools.js +0 -155
- package/dist/project/reticle-dir.d.ts +0 -102
- package/dist/project/reticle-dir.js +0 -188
- package/dist/project/session-root.d.ts +0 -23
- package/dist/project/session-root.js +0 -38
- package/dist/runs/build-verification-run.d.ts +0 -29
- package/dist/runs/build-verification-run.js +0 -70
- package/dist/runs/context-tools.d.ts +0 -2
- package/dist/runs/context-tools.js +0 -89
- package/dist/runs/render-report.js +0 -69
- package/dist/runs/replay-mapping.js +0 -34
- package/dist/runs/reticle-runner.d.ts +0 -60
- package/dist/runs/reticle-runner.js +0 -95
- package/dist/runs/run-store.d.ts +0 -54
- package/dist/runs/run-store.js +0 -147
- package/dist/runs/run-tools.d.ts +0 -9
- package/dist/runs/run-tools.js +0 -82
- package/dist/runs/runner-port.d.ts +0 -13
- package/dist/runs/runner-port.js +0 -22
- package/dist/runs/verification-sync.d.ts +0 -12
- package/dist/runs/verification-sync.js +0 -87
- package/dist/session/command-timeout.d.ts +0 -46
- package/dist/session/command-timeout.js +0 -42
- package/dist/session/connection-memory.d.ts +0 -59
- package/dist/session/connection-memory.js +0 -108
- package/dist/session/dev-server-probe.js +0 -147
- package/dist/session/live-control-tools.d.ts +0 -15
- package/dist/session/live-control-tools.js +0 -242
- package/dist/session/no-session-diagnosis.d.ts +0 -176
- package/dist/session/no-session-diagnosis.js +0 -477
- package/dist/session/no-session-next-action.d.ts +0 -72
- package/dist/session/no-session-next-action.js +0 -174
- package/dist/session/no-session-watch.js +0 -335
- package/dist/session/observed-state.d.ts +0 -60
- package/dist/session/observed-state.js +0 -121
- package/dist/session/output-budget.d.ts +0 -49
- package/dist/session/output-budget.js +0 -67
- package/dist/session/session-health.d.ts +0 -138
- package/dist/session/session-health.js +0 -154
- package/dist/session/session-manager.d.ts +0 -76
- package/dist/session/session-manager.js +0 -464
- package/dist/session/session-reaper.d.ts +0 -36
- package/dist/session/session-reaper.js +0 -93
- package/dist/session/session-recommendation.js +0 -29
- package/dist/session/session-replaced.d.ts +0 -24
- package/dist/session/session-replaced.js +0 -29
- package/dist/session/session-tools.d.ts +0 -8
- package/dist/session/session-tools.js +0 -42
- package/dist/session/session.d.ts +0 -280
- package/dist/session/session.js +0 -891
- package/dist/session/stall-clock.js +0 -48
- package/dist/setup/agent-configs.d.ts +0 -97
- package/dist/setup/agent-configs.js +0 -333
- package/dist/setup/agent-writer.d.ts +0 -52
- package/dist/setup/agent-writer.js +0 -115
- package/dist/setup/auto-approve.js +0 -153
- package/dist/setup/bridge-port.d.ts +0 -15
- package/dist/setup/bridge-port.js +0 -24
- package/dist/setup/confirm.js +0 -205
- package/dist/setup/dev-server-wait.d.ts +0 -68
- package/dist/setup/dev-server-wait.js +0 -67
- package/dist/setup/drive-agent.d.ts +0 -70
- package/dist/setup/drive-agent.js +0 -171
- package/dist/setup/drive-plan.d.ts +0 -69
- package/dist/setup/drive-plan.js +0 -130
- package/dist/setup/ensure-daemon.js +0 -58
- package/dist/setup/init-host.js +0 -26
- package/dist/setup/init-runtime.d.ts +0 -41
- package/dist/setup/init-runtime.js +0 -167
- package/dist/setup/node-effects.d.ts +0 -63
- package/dist/setup/node-effects.js +0 -225
- package/dist/setup/page-probe.d.ts +0 -44
- package/dist/setup/page-probe.js +0 -49
- package/dist/setup/remaining-steps.js +0 -31
- package/dist/setup/run-setup.d.ts +0 -103
- package/dist/setup/run-setup.js +0 -294
- package/dist/setup/setup-command.d.ts +0 -46
- package/dist/setup/setup-command.js +0 -207
- package/dist/setup/setup-options.d.ts +0 -76
- package/dist/setup/setup-options.js +0 -68
- package/dist/tools/act-capsule.d.ts +0 -33
- package/dist/tools/act-capsule.js +0 -53
- package/dist/tools/act-danger.js +0 -69
- package/dist/tools/act-helpers.d.ts +0 -17
- package/dist/tools/act-helpers.js +0 -40
- package/dist/tools/act-observation.d.ts +0 -42
- package/dist/tools/act-observation.js +0 -36
- package/dist/tools/act-preflight.d.ts +0 -20
- package/dist/tools/act-preflight.js +0 -103
- package/dist/tools/act-sequence-tool.js +0 -135
- package/dist/tools/act-target.d.ts +0 -18
- package/dist/tools/act-target.js +0 -56
- package/dist/tools/act-tools.d.ts +0 -20
- package/dist/tools/act-tools.js +0 -763
- package/dist/tools/assert-grade.d.ts +0 -42
- package/dist/tools/assert-grade.js +0 -108
- package/dist/tools/assert-source.d.ts +0 -52
- package/dist/tools/assert-source.js +0 -74
- package/dist/tools/assert-verdict.d.ts +0 -48
- package/dist/tools/assert-verdict.js +0 -197
- package/dist/tools/browser-tools.d.ts +0 -2
- package/dist/tools/browser-tools.js +0 -115
- package/dist/tools/contract-tools.d.ts +0 -2
- package/dist/tools/contract-tools.js +0 -98
- package/dist/tools/coverage-tools.d.ts +0 -18
- package/dist/tools/coverage-tools.js +0 -175
- package/dist/tools/dynamic-tools.d.ts +0 -7
- package/dist/tools/dynamic-tools.js +0 -257
- package/dist/tools/error-recovery.d.ts +0 -110
- package/dist/tools/error-recovery.js +0 -499
- package/dist/tools/feedback-invite.d.ts +0 -48
- package/dist/tools/feedback-invite.js +0 -71
- package/dist/tools/feedback-tools.d.ts +0 -35
- package/dist/tools/feedback-tools.js +0 -228
- package/dist/tools/invoke-tool.d.ts +0 -10
- package/dist/tools/invoke-tool.js +0 -569
- package/dist/tools/lease-hint.d.ts +0 -49
- package/dist/tools/lease-hint.js +0 -124
- package/dist/tools/lease-tools.d.ts +0 -143
- package/dist/tools/lease-tools.js +0 -688
- package/dist/tools/lineage-tools.d.ts +0 -14
- package/dist/tools/lineage-tools.js +0 -64
- package/dist/tools/merge-tools.d.ts +0 -51
- package/dist/tools/merge-tools.js +0 -69
- package/dist/tools/merged-name-redirect.d.ts +0 -26
- package/dist/tools/merged-name-redirect.js +0 -77
- package/dist/tools/navigate-arrival.d.ts +0 -68
- package/dist/tools/numeric-bounds.d.ts +0 -89
- package/dist/tools/numeric-bounds.js +0 -125
- package/dist/tools/observe-tools.js +0 -578
- package/dist/tools/read-tools.js +0 -569
- package/dist/tools/real-input-attempt.d.ts +0 -68
- package/dist/tools/real-input-attempt.js +0 -360
- package/dist/tools/reconcile-tools.js +0 -126
- package/dist/tools/resolve-target.js +0 -116
- package/dist/tools/snapshot-delta.d.ts +0 -92
- package/dist/tools/snapshot-delta.js +0 -356
- package/dist/tools/tool-kit.d.ts +0 -221
- package/dist/tools/tool-kit.js +0 -114
- package/dist/tools/tool-names.d.ts +0 -112
- package/dist/tools/tool-names.js +0 -112
- package/dist/tools/tool-surface.d.ts +0 -222
- package/dist/tools/tool-surface.js +0 -439
- package/dist/tools/tools-helpers.d.ts +0 -42
- package/dist/tools/tools-helpers.js +0 -87
- package/dist/tools/tools.d.ts +0 -20
- package/dist/tools/tools.js +0 -739
- package/dist/tools/unadvertised-help.js +0 -42
- package/dist/tools/verify-next-baton.js +0 -52
- package/dist/update/nudge-credit.js +0 -53
- package/dist/update/reticle-deps.d.ts +0 -9
- package/dist/update/reticle-deps.js +0 -27
- package/dist/update/sdk-sync.d.ts +0 -20
- package/dist/update/sdk-sync.js +0 -22
- package/dist/update/update-checker.js +0 -122
- package/dist/update/update-nudge.d.ts +0 -92
- package/dist/update/update-nudge.js +0 -214
- package/dist/update/updater.d.ts +0 -54
- package/dist/update/updater.js +0 -190
- package/dist/version/peer-announce.js +0 -32
- package/dist/version/sdk-fix.js +0 -127
- package/dist/version/server-version.js +0 -13
- package/dist/version/version-nudge.js +0 -61
- package/dist/version/version-skew.d.ts +0 -93
- package/dist/version/version-skew.js +0 -147
- package/dist/visual/visual-store.d.ts +0 -22
- package/dist/visual/visual-store.js +0 -66
- package/dist/visual/visual-tools.d.ts +0 -26
- package/dist/visual/visual-tools.js +0 -328
- package/docs/docs.json +0 -369
- package/docs/fixtures.md +0 -51
- package/docs/gate-plan.md +0 -104
- package/docs/gates.md +0 -131
- package/docs/style.css +0 -14
- package/docs/telemetry-contract.md +0 -390
- package/docs/telemetry-events.mdx +0 -442
- package/docs/tools-act-and-wait.mdx +0 -173
- package/docs/tools-act-sequence.mdx +0 -153
- package/docs/tools-act.mdx +0 -95
- package/docs/tools-assert.mdx +0 -129
- package/docs/tools-console.mdx +0 -63
- package/docs/tools-inspect.mdx +0 -88
- package/docs/tools-navigate.mdx +0 -107
- package/docs/tools-network.mdx +0 -119
- package/docs/tools-observe.mdx +0 -145
- package/docs/tools-overview.mdx +0 -160
- package/docs/tools-query.mdx +0 -126
- package/docs/tools-sessions.mdx +0 -94
- package/docs/tools-snapshot.mdx +0 -129
- package/docs/tools-state.mdx +0 -104
- package/docs/tools-wait-for.mdx +0 -85
- /package/dist/{cli → command/cli/answers}/gate-exit.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-exit.js +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.js +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.js +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-keystore.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.js +0 -0
- /package/dist/{cli → command/cli}/cli-doctor.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.js +0 -0
- /package/dist/{cli → command/cli}/cli-update-commands.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-cli.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-login.d.ts +0 -0
- /package/dist/{cli → command/cli}/daemon-start-options.js +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-daemon-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-sessions-line.d.ts +0 -0
- /package/dist/{cli → command/cli/drive}/drive-command.d.ts +0 -0
- /package/dist/{cli → command/cli}/mcp-command.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/port-holder.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.js +0 -0
- /package/dist/{cli → command/cli}/project-name.d.ts +0 -0
- /package/dist/{cli → command/cli}/project-name.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.js +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.d.ts +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.js +0 -0
- /package/dist/{daemon → command/daemon}/state-dir.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.js +0 -0
- /package/dist/{setup → command/setup}/approval-migration.d.ts +0 -0
- /package/dist/{setup → command/setup}/approval-migration.js +0 -0
- /package/dist/{setup → command/setup}/auto-approve.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/ensure-daemon.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.js +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.d.ts +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.js +0 -0
- /package/dist/{setup → command/setup/init}/init-host.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.js +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.js +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.js +0 -0
- /package/dist/{setup → command/setup}/remaining-steps.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.js +0 -0
- /package/dist/{setup → command/setup/terminal}/confirm.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.js +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.js +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.js +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.js +0 -0
- /package/dist/{update → command/update}/nudge-credit.d.ts +0 -0
- /package/dist/{update → command/update}/update-checker.d.ts +0 -0
- /package/dist/{version → command/version/identity}/server-version.d.ts +0 -0
- /package/dist/{version → command/version}/peer-announce.d.ts +0 -0
- /package/dist/{version → command/version}/sdk-fix.d.ts +0 -0
- /package/dist/{version → command/version}/version-nudge.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.js +0 -0
- /package/dist/{ee → features/ee}/audit-log.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.js +0 -0
- /package/dist/{visual → features/visual}/visual-diff.d.ts +0 -0
- /package/dist/{visual → features/visual}/visual-diff.js +0 -0
- /package/dist/{capsule → judgement/capsule}/divergence.js +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.d.ts +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.js +0 -0
- /package/dist/{domain → judgement/domain}/domain-model.d.ts +0 -0
- /package/dist/{domain → judgement/domain}/flow-risk.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.js +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.js +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.js +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.js +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.js +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.js +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.js +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.d.ts +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/render-report.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/replay-mapping.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.js +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.js +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.js +0 -0
- /package/dist/{flows → language/flows}/buddy-status.d.ts +0 -0
- /package/dist/{flows → language/flows}/buddy-status.js +0 -0
- /package/dist/{flows → language/flows/change}/gate.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.js +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.js +0 -0
- /package/dist/{flows → language/flows}/empty-flow.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.js +0 -0
- /package/dist/{flows → language/flows}/flow-report.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-report.js +0 -0
- /package/dist/{flows → language/flows}/flow-scope.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-scope.js +0 -0
- /package/dist/{flows → language/flows}/flow-store-for-session.js +0 -0
- /package/dist/{flows → language/flows}/heal.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/flake.js +0 -0
- /package/dist/{flows → language/flows/recording}/recording-backtrack.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.js +0 -0
- /package/dist/{flows → language/flows}/role-anchor-nearest.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.js +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.js +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.js +0 -0
- /package/dist/{platform.d.ts → machine/platform.d.ts} +0 -0
- /package/dist/{platform.js → machine/platform.js} +0 -0
- /package/dist/{temp-dir.d.ts → machine/temp-dir.d.ts} +0 -0
- /package/dist/{temp-dir.js → machine/temp-dir.js} +0 -0
- /package/dist/{cloud → memory/cloud}/sync-disk.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.js +0 -0
- /package/dist/{journal → memory/journal}/envelope.js +0 -0
- /package/dist/{journal → memory/journal}/rollups.d.ts +0 -0
- /package/dist/{journal → memory/journal}/rollups.js +0 -0
- /package/dist/{project → memory/project}/baselines.d.ts +0 -0
- /package/dist/{project → memory/project}/baselines.js +0 -0
- /package/dist/{project → memory/project}/file-lock.d.ts +0 -0
- /package/dist/{project → memory/project}/file-lock.js +0 -0
- /package/dist/{project → memory/project}/memory-fs.js +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.d.ts +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.js +0 -0
- /package/dist/memory/{project-memory.js → recall/project-memory.js} +0 -0
- /package/dist/{session → memory/recall}/registered-projects.d.ts +0 -0
- /package/dist/{session → memory/recall}/registered-projects.js +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.js +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.js +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.js +0 -0
- /package/dist/{input → portal/input}/driven-redaction.d.ts +0 -0
- /package/dist/{input → portal/input}/driven-redaction.js +0 -0
- /package/dist/{input → portal/input}/network-mock.d.ts +0 -0
- /package/dist/{input → portal/input}/scroll-find.d.ts +0 -0
- /package/dist/{pool → portal/pool}/lease-reaper.d.ts +0 -0
- /package/dist/{pool → portal/pool}/playwright-launcher.d.ts +0 -0
- /package/dist/{pool → portal/pool}/storage-seed.js +0 -0
- /package/dist/{session → portal/session}/control-envelope.d.ts +0 -0
- /package/dist/{session → portal/session}/control-envelope.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.d.ts +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-server-probe.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.js +0 -0
- /package/dist/{session → portal/session}/fake-session.d.ts +0 -0
- /package/dist/{session → portal/session}/fake-session.js +0 -0
- /package/dist/{session → portal/session/human}/live-control.d.ts +0 -0
- /package/dist/{session → portal/session/human}/live-control.js +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.d.ts +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.js +0 -0
- /package/dist/{session → portal/session/human}/review-store.d.ts +0 -0
- /package/dist/{session → portal/session/human}/review-store.js +0 -0
- /package/dist/{session → portal/session}/last-act.d.ts +0 -0
- /package/dist/{session → portal/session}/last-act.js +0 -0
- /package/dist/{session → portal/session}/lease-visibility.d.ts +0 -0
- /package/dist/{session → portal/session}/lease-visibility.js +0 -0
- /package/dist/{session → portal/session}/no-session-watch.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.js +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.js +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.js +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.js +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.js +0 -0
- /package/dist/{session → portal/session/presence}/session-recommendation.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.js +0 -0
- /package/dist/{session → portal/session}/session-reconnect.d.ts +0 -0
- /package/dist/{session → portal/session}/session-reconnect.js +0 -0
- /package/dist/{session → portal/session}/session-successor.d.ts +0 -0
- /package/dist/{session → portal/session}/session-successor.js +0 -0
- /package/dist/{session → portal/session}/stall-clock.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.js +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.js +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.js +0 -0
- /package/dist/{loopback-agent.d.ts → surface/loopback-agent.d.ts} +0 -0
- /package/dist/{loopback-agent.js → surface/loopback-agent.js} +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.js +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/mcp-post-transport.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-handshake.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.js +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.js +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-danger.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-arrival.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.js +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.js +0 -0
- /package/dist/{tools → surface/tools/act}/resolve-target.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.js +0 -0
- /package/dist/{tools → surface/tools}/act-sequence-tool.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.js +0 -0
- /package/dist/{tools → surface/tools}/observe-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.js +0 -0
- /package/dist/{tools → surface/tools}/read-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools}/reconcile-tools.d.ts +0 -0
- /package/dist/{honesty → surface/tools}/tool-hit-rate.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.js +0 -0
- /package/dist/{tools → surface/tools}/unadvertised-help.d.ts +0 -0
- /package/dist/{tools → surface/tools}/verify-next-baton.d.ts +0 -0
- /package/docs/{tools-session-and-feedback.mdx → tools/session-and-feedback.mdx} +0 -0
- /package/docs/{tools-tools-and-run.mdx → tools/tools-and-run.mdx} +0 -0
package/dist/cli.js
DELETED
|
@@ -1,828 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { pathToFileURL } from 'node:url';
|
|
3
|
-
import { openFailureNote } from './cli/open-note.js';
|
|
4
|
-
import { realpathSync } from 'node:fs';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { stateDirProblem } from './daemon/state-dir.js';
|
|
7
|
-
import { statusNextAction } from './cli/status-next-action.js';
|
|
8
|
-
import { readDevServers } from './daemon/dev-servers.js';
|
|
9
|
-
import { hasConnectedBefore, hasProjectConnectedBefore } from './session/connection-memory.js';
|
|
10
|
-
import { attachStatusFields } from './mcp/attach-memory.js';
|
|
11
|
-
import { reticleStateHome } from './daemon/daemon.js';
|
|
12
|
-
import { handleMcp } from './cli/mcp-command.js';
|
|
13
|
-
import { daemonSpawnArgs, daemonStartOptions } from './cli/daemon-start-options.js';
|
|
14
|
-
import { daemonsServingProjectElsewhere, resolveDaemonForProject, splitBrainNote, wrongDaemonNote, } from './daemon/daemon-resolve.js';
|
|
15
|
-
import { handleWatch, handleCapsules, handleGate, loadNamedFlows, resolveChangedFiles, } from './cli/cli-flow-commands.js';
|
|
16
|
-
import { RETICLE_DEFAULT_PORT, ReticleDir, ReticleEnv, devServersForProject, } from '@reticlehq/core';
|
|
17
|
-
import { loadDotEnv } from './telemetry/dev-repo.js';
|
|
18
|
-
import { licenseKeyFromEnvFiles } from './license/license-env.js';
|
|
19
|
-
import { LICENSE_KEY_ENV } from './license/license.js';
|
|
20
|
-
import { createNodeFileSystem } from './project/fs-port.js';
|
|
21
|
-
import { affectedSavedFlows } from './flows/flow-sources.js';
|
|
22
|
-
import { availableUpdate } from './update/update-nudge.js';
|
|
23
|
-
import { handleUpdate, handleRollback } from './cli/cli-update-commands.js';
|
|
24
|
-
import { startDaemon, RETICLE_VERIFY_DEFAULT_PORT } from './index.js';
|
|
25
|
-
import { verifyEndpointMismatch } from './status-payload.js';
|
|
26
|
-
import { isCloudCommand, runCloudCommand } from './cli/cloud-cli.js';
|
|
27
|
-
import { SERVER_VERSION } from './version/server-version.js';
|
|
28
|
-
import { log } from './log.js';
|
|
29
|
-
import { readPid, isAlive, removePid, spawnDaemon, discoverDaemonPort, writeDaemonRegistry, logPath, } from './daemon/daemon.js';
|
|
30
|
-
import { PortPresence, probePresence, presenceIsUsable, describePresence, } from './daemon/port-presence.js';
|
|
31
|
-
import { waitForDaemon, probeDaemon } from './mcp/mcp-proxy.js';
|
|
32
|
-
import { installDaemonResilience, recordExitReason, DaemonExitReason, } from './daemon/daemon-resilience.js';
|
|
33
|
-
import { IdleShutdown, resolveIdleShutdownMs, resolveIdleCheckMs } from './daemon/idle-shutdown.js';
|
|
34
|
-
import { DaemonHeartbeat, resolveHeartbeatMs } from './daemon/heartbeat.js';
|
|
35
|
-
import { everServedToolCall } from './daemon/daemon-usefulness.js';
|
|
36
|
-
import { DAEMON_START_FAILED_EVENT, readDaemonStartupCause } from './daemon/startup-failure.js';
|
|
37
|
-
import { fetchStatus, summarizeStatus, warnOnDaemonSkew, decideOpen, openInBrowser, openCommand, } from './cli/cli-launch.js';
|
|
38
|
-
import { handleDrive } from './cli/drive-command.js';
|
|
39
|
-
import { handleVerify } from './cli/cli-verify.js';
|
|
40
|
-
import { runKill } from './cli/cli-kill.js';
|
|
41
|
-
import { summarizeHunt } from './hunt/hunt-report.js';
|
|
42
|
-
import { runInit, buildNodeIo } from '@reticlehq/init';
|
|
43
|
-
import { continueAfterInit } from './setup/init-runtime.js';
|
|
44
|
-
import { handleDoctor } from './cli/cli-doctor.js';
|
|
45
|
-
import { serverInitHost } from './setup/init-host.js';
|
|
46
|
-
import { describeLicense } from './license/license.js';
|
|
47
|
-
import { isLikelyDevServerPort, devServerPortWarning, readProjectPort, readProjectId, } from './cli/cli-port.js';
|
|
48
|
-
import { DAEMON_INNER_COMMAND, PORT_FLAG, parseCliArgs, CLI_USAGE } from './cli/cli-parse.js';
|
|
49
|
-
import { handleFeedback, handleIdentify, handleTelemetry } from './telemetry/feedback-cli.js';
|
|
50
|
-
import { installDaemonTelemetry } from './telemetry/daemon-telemetry.js';
|
|
51
|
-
import { reportCliRun } from './telemetry/cli-telemetry.js';
|
|
52
|
-
// Re-exported so existing imports (and the CLI tests) keep resolving from './cli.js'.
|
|
53
|
-
export { parseCliArgs, CLI_USAGE };
|
|
54
|
-
function handleInit(parsed) {
|
|
55
|
-
const cwd = process.cwd();
|
|
56
|
-
const io = buildNodeIo(cwd, serverInitHost());
|
|
57
|
-
const result = runInit({
|
|
58
|
-
cwd,
|
|
59
|
-
port: parsed.port,
|
|
60
|
-
mcp: parsed.mcp,
|
|
61
|
-
dryRun: parsed.dryRun,
|
|
62
|
-
install: parsed.install,
|
|
63
|
-
...(parsed.app === undefined ? {} : { app: parsed.app }),
|
|
64
|
-
// Handed to init, not only to the drive phase below: the preflight names `--url` as the way
|
|
65
|
-
// past a missing package manager, and could not honour that while never being told about it.
|
|
66
|
-
...(parsed.url === undefined ? {} : { url: parsed.url }),
|
|
67
|
-
captureBodies: true === parsed.captureBodies,
|
|
68
|
-
// The outcome is reported by confirmInstall instead, once it knows whether an app connected —
|
|
69
|
-
// `init` writing files was never the same thing as `init` working (#269).
|
|
70
|
-
deferOutcome: true,
|
|
71
|
-
continuesToRuntime: true !== parsed.filesOnly && true !== parsed.dryRun,
|
|
72
|
-
}, io);
|
|
73
|
-
void continueAfterInit(parsed, result, io, cwd);
|
|
74
|
-
}
|
|
75
|
-
function handleServe(parsed) {
|
|
76
|
-
void serveWithHonestExit(parsed);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Report the BIND, not the spawn.
|
|
80
|
-
*
|
|
81
|
-
* `serve` used to log `reticle_daemon_spawned` and exit 0 unconditionally, while the child died at
|
|
82
|
-
* `reticle_daemon_start_failed` with an EADDRINUSE nothing joined back to the parent. Three surfaces
|
|
83
|
-
* then disagreed about what was true and none of them named the port.
|
|
84
|
-
*
|
|
85
|
-
* Two changes, both about saying what is actually the case: refuse up front when the port is held by
|
|
86
|
-
* something that is not a Reticle daemon (a spawn there cannot succeed), and after spawning, wait
|
|
87
|
-
* for the daemon to actually answer before claiming it started.
|
|
88
|
-
*/
|
|
89
|
-
async function serveWithHonestExit(parsed) {
|
|
90
|
-
const presence = await probePresence(parsed.port, {
|
|
91
|
-
tcpOpen: probeDaemon,
|
|
92
|
-
status: fetchStatus,
|
|
93
|
-
});
|
|
94
|
-
if (presence === PortPresence.DAEMON) {
|
|
95
|
-
// A daemon that is already up was started with ITS flags, not these — `serve` only attaches.
|
|
96
|
-
// Exiting 0 here regardless is how `--http-port` came to be accepted and ignored (#687): the
|
|
97
|
-
// running daemon kept serving whatever it was started with, and the flag vanished without a
|
|
98
|
-
// word. Ask the daemon which verify port it actually serves and refuse when it is not the one
|
|
99
|
-
// requested — a flag that cannot be honoured must say so, not report success.
|
|
100
|
-
if (parsed.http) {
|
|
101
|
-
const mismatch = verifyEndpointMismatch(await fetchStatus(parsed.port), parsed.httpPort ?? RETICLE_VERIFY_DEFAULT_PORT);
|
|
102
|
-
if (mismatch !== undefined) {
|
|
103
|
-
log('reticle_daemon_start_refused', { port: parsed.port, reason: mismatch });
|
|
104
|
-
process.stderr.write(`${mismatch}\n`);
|
|
105
|
-
process.exit(1);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
log('reticle_daemon_already_running', { port: parsed.port });
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (presence === PortPresence.FOREIGN) {
|
|
113
|
-
log('reticle_daemon_start_refused', {
|
|
114
|
-
port: parsed.port,
|
|
115
|
-
presence,
|
|
116
|
-
reason: describePresence(presence, parsed.port),
|
|
117
|
-
});
|
|
118
|
-
process.stderr.write(`${describePresence(presence, parsed.port)}\n`);
|
|
119
|
-
process.exit(1);
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
const scriptPath = process.argv[1];
|
|
123
|
-
if (scriptPath === undefined) {
|
|
124
|
-
log('reticle_serve_no_script', {});
|
|
125
|
-
process.exit(1);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const daemonArgs = daemonSpawnArgs(parsed);
|
|
129
|
-
const startupStartedAt = Date.now();
|
|
130
|
-
spawnDaemon(process.execPath, scriptPath, daemonArgs, parsed.port);
|
|
131
|
-
// The child binds asynchronously and, when it cannot, exits 1 long after this process would have
|
|
132
|
-
// reported success. Wait for it to ANSWER — `/status` responding is the only evidence a daemon
|
|
133
|
-
// exists that does not come from the pid file the child may never have earned.
|
|
134
|
-
const bound = await waitForPresence(parsed.port, PortPresence.DAEMON, SERVE_BIND_TIMEOUT_MS);
|
|
135
|
-
if (!bound) {
|
|
136
|
-
const settled = await probePresence(parsed.port, { tcpOpen: probeDaemon, status: fetchStatus });
|
|
137
|
-
const startupCause = readDaemonStartupCause(logPath(parsed.port), startupStartedAt);
|
|
138
|
-
log('reticle_daemon_start_failed_parent', {
|
|
139
|
-
port: parsed.port,
|
|
140
|
-
presence: settled,
|
|
141
|
-
reason: describePresence(settled, parsed.port),
|
|
142
|
-
log: logPath(parsed.port),
|
|
143
|
-
stateDir: stateDirProblem(reticleStateHome()) === undefined ? 'writable' : 'unwritable',
|
|
144
|
-
...(startupCause === undefined ? {} : { cause: startupCause }),
|
|
145
|
-
});
|
|
146
|
-
// Name the CAUSE when we can see it. An unwritable state directory is a first-run failure mode
|
|
147
|
-
// (locked-down home, read-only container mount, managed profile) that produced only "nothing is
|
|
148
|
-
// listening" — the symptom restated — and then pointed at a log INSIDE that directory, which
|
|
149
|
-
// cannot exist. Found by stress-testing 2.6.0 with `chmod 555 ~/.reticle`.
|
|
150
|
-
const dirProblem = stateDirProblem(reticleStateHome());
|
|
151
|
-
process.stderr.write(dirProblem === undefined
|
|
152
|
-
? startupCause === undefined
|
|
153
|
-
? `the daemon did not come up on :${String(parsed.port)} — ${describePresence(settled, parsed.port)}\n` +
|
|
154
|
-
`see ${logPath(parsed.port)}\n`
|
|
155
|
-
: `the daemon did not come up on :${String(parsed.port)}.\n${startupCause}\n` +
|
|
156
|
-
`see ${logPath(parsed.port)}\n`
|
|
157
|
-
: `the daemon did not come up on :${String(parsed.port)}.\n${dirProblem}\n`);
|
|
158
|
-
process.exit(1);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
log('reticle_daemon_spawned', { port: parsed.port, ...(parsed.http ? { http: true } : {}) });
|
|
162
|
-
}
|
|
163
|
-
/** How long `serve` waits for the child to bind. Generous: a cold daemon start is seconds. */
|
|
164
|
-
const SERVE_BIND_TIMEOUT_MS = 15_000;
|
|
165
|
-
const PRESENCE_POLL_MS = 150;
|
|
166
|
-
/** How long a daemon gets to shut down on its own before `stop` stops asking politely. */
|
|
167
|
-
const GRACEFUL_STOP_MS = 5000;
|
|
168
|
-
/** How long after SIGKILL before we accept the process is not ours to kill and say so. */
|
|
169
|
-
const FORCED_STOP_MS = 2000;
|
|
170
|
-
async function waitForPresence(port, want, timeoutMs) {
|
|
171
|
-
const deadline = Date.now() + timeoutMs;
|
|
172
|
-
for (;;) {
|
|
173
|
-
const presence = await probePresence(port, { tcpOpen: probeDaemon, status: fetchStatus });
|
|
174
|
-
if (presence === want)
|
|
175
|
-
return true;
|
|
176
|
-
if (Date.now() >= deadline)
|
|
177
|
-
return false;
|
|
178
|
-
await new Promise((resolve) => setTimeout(resolve, PRESENCE_POLL_MS));
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
function handleStop(port, quiet) {
|
|
182
|
-
const pid = readPid(port);
|
|
183
|
-
if (null === pid || !isAlive(pid)) {
|
|
184
|
-
removePid(port);
|
|
185
|
-
if (!quiet)
|
|
186
|
-
log('reticle_daemon_not_running', { port });
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
process.kill(pid, 'SIGTERM');
|
|
190
|
-
const started = Date.now();
|
|
191
|
-
let escalated = false;
|
|
192
|
-
const poll = setInterval(() => {
|
|
193
|
-
if (!isAlive(pid)) {
|
|
194
|
-
clearInterval(poll);
|
|
195
|
-
removePid(port);
|
|
196
|
-
if (!quiet)
|
|
197
|
-
log('reticle_daemon_stopped', { port, pid, ...(escalated ? { escalated } : {}) });
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
const waited = Date.now() - started;
|
|
201
|
-
// A daemon that ignores SIGTERM is WEDGED — which is the one situation `stop` exists for. Giving
|
|
202
|
-
// up here left the port held, the pid file stale, and a human running `kill -9` by hand at the
|
|
203
|
-
// first two minutes of setup. Escalate instead: graceful first, then unconditional.
|
|
204
|
-
if (!escalated && waited > GRACEFUL_STOP_MS) {
|
|
205
|
-
escalated = true;
|
|
206
|
-
try {
|
|
207
|
-
process.kill(pid, 'SIGKILL');
|
|
208
|
-
}
|
|
209
|
-
catch {
|
|
210
|
-
// Already gone between the liveness check and here — the next tick reports it stopped.
|
|
211
|
-
}
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
if (waited > GRACEFUL_STOP_MS + FORCED_STOP_MS) {
|
|
215
|
-
clearInterval(poll);
|
|
216
|
-
// Surviving SIGKILL means the pid is not ours to kill (permissions) or is an unkillable
|
|
217
|
-
// zombie. Neither is retryable, and both need the pid named so a human can act on it.
|
|
218
|
-
if (!quiet)
|
|
219
|
-
log('reticle_daemon_stop_timeout', { port, pid, escalated });
|
|
220
|
-
process.exit(1);
|
|
221
|
-
}
|
|
222
|
-
}, 100);
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* `reticle restart` — free the port, then put a daemon back on it and prove it bound.
|
|
226
|
-
*
|
|
227
|
-
* The two halves are reported separately on purpose. A restart that killed the old daemon and then
|
|
228
|
-
* could not start a new one leaves the user in a different place from one that could not kill
|
|
229
|
-
* anything at all, and a single `ok: false` cannot tell them which happened.
|
|
230
|
-
*/
|
|
231
|
-
async function handleRestart(port, force) {
|
|
232
|
-
const freed = await runKill(port, force);
|
|
233
|
-
if (!freed) {
|
|
234
|
-
log('reticle_restart_aborted', {
|
|
235
|
-
port,
|
|
236
|
-
reason: 'the port was not freed, so nothing was started — the old holder is still there',
|
|
237
|
-
});
|
|
238
|
-
process.exit(1);
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
// Reuses `serve`'s path, which waits for the daemon to ANSWER before claiming it started and exits
|
|
242
|
-
// non-zero when it does not. A restart that reports success for a daemon that never bound is the
|
|
243
|
-
// same lie `serve` already stopped telling.
|
|
244
|
-
await serveWithHonestExit({ port, headless: true, http: false });
|
|
245
|
-
}
|
|
246
|
-
/** `{ nextAction }` when there is one, `{}` when a session is connected — so the success case is silent. */
|
|
247
|
-
function withNextAction(facts) {
|
|
248
|
-
const next = statusNextAction(facts);
|
|
249
|
-
return next === undefined ? {} : { nextAction: next };
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* What `status` says about a project whose daemons have split in two.
|
|
253
|
-
*
|
|
254
|
-
* Both halves in one place because they are one condition asked from two positions, and a command
|
|
255
|
-
* can be standing on either. Silent — no key at all — when there is nothing to report, so a healthy
|
|
256
|
-
* run reads exactly as it did.
|
|
257
|
-
*/
|
|
258
|
-
function splitBrainFields(port, projectId) {
|
|
259
|
-
const home = reticleStateHome();
|
|
260
|
-
const elsewhere = splitBrainNote(port, daemonsServingProjectElsewhere(projectId, port, home, isAlive, (other) => hasProjectConnectedBefore(home, other, projectId)));
|
|
261
|
-
const note = elsewhere ?? wrongDaemonNote(port, resolveDaemonForProject(projectId, home, isAlive));
|
|
262
|
-
return note === undefined ? {} : { splitBrain: note };
|
|
263
|
-
}
|
|
264
|
-
export async function handleStatus(port) {
|
|
265
|
-
const pid = readPid(port);
|
|
266
|
-
// Durable, so it survives the daemon idling out — which is the state `status` is most often run in.
|
|
267
|
-
const projectId = readProjectId(process.cwd());
|
|
268
|
-
const previouslyConnected = hasConnectedBefore(reticleStateHome(), port, projectId);
|
|
269
|
-
// Whether `init` has run HERE. Registering the MCP server does not wire the app, and more than one
|
|
270
|
-
// path does the first without the second — so this is the commonest reason `status` has nothing to
|
|
271
|
-
// report, and it was not among the facts this command could state.
|
|
272
|
-
const initialized = projectId !== undefined;
|
|
273
|
-
// The OTHER half of the install, and the half this command could not see. A host that registers
|
|
274
|
-
// Reticle and never lists its tools looks exactly like an abandoned install from here — same idle
|
|
275
|
-
// daemon, same zero sessions — and the user sees a tool that does nothing. See attach-memory.ts.
|
|
276
|
-
const client = attachStatusFields(reticleStateHome(), port);
|
|
277
|
-
// What the dev servers themselves said. The reason this command could previously only guess at
|
|
278
|
-
// whether the app was running is that it had no way to see one; now the ones carrying Reticle
|
|
279
|
-
// announce, and the advice below stops contradicting the terminal the reader is looking at.
|
|
280
|
-
// Scoped to THIS project: the registry is machine-wide, and an unrelated app's dev server must
|
|
281
|
-
// not make this project look like it is running.
|
|
282
|
-
const devServerPorts = devServersForProject(readDevServers(reticleStateHome()), {
|
|
283
|
-
projectId,
|
|
284
|
-
root: process.cwd(),
|
|
285
|
-
}).map((d) => d.port);
|
|
286
|
-
// The failure where every individual check is green and the chain is broken: the agent's proxy and
|
|
287
|
-
// the app resolved their ports independently and landed on two different daemons. Reported from
|
|
288
|
-
// BOTH stances, because neither one can see it alone.
|
|
289
|
-
const split = splitBrainFields(port, projectId);
|
|
290
|
-
// Doctor and status must answer the same liveness question. A live pid only says that some
|
|
291
|
-
// process exists; a Reticle daemon is running only when the shared port probe reaches /status.
|
|
292
|
-
const presence = await probePresence(port, { tcpOpen: probeDaemon, status: fetchStatus });
|
|
293
|
-
if (!presenceIsUsable(presence)) {
|
|
294
|
-
log('reticle_status', {
|
|
295
|
-
port,
|
|
296
|
-
running: false,
|
|
297
|
-
presence,
|
|
298
|
-
...(presence === PortPresence.FOREIGN ? { reason: describePresence(presence, port) } : {}),
|
|
299
|
-
// `init` promises this command says why the app has not connected. Without it the answer was
|
|
300
|
-
// `running: false` and nothing else, which reads as "Reticle is broken" for what is usually
|
|
301
|
-
// just a daemon that has not been asked to do anything yet.
|
|
302
|
-
...withNextAction({
|
|
303
|
-
running: false,
|
|
304
|
-
sessionCount: 0,
|
|
305
|
-
previouslyConnected,
|
|
306
|
-
initialized,
|
|
307
|
-
devServerPorts,
|
|
308
|
-
}),
|
|
309
|
-
...client,
|
|
310
|
-
...split,
|
|
311
|
-
});
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
// The daemon answered the same probe doctor trusts — ask it for live sessions + health.
|
|
315
|
-
const payload = await fetchStatus(port);
|
|
316
|
-
// `status` is the second-most-run command and the one a HUMAN types. The update nudge otherwise
|
|
317
|
-
// only rides a tool result, which the majority of daemons never produce — so the people most in
|
|
318
|
-
// need of an upgrade were the ones with no path to hearing about it.
|
|
319
|
-
const update = availableUpdate();
|
|
320
|
-
const nudge = update === undefined ? {} : { updateAvailable: update };
|
|
321
|
-
if (payload === undefined) {
|
|
322
|
-
log('reticle_status', {
|
|
323
|
-
port,
|
|
324
|
-
running: true,
|
|
325
|
-
pid,
|
|
326
|
-
...nudge,
|
|
327
|
-
...withNextAction({
|
|
328
|
-
running: true,
|
|
329
|
-
sessionCount: 0,
|
|
330
|
-
previouslyConnected,
|
|
331
|
-
initialized,
|
|
332
|
-
devServerPorts,
|
|
333
|
-
}),
|
|
334
|
-
...client,
|
|
335
|
-
...split,
|
|
336
|
-
});
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
const summary = summarizeStatus(payload);
|
|
340
|
-
// Only when the daemon did NOT already explain itself. It has the whole diagnosis in-process and
|
|
341
|
-
// puts it on the wire as `why`; printing a second, thinner opinion beside it risks two confident
|
|
342
|
-
// answers pointing different ways, which is worse than one.
|
|
343
|
-
const next = summary.why === undefined
|
|
344
|
-
? withNextAction({
|
|
345
|
-
running: true,
|
|
346
|
-
...summary,
|
|
347
|
-
previouslyConnected,
|
|
348
|
-
initialized,
|
|
349
|
-
devServerPorts,
|
|
350
|
-
})
|
|
351
|
-
: {};
|
|
352
|
-
log('reticle_status', {
|
|
353
|
-
port,
|
|
354
|
-
running: true,
|
|
355
|
-
pid,
|
|
356
|
-
...summary,
|
|
357
|
-
...next,
|
|
358
|
-
...client,
|
|
359
|
-
...split,
|
|
360
|
-
...nudge,
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
/** Print the running package version (resolved once in server-version.ts). */
|
|
364
|
-
function handleVersion() {
|
|
365
|
-
log('reticle_version', { version: SERVER_VERSION });
|
|
366
|
-
}
|
|
367
|
-
/** `reticle license` — show enterprise activation resolved from the environment (offline; nothing leaves). */
|
|
368
|
-
function handleLicense() {
|
|
369
|
-
log('reticle_license', { ...describeLicense(Date.now()) });
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* `reticle affected <file...>` — print which saved flows must re-verify for the given changed files.
|
|
373
|
-
* Environment-side (costs the agent nothing per turn); the foundation of watch/gate. Never throws:
|
|
374
|
-
* a load error is logged, not fatal.
|
|
375
|
-
*/
|
|
376
|
-
async function handleAffected(files, since) {
|
|
377
|
-
try {
|
|
378
|
-
const fs = createNodeFileSystem();
|
|
379
|
-
const reticleRoot = join(process.cwd(), ReticleDir.ROOT);
|
|
380
|
-
// The CLI gate still degrades to "no changes" rather than crash CI over a bad ref — the
|
|
381
|
-
// original reasoning, now opted into explicitly instead of handed a clean-looking empty list.
|
|
382
|
-
const changed = (await resolveChangedFiles(files, since, process.cwd())).files;
|
|
383
|
-
const result = affectedSavedFlows(await loadNamedFlows(fs, reticleRoot, readProjectId(process.cwd())), changed);
|
|
384
|
-
log('reticle_affected', {
|
|
385
|
-
changedFiles: changed,
|
|
386
|
-
affected: result.affected,
|
|
387
|
-
unknownProvenance: result.unknownProvenance,
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
catch (error) {
|
|
391
|
-
log('reticle_affected_failed', {
|
|
392
|
-
error: error instanceof Error ? error.message : String(error),
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* `reticle hunt <dir>` — aggregate crawl reports from many checkouts into one number.
|
|
398
|
-
*
|
|
399
|
-
* Detection already exists (`reticle_crawl`). This is the arithmetic that turns a pile of runs into
|
|
400
|
-
* the claim worth making: over N already-merged, already-green changes, how many carried a candidate
|
|
401
|
-
* false green? No control arm is needed, because those changes SHIPPED — the counterfactual is
|
|
402
|
-
* already established, which is what makes this the cheapest credible evidence available.
|
|
403
|
-
*
|
|
404
|
-
* Each file in <dir> is one crawl result. Producing them is a shell loop over a commit range:
|
|
405
|
-
* check out, boot the app, `reticle_crawl`, write the JSON here.
|
|
406
|
-
*/
|
|
407
|
-
async function handleHunt(dir) {
|
|
408
|
-
try {
|
|
409
|
-
const fs = createNodeFileSystem();
|
|
410
|
-
const names = await fs.readdir(dir);
|
|
411
|
-
const runs = [];
|
|
412
|
-
for (const name of names.filter((n) => n.endsWith('.json'))) {
|
|
413
|
-
const raw = await fs.readFile(join(dir, name));
|
|
414
|
-
if (raw === undefined)
|
|
415
|
-
continue;
|
|
416
|
-
const parsed = JSON.parse(raw);
|
|
417
|
-
const report = parsed;
|
|
418
|
-
runs.push({
|
|
419
|
-
label: report.label ?? name.replace(/\.json$/, ''),
|
|
420
|
-
anomalies: report.anomalies ?? [],
|
|
421
|
-
...(report.stepsRun === undefined ? {} : { stepsRun: report.stepsRun }),
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
log('reticle_hunt', { ...summarizeHunt(runs) });
|
|
425
|
-
}
|
|
426
|
-
catch (error) {
|
|
427
|
-
log('reticle_hunt_failed', {
|
|
428
|
-
error: error instanceof Error ? error.message : String(error),
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/** Ensure a daemon is reachable on `port` (probe the real port; spawn + wait only if nothing's there). */
|
|
433
|
-
function ensureDaemon(port) {
|
|
434
|
-
return probePresence(port, { tcpOpen: probeDaemon, status: fetchStatus }).then(async (presence) => {
|
|
435
|
-
// Attaching to whatever already owns the port is the whole point of a daemon — but it means an
|
|
436
|
-
// upgrade does NOT take effect until that daemon dies, and nothing used to say so. Say it here,
|
|
437
|
-
// where both versions are in hand, and keep attaching: killing another agent's daemon on a
|
|
438
|
-
// version bump is worse than a loud warning.
|
|
439
|
-
if (presenceIsUsable(presence))
|
|
440
|
-
return warnOnDaemonSkew(port);
|
|
441
|
-
// Not free, not a daemon: a stranger holds the port. Spawning here is guaranteed to fail —
|
|
442
|
-
// the child cannot bind — and `waitForDaemon` would then report READY anyway, because its
|
|
443
|
-
// probe is the same bare TCP connect and the stranger accepts. That is the "serve reports
|
|
444
|
-
// success for a daemon that never bound" shape. Refuse instead, with the sentence `doctor`
|
|
445
|
-
// says.
|
|
446
|
-
if (PortPresence.FREE !== presence)
|
|
447
|
-
throw new Error(describePresence(presence, port));
|
|
448
|
-
const scriptPath = process.argv[1];
|
|
449
|
-
if (scriptPath === undefined)
|
|
450
|
-
throw new Error('cannot locate the reticle daemon script');
|
|
451
|
-
spawnDaemon(process.execPath, scriptPath, [DAEMON_INNER_COMMAND, PORT_FLAG, String(port)], port);
|
|
452
|
-
return waitForDaemon(port);
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* `reticle open [url]` — the one-command "show me the app". Resolves the port (the requested one if a
|
|
457
|
-
* daemon's there, else a running daemon it discovers — so the user never hunts for the port), ensures
|
|
458
|
-
* the daemon, then reuses the already-connected tab or opens a new browser at the url. Idempotent:
|
|
459
|
-
* re-running never piles up duplicate tabs.
|
|
460
|
-
*/
|
|
461
|
-
/** How long `reticle open` waits for the launched page to register before reporting on it. */
|
|
462
|
-
const OPEN_SESSION_WAIT_MS = 8000;
|
|
463
|
-
/**
|
|
464
|
-
* Poll until a NEW session shows up, or the wait runs out. Returns whether one did.
|
|
465
|
-
*
|
|
466
|
-
* Compares against the count taken before launching rather than against zero, so opening a second
|
|
467
|
-
* app while one is already connected is not reported as an instant success.
|
|
468
|
-
*/
|
|
469
|
-
async function waitForNewSession(port, before) {
|
|
470
|
-
const deadline = Date.now() + OPEN_SESSION_WAIT_MS;
|
|
471
|
-
while (Date.now() < deadline) {
|
|
472
|
-
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
473
|
-
const { sessions } = summarizeStatus(await fetchStatus(port));
|
|
474
|
-
if (sessions.length > before)
|
|
475
|
-
return true;
|
|
476
|
-
}
|
|
477
|
-
return false;
|
|
478
|
-
}
|
|
479
|
-
function handleOpen(requestedPort, url) {
|
|
480
|
-
// Our project's daemon first: `discoverDaemonPort` returns the LOWEST live daemon on the machine,
|
|
481
|
-
// whoever it belongs to, so on a machine running two projects `reticle open` could drive the other
|
|
482
|
-
// one's browser. It stays as the last resort for a caller with no project id, where any daemon is
|
|
483
|
-
// better than none and there is no identity to confuse.
|
|
484
|
-
const myProject = readProjectId(process.cwd());
|
|
485
|
-
probeDaemon(requestedPort)
|
|
486
|
-
.then((here) => here
|
|
487
|
-
? requestedPort
|
|
488
|
-
: (resolveDaemonForProject(myProject, reticleStateHome(), isAlive) ??
|
|
489
|
-
discoverDaemonPort() ??
|
|
490
|
-
requestedPort))
|
|
491
|
-
.then(async (port) => {
|
|
492
|
-
await ensureDaemon(port);
|
|
493
|
-
const { sessions } = summarizeStatus(await fetchStatus(port));
|
|
494
|
-
const decision = decideOpen(sessions, url);
|
|
495
|
-
if ('need-url' === decision.action) {
|
|
496
|
-
log('reticle_open', {
|
|
497
|
-
port,
|
|
498
|
-
error: 'no app connected — pass a url: reticle open <url>. Desktop app (Electron/Tauri)? ' +
|
|
499
|
-
'There is no url to open: start it as you normally would and it connects to this bridge itself.',
|
|
500
|
-
});
|
|
501
|
-
return;
|
|
502
|
-
}
|
|
503
|
-
if ('reuse' === decision.action) {
|
|
504
|
-
log('reticle_open', { port, reusing: decision.url });
|
|
505
|
-
return;
|
|
506
|
-
}
|
|
507
|
-
// A tab on the right origin, on the WRONG page. Kept (that is what stops a tab piling up per
|
|
508
|
-
// run) but never reported as done: `reusing` here read as "your url is open" for a page nobody
|
|
509
|
-
// had opened.
|
|
510
|
-
if ('left-as-is' === decision.action) {
|
|
511
|
-
log('reticle_open', {
|
|
512
|
-
port,
|
|
513
|
-
reusing: decision.url,
|
|
514
|
-
requested: decision.requested,
|
|
515
|
-
note: `a tab is connected on this origin but sitting on ${decision.url} — it was LEFT THERE, ` +
|
|
516
|
-
`not navigated to ${decision.requested}. Drive it with reticle_navigate, or open the url ` +
|
|
517
|
-
'in the browser yourself.',
|
|
518
|
-
});
|
|
519
|
-
return;
|
|
520
|
-
}
|
|
521
|
-
const launchError = await openInBrowser(decision.url);
|
|
522
|
-
if (launchError !== null) {
|
|
523
|
-
log('reticle_open', {
|
|
524
|
-
port,
|
|
525
|
-
error: `could not launch a browser: ${launchError}`,
|
|
526
|
-
// Points at the OS handler, not at `reticle doctor`. Doctor's browser check is about
|
|
527
|
-
// Reticle's own Chromium, which this command never touches — the same misdirect the
|
|
528
|
-
// no-session note below spells out at length, left standing here for one more release.
|
|
529
|
-
recovery: 'Nothing was opened. This command asks the OS to open a url in your default browser ' +
|
|
530
|
-
`(\`${openCommand(decision.url, process.platform).cmd}\` on this platform) and that ` +
|
|
531
|
-
'failed, so the fix is on the OS side: open the url yourself, or set a default browser.',
|
|
532
|
-
});
|
|
533
|
-
process.exit(1);
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
// Say whether a SESSION appeared, not merely that a launcher was invoked. `{"opened": url}`
|
|
537
|
-
// was printed unconditionally, so a run where nothing ever opened looked identical to a run
|
|
538
|
-
// where it did — reported from the field as twenty minutes lost to a phantom port problem.
|
|
539
|
-
const connected = await waitForNewSession(port, sessions.length);
|
|
540
|
-
log('reticle_open', {
|
|
541
|
-
port,
|
|
542
|
-
...(port === requestedPort ? {} : { requestedPort }),
|
|
543
|
-
opened: decision.url,
|
|
544
|
-
connected,
|
|
545
|
-
...(connected
|
|
546
|
-
? {}
|
|
547
|
-
: {
|
|
548
|
-
// Two claims used to live here that this command cannot support. It said the browser
|
|
549
|
-
// "was launched" — it asked the OS to open a URL and cannot see whether a window
|
|
550
|
-
// appeared — and it offered "the app may still be loading" as a cause with equal
|
|
551
|
-
// weight to the real one. It then pointed at `reticle doctor`, whose Chromium check is
|
|
552
|
-
// about a browser THIS command never uses, so a missing Chromium reads as the
|
|
553
|
-
// explanation for a session that is missing for an unrelated reason. Both misdirects
|
|
554
|
-
// were reported from the field, each costing several calls of app-side wiring hunt.
|
|
555
|
-
note: openFailureNote(port, requestedPort),
|
|
556
|
-
}),
|
|
557
|
-
});
|
|
558
|
-
})
|
|
559
|
-
.catch((err) => {
|
|
560
|
-
log('reticle_open', { error: err instanceof Error ? err.message : String(err) });
|
|
561
|
-
process.exit(1);
|
|
562
|
-
});
|
|
563
|
-
}
|
|
564
|
-
function handleDaemonInner(parsed) {
|
|
565
|
-
const options = daemonStartOptions(parsed);
|
|
566
|
-
startDaemon(options)
|
|
567
|
-
.then((server) => {
|
|
568
|
-
log('reticle_daemon_ready', { port: parsed.port, pid: process.pid });
|
|
569
|
-
// Daemon lifecycle telemetry: started, a one-shot project profile, the periodic counter flush,
|
|
570
|
-
// and the rich summary on shutdown. All of it lives in one module — see daemon-telemetry.ts.
|
|
571
|
-
const daemonTelemetry = installDaemonTelemetry(process.cwd(), undefined, parsed.port);
|
|
572
|
-
// Publish to the discovery registry so a build plugin can find this daemon by projectId — no
|
|
573
|
-
// hand-reconciled port. Written from the child (only it knows its cwd); removePid drops it.
|
|
574
|
-
const registryProjectId = readProjectId(process.cwd());
|
|
575
|
-
writeDaemonRegistry(parsed.port, {
|
|
576
|
-
pid: process.pid,
|
|
577
|
-
cwd: process.cwd(),
|
|
578
|
-
startedAt: Date.now(),
|
|
579
|
-
...(registryProjectId !== undefined ? { projectId: registryProjectId } : {}),
|
|
580
|
-
});
|
|
581
|
-
// The daemon serves many agents — keep it alive through one agent's stray async error; only a
|
|
582
|
-
// genuine uncaught throw takes it down (cleanly, so the next `reticle mcp` respawns it fresh).
|
|
583
|
-
installDaemonResilience(process, log, () => {
|
|
584
|
-
removePid(parsed.port);
|
|
585
|
-
process.exit(1);
|
|
586
|
-
});
|
|
587
|
-
const shutdown = (reason) => {
|
|
588
|
-
// Recorded BEFORE the async chain: `installExitTrace` reads it when Node is on its way out,
|
|
589
|
-
// which is after everything below has run. Without it the exit line says `code: 0` and a
|
|
590
|
-
// reader cannot tell a tidy stop from the bridge disappearing — see #123.
|
|
591
|
-
recordExitReason(reason);
|
|
592
|
-
// Say so on the wire before anything closes. The proxy on the other end sees a clean stream
|
|
593
|
-
// end whether we retired on schedule or died under it, and it has no other way to tell —
|
|
594
|
-
// which is how a designed shutdown came to dominate the metric that means "the agent lost
|
|
595
|
-
// its tools". Told, the proxy classifies its own drop honestly. First, because the send has
|
|
596
|
-
// to reach a socket that is still open.
|
|
597
|
-
server.announceShutdown?.();
|
|
598
|
-
// Awaited before the close/exit chain: `process.exit(0)` kills an in-flight POST, and this is
|
|
599
|
-
// the one event carrying the whole session. A failed send resolves anyway (emit swallows its
|
|
600
|
-
// own errors), so this can delay the exit by at most the send timeout, never prevent it.
|
|
601
|
-
void daemonTelemetry
|
|
602
|
-
// The reason rides out on the session summary, which is the only event that fires at this
|
|
603
|
-
// exact moment. The proxy emits the matching `mcp_connection_lost` and cannot know it —
|
|
604
|
-
// it sees a socket end and nothing more, which is how a scheduled idle exit came to make up
|
|
605
|
-
// the large majority of "outages". See SessionSummary.exit.
|
|
606
|
-
.shutdown(reason)
|
|
607
|
-
.then(() => server.close())
|
|
608
|
-
.then(() => {
|
|
609
|
-
removePid(parsed.port);
|
|
610
|
-
process.exit(0);
|
|
611
|
-
})
|
|
612
|
-
.catch((err) => {
|
|
613
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
614
|
-
log('reticle_daemon_close_error', { error: message });
|
|
615
|
-
removePid(parsed.port);
|
|
616
|
-
process.exit(1);
|
|
617
|
-
});
|
|
618
|
-
};
|
|
619
|
-
// Wrapped rather than passed directly: a signal handler receives the signal name as its first
|
|
620
|
-
// argument, which would otherwise arrive as the reason.
|
|
621
|
-
process.on('SIGTERM', () => shutdown(DaemonExitReason.SIGNAL));
|
|
622
|
-
process.on('SIGINT', () => shutdown(DaemonExitReason.SIGNAL));
|
|
623
|
-
// Self-shut-down when idle so a detached daemon (and any headless Chromium it launched) never
|
|
624
|
-
// lingers on the user's machine after the editor closes. Reuses the same clean shutdown path.
|
|
625
|
-
const attachedGraceEnv = process.env[ReticleEnv.IDLE_ATTACHED];
|
|
626
|
-
const idleShutdown = new IdleShutdown({
|
|
627
|
-
graceMs: resolveIdleShutdownMs(process.env[ReticleEnv.IDLE_SHUTDOWN]),
|
|
628
|
-
checkIntervalMs: resolveIdleCheckMs(process.env[ReticleEnv.IDLE_CHECK]),
|
|
629
|
-
isIdle: server.isIdle ?? (() => false),
|
|
630
|
-
...(server.agentAttached === undefined ? {} : { agentAttached: server.agentAttached }),
|
|
631
|
-
// Only when the var is actually SET. `resolveIdleShutdownMs(undefined)` returns the 5-minute
|
|
632
|
-
// DEFAULT, so passing it unconditionally would override the derived attached grace with the
|
|
633
|
-
// very number this change exists to stop using — shipping the bug while looking fixed.
|
|
634
|
-
...(attachedGraceEnv === undefined || '' === attachedGraceEnv.trim()
|
|
635
|
-
? {}
|
|
636
|
-
: { attachedGraceMs: resolveIdleShutdownMs(attachedGraceEnv) }),
|
|
637
|
-
onShutdown: () => {
|
|
638
|
-
log('reticle_daemon_idle_exit', { port: parsed.port });
|
|
639
|
-
shutdown(DaemonExitReason.IDLE);
|
|
640
|
-
},
|
|
641
|
-
});
|
|
642
|
-
idleShutdown.start();
|
|
643
|
-
// Say so, regularly, so a GAP in this log is itself evidence. `installExitTrace` hooks
|
|
644
|
-
// `'exit'`, which a SIGKILL never fires — so a killed daemon left nothing behind, and the one
|
|
645
|
-
// that exited tidily logged `code: 0`. A reader could not tell "shut down cleanly" from "the
|
|
646
|
-
// bridge every app on this machine needs is gone", and a correct SvelteKit install was written
|
|
647
|
-
// up as an install failure on exactly that ambiguity. See daemon/heartbeat.ts.
|
|
648
|
-
new DaemonHeartbeat({
|
|
649
|
-
log,
|
|
650
|
-
intervalMs: resolveHeartbeatMs(process.env[ReticleEnv.HEARTBEAT]),
|
|
651
|
-
facts: () => ({
|
|
652
|
-
sessions: server.bridge.sessions.count(),
|
|
653
|
-
served: everServedToolCall(),
|
|
654
|
-
}),
|
|
655
|
-
}).start();
|
|
656
|
-
})
|
|
657
|
-
.catch((error) => {
|
|
658
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
659
|
-
log(DAEMON_START_FAILED_EVENT, { error: message });
|
|
660
|
-
removePid(parsed.port);
|
|
661
|
-
process.exit(1);
|
|
662
|
-
});
|
|
663
|
-
}
|
|
664
|
-
export function main() {
|
|
665
|
-
// Before anything reads process.env — notably the telemetry gate and the bridge's security
|
|
666
|
-
// options — fold in a project-local `.env`. Values already in the environment always win.
|
|
667
|
-
loadDotEnv(process.cwd());
|
|
668
|
-
// The licence key specifically is searched for HARDER than the rest of the environment, because
|
|
669
|
-
// the daemon is spawned without an explicit cwd and inherits the editor's. A key in the app's own
|
|
670
|
-
// `.env` — or in the repo root when the editor started inside the app — was never read, and the
|
|
671
|
-
// customer then produced events that said `missing`, which is indistinguishable from having no
|
|
672
|
-
// licence at all. Only the key is taken; see license-env.ts for why nothing else is.
|
|
673
|
-
const licenseKey = licenseKeyFromEnvFiles(process.cwd());
|
|
674
|
-
if (licenseKey !== undefined)
|
|
675
|
-
process.env[LICENSE_KEY_ENV] = licenseKey;
|
|
676
|
-
const argv = process.argv.slice(2);
|
|
677
|
-
// Every invocation passes through here — the single chokepoint for the "how often is it used / how
|
|
678
|
-
// many distinct machines + projects" metrics. Fire-and-forget: a metric must never delay or fail a run.
|
|
679
|
-
//
|
|
680
|
-
// `_daemon` is EXCLUDED, and that exclusion is the whole point of this branch. `reticle mcp` and
|
|
681
|
-
// `reticle serve` start the daemon by re-running this very binary, so the child re-entered main()
|
|
682
|
-
// and emitted a second event for what a person experienced as one action. The old `invoke` metric
|
|
683
|
-
// was therefore inflated ~2x — and inflated worst on the agent-driven sessions that matter most,
|
|
684
|
-
// while one-shot commands like `version` counted once. That skewed the RATIO between commands, not
|
|
685
|
-
// just the scale, which is the kind of error you cannot correct for after the fact. The daemon's
|
|
686
|
-
// own lifecycle is already reported by `daemon_started` / `daemon_stopped`; it is not a CLI run.
|
|
687
|
-
reportCliRun(argv);
|
|
688
|
-
// Cloud subcommands (login/link/project/config/push) are a distinct family with their own async client;
|
|
689
|
-
// handle them before the local typed parser so `reticle login` etc. work as one tool.
|
|
690
|
-
if (isCloudCommand(argv[0])) {
|
|
691
|
-
void runCloudCommand(argv).then((code) => process.exit(code));
|
|
692
|
-
return;
|
|
693
|
-
}
|
|
694
|
-
const portEnv = process.env[ReticleEnv.PORT];
|
|
695
|
-
const envPort = portEnv !== undefined ? parseInt(portEnv, 10) : undefined;
|
|
696
|
-
const projectPort = readProjectPort(process.cwd());
|
|
697
|
-
// Say so rather than letting the daemon fight the dev server for the port and fail with an
|
|
698
|
-
// EADDRINUSE that mentions neither file nor cause.
|
|
699
|
-
if (projectPort !== undefined && isLikelyDevServerPort(projectPort)) {
|
|
700
|
-
process.stderr.write(`${devServerPortWarning(projectPort)}\n`);
|
|
701
|
-
}
|
|
702
|
-
// Registry BEFORE the default, and after both explicit sources.
|
|
703
|
-
//
|
|
704
|
-
// This is the line that ends the split brain. Build plugins have always asked the registry which
|
|
705
|
-
// daemon serves this project; the CLI asked a number and then attached to whoever owned it. So
|
|
706
|
-
// every project on the machine funnelled into one daemon whose identity was whichever project won
|
|
707
|
-
// the race, and one kill on one well-known port was a machine-wide outage.
|
|
708
|
-
//
|
|
709
|
-
// An explicit port still wins, because a person who typed one is answering this question
|
|
710
|
-
// themselves. Below that, our OWN daemon wherever it is listening. Only then the default, which is
|
|
711
|
-
// now a starting preference rather than an assumption.
|
|
712
|
-
const myProjectId = readProjectId(process.cwd());
|
|
713
|
-
const myDaemonPort = resolveDaemonForProject(myProjectId, reticleStateHome(), isAlive);
|
|
714
|
-
const defaultPort = envPort ?? projectPort ?? myDaemonPort ?? RETICLE_DEFAULT_PORT;
|
|
715
|
-
// Headed by default; hidden only where there is no display to be headed on. A run nobody can see
|
|
716
|
-
// is a run nobody trusts, and every "did it actually do anything?" cost a human round-trip.
|
|
717
|
-
const parsed = parseCliArgs(argv, defaultPort, process.env['CI'] !== undefined);
|
|
718
|
-
switch (parsed.kind) {
|
|
719
|
-
case 'error':
|
|
720
|
-
// Two audiences, two channels. The structured line is for logs and scripts; the plain text is
|
|
721
|
-
// for the person who just typed the command. Emitting only the JSON meant a single typo came
|
|
722
|
-
// back as an escaped one-line wall of the entire help text — see the ParseError builders.
|
|
723
|
-
log('reticle_usage_error', { message: parsed.message });
|
|
724
|
-
process.stderr.write(parsed.message === CLI_USAGE ? `${CLI_USAGE}\n` : `${parsed.message}\n\n${CLI_USAGE}\n`);
|
|
725
|
-
process.exit(1);
|
|
726
|
-
break;
|
|
727
|
-
case 'init':
|
|
728
|
-
handleInit(parsed);
|
|
729
|
-
break;
|
|
730
|
-
case 'serve':
|
|
731
|
-
handleServe(parsed);
|
|
732
|
-
break;
|
|
733
|
-
case 'stop':
|
|
734
|
-
handleStop(parsed.port, parsed.quiet);
|
|
735
|
-
break;
|
|
736
|
-
case 'kill':
|
|
737
|
-
void runKill(parsed.port, parsed.force).then((freed) => {
|
|
738
|
-
if (!freed)
|
|
739
|
-
process.exit(1);
|
|
740
|
-
});
|
|
741
|
-
break;
|
|
742
|
-
case 'restart':
|
|
743
|
-
void handleRestart(parsed.port, parsed.force);
|
|
744
|
-
break;
|
|
745
|
-
case 'status':
|
|
746
|
-
void handleStatus(parsed.port);
|
|
747
|
-
break;
|
|
748
|
-
case 'license':
|
|
749
|
-
handleLicense();
|
|
750
|
-
break;
|
|
751
|
-
case 'telemetry':
|
|
752
|
-
handleTelemetry(parsed.action);
|
|
753
|
-
break;
|
|
754
|
-
case 'feedback':
|
|
755
|
-
void handleFeedback(parsed.text, parsed.rating, parsed.bug, parsed.feedbackKind, parsed.agent);
|
|
756
|
-
break;
|
|
757
|
-
case 'identify':
|
|
758
|
-
void handleIdentify(parsed);
|
|
759
|
-
break;
|
|
760
|
-
case 'version':
|
|
761
|
-
handleVersion();
|
|
762
|
-
break;
|
|
763
|
-
case 'help':
|
|
764
|
-
process.stdout.write(`${CLI_USAGE}\n`);
|
|
765
|
-
break;
|
|
766
|
-
case 'doctor':
|
|
767
|
-
void handleDoctor(parsed.port);
|
|
768
|
-
break;
|
|
769
|
-
case 'open':
|
|
770
|
-
handleOpen(parsed.port, parsed.url);
|
|
771
|
-
break;
|
|
772
|
-
case 'drive':
|
|
773
|
-
handleDrive(parsed);
|
|
774
|
-
break;
|
|
775
|
-
case 'verify':
|
|
776
|
-
handleVerify(parsed);
|
|
777
|
-
break;
|
|
778
|
-
case 'capsules':
|
|
779
|
-
void handleCapsules();
|
|
780
|
-
break;
|
|
781
|
-
case 'affected':
|
|
782
|
-
void handleAffected(parsed.files, parsed.since);
|
|
783
|
-
break;
|
|
784
|
-
case 'hunt':
|
|
785
|
-
void handleHunt(parsed.dir);
|
|
786
|
-
break;
|
|
787
|
-
case 'gate':
|
|
788
|
-
void handleGate(parsed.files, parsed.since, parsed.hook);
|
|
789
|
-
break;
|
|
790
|
-
case 'watch':
|
|
791
|
-
handleWatch();
|
|
792
|
-
break;
|
|
793
|
-
case 'update':
|
|
794
|
-
void handleUpdate();
|
|
795
|
-
break;
|
|
796
|
-
case 'rollback':
|
|
797
|
-
void handleRollback();
|
|
798
|
-
break;
|
|
799
|
-
case 'mcp':
|
|
800
|
-
void handleMcp(parsed);
|
|
801
|
-
break;
|
|
802
|
-
case '_daemon':
|
|
803
|
-
handleDaemonInner(parsed);
|
|
804
|
-
break;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
/**
|
|
808
|
-
* True when this module is the process entry point. Resolves argv[1] through the realpath because
|
|
809
|
-
* package managers (notably pnpm) symlink `node_modules/<pkg>` into a store dir: the bin shim runs
|
|
810
|
-
* `node node_modules/@reticlehq/core/dist/cli.js` (the symlink) while ESM `import.meta.url` is the
|
|
811
|
-
* realpath. A plain string compare is false there, so `reticle <cmd>` would silently no-op.
|
|
812
|
-
*/
|
|
813
|
-
function isEntryPoint() {
|
|
814
|
-
const argv1 = process.argv[1];
|
|
815
|
-
if (argv1 === undefined)
|
|
816
|
-
return false;
|
|
817
|
-
if (import.meta.url === pathToFileURL(argv1).href)
|
|
818
|
-
return true;
|
|
819
|
-
try {
|
|
820
|
-
return import.meta.url === pathToFileURL(realpathSync(argv1)).href;
|
|
821
|
-
}
|
|
822
|
-
catch {
|
|
823
|
-
return false;
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
if (isEntryPoint()) {
|
|
827
|
-
main();
|
|
828
|
-
}
|