@reticlehq/server 2.14.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +54 -136
- package/bin/reticle.js +1 -1
- package/dist/command/cli/adhoc-verdict.d.ts +64 -0
- package/dist/command/cli/adhoc-verdict.js +144 -0
- package/dist/command/cli/answers/status-next-action.d.ts +61 -0
- package/dist/command/cli/answers/status-next-action.js +84 -0
- package/dist/command/cli/auth/cloud-keystore.js +97 -0
- package/dist/command/cli/auth/device-flow.d.ts +76 -0
- package/dist/command/cli/auth/device-flow.js +56 -0
- package/dist/command/cli/cli-doctor.js +215 -0
- package/dist/command/cli/cli-flow-commands.d.ts +47 -0
- package/dist/command/cli/cli-flow-commands.js +255 -0
- package/dist/command/cli/cli-kill.d.ts +59 -0
- package/dist/command/cli/cli-kill.js +162 -0
- package/dist/command/cli/cli-parse-grammar.d.ts +29 -0
- package/dist/command/cli/cli-parse-grammar.js +39 -0
- package/dist/command/cli/cli-parse-verify.d.ts +22 -0
- package/dist/command/cli/cli-parse-verify.js +143 -0
- package/dist/command/cli/cli-parse.d.ts +193 -0
- package/dist/command/cli/cli-parse.js +833 -0
- package/dist/command/cli/cli-update-commands.js +112 -0
- package/dist/command/cli/cli-verify.d.ts +124 -0
- package/dist/command/cli/cli-verify.js +426 -0
- package/dist/command/cli/cloud-cli.js +694 -0
- package/dist/command/cli/cloud-kit.d.ts +37 -0
- package/dist/command/cli/cloud-kit.js +117 -0
- package/dist/command/cli/cloud-login.js +183 -0
- package/dist/command/cli/config/config-discovery.d.ts +48 -0
- package/dist/command/cli/config/config-discovery.js +183 -0
- package/dist/command/cli/daemon-start-options.d.ts +33 -0
- package/dist/command/cli/demo/demo-page.d.ts +78 -0
- package/dist/command/cli/demo/demo-page.js +238 -0
- package/dist/command/cli/demo/demo-run.d.ts +38 -0
- package/dist/command/cli/demo/demo-run.js +138 -0
- package/dist/command/cli/doctor/doctor-daemon-line.js +47 -0
- package/dist/command/cli/doctor/doctor-rows.d.ts +75 -0
- package/dist/command/cli/doctor/doctor-rows.js +77 -0
- package/dist/command/cli/doctor/doctor-sessions-line.js +69 -0
- package/dist/command/cli/drive/drive-attach.d.ts +113 -0
- package/dist/command/cli/drive/drive-attach.js +221 -0
- package/dist/command/cli/drive/drive-command.js +107 -0
- package/dist/command/cli/launch/cli-launch.d.ts +100 -0
- package/dist/command/cli/launch/cli-launch.js +216 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.d.ts +33 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +198 -0
- package/dist/command/cli/mcp-command.js +176 -0
- package/dist/command/cli/ports/port-holder.js +123 -0
- package/dist/command/cli/ports/resolve/cli-port.d.ts +71 -0
- package/dist/command/cli/ports/resolve/cli-port.js +140 -0
- package/dist/command/cli/setup-mcp-cli.d.ts +29 -0
- package/dist/command/cli/setup-mcp-cli.js +107 -0
- package/dist/command/cli/status/status-lines.d.ts +28 -0
- package/dist/command/cli/status/status-lines.js +117 -0
- package/dist/command/cli/status-fields.d.ts +28 -0
- package/dist/command/cli/status-fields.js +29 -0
- package/dist/command/cli/tutorial.d.ts +116 -0
- package/dist/command/cli/tutorial.js +189 -0
- package/dist/command/cli-onboarding.d.ts +21 -0
- package/dist/command/cli-onboarding.js +27 -0
- package/dist/command/cli.d.ts +6 -0
- package/dist/command/cli.js +710 -0
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +48 -0
- package/dist/command/daemon/binding/loopback-reach.d.ts +42 -0
- package/dist/command/daemon/binding/loopback-reach.js +63 -0
- package/dist/command/daemon/daemon-resilience.d.ts +86 -0
- package/dist/command/daemon/daemon-resilience.js +339 -0
- package/dist/command/daemon/daemon-resolve.d.ts +113 -0
- package/dist/command/daemon/daemon-resolve.js +187 -0
- package/dist/command/daemon/daemon.d.ts +86 -0
- package/dist/command/daemon/daemon.js +333 -0
- package/dist/command/daemon/idle-shutdown.d.ts +54 -0
- package/dist/command/daemon/idle-shutdown.js +98 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +60 -0
- package/dist/command/daemon/lifetime/daemon-usefulness.js +61 -0
- package/dist/command/daemon/lifetime/heartbeat.d.ts +119 -0
- package/dist/command/daemon/lifetime/heartbeat.js +151 -0
- package/dist/command/daemon/lifetime/idle-grace.d.ts +32 -0
- package/dist/command/daemon/lifetime/idle-grace.js +41 -0
- package/dist/command/daemon/lifetime/log-cap.d.ts +68 -0
- package/dist/command/daemon/lifetime/log-cap.js +115 -0
- package/dist/command/daemon/state-dir.js +59 -0
- package/dist/command/daemon/wake-decision.d.ts +32 -0
- package/dist/command/daemon/wake-decision.js +38 -0
- package/dist/command/dev/stale-issue-guard.d.ts +35 -0
- package/dist/command/dev/stale-issue-guard.js +69 -0
- package/dist/command/setup/agent-configs.d.ts +111 -0
- package/dist/command/setup/agent-configs.js +365 -0
- package/dist/command/setup/agent-notice-memory.d.ts +16 -0
- package/dist/command/setup/agent-notice-memory.js +65 -0
- package/dist/command/setup/agent-writer.d.ts +52 -0
- package/dist/command/setup/agent-writer.js +116 -0
- package/dist/command/setup/auto-approve.js +153 -0
- package/dist/command/setup/bringup/bridge-port.d.ts +15 -0
- package/dist/command/setup/bringup/bridge-port.js +24 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +69 -0
- package/dist/command/setup/bringup/dev-server-wait.js +83 -0
- package/dist/command/setup/bringup/ensure-daemon.js +58 -0
- package/dist/command/setup/init/init-host.js +37 -0
- package/dist/command/setup/init/init-runtime.d.ts +39 -0
- package/dist/command/setup/init/init-runtime.js +168 -0
- package/dist/command/setup/node-effects.d.ts +63 -0
- package/dist/command/setup/node-effects.js +225 -0
- package/dist/command/setup/probe/page-probe.d.ts +71 -0
- package/dist/command/setup/probe/page-probe.js +89 -0
- package/dist/command/setup/remaining-steps.js +53 -0
- package/dist/command/setup/run-setup.d.ts +123 -0
- package/dist/command/setup/run-setup.js +316 -0
- package/dist/command/setup/setup-command.d.ts +48 -0
- package/dist/command/setup/setup-command.js +224 -0
- package/dist/command/setup/setup-install.d.ts +18 -0
- package/dist/command/setup/setup-install.js +40 -0
- package/dist/command/setup/setup-mcp.d.ts +57 -0
- package/dist/command/setup/setup-mcp.js +92 -0
- package/dist/command/setup/setup-options.d.ts +66 -0
- package/dist/command/setup/setup-options.js +63 -0
- package/dist/command/setup/terminal/confirm.js +206 -0
- package/dist/command/setup/terminal/crash.d.ts +55 -0
- package/dist/command/setup/terminal/crash.js +74 -0
- package/dist/command/update/nudge-credit.js +53 -0
- package/dist/command/update/sdk-sync.d.ts +20 -0
- package/dist/command/update/sdk-sync.js +22 -0
- package/dist/command/update/update-checker.js +122 -0
- package/dist/command/update/update-nudge.d.ts +90 -0
- package/dist/command/update/update-nudge.js +211 -0
- package/dist/command/update/updater.d.ts +81 -0
- package/dist/command/update/updater.js +223 -0
- package/dist/command/version/identity/server-version.js +50 -0
- package/dist/command/version/peer-announce.js +32 -0
- package/dist/command/version/sdk-fix.js +127 -0
- package/dist/command/version/version-nudge.js +61 -0
- package/dist/command/version/version-skew.d.ts +113 -0
- package/dist/command/version/version-skew.js +192 -0
- package/dist/features/crawl/crawl-tools.d.ts +7 -0
- package/dist/features/crawl/crawl-tools.js +89 -0
- package/dist/features/crawl/crawl.d.ts +98 -0
- package/dist/features/crawl/crawl.js +444 -0
- package/dist/features/ee/audit-log.js +11 -0
- package/dist/features/harness/drive-report.d.ts +73 -0
- package/dist/features/harness/drive-report.js +196 -0
- package/dist/features/harness/driver.d.ts +50 -0
- package/dist/features/harness/driver.js +239 -0
- package/dist/features/harness/drivers.d.ts +19 -0
- package/dist/features/harness/drivers.js +19 -0
- package/dist/features/harness/fill-values.d.ts +67 -0
- package/dist/features/harness/fill-values.js +153 -0
- package/dist/features/harness/harness.d.ts +159 -0
- package/dist/features/harness/harness.js +203 -0
- package/dist/features/harness/jev-driver.d.ts +188 -0
- package/dist/features/harness/jev-driver.js +664 -0
- package/dist/features/harness/openai-driver.d.ts +46 -0
- package/dist/features/harness/openai-driver.js +197 -0
- package/dist/features/harness/platform-config.d.ts +52 -0
- package/dist/features/harness/platform-config.js +89 -0
- package/dist/features/harness/with-timeout.d.ts +18 -0
- package/dist/features/harness/with-timeout.js +34 -0
- package/dist/features/license/license-env.d.ts +24 -0
- package/dist/features/license/license-env.js +140 -0
- package/dist/features/license/license.d.ts +161 -0
- package/dist/features/license/license.js +287 -0
- package/dist/features/visual/visual-store.d.ts +22 -0
- package/dist/features/visual/visual-store.js +66 -0
- package/dist/features/visual/visual-tools.d.ts +26 -0
- package/dist/features/visual/visual-tools.js +352 -0
- package/dist/hooks/hook-bus.d.ts +53 -0
- package/dist/hooks/hook-bus.js +106 -0
- package/dist/hooks/hook-commands.d.ts +59 -0
- package/dist/hooks/hook-commands.js +184 -0
- package/dist/hooks/hook-emit.d.ts +44 -0
- package/dist/hooks/hook-emit.js +85 -0
- package/dist/import-graph.d.ts +48 -0
- package/dist/import-graph.js +106 -0
- package/dist/index.d.ts +91 -125
- package/dist/index.js +250 -160
- package/dist/judgement/capsule/capsule-store.d.ts +70 -0
- package/dist/judgement/capsule/capsule-store.js +113 -0
- package/dist/judgement/capsule/capsule.d.ts +42 -0
- package/dist/judgement/capsule/capsule.js +73 -0
- package/dist/judgement/capsule/causal-summary.d.ts +119 -0
- package/dist/judgement/capsule/causal-summary.js +172 -0
- package/dist/judgement/capsule/divergence.d.ts +26 -0
- package/dist/judgement/domain/domain-model.js +126 -0
- package/dist/judgement/domain/domain-tools.d.ts +2 -0
- package/dist/judgement/domain/domain-tools.js +96 -0
- package/dist/judgement/domain/flow-risk.js +80 -0
- package/dist/judgement/oracles/propose-consequences.d.ts +22 -0
- package/dist/judgement/oracles/propose-consequences.js +106 -0
- package/dist/judgement/outcome/predicate-to-expect.d.ts +44 -0
- package/dist/judgement/outcome/predicate-to-expect.js +148 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +34 -0
- package/dist/judgement/runs/artifact/build-verification-run.js +83 -0
- package/dist/judgement/runs/artifact/render-report.js +84 -0
- package/dist/judgement/runs/artifact/replay-mapping.js +34 -0
- package/dist/judgement/runs/artifact/run-store.d.ts +54 -0
- package/dist/judgement/runs/artifact/run-store.js +150 -0
- package/dist/judgement/runs/artifact/to-artifact.d.ts +119 -0
- package/dist/judgement/runs/artifact/to-artifact.js +83 -0
- package/dist/judgement/runs/context-tools.d.ts +2 -0
- package/dist/judgement/runs/context-tools.js +70 -0
- package/dist/judgement/runs/default-run-id.d.ts +8 -0
- package/dist/judgement/runs/default-run-id.js +11 -0
- package/dist/judgement/runs/drive-run.d.ts +61 -0
- package/dist/judgement/runs/drive-run.js +130 -0
- package/dist/judgement/runs/late-answer.d.ts +55 -0
- package/dist/judgement/runs/late-answer.js +81 -0
- package/dist/judgement/runs/reticle-runner.d.ts +60 -0
- package/dist/judgement/runs/reticle-runner.js +95 -0
- package/dist/judgement/runs/run-tools.d.ts +17 -0
- package/dist/judgement/runs/run-tools.js +97 -0
- package/dist/judgement/runs/runner-port.d.ts +11 -0
- package/dist/judgement/runs/runner-port.js +18 -0
- package/dist/judgement/runs/verification-sync.d.ts +13 -0
- package/dist/judgement/runs/verification-sync.js +93 -0
- package/dist/language/flows/affected-tools.d.ts +18 -0
- package/dist/language/flows/affected-tools.js +83 -0
- package/dist/language/flows/annotate-tools.d.ts +15 -0
- package/dist/language/flows/annotate-tools.js +179 -0
- package/dist/language/flows/change/affected.d.ts +24 -0
- package/dist/language/flows/change/affected.js +35 -0
- package/dist/language/flows/change/flow-sources.d.ts +19 -0
- package/dist/language/flows/change/flow-sources.js +55 -0
- package/dist/language/flows/change/gate.js +33 -0
- package/dist/language/flows/decision.d.ts +45 -0
- package/dist/language/flows/decision.js +371 -0
- package/dist/language/flows/empty-flow.js +24 -0
- package/dist/language/flows/fields/flow-secret-field.d.ts +53 -0
- package/dist/language/flows/fields/flow-secret-field.js +75 -0
- package/dist/language/flows/fields/flow-upload-resolve.d.ts +23 -0
- package/dist/language/flows/fields/flow-upload-resolve.js +46 -0
- package/dist/language/flows/flow-anchor.d.ts +59 -0
- package/dist/language/flows/flow-anchor.js +240 -0
- package/dist/language/flows/flow-classify.d.ts +73 -0
- package/dist/language/flows/flow-classify.js +146 -0
- package/dist/language/flows/flow-expect-grammar.d.ts +33 -0
- package/dist/language/flows/flow-expect-grammar.js +155 -0
- package/dist/language/flows/flow-intent.d.ts +52 -0
- package/dist/language/flows/flow-intent.js +123 -0
- package/dist/language/flows/flow-learning.d.ts +52 -0
- package/dist/language/flows/flow-learning.js +76 -0
- package/dist/language/flows/flow-mutate-tools.d.ts +14 -0
- package/dist/language/flows/flow-mutate-tools.js +82 -0
- package/dist/language/flows/flow-replay-run.d.ts +91 -0
- package/dist/language/flows/flow-replay-run.js +748 -0
- package/dist/language/flows/flow-replay-types.d.ts +37 -0
- package/dist/language/flows/flow-replay-types.js +1 -0
- package/dist/language/flows/flow-replay.d.ts +91 -0
- package/dist/language/flows/flow-replay.js +487 -0
- package/dist/language/flows/flow-result.d.ts +35 -0
- package/dist/language/flows/flow-result.js +26 -0
- package/dist/language/flows/flow-step-runners.d.ts +54 -0
- package/dist/language/flows/flow-step-runners.js +369 -0
- package/dist/language/flows/flow-store-for-session.d.ts +32 -0
- package/dist/language/flows/flow-success.d.ts +32 -0
- package/dist/language/flows/flow-success.js +181 -0
- package/dist/language/flows/flow-tools.d.ts +15 -0
- package/dist/language/flows/flow-tools.js +842 -0
- package/dist/language/flows/flows.d.ts +114 -0
- package/dist/language/flows/flows.js +492 -0
- package/dist/language/flows/heal-precondition.d.ts +28 -0
- package/dist/language/flows/heal-precondition.js +38 -0
- package/dist/language/flows/heal-run.d.ts +17 -0
- package/dist/language/flows/heal-run.js +186 -0
- package/dist/language/flows/heal.js +97 -0
- package/dist/language/flows/mutation-run.d.ts +33 -0
- package/dist/language/flows/mutation-run.js +60 -0
- package/dist/language/flows/narrow-write.d.ts +32 -0
- package/dist/language/flows/narrow-write.js +26 -0
- package/dist/language/flows/recording/flake.d.ts +56 -0
- package/dist/language/flows/recording/recording-backtrack.js +73 -0
- package/dist/language/flows/recording/tape/recordings.d.ts +134 -0
- package/dist/language/flows/recording/tape/recordings.js +144 -0
- package/dist/language/flows/replay.d.ts +83 -0
- package/dist/language/flows/replay.js +397 -0
- package/dist/language/flows/role-anchor-nearest.js +45 -0
- package/dist/language/flows/stores/assertion-tiers-store.d.ts +26 -0
- package/dist/language/flows/stores/assertion-tiers-store.js +107 -0
- package/dist/language/flows/stores/flake-store.d.ts +18 -0
- package/dist/language/flows/stores/flake-store.js +58 -0
- package/dist/language/flows/suite/server-verify.d.ts +15 -0
- package/dist/language/flows/suite/server-verify.js +56 -0
- package/dist/language/flows/suite/suite-flakes.d.ts +34 -0
- package/dist/language/flows/suite/suite-flakes.js +32 -0
- package/dist/language/flows/suite-selection.d.ts +45 -0
- package/dist/language/flows/suite-selection.js +84 -0
- package/dist/language/flows/verify-change-tools.d.ts +2 -0
- package/dist/language/flows/verify-change-tools.js +244 -0
- package/dist/machine/clock.d.ts +24 -0
- package/dist/machine/clock.js +1 -0
- package/dist/machine/repo-root.d.ts +16 -0
- package/dist/machine/repo-root.js +20 -0
- package/dist/memory/cloud/account-state.d.ts +20 -0
- package/dist/memory/cloud/account-state.js +70 -0
- package/dist/memory/cloud/cloud-config.d.ts +79 -0
- package/dist/memory/cloud/cloud-config.js +156 -0
- package/dist/memory/cloud/cloud-sync.d.ts +195 -0
- package/dist/memory/cloud/cloud-sync.js +359 -0
- package/dist/memory/cloud/harness-config.d.ts +10 -0
- package/dist/memory/cloud/harness-config.js +58 -0
- package/dist/memory/cloud/harness-offer.d.ts +44 -0
- package/dist/memory/cloud/harness-offer.js +146 -0
- package/dist/memory/cloud/harness-switch.d.ts +11 -0
- package/dist/memory/cloud/harness-switch.js +53 -0
- package/dist/memory/cloud/sync-cycle.d.ts +121 -0
- package/dist/memory/cloud/sync-cycle.js +295 -0
- package/dist/memory/cloud/sync-daemon.d.ts +73 -0
- package/dist/memory/cloud/sync-daemon.js +297 -0
- package/dist/memory/cloud/sync-disk.js +193 -0
- package/dist/memory/impact/impact-recorder.d.ts +54 -0
- package/dist/memory/impact/impact-recorder.js +160 -0
- package/dist/memory/impact/impact-store.d.ts +52 -0
- package/dist/memory/impact/impact-store.js +274 -0
- package/dist/memory/intent/inline-intent.d.ts +60 -0
- package/dist/memory/intent/inline-intent.js +206 -0
- package/dist/memory/intent/intent-shard-store.d.ts +87 -0
- package/dist/memory/intent/intent-shard-store.js +215 -0
- package/dist/memory/intent/intent-shard.d.ts +389 -0
- package/dist/memory/intent/intent-shard.js +153 -0
- package/dist/memory/intent/intent-store.d.ts +47 -0
- package/dist/memory/intent/intent-store.js +133 -0
- package/dist/memory/intent/intent-subject.d.ts +46 -0
- package/dist/memory/intent/intent-subject.js +175 -0
- package/dist/memory/intent/intent-tools.d.ts +2 -0
- package/dist/memory/intent/intent-tools.js +157 -0
- package/dist/memory/intent/open-intents.d.ts +36 -0
- package/dist/memory/intent/open-intents.js +58 -0
- package/dist/memory/journal/ambient-store.d.ts +13 -0
- package/dist/memory/journal/ambient-store.js +52 -0
- package/dist/memory/journal/attach-journal.d.ts +37 -0
- package/dist/memory/journal/attach-journal.js +26 -0
- package/dist/memory/journal/drive-flow.d.ts +74 -0
- package/dist/memory/journal/drive-flow.js +157 -0
- package/dist/memory/journal/drive-run-flush.d.ts +42 -0
- package/dist/memory/journal/drive-run-flush.js +82 -0
- package/dist/memory/journal/envelope-store.d.ts +16 -0
- package/dist/memory/journal/envelope-store.js +61 -0
- package/dist/memory/journal/envelope.d.ts +230 -0
- package/dist/memory/journal/journal-query.d.ts +66 -0
- package/dist/memory/journal/journal-query.js +98 -0
- package/dist/memory/journal/journal-recorder.d.ts +109 -0
- package/dist/memory/journal/journal-recorder.js +153 -0
- package/dist/memory/journal/on-disk/ambient-file.d.ts +21 -0
- package/dist/memory/journal/on-disk/ambient-file.js +15 -0
- package/dist/memory/journal/on-disk/retention.d.ts +141 -0
- package/dist/memory/journal/on-disk/retention.js +291 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +21 -0
- package/dist/memory/journal/on-disk/workspace-gitignore.js +93 -0
- package/dist/memory/journal/self-observation.d.ts +3 -0
- package/dist/memory/journal/self-observation.js +67 -0
- package/dist/memory/journal/session-end.d.ts +112 -0
- package/dist/memory/journal/session-end.js +179 -0
- package/dist/memory/journal/session-journal.d.ts +134 -0
- package/dist/memory/journal/session-journal.js +614 -0
- package/dist/memory/project/artifact-root-resolver.d.ts +3 -0
- package/dist/memory/project/artifact-root-resolver.js +89 -0
- package/dist/memory/project/artifact-root.d.ts +109 -0
- package/dist/memory/project/artifact-root.js +157 -0
- package/dist/memory/project/dir/fill-value-store.d.ts +32 -0
- package/dist/memory/project/dir/fill-value-store.js +88 -0
- package/dist/memory/project/dir/reticle-dir.d.ts +139 -0
- package/dist/memory/project/dir/reticle-dir.js +229 -0
- package/dist/memory/project/fs/fs-port.d.ts +68 -0
- package/dist/memory/project/fs/fs-port.js +82 -0
- package/dist/memory/project/learned-routes.d.ts +38 -0
- package/dist/memory/project/learned-routes.js +79 -0
- package/dist/memory/project/memory-fs.d.ts +10 -0
- package/dist/memory/project/project-for-root.d.ts +30 -0
- package/dist/memory/project/project-for-root.js +43 -0
- package/dist/memory/project/project-store.d.ts +54 -0
- package/dist/memory/project/project-store.js +244 -0
- package/dist/memory/project/project-tools.d.ts +8 -0
- package/dist/memory/project/project-tools.js +160 -0
- package/dist/memory/project/reticle-deps.d.ts +15 -0
- package/dist/memory/project/reticle-deps.js +33 -0
- package/dist/memory/project/session-root.d.ts +52 -0
- package/dist/memory/project/session-root.js +100 -0
- package/dist/memory/recall/memory-tools.d.ts +2 -0
- package/dist/memory/recall/memory-tools.js +81 -0
- package/dist/memory/recall/prior/connection-memory.d.ts +65 -0
- package/dist/memory/recall/prior/connection-memory.js +114 -0
- package/dist/memory/recall/project-memory.d.ts +33 -0
- package/dist/portal/bridge/auth-failure-reason.d.ts +32 -0
- package/dist/portal/bridge/auth-failure-reason.js +68 -0
- package/dist/portal/bridge/bridge-security.d.ts +30 -0
- package/dist/portal/bridge/bridge-security.js +53 -0
- package/dist/portal/bridge/bridge.d.ts +109 -0
- package/dist/portal/bridge/bridge.js +808 -0
- package/dist/portal/input/drive-url-stamp.d.ts +14 -0
- package/dist/portal/input/drive-url-stamp.js +33 -0
- package/dist/portal/input/network-detail.d.ts +97 -0
- package/dist/portal/input/network-detail.js +138 -0
- package/dist/portal/input/network-mock-tools.d.ts +21 -0
- package/dist/portal/input/network-mock-tools.js +124 -0
- package/dist/portal/input/network-mock.js +83 -0
- package/dist/portal/input/network-mutation.d.ts +47 -0
- package/dist/portal/input/network-mutation.js +53 -0
- package/dist/portal/input/real-input.d.ts +261 -0
- package/dist/portal/input/real-input.js +488 -0
- package/dist/portal/input/scroll-find.js +111 -0
- package/dist/portal/input/scroll-tools.d.ts +2 -0
- package/dist/portal/input/scroll-tools.js +76 -0
- package/dist/portal/input/storage-fixture.d.ts +57 -0
- package/dist/portal/input/storage-fixture.js +92 -0
- package/dist/portal/input/viewport-tools.d.ts +2 -0
- package/dist/portal/input/viewport-tools.js +72 -0
- package/dist/portal/pool/browser-pool.d.ts +174 -0
- package/dist/portal/pool/browser-pool.js +559 -0
- package/dist/portal/pool/lease-reaper.js +40 -0
- package/dist/portal/pool/playwright-launcher.js +150 -0
- package/dist/portal/pool/pool-contract.d.ts +116 -0
- package/dist/portal/pool/pool-contract.js +8 -0
- package/dist/portal/pool/storage-seed.d.ts +23 -0
- package/dist/portal/realm/conformance-client.d.ts +43 -0
- package/dist/portal/realm/conformance-client.js +227 -0
- package/dist/portal/realm/http-witness.d.ts +48 -0
- package/dist/portal/realm/http-witness.js +135 -0
- package/dist/portal/realm/web-realm.d.ts +225 -0
- package/dist/portal/realm/web-realm.js +661 -0
- package/dist/portal/session/daemon-answers.d.ts +20 -0
- package/dist/portal/session/daemon-answers.js +20 -0
- package/dist/portal/session/dev-server/dev-server-probe.js +147 -0
- package/dist/portal/session/facts/handshake-facts.d.ts +56 -0
- package/dist/portal/session/facts/handshake-facts.js +1 -0
- package/dist/portal/session/facts/observed-state.d.ts +60 -0
- package/dist/portal/session/facts/observed-state.js +121 -0
- package/dist/portal/session/facts/session-replaced.d.ts +43 -0
- package/dist/portal/session/facts/session-replaced.js +51 -0
- package/dist/portal/session/live-control-tools.d.ts +15 -0
- package/dist/portal/session/live-control-tools.js +242 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +176 -0
- package/dist/portal/session/no-session-diagnosis.js +457 -0
- package/dist/portal/session/no-session-next-action.d.ts +76 -0
- package/dist/portal/session/no-session-next-action.js +211 -0
- package/dist/portal/session/no-session-watch.js +351 -0
- package/dist/portal/session/output-budget.d.ts +82 -0
- package/dist/portal/session/output-budget.js +108 -0
- package/dist/portal/session/page-commands/undeclared-command.d.ts +30 -0
- package/dist/portal/session/page-commands/undeclared-command.js +44 -0
- package/dist/portal/session/presence/session-recommendation.js +29 -0
- package/dist/portal/session/rebind.d.ts +18 -0
- package/dist/portal/session/rebind.js +38 -0
- package/dist/portal/session/session-health.d.ts +145 -0
- package/dist/portal/session/session-health.js +154 -0
- package/dist/portal/session/session-manager.d.ts +81 -0
- package/dist/portal/session/session-manager.js +504 -0
- package/dist/portal/session/session-reaper.d.ts +36 -0
- package/dist/portal/session/session-reaper.js +93 -0
- package/dist/portal/session/session-tools.d.ts +8 -0
- package/dist/portal/session/session-tools.js +42 -0
- package/dist/portal/session/session.d.ts +279 -0
- package/dist/portal/session/session.js +875 -0
- package/dist/portal/session/stall-clock.js +48 -0
- package/dist/portal/session/timing/command-timeout.d.ts +40 -0
- package/dist/portal/session/timing/command-timeout.js +42 -0
- package/dist/start-options.d.ts +51 -0
- package/dist/start-options.js +7 -0
- package/dist/status-payload.d.ts +16 -10
- package/dist/status-payload.js +5 -2
- package/dist/surface/http-server.d.ts +52 -0
- package/dist/surface/http-server.js +379 -0
- package/dist/surface/mcp/consumer-verdict-guard.d.ts +40 -0
- package/dist/surface/mcp/consumer-verdict-guard.js +57 -0
- package/dist/surface/mcp/faults/mcp-is-error.d.ts +13 -0
- package/dist/surface/mcp/faults/mcp-is-error.js +18 -0
- package/dist/surface/mcp/faults/mcp-outage.d.ts +33 -0
- package/dist/surface/mcp/faults/mcp-outage.js +71 -0
- package/dist/surface/mcp/mcp-proxy.d.ts +119 -0
- package/dist/surface/mcp/mcp-proxy.js +882 -0
- package/dist/surface/mcp/mcp.d.ts +89 -0
- package/dist/surface/mcp/mcp.js +676 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +109 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +22 -0
- package/dist/surface/mcp/proxy/proxy-daemon-probe.js +71 -0
- package/dist/surface/mcp/proxy/proxy-handshake.js +192 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.d.ts +90 -0
- package/dist/surface/mcp/proxy/proxy-lifecycle.js +98 -0
- package/dist/surface/mcp/proxy/proxy-log.d.ts +57 -0
- package/dist/surface/mcp/proxy/proxy-log.js +117 -0
- package/dist/surface/mcp/server-instructions.d.ts +26 -0
- package/dist/surface/mcp/server-instructions.js +156 -0
- package/dist/surface/mcp/surface-vocabulary.d.ts +47 -0
- package/dist/surface/mcp/surface-vocabulary.js +56 -0
- package/dist/surface/mcp/tool-catalog-cache.d.ts +45 -0
- package/dist/surface/mcp/tool-catalog-cache.js +77 -0
- package/dist/surface/tools/act/act-danger.js +69 -0
- package/dist/surface/tools/act/act-helpers.d.ts +17 -0
- package/dist/surface/tools/act/act-helpers.js +40 -0
- package/dist/surface/tools/act/act-observation.d.ts +42 -0
- package/dist/surface/tools/act/act-observation.js +36 -0
- package/dist/surface/tools/act/act-preflight.d.ts +27 -0
- package/dist/surface/tools/act/act-preflight.js +168 -0
- package/dist/surface/tools/act/act-target.d.ts +10 -0
- package/dist/surface/tools/act/act-target.js +100 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +68 -0
- package/dist/surface/tools/act/resolve-target.js +115 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +79 -0
- package/dist/surface/tools/act/sequence-grade.js +104 -0
- package/dist/surface/tools/act-capsule.d.ts +33 -0
- package/dist/surface/tools/act-capsule.js +79 -0
- package/dist/surface/tools/act-merged.d.ts +20 -0
- package/dist/surface/tools/act-merged.js +53 -0
- package/dist/surface/tools/act-sequence-tool.js +330 -0
- package/dist/surface/tools/act-tools.d.ts +24 -0
- package/dist/surface/tools/act-tools.js +835 -0
- package/dist/surface/tools/args/numeric-bounds.d.ts +97 -0
- package/dist/surface/tools/args/numeric-bounds.js +133 -0
- package/dist/surface/tools/assert/assert-grade.d.ts +42 -0
- package/dist/surface/tools/assert/assert-grade.js +125 -0
- package/dist/surface/tools/assert/assert-source.d.ts +52 -0
- package/dist/surface/tools/assert/assert-source.js +74 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +48 -0
- package/dist/surface/tools/assert/assert-verdict.js +247 -0
- package/dist/surface/tools/browser-tools.d.ts +2 -0
- package/dist/surface/tools/browser-tools.js +115 -0
- package/dist/surface/tools/contract-tools.d.ts +2 -0
- package/dist/surface/tools/contract-tools.js +112 -0
- package/dist/surface/tools/coverage-tools.d.ts +18 -0
- package/dist/surface/tools/coverage-tools.js +178 -0
- package/dist/surface/tools/dynamic-tools.d.ts +17 -0
- package/dist/surface/tools/dynamic-tools.js +282 -0
- package/dist/surface/tools/error-recovery.d.ts +116 -0
- package/dist/surface/tools/error-recovery.js +527 -0
- package/dist/surface/tools/explore-tools.d.ts +14 -0
- package/dist/surface/tools/explore-tools.js +162 -0
- package/dist/surface/tools/feature-capture.d.ts +151 -0
- package/dist/surface/tools/feature-capture.js +235 -0
- package/dist/surface/tools/feedback-invite.d.ts +48 -0
- package/dist/surface/tools/feedback-invite.js +71 -0
- package/dist/surface/tools/feedback-tools.d.ts +35 -0
- package/dist/surface/tools/feedback-tools.js +280 -0
- package/dist/surface/tools/first-sentence.d.ts +24 -0
- package/dist/surface/tools/first-sentence.js +0 -0
- package/dist/surface/tools/gap-novelty.d.ts +39 -0
- package/dist/surface/tools/gap-novelty.js +69 -0
- package/dist/surface/tools/gaps/capability-absences.d.ts +39 -0
- package/dist/surface/tools/gaps/capability-absences.js +46 -0
- package/dist/surface/tools/harness-explore.d.ts +177 -0
- package/dist/surface/tools/harness-explore.js +453 -0
- package/dist/surface/tools/harness-plan.d.ts +76 -0
- package/dist/surface/tools/harness-plan.js +156 -0
- package/dist/surface/tools/harness-toolset.d.ts +35 -0
- package/dist/surface/tools/harness-toolset.js +144 -0
- package/dist/surface/tools/inspect-tool.d.ts +4 -0
- package/dist/surface/tools/inspect-tool.js +142 -0
- package/dist/surface/tools/invoke-tool.d.ts +10 -0
- package/dist/surface/tools/invoke-tool.js +668 -0
- package/dist/surface/tools/lease-hint.d.ts +50 -0
- package/dist/surface/tools/lease-hint.js +125 -0
- package/dist/surface/tools/lease-tools.d.ts +195 -0
- package/dist/surface/tools/lease-tools.js +797 -0
- package/dist/surface/tools/lineage-tools.d.ts +14 -0
- package/dist/surface/tools/lineage-tools.js +64 -0
- package/dist/surface/tools/live-call-text.d.ts +25 -0
- package/dist/surface/tools/live-call-text.js +191 -0
- package/dist/surface/tools/merge-tools.d.ts +68 -0
- package/dist/surface/tools/merge-tools.js +110 -0
- package/dist/surface/tools/merged-name-redirect.d.ts +36 -0
- package/dist/surface/tools/merged-name-redirect.js +107 -0
- package/dist/surface/tools/observe-tools.js +700 -0
- package/dist/surface/tools/read/query-windowed.d.ts +54 -0
- package/dist/surface/tools/read/query-windowed.js +75 -0
- package/dist/surface/tools/read/snapshot-delta.d.ts +92 -0
- package/dist/surface/tools/read/snapshot-delta.js +356 -0
- package/dist/surface/tools/read-tools.js +569 -0
- package/dist/surface/tools/real-input-attempt.d.ts +68 -0
- package/dist/surface/tools/real-input-attempt.js +360 -0
- package/dist/surface/tools/reconcile-tools.js +211 -0
- package/dist/surface/tools/tool-hit-rate.js +90 -0
- package/dist/surface/tools/tool-kit.d.ts +254 -0
- package/dist/surface/tools/tool-kit.js +123 -0
- package/dist/surface/tools/tool-surface.d.ts +195 -0
- package/dist/surface/tools/tool-surface.js +429 -0
- package/dist/surface/tools/tools-helpers.d.ts +40 -0
- package/dist/surface/tools/tools-helpers.js +76 -0
- package/dist/surface/tools/tools.d.ts +76 -0
- package/dist/surface/tools/tools.js +799 -0
- package/dist/surface/tools/unadvertised-help.js +60 -0
- package/dist/surface/tools/verify-next-baton.js +52 -0
- package/dist/telemetry/app-instrumented.d.ts +3 -5
- package/dist/telemetry/app-instrumented.js +17 -6
- package/dist/telemetry/argument-shape.js +4 -4
- package/dist/telemetry/bug-found.js +49 -27
- package/dist/telemetry/cli-telemetry.js +27 -10
- package/dist/telemetry/daemon-telemetry.d.ts +7 -13
- package/dist/telemetry/daemon-telemetry.js +15 -22
- package/dist/telemetry/error-fingerprint.js +26 -1
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +2 -2
- package/dist/telemetry/feedback-context.js +4 -4
- package/dist/telemetry/feedback.js +1 -1
- package/dist/telemetry/harness-drive.d.ts +6 -0
- package/dist/telemetry/harness-drive.js +39 -0
- package/dist/telemetry/install-source.js +1 -1
- package/dist/telemetry/install-trace.d.ts +8 -0
- package/dist/telemetry/install-trace.js +74 -0
- package/dist/telemetry/license-activation.js +1 -1
- package/dist/telemetry/mcp-connection.d.ts +14 -1
- package/dist/telemetry/mcp-connection.js +17 -2
- package/dist/telemetry/onboarding-firsts.d.ts +40 -0
- package/dist/telemetry/onboarding-firsts.js +109 -0
- package/dist/telemetry/onboarding-funnel.d.ts +26 -0
- package/dist/telemetry/onboarding-funnel.js +60 -0
- package/dist/telemetry/project-profile.js +1 -1
- package/dist/telemetry/run-telemetry.js +13 -0
- package/dist/telemetry/session-metrics.d.ts +6 -7
- package/dist/telemetry/session-metrics.js +14 -21
- package/dist/telemetry/telemetry.d.ts +8 -1
- package/dist/telemetry/telemetry.js +6 -5
- package/dist/telemetry/verification-of.d.ts +6 -8
- package/dist/telemetry/verification-of.js +38 -12
- package/dist/workspace-packages.d.ts +22 -0
- package/dist/workspace-packages.js +57 -0
- package/docs/README.md +29 -23
- package/docs/actions.mdx +4 -4
- package/docs/adapters.md +75 -0
- package/docs/agent-cheatsheet.md +37 -27
- package/docs/architecture.md +3 -2
- package/docs/autodrive.md +99 -0
- package/docs/benchmarks.md +1 -1
- package/docs/best-practices.mdx +3 -3
- package/docs/capabilities.mdx +4 -4
- package/docs/cli/cloud.mdx +4 -4
- package/docs/cli/doctor.mdx +1 -0
- package/docs/cli/feedback.mdx +1 -1
- package/docs/cli/init.mdx +3 -3
- package/docs/cli/mcp.mdx +1 -1
- package/docs/cli/status.mdx +35 -20
- package/docs/cli/watch.mdx +1 -1
- package/docs/cli.mdx +15 -25
- package/docs/desktop.mdx +1 -1
- package/docs/enterprise.md +3 -2
- package/docs/faq.mdx +4 -4
- package/docs/first-drive.md +5 -5
- package/docs/flows.md +5 -5
- package/docs/for-agents.md +2 -1
- package/docs/frameworks.mdx +1 -1
- package/docs/getting-started.md +30 -21
- package/docs/http-transport.md +1 -1
- package/docs/index.mdx +28 -10
- package/docs/install-agentic.mdx +12 -4
- package/docs/install-manual.mdx +23 -7
- package/docs/instrumentation.mdx +3 -3
- package/docs/local-registry.md +15 -4
- package/docs/packages/babel-plugin.mdx +1 -1
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/core.mdx +2 -2
- package/docs/packages/engine.mdx +40 -0
- package/docs/packages/open-verification.mdx +40 -0
- package/docs/packages/tauri.mdx +1 -1
- package/docs/packages.mdx +22 -2
- package/docs/platform-integration.md +3 -3
- package/docs/predicates.mdx +19 -3
- package/docs/protocol.mdx +60 -0
- package/docs/quickstart.mdx +48 -13
- package/docs/recipes.mdx +1 -1
- package/docs/required-checks.md +37 -0
- package/docs/skill-file.mdx +2 -2
- package/docs/skill-setup.md +104 -0
- package/docs/state-files.md +46 -0
- package/docs/state-management.mdx +1 -1
- package/docs/system-map.md +8 -6
- package/docs/telemetry.md +4 -3
- package/docs/testing.md +12 -3
- package/docs/token-efficiency.md +3 -3
- package/docs/tools/act-and-wait.mdx +173 -0
- package/docs/tools/act-sequence.mdx +160 -0
- package/docs/tools/act.mdx +95 -0
- package/docs/tools/assert.mdx +129 -0
- package/docs/tools/console.mdx +70 -0
- package/docs/tools/inspect.mdx +95 -0
- package/docs/tools/navigate.mdx +107 -0
- package/docs/tools/network.mdx +126 -0
- package/docs/tools/observe.mdx +145 -0
- package/docs/tools/overview.mdx +163 -0
- package/docs/tools/query.mdx +133 -0
- package/docs/tools/sessions.mdx +101 -0
- package/docs/tools/snapshot.mdx +136 -0
- package/docs/tools/state.mdx +111 -0
- package/docs/tools/wait-for.mdx +92 -0
- package/docs/troubleshooting.mdx +43 -9
- package/docs/usage.md +59 -59
- package/package.json +31 -13
- package/dist/bridge/auth-failure-reason.d.ts +0 -23
- package/dist/bridge/auth-failure-reason.js +0 -47
- package/dist/bridge/bridge-security.d.ts +0 -30
- package/dist/bridge/bridge-security.js +0 -53
- package/dist/bridge/bridge.d.ts +0 -95
- package/dist/bridge/bridge.js +0 -713
- package/dist/bridge/bridge.test-harness.d.ts +0 -65
- package/dist/bridge/bridge.test-harness.js +0 -230
- package/dist/capsule/capsule-store.d.ts +0 -71
- package/dist/capsule/capsule-store.js +0 -114
- package/dist/capsule/capsule.d.ts +0 -18
- package/dist/capsule/capsule.js +0 -35
- package/dist/capsule/causal-summary.d.ts +0 -119
- package/dist/capsule/causal-summary.js +0 -172
- package/dist/capsule/divergence.d.ts +0 -35
- package/dist/capsule/predicate-to-links.d.ts +0 -8
- package/dist/capsule/predicate-to-links.js +0 -33
- package/dist/cli/adhoc-verdict.d.ts +0 -58
- package/dist/cli/adhoc-verdict.js +0 -115
- package/dist/cli/cli-doctor.js +0 -195
- package/dist/cli/cli-flow-commands.d.ts +0 -46
- package/dist/cli/cli-flow-commands.js +0 -255
- package/dist/cli/cli-kill.d.ts +0 -59
- package/dist/cli/cli-kill.js +0 -162
- package/dist/cli/cli-launch.d.ts +0 -92
- package/dist/cli/cli-launch.js +0 -223
- package/dist/cli/cli-parse.d.ts +0 -171
- package/dist/cli/cli-parse.js +0 -874
- package/dist/cli/cli-port.d.ts +0 -70
- package/dist/cli/cli-port.js +0 -136
- package/dist/cli/cli-update-commands.js +0 -112
- package/dist/cli/cli-verify.d.ts +0 -86
- package/dist/cli/cli-verify.js +0 -340
- package/dist/cli/cloud-cli.js +0 -694
- package/dist/cli/cloud-keystore.js +0 -97
- package/dist/cli/cloud-kit.d.ts +0 -37
- package/dist/cli/cloud-kit.js +0 -121
- package/dist/cli/cloud-login.js +0 -183
- package/dist/cli/config-discovery.d.ts +0 -36
- package/dist/cli/config-discovery.js +0 -164
- package/dist/cli/daemon-start-options.d.ts +0 -33
- package/dist/cli/device-flow.d.ts +0 -76
- package/dist/cli/device-flow.js +0 -56
- package/dist/cli/doctor-daemon-line.js +0 -47
- package/dist/cli/doctor-rows.d.ts +0 -63
- package/dist/cli/doctor-rows.js +0 -65
- package/dist/cli/doctor-sessions-line.js +0 -69
- package/dist/cli/drive-attach.d.ts +0 -113
- package/dist/cli/drive-attach.js +0 -221
- package/dist/cli/drive-command.js +0 -107
- package/dist/cli/mcp-command.js +0 -174
- package/dist/cli/port-holder.js +0 -123
- package/dist/cli/status-next-action.d.ts +0 -51
- package/dist/cli/status-next-action.js +0 -60
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +0 -828
- package/dist/cloud/account-state.d.ts +0 -20
- package/dist/cloud/account-state.js +0 -65
- package/dist/cloud/cloud-config.d.ts +0 -57
- package/dist/cloud/cloud-config.js +0 -145
- package/dist/cloud/cloud-sync.d.ts +0 -190
- package/dist/cloud/cloud-sync.js +0 -354
- package/dist/cloud/sync-cycle.d.ts +0 -111
- package/dist/cloud/sync-cycle.js +0 -270
- package/dist/cloud/sync-daemon.d.ts +0 -53
- package/dist/cloud/sync-daemon.js +0 -260
- package/dist/cloud/sync-disk.js +0 -191
- package/dist/crawl/crawl-tools.d.ts +0 -7
- package/dist/crawl/crawl-tools.js +0 -87
- package/dist/crawl/crawl.d.ts +0 -98
- package/dist/crawl/crawl.js +0 -441
- package/dist/daemon/daemon-resilience.d.ts +0 -74
- package/dist/daemon/daemon-resilience.js +0 -318
- package/dist/daemon/daemon-resolve.d.ts +0 -113
- package/dist/daemon/daemon-resolve.js +0 -187
- package/dist/daemon/daemon-usefulness.d.ts +0 -61
- package/dist/daemon/daemon-usefulness.js +0 -62
- package/dist/daemon/daemon.d.ts +0 -95
- package/dist/daemon/daemon.js +0 -336
- package/dist/daemon/heartbeat.d.ts +0 -111
- package/dist/daemon/heartbeat.js +0 -141
- package/dist/daemon/idle-grace.d.ts +0 -32
- package/dist/daemon/idle-grace.js +0 -41
- package/dist/daemon/idle-shutdown.d.ts +0 -54
- package/dist/daemon/idle-shutdown.js +0 -98
- package/dist/daemon/state-dir.js +0 -59
- package/dist/daemon/wake-decision.d.ts +0 -32
- package/dist/daemon/wake-decision.js +0 -38
- package/dist/dev/stale-issue-guard.d.ts +0 -41
- package/dist/dev/stale-issue-guard.js +0 -75
- package/dist/domain/domain-model.js +0 -126
- package/dist/domain/domain-tools.d.ts +0 -2
- package/dist/domain/domain-tools.js +0 -94
- package/dist/domain/flow-risk.js +0 -80
- package/dist/ee/audit-log.js +0 -11
- package/dist/events/body-failures.d.ts +0 -4
- package/dist/events/body-failures.js +0 -113
- package/dist/events/contradiction-folds.d.ts +0 -45
- package/dist/events/contradiction-folds.js +0 -42
- package/dist/events/contradictions.d.ts +0 -170
- package/dist/events/contradictions.js +0 -718
- package/dist/events/declared.d.ts +0 -74
- package/dist/events/declared.js +0 -171
- package/dist/events/echo-mismatch.d.ts +0 -10
- package/dist/events/echo-mismatch.js +0 -299
- package/dist/events/event-filters.d.ts +0 -121
- package/dist/events/event-filters.js +0 -215
- package/dist/events/json-salvage.d.ts +0 -33
- package/dist/events/json-salvage.js +0 -96
- package/dist/events/lineage.d.ts +0 -52
- package/dist/events/lineage.js +0 -122
- package/dist/events/net-evidence.d.ts +0 -21
- package/dist/events/net-evidence.js +0 -81
- package/dist/events/observed-in-window.d.ts +0 -24
- package/dist/events/observed-in-window.js +0 -38
- package/dist/events/predicate-asks.d.ts +0 -30
- package/dist/events/predicate-asks.js +0 -48
- package/dist/events/predicate-console.d.ts +0 -13
- package/dist/events/predicate-console.js +0 -138
- package/dist/events/predicate-element.d.ts +0 -13
- package/dist/events/predicate-element.js +0 -214
- package/dist/events/predicate-eval.d.ts +0 -101
- package/dist/events/predicate-eval.js +0 -834
- package/dist/events/predicate-parse.d.ts +0 -17
- package/dist/events/predicate-parse.js +0 -175
- package/dist/events/predicate-precheck.d.ts +0 -8
- package/dist/events/predicate-precheck.js +0 -41
- package/dist/events/predicate-request-body.d.ts +0 -50
- package/dist/events/predicate-request-body.js +0 -120
- package/dist/events/predicate-route.d.ts +0 -66
- package/dist/events/predicate-route.js +0 -258
- package/dist/events/predicate-schema.d.ts +0 -168
- package/dist/events/predicate-schema.js +0 -501
- package/dist/events/predicate.d.ts +0 -74
- package/dist/events/predicate.js +0 -725
- package/dist/events/reaction.d.ts +0 -33
- package/dist/events/reaction.js +0 -59
- package/dist/events/reconcile.d.ts +0 -39
- package/dist/events/reconcile.js +0 -211
- package/dist/events/ring-buffer.d.ts +0 -41
- package/dist/events/ring-buffer.js +0 -151
- package/dist/events/split-text-miss.d.ts +0 -32
- package/dist/events/split-text-miss.js +0 -51
- package/dist/events/stale-response.d.ts +0 -3
- package/dist/events/stale-response.js +0 -186
- package/dist/events/testid-near-miss.d.ts +0 -22
- package/dist/events/testid-near-miss.js +0 -33
- package/dist/events/unit-mismatch.d.ts +0 -16
- package/dist/events/unit-mismatch.js +0 -167
- package/dist/flows/affected-tools.d.ts +0 -18
- package/dist/flows/affected-tools.js +0 -80
- package/dist/flows/affected.d.ts +0 -24
- package/dist/flows/affected.js +0 -35
- package/dist/flows/annotate-tools.d.ts +0 -15
- package/dist/flows/annotate-tools.js +0 -179
- package/dist/flows/assertion-tiers-store.d.ts +0 -16
- package/dist/flows/assertion-tiers-store.js +0 -98
- package/dist/flows/decision.d.ts +0 -25
- package/dist/flows/decision.js +0 -201
- package/dist/flows/empty-flow.js +0 -24
- package/dist/flows/flake-store.d.ts +0 -18
- package/dist/flows/flake-store.js +0 -58
- package/dist/flows/flake.d.ts +0 -56
- package/dist/flows/flow-classify.d.ts +0 -51
- package/dist/flows/flow-classify.js +0 -102
- package/dist/flows/flow-expect-grammar.d.ts +0 -33
- package/dist/flows/flow-expect-grammar.js +0 -155
- package/dist/flows/flow-intent.d.ts +0 -52
- package/dist/flows/flow-intent.js +0 -123
- package/dist/flows/flow-replay-run.d.ts +0 -43
- package/dist/flows/flow-replay-run.js +0 -478
- package/dist/flows/flow-replay.d.ts +0 -82
- package/dist/flows/flow-replay.js +0 -519
- package/dist/flows/flow-secret-field.d.ts +0 -14
- package/dist/flows/flow-secret-field.js +0 -22
- package/dist/flows/flow-sources.d.ts +0 -19
- package/dist/flows/flow-sources.js +0 -32
- package/dist/flows/flow-step-runners.d.ts +0 -52
- package/dist/flows/flow-step-runners.js +0 -315
- package/dist/flows/flow-store-for-session.d.ts +0 -31
- package/dist/flows/flow-success.d.ts +0 -32
- package/dist/flows/flow-success.js +0 -169
- package/dist/flows/flow-tools.d.ts +0 -15
- package/dist/flows/flow-tools.js +0 -639
- package/dist/flows/flow-upload-resolve.d.ts +0 -23
- package/dist/flows/flow-upload-resolve.js +0 -46
- package/dist/flows/flows.d.ts +0 -130
- package/dist/flows/flows.js +0 -870
- package/dist/flows/gate.js +0 -33
- package/dist/flows/heal-run.d.ts +0 -10
- package/dist/flows/heal-run.js +0 -139
- package/dist/flows/heal.js +0 -97
- package/dist/flows/predicate-to-expect.d.ts +0 -44
- package/dist/flows/predicate-to-expect.js +0 -130
- package/dist/flows/recording-backtrack.js +0 -73
- package/dist/flows/recordings.d.ts +0 -63
- package/dist/flows/recordings.js +0 -57
- package/dist/flows/replay.d.ts +0 -62
- package/dist/flows/replay.js +0 -337
- package/dist/flows/role-anchor-nearest.js +0 -45
- package/dist/flows/server-verify.d.ts +0 -15
- package/dist/flows/server-verify.js +0 -56
- package/dist/flows/suite-flakes.d.ts +0 -34
- package/dist/flows/suite-flakes.js +0 -32
- package/dist/flows/verify-change-tools.d.ts +0 -2
- package/dist/flows/verify-change-tools.js +0 -231
- package/dist/honesty/accepted-write.d.ts +0 -17
- package/dist/honesty/accepted-write.js +0 -22
- package/dist/honesty/already-true.d.ts +0 -16
- package/dist/honesty/already-true.js +0 -89
- package/dist/honesty/blind-spots.d.ts +0 -133
- package/dist/honesty/blind-spots.js +0 -248
- package/dist/honesty/body-capture-remedy.d.ts +0 -42
- package/dist/honesty/body-capture-remedy.js +0 -95
- package/dist/honesty/feature-capture.d.ts +0 -151
- package/dist/honesty/feature-capture.js +0 -233
- package/dist/honesty/gap-ledger.d.ts +0 -52
- package/dist/honesty/gap-ledger.js +0 -63
- package/dist/honesty/honesty.d.ts +0 -103
- package/dist/honesty/honesty.js +0 -95
- package/dist/honesty/instrumentation-gaps.d.ts +0 -95
- package/dist/honesty/instrumentation-gaps.js +0 -114
- package/dist/honesty/observability.d.ts +0 -38
- package/dist/honesty/observability.js +0 -40
- package/dist/honesty/tool-hit-rate.js +0 -90
- package/dist/honesty/uncaptured-bodies.d.ts +0 -23
- package/dist/honesty/uncaptured-bodies.js +0 -41
- package/dist/honesty/undeclared-change.d.ts +0 -51
- package/dist/honesty/undeclared-change.js +0 -56
- package/dist/honesty/unread-outcome.d.ts +0 -10
- package/dist/honesty/unread-outcome.js +0 -77
- package/dist/honesty/unsettled.d.ts +0 -58
- package/dist/honesty/unsettled.js +0 -127
- package/dist/honesty/verified.d.ts +0 -148
- package/dist/honesty/verified.js +0 -330
- package/dist/http-server.d.ts +0 -52
- package/dist/http-server.js +0 -381
- package/dist/impact/impact-recorder.d.ts +0 -46
- package/dist/impact/impact-recorder.js +0 -159
- package/dist/impact/impact-store.d.ts +0 -47
- package/dist/impact/impact-store.js +0 -255
- package/dist/input/network-detail.d.ts +0 -104
- package/dist/input/network-detail.js +0 -211
- package/dist/input/network-mock-tools.d.ts +0 -21
- package/dist/input/network-mock-tools.js +0 -124
- package/dist/input/network-mock.js +0 -61
- package/dist/input/real-input.d.ts +0 -222
- package/dist/input/real-input.js +0 -405
- package/dist/input/scroll-find.js +0 -111
- package/dist/input/scroll-tools.d.ts +0 -2
- package/dist/input/scroll-tools.js +0 -76
- package/dist/input/viewport-tools.d.ts +0 -2
- package/dist/input/viewport-tools.js +0 -72
- package/dist/intent/inline-intent.d.ts +0 -27
- package/dist/intent/inline-intent.js +0 -193
- package/dist/intent/intent-shard-store.d.ts +0 -73
- package/dist/intent/intent-shard-store.js +0 -203
- package/dist/intent/intent-shard.d.ts +0 -411
- package/dist/intent/intent-shard.js +0 -176
- package/dist/intent/intent-store.d.ts +0 -49
- package/dist/intent/intent-store.js +0 -133
- package/dist/intent/intent-subject.d.ts +0 -46
- package/dist/intent/intent-subject.js +0 -177
- package/dist/intent/intent-tools.d.ts +0 -2
- package/dist/intent/intent-tools.js +0 -143
- package/dist/intent/open-intents.d.ts +0 -43
- package/dist/intent/open-intents.js +0 -40
- package/dist/journal/ambient-store.d.ts +0 -13
- package/dist/journal/ambient-store.js +0 -45
- package/dist/journal/ambient.d.ts +0 -47
- package/dist/journal/ambient.js +0 -47
- package/dist/journal/attach-journal.d.ts +0 -30
- package/dist/journal/attach-journal.js +0 -30
- package/dist/journal/envelope-store.d.ts +0 -16
- package/dist/journal/envelope-store.js +0 -61
- package/dist/journal/envelope.d.ts +0 -230
- package/dist/journal/journal-query.d.ts +0 -32
- package/dist/journal/journal-query.js +0 -52
- package/dist/journal/journal-recorder.d.ts +0 -61
- package/dist/journal/journal-recorder.js +0 -115
- package/dist/journal/retention.d.ts +0 -20
- package/dist/journal/retention.js +0 -49
- package/dist/journal/session-end.d.ts +0 -32
- package/dist/journal/session-end.js +0 -51
- package/dist/journal/session-journal.d.ts +0 -24
- package/dist/journal/session-journal.js +0 -167
- package/dist/journal/workspace-gitignore.d.ts +0 -10
- package/dist/journal/workspace-gitignore.js +0 -59
- package/dist/license/license-env.d.ts +0 -29
- package/dist/license/license-env.js +0 -148
- package/dist/license/license.d.ts +0 -169
- package/dist/license/license.js +0 -289
- package/dist/mcp/mcp-is-error.d.ts +0 -13
- package/dist/mcp/mcp-is-error.js +0 -18
- package/dist/mcp/mcp-outage.d.ts +0 -32
- package/dist/mcp/mcp-outage.js +0 -55
- package/dist/mcp/mcp-post-transport.js +0 -109
- package/dist/mcp/mcp-proxy.d.ts +0 -110
- package/dist/mcp/mcp-proxy.js +0 -872
- package/dist/mcp/mcp.d.ts +0 -80
- package/dist/mcp/mcp.js +0 -536
- package/dist/mcp/proxy-daemon-probe.d.ts +0 -9
- package/dist/mcp/proxy-daemon-probe.js +0 -54
- package/dist/mcp/proxy-handshake.js +0 -192
- package/dist/mcp/proxy-lifecycle.d.ts +0 -92
- package/dist/mcp/proxy-lifecycle.js +0 -100
- package/dist/mcp/proxy-log.d.ts +0 -63
- package/dist/mcp/proxy-log.js +0 -132
- package/dist/mcp/server-instructions.d.ts +0 -18
- package/dist/mcp/server-instructions.js +0 -98
- package/dist/mcp/tool-catalog-cache.d.ts +0 -45
- package/dist/mcp/tool-catalog-cache.js +0 -77
- package/dist/memory/memory-tools.d.ts +0 -2
- package/dist/memory/memory-tools.js +0 -82
- package/dist/memory/project-memory.d.ts +0 -33
- package/dist/oracles/propose-consequences.d.ts +0 -22
- package/dist/oracles/propose-consequences.js +0 -106
- package/dist/pool/browser-pool.d.ts +0 -282
- package/dist/pool/browser-pool.js +0 -560
- package/dist/pool/lease-reaper.js +0 -40
- package/dist/pool/playwright-launcher.js +0 -150
- package/dist/pool/storage-seed.d.ts +0 -23
- package/dist/project/artifact-root.d.ts +0 -84
- package/dist/project/artifact-root.js +0 -112
- package/dist/project/fs-port.d.ts +0 -47
- package/dist/project/fs-port.js +0 -54
- package/dist/project/learned-routes.d.ts +0 -24
- package/dist/project/learned-routes.js +0 -63
- package/dist/project/memory-fs.d.ts +0 -10
- package/dist/project/project-store.d.ts +0 -54
- package/dist/project/project-store.js +0 -201
- package/dist/project/project-tools.d.ts +0 -2
- package/dist/project/project-tools.js +0 -155
- package/dist/project/reticle-dir.d.ts +0 -102
- package/dist/project/reticle-dir.js +0 -188
- package/dist/project/session-root.d.ts +0 -23
- package/dist/project/session-root.js +0 -38
- package/dist/runs/build-verification-run.d.ts +0 -29
- package/dist/runs/build-verification-run.js +0 -70
- package/dist/runs/context-tools.d.ts +0 -2
- package/dist/runs/context-tools.js +0 -89
- package/dist/runs/render-report.js +0 -69
- package/dist/runs/replay-mapping.js +0 -34
- package/dist/runs/reticle-runner.d.ts +0 -60
- package/dist/runs/reticle-runner.js +0 -95
- package/dist/runs/run-store.d.ts +0 -54
- package/dist/runs/run-store.js +0 -147
- package/dist/runs/run-tools.d.ts +0 -9
- package/dist/runs/run-tools.js +0 -82
- package/dist/runs/runner-port.d.ts +0 -13
- package/dist/runs/runner-port.js +0 -22
- package/dist/runs/verification-sync.d.ts +0 -12
- package/dist/runs/verification-sync.js +0 -87
- package/dist/session/command-timeout.d.ts +0 -46
- package/dist/session/command-timeout.js +0 -42
- package/dist/session/connection-memory.d.ts +0 -59
- package/dist/session/connection-memory.js +0 -108
- package/dist/session/dev-server-probe.js +0 -147
- package/dist/session/live-control-tools.d.ts +0 -15
- package/dist/session/live-control-tools.js +0 -242
- package/dist/session/no-session-diagnosis.d.ts +0 -176
- package/dist/session/no-session-diagnosis.js +0 -477
- package/dist/session/no-session-next-action.d.ts +0 -72
- package/dist/session/no-session-next-action.js +0 -174
- package/dist/session/no-session-watch.js +0 -335
- package/dist/session/observed-state.d.ts +0 -60
- package/dist/session/observed-state.js +0 -121
- package/dist/session/output-budget.d.ts +0 -49
- package/dist/session/output-budget.js +0 -67
- package/dist/session/session-health.d.ts +0 -138
- package/dist/session/session-health.js +0 -154
- package/dist/session/session-manager.d.ts +0 -76
- package/dist/session/session-manager.js +0 -464
- package/dist/session/session-reaper.d.ts +0 -36
- package/dist/session/session-reaper.js +0 -93
- package/dist/session/session-recommendation.js +0 -29
- package/dist/session/session-replaced.d.ts +0 -24
- package/dist/session/session-replaced.js +0 -29
- package/dist/session/session-tools.d.ts +0 -8
- package/dist/session/session-tools.js +0 -42
- package/dist/session/session.d.ts +0 -280
- package/dist/session/session.js +0 -891
- package/dist/session/stall-clock.js +0 -48
- package/dist/setup/agent-configs.d.ts +0 -97
- package/dist/setup/agent-configs.js +0 -333
- package/dist/setup/agent-writer.d.ts +0 -52
- package/dist/setup/agent-writer.js +0 -115
- package/dist/setup/auto-approve.js +0 -153
- package/dist/setup/bridge-port.d.ts +0 -15
- package/dist/setup/bridge-port.js +0 -24
- package/dist/setup/confirm.js +0 -205
- package/dist/setup/dev-server-wait.d.ts +0 -68
- package/dist/setup/dev-server-wait.js +0 -67
- package/dist/setup/drive-agent.d.ts +0 -70
- package/dist/setup/drive-agent.js +0 -171
- package/dist/setup/drive-plan.d.ts +0 -69
- package/dist/setup/drive-plan.js +0 -130
- package/dist/setup/ensure-daemon.js +0 -58
- package/dist/setup/init-host.js +0 -26
- package/dist/setup/init-runtime.d.ts +0 -41
- package/dist/setup/init-runtime.js +0 -167
- package/dist/setup/node-effects.d.ts +0 -63
- package/dist/setup/node-effects.js +0 -225
- package/dist/setup/page-probe.d.ts +0 -44
- package/dist/setup/page-probe.js +0 -49
- package/dist/setup/remaining-steps.js +0 -31
- package/dist/setup/run-setup.d.ts +0 -103
- package/dist/setup/run-setup.js +0 -294
- package/dist/setup/setup-command.d.ts +0 -46
- package/dist/setup/setup-command.js +0 -207
- package/dist/setup/setup-options.d.ts +0 -76
- package/dist/setup/setup-options.js +0 -68
- package/dist/tools/act-capsule.d.ts +0 -33
- package/dist/tools/act-capsule.js +0 -53
- package/dist/tools/act-danger.js +0 -69
- package/dist/tools/act-helpers.d.ts +0 -17
- package/dist/tools/act-helpers.js +0 -40
- package/dist/tools/act-observation.d.ts +0 -42
- package/dist/tools/act-observation.js +0 -36
- package/dist/tools/act-preflight.d.ts +0 -20
- package/dist/tools/act-preflight.js +0 -103
- package/dist/tools/act-sequence-tool.js +0 -135
- package/dist/tools/act-target.d.ts +0 -18
- package/dist/tools/act-target.js +0 -56
- package/dist/tools/act-tools.d.ts +0 -20
- package/dist/tools/act-tools.js +0 -763
- package/dist/tools/assert-grade.d.ts +0 -42
- package/dist/tools/assert-grade.js +0 -108
- package/dist/tools/assert-source.d.ts +0 -52
- package/dist/tools/assert-source.js +0 -74
- package/dist/tools/assert-verdict.d.ts +0 -48
- package/dist/tools/assert-verdict.js +0 -197
- package/dist/tools/browser-tools.d.ts +0 -2
- package/dist/tools/browser-tools.js +0 -115
- package/dist/tools/contract-tools.d.ts +0 -2
- package/dist/tools/contract-tools.js +0 -98
- package/dist/tools/coverage-tools.d.ts +0 -18
- package/dist/tools/coverage-tools.js +0 -175
- package/dist/tools/dynamic-tools.d.ts +0 -7
- package/dist/tools/dynamic-tools.js +0 -257
- package/dist/tools/error-recovery.d.ts +0 -110
- package/dist/tools/error-recovery.js +0 -499
- package/dist/tools/feedback-invite.d.ts +0 -48
- package/dist/tools/feedback-invite.js +0 -71
- package/dist/tools/feedback-tools.d.ts +0 -35
- package/dist/tools/feedback-tools.js +0 -228
- package/dist/tools/invoke-tool.d.ts +0 -10
- package/dist/tools/invoke-tool.js +0 -569
- package/dist/tools/lease-hint.d.ts +0 -49
- package/dist/tools/lease-hint.js +0 -124
- package/dist/tools/lease-tools.d.ts +0 -143
- package/dist/tools/lease-tools.js +0 -688
- package/dist/tools/lineage-tools.d.ts +0 -14
- package/dist/tools/lineage-tools.js +0 -64
- package/dist/tools/merge-tools.d.ts +0 -51
- package/dist/tools/merge-tools.js +0 -69
- package/dist/tools/merged-name-redirect.d.ts +0 -26
- package/dist/tools/merged-name-redirect.js +0 -77
- package/dist/tools/navigate-arrival.d.ts +0 -68
- package/dist/tools/numeric-bounds.d.ts +0 -89
- package/dist/tools/numeric-bounds.js +0 -125
- package/dist/tools/observe-tools.js +0 -578
- package/dist/tools/read-tools.js +0 -569
- package/dist/tools/real-input-attempt.d.ts +0 -68
- package/dist/tools/real-input-attempt.js +0 -360
- package/dist/tools/reconcile-tools.js +0 -126
- package/dist/tools/resolve-target.js +0 -116
- package/dist/tools/snapshot-delta.d.ts +0 -92
- package/dist/tools/snapshot-delta.js +0 -356
- package/dist/tools/tool-kit.d.ts +0 -221
- package/dist/tools/tool-kit.js +0 -114
- package/dist/tools/tool-names.d.ts +0 -112
- package/dist/tools/tool-names.js +0 -112
- package/dist/tools/tool-surface.d.ts +0 -222
- package/dist/tools/tool-surface.js +0 -439
- package/dist/tools/tools-helpers.d.ts +0 -42
- package/dist/tools/tools-helpers.js +0 -87
- package/dist/tools/tools.d.ts +0 -20
- package/dist/tools/tools.js +0 -739
- package/dist/tools/unadvertised-help.js +0 -42
- package/dist/tools/verify-next-baton.js +0 -52
- package/dist/update/nudge-credit.js +0 -53
- package/dist/update/reticle-deps.d.ts +0 -9
- package/dist/update/reticle-deps.js +0 -27
- package/dist/update/sdk-sync.d.ts +0 -20
- package/dist/update/sdk-sync.js +0 -22
- package/dist/update/update-checker.js +0 -122
- package/dist/update/update-nudge.d.ts +0 -92
- package/dist/update/update-nudge.js +0 -214
- package/dist/update/updater.d.ts +0 -54
- package/dist/update/updater.js +0 -190
- package/dist/version/peer-announce.js +0 -32
- package/dist/version/sdk-fix.js +0 -127
- package/dist/version/server-version.js +0 -13
- package/dist/version/version-nudge.js +0 -61
- package/dist/version/version-skew.d.ts +0 -93
- package/dist/version/version-skew.js +0 -147
- package/dist/visual/visual-store.d.ts +0 -22
- package/dist/visual/visual-store.js +0 -66
- package/dist/visual/visual-tools.d.ts +0 -26
- package/dist/visual/visual-tools.js +0 -328
- package/docs/docs.json +0 -369
- package/docs/fixtures.md +0 -51
- package/docs/gate-plan.md +0 -104
- package/docs/gates.md +0 -131
- package/docs/style.css +0 -14
- package/docs/telemetry-contract.md +0 -390
- package/docs/telemetry-events.mdx +0 -442
- package/docs/tools-act-and-wait.mdx +0 -173
- package/docs/tools-act-sequence.mdx +0 -153
- package/docs/tools-act.mdx +0 -95
- package/docs/tools-assert.mdx +0 -129
- package/docs/tools-console.mdx +0 -63
- package/docs/tools-inspect.mdx +0 -88
- package/docs/tools-navigate.mdx +0 -107
- package/docs/tools-network.mdx +0 -119
- package/docs/tools-observe.mdx +0 -145
- package/docs/tools-overview.mdx +0 -160
- package/docs/tools-query.mdx +0 -126
- package/docs/tools-sessions.mdx +0 -94
- package/docs/tools-snapshot.mdx +0 -129
- package/docs/tools-state.mdx +0 -104
- package/docs/tools-wait-for.mdx +0 -85
- /package/dist/{cli → command/cli/answers}/gate-exit.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-exit.js +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/gate-hook-message.js +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.d.ts +0 -0
- /package/dist/{cli → command/cli/answers}/open-note.js +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-keystore.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.d.ts +0 -0
- /package/dist/{cli → command/cli/auth}/cloud-session.js +0 -0
- /package/dist/{cli → command/cli}/cli-doctor.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.d.ts +0 -0
- /package/dist/{cli → command/cli}/cli-parse-feedback.js +0 -0
- /package/dist/{cli → command/cli}/cli-update-commands.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-cli.d.ts +0 -0
- /package/dist/{cli → command/cli}/cloud-login.d.ts +0 -0
- /package/dist/{cli → command/cli}/daemon-start-options.js +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor/browser}/chromium-hint.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-daemon-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.d.ts +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-project-line.js +0 -0
- /package/dist/{cli → command/cli/doctor}/doctor-sessions-line.d.ts +0 -0
- /package/dist/{cli → command/cli/drive}/drive-command.d.ts +0 -0
- /package/dist/{cli → command/cli}/mcp-command.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/port-holder.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.d.ts +0 -0
- /package/dist/{cli → command/cli/ports}/sibling-ports.js +0 -0
- /package/dist/{cli → command/cli}/project-name.d.ts +0 -0
- /package/dist/{cli → command/cli}/project-name.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/free-port.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/loopback-alias.js +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.d.ts +0 -0
- /package/dist/{daemon → command/daemon/binding}/port-presence.js +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.d.ts +0 -0
- /package/dist/{daemon → command/daemon}/dev-servers.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/startup-failure.js +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.d.ts +0 -0
- /package/dist/{daemon → command/daemon/lifetime}/unclean-predecessor.js +0 -0
- /package/dist/{daemon → command/daemon}/state-dir.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.d.ts +0 -0
- /package/dist/{setup → command/setup}/agent-io.js +0 -0
- /package/dist/{setup → command/setup}/approval-migration.d.ts +0 -0
- /package/dist/{setup → command/setup}/approval-migration.js +0 -0
- /package/dist/{setup → command/setup}/auto-approve.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/ensure-daemon.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.d.ts +0 -0
- /package/dist/{setup → command/setup/bringup}/relaunch.js +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.d.ts +0 -0
- /package/dist/{setup → command/setup}/desktop-shape.js +0 -0
- /package/dist/{setup → command/setup/init}/init-host.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.d.ts +0 -0
- /package/dist/{setup → command/setup}/license-key.js +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/existing-app.js +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.d.ts +0 -0
- /package/dist/{setup → command/setup/probe}/loopback-probe-urls.js +0 -0
- /package/dist/{setup → command/setup}/remaining-steps.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.d.ts +0 -0
- /package/dist/{setup → command/setup}/session-pick.js +0 -0
- /package/dist/{setup → command/setup/terminal}/confirm.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/interrupt.js +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/listeners.js +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/transcripts.js +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.d.ts +0 -0
- /package/dist/{setup → command/setup/terminal}/wait-progress.js +0 -0
- /package/dist/{update → command/update}/nudge-credit.d.ts +0 -0
- /package/dist/{update → command/update}/update-checker.d.ts +0 -0
- /package/dist/{version → command/version/identity}/server-version.d.ts +0 -0
- /package/dist/{version → command/version}/peer-announce.d.ts +0 -0
- /package/dist/{version → command/version}/sdk-fix.d.ts +0 -0
- /package/dist/{version → command/version}/version-nudge.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.d.ts +0 -0
- /package/dist/{crawl → features/crawl}/crawl-empty.js +0 -0
- /package/dist/{ee → features/ee}/audit-log.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.d.ts +0 -0
- /package/dist/{visual → features/visual}/capture-cleanup.js +0 -0
- /package/dist/{visual → features/visual}/visual-diff.d.ts +0 -0
- /package/dist/{visual → features/visual}/visual-diff.js +0 -0
- /package/dist/{capsule → judgement/capsule}/divergence.js +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.d.ts +0 -0
- /package/dist/{capsule → judgement/capsule}/minimize.js +0 -0
- /package/dist/{domain → judgement/domain}/domain-model.d.ts +0 -0
- /package/dist/{domain → judgement/domain}/flow-risk.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.d.ts +0 -0
- /package/dist/{hunt → judgement/hunt}/hunt-report.js +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/flow-instrument-gaps.js +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.d.ts +0 -0
- /package/dist/{oracles → judgement/oracles}/self-instrument.js +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/assertion-integrity.js +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/attributed-failure.js +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/role-drift-reason.js +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.d.ts +0 -0
- /package/dist/{flows → judgement/outcome}/verify-change-verdict.js +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.d.ts +0 -0
- /package/dist/{phenomena → judgement/phenomena}/phenomena.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/profile-redact.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/render-report.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/replay-mapping.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-context.js +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.d.ts +0 -0
- /package/dist/{runs → judgement/runs/artifact}/run-diff.js +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/repair-prompt.js +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/risk-classify.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-http.js +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.d.ts +0 -0
- /package/dist/{runs → judgement/runs}/verify-server.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate-target.js +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.d.ts +0 -0
- /package/dist/{flows → language/flows/annotate-notes}/annotate.js +0 -0
- /package/dist/{flows → language/flows}/buddy-status.d.ts +0 -0
- /package/dist/{flows → language/flows}/buddy-status.js +0 -0
- /package/dist/{flows → language/flows/change}/gate.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/git-changed.js +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.d.ts +0 -0
- /package/dist/{flows → language/flows/change}/watch-batcher.js +0 -0
- /package/dist/{flows → language/flows}/empty-flow.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-memory-consult.js +0 -0
- /package/dist/{flows → language/flows}/flow-report.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-report.js +0 -0
- /package/dist/{flows → language/flows}/flow-scope.d.ts +0 -0
- /package/dist/{flows → language/flows}/flow-scope.js +0 -0
- /package/dist/{flows → language/flows}/flow-store-for-session.js +0 -0
- /package/dist/{flows → language/flows}/heal.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/flake.js +0 -0
- /package/dist/{flows → language/flows/recording}/recording-backtrack.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.d.ts +0 -0
- /package/dist/{flows → language/flows/recording}/replay-halt.js +0 -0
- /package/dist/{flows → language/flows}/role-anchor-nearest.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.d.ts +0 -0
- /package/dist/{flows → language/flows/stores}/annotation-store.js +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/coverage.js +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.d.ts +0 -0
- /package/dist/{flows → language/flows/suite}/parallel-suite.js +0 -0
- /package/dist/{platform.d.ts → machine/platform.d.ts} +0 -0
- /package/dist/{platform.js → machine/platform.js} +0 -0
- /package/dist/{temp-dir.d.ts → machine/temp-dir.d.ts} +0 -0
- /package/dist/{temp-dir.js → machine/temp-dir.js} +0 -0
- /package/dist/{cloud → memory/cloud}/sync-disk.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.d.ts +0 -0
- /package/dist/{cloud → memory/cloud}/sync-hash.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-report.js +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.d.ts +0 -0
- /package/dist/{journal → memory/journal}/deviation-service.js +0 -0
- /package/dist/{journal → memory/journal}/envelope.js +0 -0
- /package/dist/{journal → memory/journal}/rollups.d.ts +0 -0
- /package/dist/{journal → memory/journal}/rollups.js +0 -0
- /package/dist/{project → memory/project}/baselines.d.ts +0 -0
- /package/dist/{project → memory/project}/baselines.js +0 -0
- /package/dist/{project → memory/project}/file-lock.d.ts +0 -0
- /package/dist/{project → memory/project}/file-lock.js +0 -0
- /package/dist/{project → memory/project}/memory-fs.js +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.d.ts +0 -0
- /package/dist/{session → memory/recall}/looks-like-dev-server.js +0 -0
- /package/dist/memory/{project-memory.js → recall/project-memory.js} +0 -0
- /package/dist/{session → memory/recall}/registered-projects.d.ts +0 -0
- /package/dist/{session → memory/recall}/registered-projects.js +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/pairing-token.js +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/protocol-skew.js +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.d.ts +0 -0
- /package/dist/{bridge → portal/bridge}/token-auth.js +0 -0
- /package/dist/{input → portal/input}/driven-redaction.d.ts +0 -0
- /package/dist/{input → portal/input}/driven-redaction.js +0 -0
- /package/dist/{input → portal/input}/network-mock.d.ts +0 -0
- /package/dist/{input → portal/input}/scroll-find.d.ts +0 -0
- /package/dist/{pool → portal/pool}/lease-reaper.d.ts +0 -0
- /package/dist/{pool → portal/pool}/playwright-launcher.d.ts +0 -0
- /package/dist/{pool → portal/pool}/storage-seed.js +0 -0
- /package/dist/{session → portal/session}/control-envelope.d.ts +0 -0
- /package/dist/{session → portal/session}/control-envelope.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.d.ts +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-command.js +0 -0
- /package/dist/{session → portal/session/dev-server}/dev-server-probe.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.d.ts +0 -0
- /package/dist/{session → portal/session/facts}/ref-provenance.js +0 -0
- /package/dist/{session → portal/session}/fake-session.d.ts +0 -0
- /package/dist/{session → portal/session}/fake-session.js +0 -0
- /package/dist/{session → portal/session/human}/live-control.d.ts +0 -0
- /package/dist/{session → portal/session/human}/live-control.js +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.d.ts +0 -0
- /package/dist/{session → portal/session/human}/presenter-args.js +0 -0
- /package/dist/{session → portal/session/human}/review-store.d.ts +0 -0
- /package/dist/{session → portal/session/human}/review-store.js +0 -0
- /package/dist/{session → portal/session}/last-act.d.ts +0 -0
- /package/dist/{session → portal/session}/last-act.js +0 -0
- /package/dist/{session → portal/session}/lease-visibility.d.ts +0 -0
- /package/dist/{session → portal/session}/lease-visibility.js +0 -0
- /package/dist/{session → portal/session}/no-session-watch.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.d.ts +0 -0
- /package/dist/{session → portal/session/page-commands}/pending-commands.js +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/attachment-history.js +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/lease-availability.js +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-lease.js +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.d.ts +0 -0
- /package/dist/{session → portal/session/presence}/session-mirror.js +0 -0
- /package/dist/{session → portal/session/presence}/session-recommendation.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.d.ts +0 -0
- /package/dist/{session → portal/session}/session-info.js +0 -0
- /package/dist/{session → portal/session}/session-reconnect.d.ts +0 -0
- /package/dist/{session → portal/session}/session-reconnect.js +0 -0
- /package/dist/{session → portal/session}/session-successor.d.ts +0 -0
- /package/dist/{session → portal/session}/session-successor.js +0 -0
- /package/dist/{session → portal/session}/stall-clock.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.d.ts +0 -0
- /package/dist/{session → portal/session}/state-select.js +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/resolve-within.js +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.d.ts +0 -0
- /package/dist/{session → portal/session/timing}/wall-clock.js +0 -0
- /package/dist/{loopback-agent.d.ts → surface/loopback-agent.d.ts} +0 -0
- /package/dist/{loopback-agent.js → surface/loopback-agent.js} +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/attach-memory.js +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/peer}/client-identity.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/mcp-post-transport.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.d.ts +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-backoff.js +0 -0
- /package/dist/{mcp → surface/mcp/proxy}/proxy-handshake.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/proxy-idle-exit.js +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/shared-params.js +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.d.ts +0 -0
- /package/dist/{mcp → surface/mcp}/sse-frame-parser.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-danger.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-sequence-retry.js +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/act-view.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-arrival.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/navigate-result.js +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.d.ts +0 -0
- /package/dist/{tools → surface/tools/act/navigation}/reload-result.js +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/react-grace.js +0 -0
- /package/dist/{tools → surface/tools/act}/resolve-target.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.d.ts +0 -0
- /package/dist/{tools → surface/tools/act}/settle-in-flight.js +0 -0
- /package/dist/{tools → surface/tools}/act-sequence-tool.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.d.ts +0 -0
- /package/dist/{tools → surface/tools/args}/alias-args.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/coverage-identity.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/observed-nothing.js +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.d.ts +0 -0
- /package/dist/{tools → surface/tools/gaps}/sdk-marker-probe.js +0 -0
- /package/dist/{tools → surface/tools}/observe-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/complete-snapshot.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-paginate.js +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.d.ts +0 -0
- /package/dist/{tools → surface/tools/read}/query-shape.js +0 -0
- /package/dist/{tools → surface/tools}/read-tools.d.ts +0 -0
- /package/dist/{tools → surface/tools}/reconcile-tools.d.ts +0 -0
- /package/dist/{honesty → surface/tools}/tool-hit-rate.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.d.ts +0 -0
- /package/dist/{tools → surface/tools}/tool-invoker.js +0 -0
- /package/dist/{tools → surface/tools}/unadvertised-help.d.ts +0 -0
- /package/dist/{tools → surface/tools}/verify-next-baton.d.ts +0 -0
- /package/docs/{tools-session-and-feedback.mdx → tools/session-and-feedback.mdx} +0 -0
- /package/docs/{tools-tools-and-run.mdx → tools/tools-and-run.mdx} +0 -0
|
@@ -0,0 +1,748 @@
|
|
|
1
|
+
import { resolveFlowUploads } from './fields/flow-upload-resolve.js';
|
|
2
|
+
import { learnFromRun } from '@reticlehq/engine/evidence/learned-guards.js';
|
|
3
|
+
import { EventType, FLOW_SIGNAL_TIMEOUT_MS, FlowErrorCode, RecordedFlowSchema, ReplayStatus, ReticleCommand, RunKind, RunStatus, } from '@reticlehq/core';
|
|
4
|
+
import { haltedFrom } from './recording/replay-halt.js';
|
|
5
|
+
import { asRecord, asString } from '@reticlehq/core';
|
|
6
|
+
import { routeOfEvent, routeOfUrl } from '@reticlehq/engine/question/predicate/predicate-route.js';
|
|
7
|
+
import { carryReticleIdentity } from '../../surface/tools/lease-tools.js';
|
|
8
|
+
import { replayFlow } from './flow-replay.js';
|
|
9
|
+
import { anchorQueryArgs } from './flow-step-runners.js';
|
|
10
|
+
import { queryRefs } from './replay.js';
|
|
11
|
+
import { assertSuccess, dynamicTestids, successLabel, SUCCESS_STEP_TOOL } from './flow-success.js';
|
|
12
|
+
import { buildDecision, unverifiableReason } from './decision.js';
|
|
13
|
+
import { unsuppliedSecrets } from './fields/flow-secret-field.js';
|
|
14
|
+
import { assertStepExpect, DocumentLostDuringReplay, } from './flow-replay.js';
|
|
15
|
+
import { isDocumentGoneError } from '../../portal/session/facts/session-replaced.js';
|
|
16
|
+
import { classifyFlowAssertions, flattenSteps } from './flow-classify.js';
|
|
17
|
+
import { dischargeFlowIntent, flowIntentStatement, flowReplayVerdictId } from './flow-intent.js';
|
|
18
|
+
import { IntentStore } from '../../memory/intent/intent-store.js';
|
|
19
|
+
import { sessionRoot } from '../../memory/project/session-root.js';
|
|
20
|
+
import { waitForPredicate } from '@reticlehq/engine/question/predicate/predicate.js';
|
|
21
|
+
import { computeSegments } from '../../memory/journal/rollups.js';
|
|
22
|
+
import { stepEffect } from '@reticlehq/engine/evidence/step-effect.js';
|
|
23
|
+
import { AssertionTiersStore } from './stores/assertion-tiers-store.js';
|
|
24
|
+
import { toFlowSources } from './change/flow-sources.js';
|
|
25
|
+
import { reportAndAccumulate } from '../../memory/journal/deviation-service.js';
|
|
26
|
+
import { EnvelopeStore } from '../../memory/journal/envelope-store.js';
|
|
27
|
+
import { homedir } from 'node:os';
|
|
28
|
+
import { cloudFetch, syncRunRecordToCloud, SyncOutcome } from '../../memory/cloud/cloud-sync.js';
|
|
29
|
+
import { resolveProjectCloud } from '../../memory/cloud/cloud-config.js';
|
|
30
|
+
import { consultSubjectFor, selectConsulted } from './flow-memory-consult.js';
|
|
31
|
+
import { log } from '../../log.js';
|
|
32
|
+
import { flowsForSession } from './flow-store-for-session.js';
|
|
33
|
+
import { projectForRoot } from '../../memory/project/project-for-root.js';
|
|
34
|
+
import { FlowParseNote } from './flow-expect-grammar.js';
|
|
35
|
+
export function latestRecordedFlow(events) {
|
|
36
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
37
|
+
const event = events[i];
|
|
38
|
+
if (event?.type !== EventType.FLOW_RECORDED)
|
|
39
|
+
continue;
|
|
40
|
+
const parsed = RecordedFlowSchema.safeParse(event.data);
|
|
41
|
+
if (parsed.success)
|
|
42
|
+
return { name: parsed.data.name, flow: parsed.data.flow };
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Map a structured FlowErrorCode to a legible one-line message for the agent. */
|
|
47
|
+
export function flowErrorMessage(code, detail) {
|
|
48
|
+
if (FlowErrorCode.PARSE_FAILED === code && undefined !== detail)
|
|
49
|
+
return detail;
|
|
50
|
+
switch (code) {
|
|
51
|
+
case FlowErrorCode.INVALID_NAME:
|
|
52
|
+
return 'invalid flow name — use a single safe segment (letters/digits/-/_), no path separators';
|
|
53
|
+
case FlowErrorCode.NOT_FOUND:
|
|
54
|
+
return 'no such flow on disk — run reticle_flow{action:"list"} to see saved flows';
|
|
55
|
+
case FlowErrorCode.PARSE_FAILED:
|
|
56
|
+
return FlowParseNote.MALFORMED;
|
|
57
|
+
case FlowErrorCode.NO_RECORDING:
|
|
58
|
+
return 'no compiled recording by that name — record one (reticle_record{action:"start"|"stop"}) first';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Map the wire ReplayStatus onto the persisted RunStatus (ok→pass). */
|
|
62
|
+
function replayToRunStatus(status) {
|
|
63
|
+
switch (status) {
|
|
64
|
+
case ReplayStatus.OK:
|
|
65
|
+
return RunStatus.PASS;
|
|
66
|
+
case ReplayStatus.DRIFT:
|
|
67
|
+
return RunStatus.DRIFT;
|
|
68
|
+
case ReplayStatus.ERROR:
|
|
69
|
+
return RunStatus.ERROR;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Append a flow-replay outcome to .reticle/project.json (never throws into replay) and, when logged in,
|
|
74
|
+
* best-effort mirror it to Reticle so the team's server-side regression history stays current. The
|
|
75
|
+
* cloud push is fire-and-forget: not logged in → skipped, a network failure is logged and swallowed.
|
|
76
|
+
*/
|
|
77
|
+
async function recordReplayRun(deps, name, status, driftSteps, durationMs, projectId,
|
|
78
|
+
/** The APP's `.reticle`, resolved from the session — never the daemon's own. */
|
|
79
|
+
recordRoot) {
|
|
80
|
+
const runStatus = replayToRunStatus(status);
|
|
81
|
+
await projectForRoot(deps, recordRoot).recordRun({
|
|
82
|
+
kind: RunKind.FLOW_REPLAY,
|
|
83
|
+
name,
|
|
84
|
+
status: runStatus,
|
|
85
|
+
evidence: { driftSteps },
|
|
86
|
+
durationMs,
|
|
87
|
+
});
|
|
88
|
+
// Per-project cloud: push memory outcomes only when cloud is attached AND memory sync is enabled.
|
|
89
|
+
// Rooted at the APP, not the daemon — see consultProjectMemory. This call had the same defect and
|
|
90
|
+
// it was worse here: a replay outcome that should have reached the dashboard silently did not,
|
|
91
|
+
// because the daemon's own directory has no link file.
|
|
92
|
+
const cloud = await resolveProjectCloud(deps.fs, recordRoot, homedir(), process.env);
|
|
93
|
+
if (null === cloud.config || !cloud.policy.memory)
|
|
94
|
+
return; // not attached / memory disabled → local only
|
|
95
|
+
const result = await syncRunRecordToCloud({ kind: RunKind.FLOW_REPLAY, name, status: runStatus, at: deps.now(), durationMs }, projectId, cloud.config, cloudFetch);
|
|
96
|
+
if (result.outcome !== SyncOutcome.SYNCED) {
|
|
97
|
+
log('cloud-run-record-sync-failed', { flow: name, status: result.status, error: result.error });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The route the tab is on now: the last observed route.change, falling back to the pathname of the
|
|
102
|
+
* session's own URL. The fallback matters — a tab that hard-loaded its page emits no route event
|
|
103
|
+
* (the route observer only sees pushState/replaceState/popstate), but the HELLO url still names
|
|
104
|
+
* where it sits, and without it a wrong-page replay reported plain drift with no hint at all.
|
|
105
|
+
*/
|
|
106
|
+
function currentPathOf(session) {
|
|
107
|
+
const routes = session.eventsSince(0).filter((e) => e.type === EventType.ROUTE_CHANGE);
|
|
108
|
+
const last = routes.at(-1);
|
|
109
|
+
// pathname + hash, because `startPath` is compared against this and must stay NAVIGABLE. Reading
|
|
110
|
+
// the pathname alone made both sides `/` on a hash router — always "same path", so the hint never
|
|
111
|
+
// fired however far the tab had drifted, on the router desktop renderers use by default.
|
|
112
|
+
const observed = last === undefined ? undefined : routeOfEvent(last);
|
|
113
|
+
if (observed !== undefined)
|
|
114
|
+
return `${observed.docPath}${observed.hash}`;
|
|
115
|
+
if (session.url === undefined)
|
|
116
|
+
return undefined;
|
|
117
|
+
const fromUrl = routeOfUrl(session.url);
|
|
118
|
+
return fromUrl === undefined ? undefined : `${fromUrl.docPath}${fromUrl.hash}`;
|
|
119
|
+
}
|
|
120
|
+
/** Pathname equality up to a trailing slash — a router normalising one must not read as "elsewhere". */
|
|
121
|
+
function samePath(a, b) {
|
|
122
|
+
return a.replace(/\/$/, '') === b.replace(/\/$/, '');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Ask the project what it already knows about this flow.
|
|
126
|
+
*
|
|
127
|
+
* Best-effort in the strongest sense: an unlinked project, a disabled memory policy, an offline
|
|
128
|
+
* laptop and a server that answers nonsense all reach the same place — the verdict returns without
|
|
129
|
+
* a memory block. A verification that FAILED because the knowledge lookup failed would be a worse
|
|
130
|
+
* product than one that never looked, and this is the path every replay takes.
|
|
131
|
+
*
|
|
132
|
+
* The read is also what makes the coverage map's fetch counts mean anything: they were zero across
|
|
133
|
+
* the entire corpus, not because memory is useless but because consulting it was a separate act
|
|
134
|
+
* nobody performed. Now the platform performs it.
|
|
135
|
+
*/
|
|
136
|
+
async function consultProjectMemory(deps, flow, root) {
|
|
137
|
+
const subject = consultSubjectFor(flow);
|
|
138
|
+
if (subject === undefined)
|
|
139
|
+
return undefined;
|
|
140
|
+
try {
|
|
141
|
+
// The APP's root, not the daemon's. `deps.reticleRoot` is wherever the daemon was launched,
|
|
142
|
+
// which for a user-scoped MCP registration is almost never the project being verified — so the
|
|
143
|
+
// link file it reads is the wrong one, or absent, and every project silently reads as
|
|
144
|
+
// "not attached". Same class of bug as the flow store resolving per daemon instead of per
|
|
145
|
+
// session, and it is invisible: the feature simply never appears.
|
|
146
|
+
const cloud = await resolveProjectCloud(deps.fs, root, homedir(), process.env);
|
|
147
|
+
if (null === cloud.config || !cloud.policy.memory)
|
|
148
|
+
return undefined;
|
|
149
|
+
const url = `${cloud.config.url}/v1/memory?subject=${encodeURIComponent(subject)}`;
|
|
150
|
+
const res = await cloudFetch(url, {
|
|
151
|
+
method: 'GET',
|
|
152
|
+
headers: { authorization: `Bearer ${cloud.config.apiKey}` },
|
|
153
|
+
});
|
|
154
|
+
if (200 !== res.status)
|
|
155
|
+
return undefined;
|
|
156
|
+
// `cloudFetch` hands back a real `Response`, so the body is a METHOD. Reading `res.json` as a
|
|
157
|
+
// property yields the function itself, `.entries` on it is undefined, and the whole feature
|
|
158
|
+
// fails silently to "the project knows nothing" — which is indistinguishable from the honest
|
|
159
|
+
// empty case and is why this took a live drive to notice at all.
|
|
160
|
+
const body = (await res.json());
|
|
161
|
+
const entries = body?.entries;
|
|
162
|
+
if (!Array.isArray(entries))
|
|
163
|
+
return undefined;
|
|
164
|
+
const picked = selectConsulted(entries);
|
|
165
|
+
return 0 === picked.length ? undefined : picked;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// See the note above: never the reason a verdict fails to return.
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* When a flow records the page its journey started on (`startPath`) and the tab is currently on a
|
|
174
|
+
* different route, step 1 drifts for a reason that has nothing to do with the app regressing — the
|
|
175
|
+
* anchor simply isn't on this page yet. Detect that so the decision says "navigate there first"
|
|
176
|
+
* instead of a mystifying "a step no longer matches". Returns undefined when the routes agree or the
|
|
177
|
+
* current route is unobservable — never a false alarm. Replay normally never gets here on a
|
|
178
|
+
* wrong page (arriveAtStartPath navigates before step 1); this is the fallback for when that
|
|
179
|
+
* navigation was refused or the SDK never reconnected in the window.
|
|
180
|
+
*/
|
|
181
|
+
export function startPathMismatchHint(flow, session) {
|
|
182
|
+
const startPath = flow.startPath;
|
|
183
|
+
if (startPath === undefined || 0 === startPath.length)
|
|
184
|
+
return undefined;
|
|
185
|
+
const current = currentPathOf(session);
|
|
186
|
+
if (current === undefined || samePath(current, startPath))
|
|
187
|
+
return undefined;
|
|
188
|
+
return `this flow's journey starts on ${startPath} but the tab is on ${current} — navigate there (reticle_navigate { url: "${startPath}" }), then replay`;
|
|
189
|
+
}
|
|
190
|
+
/** How long replay waits for the SDK to reconnect on the start page before falling back to the hint. */
|
|
191
|
+
const START_PATH_ARRIVAL_TIMEOUT_MS = 5_000;
|
|
192
|
+
const START_PATH_POLL_MS = 100;
|
|
193
|
+
const REAL_ARRIVAL_CLOCK = {
|
|
194
|
+
now: () => Date.now(),
|
|
195
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* The session `oldId` denotes right now — itself, or the tombstone successor `resolve` rebinds to
|
|
199
|
+
* after a full-document navigation — but only once it actually sits on `target`. Undefined while
|
|
200
|
+
* the tab is still travelling (or in the gap between teardown and the successor's HELLO, when
|
|
201
|
+
* `resolve` throws). Keyed to the navigated tab's own identity on purpose: matching "any session at
|
|
202
|
+
* the target page" would happily hand replay an unrelated tab that was already sitting there.
|
|
203
|
+
*/
|
|
204
|
+
function arrivedSuccessor(sessions, oldId, target) {
|
|
205
|
+
try {
|
|
206
|
+
const candidate = sessions.resolve(oldId);
|
|
207
|
+
const path = currentPathOf(candidate);
|
|
208
|
+
return path !== undefined && samePath(path, target) ? candidate : undefined;
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Can step 1 start from where the tab already is?
|
|
216
|
+
*
|
|
217
|
+
* A route mismatch is NOT on its own a reason to navigate. The condition worth a page load is that
|
|
218
|
+
* the first anchor is not reachable from here — and a flow whose first anchor lives somewhere
|
|
219
|
+
* persistent (a sidebar, a header, a nav rail) is reachable from every route.
|
|
220
|
+
*
|
|
221
|
+
* Navigating anyway is expensive in the one direction that matters: a full page load tears the
|
|
222
|
+
* session down and brings the app back COLD, which for a flow recorded after signing in is the
|
|
223
|
+
* login screen. Step 1 then reports its anchor missing and blames a file that is completely fine.
|
|
224
|
+
* A best-effort step that can leave the caller WORSE off than skipping it is not best-effort.
|
|
225
|
+
*
|
|
226
|
+
* Unresolvable either way (no anchor we can query, a failed query) reads as "cannot tell", and the
|
|
227
|
+
* navigation goes ahead — the pre-existing behaviour, and the safe direction for a check whose whole
|
|
228
|
+
* job is to avoid making things worse.
|
|
229
|
+
*/
|
|
230
|
+
async function firstStepResolvesHere(session, flow) {
|
|
231
|
+
const first = flow.steps?.[0];
|
|
232
|
+
if (first === undefined)
|
|
233
|
+
return false;
|
|
234
|
+
const args = anchorQueryArgs(first.anchor);
|
|
235
|
+
if (null === args)
|
|
236
|
+
return false;
|
|
237
|
+
try {
|
|
238
|
+
return 0 < queryRefs(await session.command(ReticleCommand.QUERY, args)).length;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Replay's half of the FlowFile contract: navigate to the flow's `startPath` before step 1.
|
|
246
|
+
*
|
|
247
|
+
* A full-page load tears down the session socket, so the navigation must happen here — before any
|
|
248
|
+
* step runs — and the replay continues on the session the SDK reconnects as (found via the same
|
|
249
|
+
* tombstone rebind that lets `resolve(oldId)` answer after any navigation). Best-effort by design:
|
|
250
|
+
* when the flow carries no startPath, the tab is already there, the current route is unobservable,
|
|
251
|
+
* the navigation is refused, or the SDK never reconnects in the window, it returns undefined and
|
|
252
|
+
* replay proceeds on the connected session as before — with startPathMismatchHint turning any
|
|
253
|
+
* resulting drift into an actionable next move rather than a mystifying one.
|
|
254
|
+
*/
|
|
255
|
+
export async function arriveAtStartPath(sessions, session, flow, timeoutMs = START_PATH_ARRIVAL_TIMEOUT_MS, clock = REAL_ARRIVAL_CLOCK) {
|
|
256
|
+
const target = flow.startPath;
|
|
257
|
+
if (target === undefined || 0 === target.length)
|
|
258
|
+
return undefined;
|
|
259
|
+
const current = currentPathOf(session);
|
|
260
|
+
if (current === undefined || samePath(current, target))
|
|
261
|
+
return undefined;
|
|
262
|
+
// The route differs — but that only matters if it stops the flow starting. See above.
|
|
263
|
+
if (await firstStepResolvesHere(session, flow))
|
|
264
|
+
return undefined;
|
|
265
|
+
let destination;
|
|
266
|
+
try {
|
|
267
|
+
// startPath is a pathname (a host belongs to the machine, not the journey) — resolve it
|
|
268
|
+
// against the tab's own URL to get something the browser can be sent to.
|
|
269
|
+
destination = new URL(target, session.url).toString();
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return undefined; // no usable base URL — nowhere to navigate from
|
|
273
|
+
}
|
|
274
|
+
return navigateAndAwait(sessions, session, destination, target, timeoutMs, clock);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Send a tab somewhere and wait for the session that comes back.
|
|
278
|
+
*
|
|
279
|
+
* A navigation is a full page load: the session that issued it DIES and a successor connects with a
|
|
280
|
+
* new id. Every caller therefore has to wait for that successor rather than reuse the handle it
|
|
281
|
+
* already holds, and getting this wrong does not error — it leaves the caller talking to a session
|
|
282
|
+
* that will never answer again.
|
|
283
|
+
*
|
|
284
|
+
* Extracted so there is ONE of these rather than one per caller. `arriveAtStartPath` decides WHETHER
|
|
285
|
+
* to move and this decides how, which is also why the deliberate short-circuits live up there and
|
|
286
|
+
* not in here: a caller that has already decided it must move should not have to argue with them.
|
|
287
|
+
*/
|
|
288
|
+
export async function navigateAndAwait(sessions, session, destination, expectedPath, timeoutMs = START_PATH_ARRIVAL_TIMEOUT_MS, clock = REAL_ARRIVAL_CLOCK) {
|
|
289
|
+
// A leased tab is addressed by URL params, so navigating without them would strand the lease.
|
|
290
|
+
const url = carryReticleIdentity(session.url, destination);
|
|
291
|
+
try {
|
|
292
|
+
const outcome = await session.command(ReticleCommand.NAVIGATE, { url });
|
|
293
|
+
if (!outcome.ok || true !== asRecord(outcome.result)['ok'])
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
// A navigation that unloads the page rejects the very command that asked for it — the transport
|
|
298
|
+
// dies with the document. Reading that as "the navigate failed" skipped the arrival poll below
|
|
299
|
+
// and left replay driving a handle that could never answer again, which is how a flow with a
|
|
300
|
+
// startPath died at step 1 on an app that had loaded perfectly. Anything else is a real refusal.
|
|
301
|
+
if (!isDocumentGoneError(error))
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
const deadline = clock.now() + timeoutMs;
|
|
305
|
+
for (;;) {
|
|
306
|
+
const arrived = arrivedSuccessor(sessions, session.id, expectedPath);
|
|
307
|
+
if (arrived !== undefined)
|
|
308
|
+
return arrived;
|
|
309
|
+
if (clock.now() >= deadline)
|
|
310
|
+
return undefined;
|
|
311
|
+
await clock.sleep(START_PATH_POLL_MS);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Replay one named flow end to end: load → re-resolve+run each step → assert the success oracle →
|
|
316
|
+
* status + decision. Shared by reticle_flow_replay (single flow) and reticle_flow_verify (whole suite) so
|
|
317
|
+
* both produce identical FlowReplayResults. Every exit path records a run to project.json.
|
|
318
|
+
*/
|
|
319
|
+
/**
|
|
320
|
+
* Every flow reachable from this one by `invoke`, loaded once for the whole replay.
|
|
321
|
+
*
|
|
322
|
+
* Breadth-first with a `seen` set so a cycle terminates rather than trusting that typecheck ran.
|
|
323
|
+
* A sub-flow that will not load is simply absent, and the grader then declines to credit it — the
|
|
324
|
+
* conservative direction, because a composite graded on a flow nobody could read is graded on a
|
|
325
|
+
* promise.
|
|
326
|
+
*/
|
|
327
|
+
async function loadInvokedFlows(deps, flow, projectId) {
|
|
328
|
+
const out = new Map();
|
|
329
|
+
const queue = [flow];
|
|
330
|
+
const seen = new Set([flow.name]);
|
|
331
|
+
while (queue.length > 0) {
|
|
332
|
+
const current = queue.shift();
|
|
333
|
+
if (current === undefined)
|
|
334
|
+
continue;
|
|
335
|
+
for (const step of flattenSteps(current.steps)) {
|
|
336
|
+
const name = step.invoke;
|
|
337
|
+
if (name === undefined || seen.has(name))
|
|
338
|
+
continue;
|
|
339
|
+
seen.add(name);
|
|
340
|
+
const sub = await flowsForSession(deps, projectId).flows.load(name, projectId);
|
|
341
|
+
if (!sub.ok)
|
|
342
|
+
continue;
|
|
343
|
+
out.set(name, sub.value);
|
|
344
|
+
queue.push(sub.value);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return out;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* The first precondition this flow declares that does not hold, described for a reader.
|
|
351
|
+
*
|
|
352
|
+
* Undefined means every declared claim held, OR that the flow declared none — and those two are the
|
|
353
|
+
* same answer on purpose. Silence is permissive: every flow recorded before `requires` existed
|
|
354
|
+
* declares nothing, and treating "did not say" as "not satisfied" would make every one of them
|
|
355
|
+
* unverifiable on the day this shipped.
|
|
356
|
+
*
|
|
357
|
+
* Only the FIRST is reported. A reader fixes preconditions one at a time, and the second is usually
|
|
358
|
+
* a consequence of the first being absent.
|
|
359
|
+
*/
|
|
360
|
+
async function firstUnmetPrecondition(session, flow, since) {
|
|
361
|
+
for (const claim of flow.requires ?? []) {
|
|
362
|
+
// Zero budget: a precondition is a claim about the state you are starting FROM. Waiting for one
|
|
363
|
+
// turns "was it true" into "did it become true", which is a different and much weaker question.
|
|
364
|
+
const drift = await assertStepExpect(session, claim, new Set(), waitForPredicate, 0, since);
|
|
365
|
+
if (drift !== undefined) {
|
|
366
|
+
return `a precondition of this flow does not hold (${JSON.stringify(claim)}), so nothing ran and nothing was proved. Run the flow that establishes it first, or drive that state yourself.`;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return undefined;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* The honest answer when the document replay was driving went away mid-run.
|
|
373
|
+
*
|
|
374
|
+
* Not a pass: nothing graded the journey, and the steps in hand are only the ones the departed
|
|
375
|
+
* document answered. Not a failure either — the app was never observed doing anything wrong, and
|
|
376
|
+
* reporting one would be the false red that sends a reader into product code that is fine. So it
|
|
377
|
+
* lands in the bucket this engine already has for "nothing was proved", the same one an unmet
|
|
378
|
+
* precondition uses, with the steps that DID answer attached and no row invented for the one that
|
|
379
|
+
* did not.
|
|
380
|
+
*
|
|
381
|
+
* Why replay reports rather than follows: the successor cannot be identified at the moment the
|
|
382
|
+
* socket closes. `SessionManager.remove` runs from the close handler, writes the tombstone a
|
|
383
|
+
* successor is later matched against, and has nothing to match yet — so the rejection is a plain
|
|
384
|
+
* transport failure by design, and a step in the middle of a journey has no budget to sit and poll
|
|
385
|
+
* with. `navigateAndAwait` CAN wait, because it knows it asked for the navigation, and it does.
|
|
386
|
+
*/
|
|
387
|
+
export function lostDocumentResult(name, lost) {
|
|
388
|
+
return {
|
|
389
|
+
name,
|
|
390
|
+
status: ReplayStatus.OK,
|
|
391
|
+
steps: lost.steps,
|
|
392
|
+
unverifiable: {
|
|
393
|
+
reason: `the page loaded a new document while step ${String(lost.atStep)} was running, so the run ` +
|
|
394
|
+
`could not be graded — the steps before it are reported and nothing after it was observed. ` +
|
|
395
|
+
`Nothing here says the app failed. If that navigation is part of the journey, record the ` +
|
|
396
|
+
`step's consequence with \`expect\` and replay again; if it was not, the flow started ` +
|
|
397
|
+
`somewhere it no longer belongs.`,
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
export async function replayNamedFlow(deps, args) {
|
|
402
|
+
const startedAt = deps.now();
|
|
403
|
+
const name = asString(args['flowName']) ?? '';
|
|
404
|
+
// Resolve within the connecting app's scope so a shared daemon replays THIS project's flow, not a
|
|
405
|
+
// same-named flow from another app. Safe-resolve: a missing session degrades to the global store,
|
|
406
|
+
// and the load-then-session order (unchanged) still surfaces a not-found before a no-session error.
|
|
407
|
+
let projectId;
|
|
408
|
+
try {
|
|
409
|
+
projectId = deps.sessions.resolve(asString(args['sessionId'])).projectId;
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
projectId = undefined;
|
|
413
|
+
}
|
|
414
|
+
// The app's store, not the daemon's: this load answering `flow_not_found` for a flow plainly on
|
|
415
|
+
// disk is what made replay unusable from a daemon started outside the project.
|
|
416
|
+
const loaded = await flowsForSession(deps, projectId).flows.load(name, projectId);
|
|
417
|
+
if (!loaded.ok) {
|
|
418
|
+
await recordReplayRun(deps, name, ReplayStatus.ERROR, 0, deps.now() - startedAt, projectId, sessionRoot(deps, asString(args['sessionId'])));
|
|
419
|
+
return {
|
|
420
|
+
name,
|
|
421
|
+
status: ReplayStatus.ERROR,
|
|
422
|
+
steps: [],
|
|
423
|
+
error: { code: loaded.code, message: flowErrorMessage(loaded.code, loaded.detail) },
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
// What this flow is FOR, from the shared ledger — so a failure can report the business outcome
|
|
427
|
+
// that stopped being true before the step that stopped being green. Undefined when nothing
|
|
428
|
+
// declared one, which the decision then says plainly rather than inventing a goal from step names.
|
|
429
|
+
/*
|
|
430
|
+
* The APP's `.reticle`, resolved once. Everything below that reaches the project's own files —
|
|
431
|
+
* the intent ledger, the cloud link, the memory consultation — takes THIS, not `deps.reticleRoot`,
|
|
432
|
+
* which is wherever the daemon happened to be launched.
|
|
433
|
+
*/
|
|
434
|
+
const replayRoot = sessionRoot(deps, asString(args['sessionId']));
|
|
435
|
+
const intents = new IntentStore(deps.fs, replayRoot, { now: deps.now });
|
|
436
|
+
const intentSaid = await flowIntentStatement(intents, loaded.value);
|
|
437
|
+
const connected = deps.sessions.resolve(asString(args['sessionId']));
|
|
438
|
+
// The FlowFile contract: replay navigates to the flow's startPath before step 1, and the steps run
|
|
439
|
+
// on the session the SDK reconnects as. When arrival can't be confirmed, replay proceeds on the
|
|
440
|
+
// connected session — and the hint below turns the wrong-page drift into an actionable next move.
|
|
441
|
+
const session = (await arriveAtStartPath(deps.sessions, connected, loaded.value)) ?? connected;
|
|
442
|
+
const startPathHint = startPathMismatchHint(loaded.value, session);
|
|
443
|
+
// Floor the success oracle at the start of THIS replay so a stale signal from a prior run
|
|
444
|
+
// in the same session can't fake a pass.
|
|
445
|
+
const replayFloor = session.elapsed();
|
|
446
|
+
// A recorded upload names a path on disk; the browser can only take bytes. Resolved once, before
|
|
447
|
+
// step 1, through the same helper the live `reticle_act` uses. See resolveFlowUploads.
|
|
448
|
+
const replayable = await resolveFlowUploads(deps, loaded.value);
|
|
449
|
+
// Loaded once and used for BOTH the replay and the grading below. A composite asserts through
|
|
450
|
+
// what it runs, and a grader that cannot see the sub-flows reports `unverifiable` on a journey
|
|
451
|
+
// that checks itself thoroughly — right about the file, wrong about the journey.
|
|
452
|
+
const invokedFlows = await loadInvokedFlows(deps, replayable, projectId);
|
|
453
|
+
/*
|
|
454
|
+
* The flow's own preconditions, before a single step runs.
|
|
455
|
+
*
|
|
456
|
+
* A flow states what must already be true for it to mean anything. Replaying one whose `requires`
|
|
457
|
+
* does not hold is not a test of the app: it drives a journey from a state it was never recorded
|
|
458
|
+
* in, and whatever happens next is noise. Until this existed that noise arrived as a FAILURE, and
|
|
459
|
+
* a red that is really a missing precondition is the most expensive kind — it sends a reader into
|
|
460
|
+
* product code that is fine.
|
|
461
|
+
*
|
|
462
|
+
* So an unmet precondition is `unverifiable`, never a failure: nothing ran, so nothing was proved.
|
|
463
|
+
* That is the same honesty rule an uncovered change already follows, and `unverifiable` is already
|
|
464
|
+
* the bucket the suite counts apart from both passes and failures.
|
|
465
|
+
*
|
|
466
|
+
* Judged with the SAME function that judges a step's `expect`, because they are the same shape and
|
|
467
|
+
* two judges drift. Evaluated against the replay floor with no waiting: a precondition is a claim
|
|
468
|
+
* about the state you are starting from, and a claim you have to wait for was not true when you
|
|
469
|
+
* asked.
|
|
470
|
+
*/
|
|
471
|
+
/*
|
|
472
|
+
* A credential nobody supplied is not a regression, and must not be reported as one.
|
|
473
|
+
*
|
|
474
|
+
* This sits beside the precondition gate because it is the same mistake in a different coat: the
|
|
475
|
+
* flow cannot run from the state it was recorded in, so whatever happens next says nothing about
|
|
476
|
+
* the app. Replay used to type the literal `<redacted: supply at replay>` into the password box
|
|
477
|
+
* and report the missing dashboard further down as `drift`, pointing at a component nobody had
|
|
478
|
+
* touched. MEASURED on the bench app: supplying one variable moved the suite from 4/30 to 13/34.
|
|
479
|
+
*
|
|
480
|
+
* Checked before the preconditions, because a flow that signs in cannot satisfy anything it
|
|
481
|
+
* requires until it can sign in, and the first reason is the one worth reporting.
|
|
482
|
+
*/
|
|
483
|
+
const missing = unsuppliedSecrets(replayable, process.env);
|
|
484
|
+
if (missing.length > 0) {
|
|
485
|
+
const names = missing.map((each) => each.envKey).join(', ');
|
|
486
|
+
return {
|
|
487
|
+
name: replayable.name,
|
|
488
|
+
status: ReplayStatus.OK,
|
|
489
|
+
steps: [],
|
|
490
|
+
unverifiable: {
|
|
491
|
+
reason: `this flow fills a redacted field and nothing supplied it, so nothing ran and nothing ` +
|
|
492
|
+
`was proved. Set ${names} in the environment the daemon runs in, then replay. Until then ` +
|
|
493
|
+
`the value typed would be the placeholder itself, and any failure after it would be ` +
|
|
494
|
+
`about this and not about the application.`,
|
|
495
|
+
},
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
const unmet = await firstUnmetPrecondition(session, replayable, replayFloor);
|
|
499
|
+
if (unmet !== undefined) {
|
|
500
|
+
return {
|
|
501
|
+
name: replayable.name,
|
|
502
|
+
status: ReplayStatus.OK,
|
|
503
|
+
steps: [],
|
|
504
|
+
unverifiable: { reason: unmet },
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
let steps;
|
|
508
|
+
try {
|
|
509
|
+
steps = await replayFlow(session, replayable, waitForPredicate, FLOW_SIGNAL_TIMEOUT_MS, true === args['confirmDangerous'], undefined, {
|
|
510
|
+
// How an `invoke` step finds the flow it runs. Scoped to the same project as the flow being
|
|
511
|
+
// replayed, so a composite cannot reach into another app's store for a same-named sub-journey.
|
|
512
|
+
resolveFlow: async (invoked) => {
|
|
513
|
+
const sub = await flowsForSession(deps, projectId).flows.load(invoked, projectId);
|
|
514
|
+
return sub.ok ? await resolveFlowUploads(deps, sub.value) : undefined;
|
|
515
|
+
},
|
|
516
|
+
// Bug-sweep mode: keep going past a step whose action ran and whose consequence merely did
|
|
517
|
+
// not hold, so one flow reports one verdict per step instead of stopping at the first defect.
|
|
518
|
+
sweep: true === args['sweep'],
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
if (!(error instanceof DocumentLostDuringReplay))
|
|
523
|
+
throw error;
|
|
524
|
+
return lostDocumentResult(name, error);
|
|
525
|
+
}
|
|
526
|
+
// Computed HERE, before the synthetic success row is appended below: once that row is pushed,
|
|
527
|
+
// `steps.length` no longer counts only the flow's own steps and the arithmetic is wrong.
|
|
528
|
+
const halted = haltedFrom(steps, loaded.value.steps.length);
|
|
529
|
+
/*
|
|
530
|
+
* The whole-span pass, run once the journey is over. Best-effort by construction: a session stub
|
|
531
|
+
* without `eventsSince` must not be able to abort a healthy replay, and a missing cross-step
|
|
532
|
+
* finding is a smaller loss than a run that dies computing one.
|
|
533
|
+
*/
|
|
534
|
+
const crossStep = (() => {
|
|
535
|
+
try {
|
|
536
|
+
const span = { since: replayFloor, until: session.elapsed() };
|
|
537
|
+
const events = session.eventsSince(replayFloor).filter((e) => e.t >= replayFloor);
|
|
538
|
+
return crossStepOnly(stepEffect(events, span).contradictions ?? [], steps);
|
|
539
|
+
}
|
|
540
|
+
catch {
|
|
541
|
+
return [];
|
|
542
|
+
}
|
|
543
|
+
})();
|
|
544
|
+
// "green means intent satisfied": when every step ran clean, assert the flow's success
|
|
545
|
+
// end-condition as a real consequence. A signal/net success that never fires FAILS the replay
|
|
546
|
+
// even though all locators resolved — the regression a healed-but-wrong locator ships green.
|
|
547
|
+
const stepsClean = steps.length > 0 && steps.every((s) => s.ok && s.drift === undefined);
|
|
548
|
+
if (stepsClean && loaded.value.success !== undefined) {
|
|
549
|
+
const verdict = await assertSuccess(session, loaded.value.success, dynamicTestids(loaded.value), waitForPredicate,
|
|
550
|
+
// The flow's own declaration, not the built-in floor: an app slow enough to need a longer
|
|
551
|
+
// step wait is slow enough that its OUTCOME lands late too, and greening every step only to
|
|
552
|
+
// fail the success oracle at 4s is the same false red one layer down.
|
|
553
|
+
loaded.value.signalTimeoutMs ?? FLOW_SIGNAL_TIMEOUT_MS, replayFloor);
|
|
554
|
+
const row = {
|
|
555
|
+
step: steps.length,
|
|
556
|
+
tool: SUCCESS_STEP_TOOL,
|
|
557
|
+
anchor: successLabel(loaded.value.success),
|
|
558
|
+
ok: verdict.pass,
|
|
559
|
+
...(verdict.pass ? {} : { error: verdict.failureReason ?? 'flow.success not satisfied' }),
|
|
560
|
+
};
|
|
561
|
+
steps.push(row);
|
|
562
|
+
}
|
|
563
|
+
const driftSteps = steps.filter((s) => s.drift !== undefined).length;
|
|
564
|
+
const allOk = steps.every((s) => s.ok);
|
|
565
|
+
const status = driftSteps > 0 ? ReplayStatus.DRIFT : allOk ? ReplayStatus.OK : ReplayStatus.ERROR;
|
|
566
|
+
await recordReplayRun(deps, name, status, driftSteps, deps.now() - startedAt, projectId, replayRoot);
|
|
567
|
+
// Anti-reward-hacking baseline: record what this flow asserted ONLY when it passed clean. A
|
|
568
|
+
// failing run must never become the baseline a later weakening is measured against.
|
|
569
|
+
if (status === ReplayStatus.OK) {
|
|
570
|
+
await new AssertionTiersStore(deps.fs, replayRoot).recordPassing(name, loaded.value.steps.map((s, i) => ({
|
|
571
|
+
step: i,
|
|
572
|
+
...(s.expect === undefined ? {} : { expect: s.expect }),
|
|
573
|
+
})),
|
|
574
|
+
// Record what this flow COVERS so a later deletion can be scoped to the files that changed.
|
|
575
|
+
toFlowSources([{ name, steps: loaded.value.steps }])[0]?.sources ?? []);
|
|
576
|
+
// The ledger learns what this run proved. Only a flow that COULD have gone red discharges: an
|
|
577
|
+
// assertion-free flow is never bound, and `dischargeIntent` refuses an unbound intent, so the
|
|
578
|
+
// guard here is the cheap half of a rule the ledger already enforces. `grade` is what makes a
|
|
579
|
+
// later weakening visible — an intent re-proved by a weaker flow says so in the git diff.
|
|
580
|
+
if (unverifiableReason(loaded.value, invokedFlows) === undefined) {
|
|
581
|
+
const provedAt = deps.now();
|
|
582
|
+
await dischargeFlowIntent(intents, loaded.value, {
|
|
583
|
+
verdictId: flowReplayVerdictId(name, provedAt),
|
|
584
|
+
grade: classifyFlowAssertions(loaded.value).grade,
|
|
585
|
+
at: provedAt,
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
// Push-default: the deviation report over this drive's segments, learned across runs. Best-effort.
|
|
590
|
+
const deviation = await computeReplayDeviation(deps, session, replayFloor, replayRoot);
|
|
591
|
+
/*
|
|
592
|
+
* What the team already knows about this flow, fetched on the agent's behalf.
|
|
593
|
+
*
|
|
594
|
+
* Attached to the FAILING path as well as the clean one, deliberately: a drift is exactly the
|
|
595
|
+
* moment somebody needs to know what this feature is supposed to do and who established it. A
|
|
596
|
+
* knowledge base you only see when everything is already fine is decoration.
|
|
597
|
+
*/
|
|
598
|
+
// No projectId argument: the API key is already bound to one project server-side, so passing a
|
|
599
|
+
// second opinion about which project this is would only create a way for the two to disagree.
|
|
600
|
+
const knows = await consultProjectMemory(deps, loaded.value, replayRoot);
|
|
601
|
+
const failed = steps.find((step) => !step.ok && step.drift === undefined);
|
|
602
|
+
if (failed !== undefined) {
|
|
603
|
+
const errored = {
|
|
604
|
+
name,
|
|
605
|
+
status,
|
|
606
|
+
steps,
|
|
607
|
+
error: { code: ReplayStatus.ERROR, message: failed.error ?? 'flow action failed' },
|
|
608
|
+
};
|
|
609
|
+
errored.decision = buildDecision(errored, loaded.value, intentSaid, invokedFlows);
|
|
610
|
+
applyStartPathHint(errored, startPathHint);
|
|
611
|
+
if (deviation !== undefined)
|
|
612
|
+
errored.deviation = deviation;
|
|
613
|
+
if (knows !== undefined)
|
|
614
|
+
errored.knows = knows;
|
|
615
|
+
if (crossStep.length > 0)
|
|
616
|
+
errored.crossStep = crossStep;
|
|
617
|
+
return errored;
|
|
618
|
+
}
|
|
619
|
+
const result = { name, status, steps };
|
|
620
|
+
if (halted !== undefined)
|
|
621
|
+
result.halted = halted;
|
|
622
|
+
if (knows !== undefined)
|
|
623
|
+
result.knows = knows;
|
|
624
|
+
// A green that cannot go red is not a pass. `reticle_flow_verify` already refuses to count these,
|
|
625
|
+
// via this same function -- a single-flow caller saw a bare `ok` and had no way to learn the flow
|
|
626
|
+
// asserts nothing. Derived from the same helper on purpose: two copies of this judgement would
|
|
627
|
+
// drift, and the sibling tools would then disagree about the same flow.
|
|
628
|
+
const cannotFail = status === ReplayStatus.OK ? unverifiableReason(loaded.value, invokedFlows) : undefined;
|
|
629
|
+
if (cannotFail !== undefined)
|
|
630
|
+
result.unverifiable = { reason: cannotFail };
|
|
631
|
+
if (status !== ReplayStatus.OK)
|
|
632
|
+
result.decision = buildDecision(result, loaded.value, intentSaid, invokedFlows);
|
|
633
|
+
applyStartPathHint(result, startPathHint);
|
|
634
|
+
if (deviation !== undefined)
|
|
635
|
+
result.deviation = deviation;
|
|
636
|
+
if (crossStep.length > 0)
|
|
637
|
+
result.crossStep = crossStep;
|
|
638
|
+
/*
|
|
639
|
+
* What this run taught the flow.
|
|
640
|
+
*
|
|
641
|
+
* Every contradiction this replay attributed to a step, plus the cross-step ones, compared with
|
|
642
|
+
* what the flow already knew. A defect seen for the first time is remembered as OPEN and asserts
|
|
643
|
+
* nothing; one the flow had open and this run did NOT see becomes GUARDED, and from then on its
|
|
644
|
+
* return is a regression this flow reports by itself, with no new assertion written by hand.
|
|
645
|
+
*
|
|
646
|
+
* `observed` is deliberately tied to whether any step ran. A replay that drove nothing did not
|
|
647
|
+
* find the app clean — it found nothing — and promoting on that would manufacture guards out of
|
|
648
|
+
* an absence of evidence, which is the false green one level up.
|
|
649
|
+
*/
|
|
650
|
+
const seenNow = [
|
|
651
|
+
...steps.flatMap((step, i) => (step.contradictions ?? []).map((c) => ({ kind: c.kind, step: i }))),
|
|
652
|
+
...crossStep.map((c) => ({ kind: c.kind, step: CROSS_STEP_INDEX })),
|
|
653
|
+
];
|
|
654
|
+
/*
|
|
655
|
+
* `observed` must mean "the channels reported", not "some steps ran".
|
|
656
|
+
*
|
|
657
|
+
* It was `steps.length > 0`, which is true of essentially every replay — including one where an
|
|
658
|
+
* observer never attached and `seenNow` is empty because NOTHING WAS WATCHING. Two of those in a
|
|
659
|
+
* row promoted an open defect to a guard, which is a guard minted from absence of evidence: the
|
|
660
|
+
* exact failure `learnFromRun` refuses when it is told the truth, and cannot refuse when it is
|
|
661
|
+
* told `steps.length > 0`.
|
|
662
|
+
*
|
|
663
|
+
* The digest is the honest signal. Its own contract says `total` is written unconditionally
|
|
664
|
+
* "because a summary with no keys could not be told apart from one that was never computed" — so
|
|
665
|
+
* a step carrying a digest is a step whose window was actually read, and a replay where no step
|
|
666
|
+
* carries one observed nothing whatever its step count says.
|
|
667
|
+
*/
|
|
668
|
+
const learning = learnFromRun({
|
|
669
|
+
guards: loaded.value.learned ?? [],
|
|
670
|
+
seen: seenNow,
|
|
671
|
+
observed: steps.some((step) => step.digest !== undefined),
|
|
672
|
+
});
|
|
673
|
+
result.learned = learning.guards;
|
|
674
|
+
if (learning.promoted.length > 0)
|
|
675
|
+
result.promoted = learning.promoted;
|
|
676
|
+
if (learning.regressed.length > 0)
|
|
677
|
+
result.regressed = learning.regressed;
|
|
678
|
+
/*
|
|
679
|
+
* Write it back, or none of the above compounds.
|
|
680
|
+
*
|
|
681
|
+
* The point of learning is that the NEXT replay starts from it. A result field the flow file
|
|
682
|
+
* never receives would make every run learn the same lesson from scratch, which is the state
|
|
683
|
+
* this change exists to leave behind.
|
|
684
|
+
*
|
|
685
|
+
* Best-effort on purpose: a store that refuses the write must not turn a completed replay into a
|
|
686
|
+
* failed one. The verdict is about the app; this is bookkeeping about the flow, and losing a
|
|
687
|
+
* lesson is smaller than losing the run that produced it. Skipped entirely when nothing moved,
|
|
688
|
+
* so a clean replay of a flow with nothing to learn does not rewrite a file for no reason.
|
|
689
|
+
*/
|
|
690
|
+
return result;
|
|
691
|
+
}
|
|
692
|
+
/** A contradiction's identity for de-duplication: the rule that fired, and the evidence it fired on. */
|
|
693
|
+
function contradictionId(found) {
|
|
694
|
+
return `${found.kind}|${found.detail}`;
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* The contradictions the whole-span pass found that no individual step could.
|
|
698
|
+
*
|
|
699
|
+
* A step's window closes when the step ends, so a request fired at step 2 and still unanswered at
|
|
700
|
+
* step 5 is invisible to every per-step window: step 2's closed before the answer came and step 5
|
|
701
|
+
* never saw it start. Re-running the detectors over the whole replay span finds those — and re-finds
|
|
702
|
+
* everything the steps already reported, which is what the subtraction is for. Reporting a finding
|
|
703
|
+
* twice teaches a reader that the count is noise.
|
|
704
|
+
*
|
|
705
|
+
* Exported for its own test: the subtraction is the whole rule, and it is pure.
|
|
706
|
+
*/
|
|
707
|
+
/** Cross-step findings belong to no single step; -1 is the address the suite verdict already uses. */
|
|
708
|
+
const CROSS_STEP_INDEX = -1;
|
|
709
|
+
export function crossStepOnly(whole, steps) {
|
|
710
|
+
const seen = new Set(steps.flatMap((step) => (step.contradictions ?? []).map(contradictionId)));
|
|
711
|
+
return whole.filter((found) => !seen.has(contradictionId(found)));
|
|
712
|
+
}
|
|
713
|
+
/**
|
|
714
|
+
* The deviation report over a replay's route segments — compared against the learned envelope, which is
|
|
715
|
+
* then updated. Best-effort: any failure (disk, empty window) yields undefined, never breaking the replay.
|
|
716
|
+
*/
|
|
717
|
+
async function computeReplayDeviation(deps, session, floor,
|
|
718
|
+
/** The APP's root — the same one the replay resolved eleven lines above the old call. */
|
|
719
|
+
root) {
|
|
720
|
+
try {
|
|
721
|
+
const segments = computeSegments(session.eventsSince(floor));
|
|
722
|
+
if (0 === segments.length)
|
|
723
|
+
return undefined;
|
|
724
|
+
return await reportAndAccumulate(new EnvelopeStore(deps.fs, root), segments);
|
|
725
|
+
}
|
|
726
|
+
catch {
|
|
727
|
+
return undefined;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
/** Fold a start-page-mismatch hint onto a non-passing replay's decision (the actionable next move). */
|
|
731
|
+
function applyStartPathHint(result, hint) {
|
|
732
|
+
if (hint === undefined || result.decision === undefined)
|
|
733
|
+
return;
|
|
734
|
+
result.decision.suggestedFix = hint;
|
|
735
|
+
result.decision.nextAction = hint;
|
|
736
|
+
}
|
|
737
|
+
/**
|
|
738
|
+
* The connecting session's project, or undefined when no browser is attached. Flow tools use it to
|
|
739
|
+
* scope storage to the current app on a shared daemon; resolving must NOT throw here (list/load are
|
|
740
|
+
* documented to work headless), so a missing/unknown session degrades to the global/legacy store.
|
|
741
|
+
*
|
|
742
|
+
* Re-exported, not re-implemented. This file carried a BYTE-IDENTICAL second copy, and the two
|
|
743
|
+
* drifted the moment `ProjectId` was threaded: `session-root`'s copy returned the brand while this
|
|
744
|
+
* one returned `string`, so every flow tool importing from here was handed a widened value and lost
|
|
745
|
+
* the brand one line after it was minted. Exactly the weak-annotation failure the brand's own doc
|
|
746
|
+
* records against `RunStore.list()`.
|
|
747
|
+
*/
|
|
748
|
+
export { sessionProjectId } from '../../memory/project/session-root.js';
|