@reticlehq/server 3.5.0 → 3.7.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/README.md +1 -1
- package/SKILL.md +123 -116
- package/dist/chromium-launch-options.d.ts +3 -1
- package/dist/chromium-launch-options.js +2 -1
- package/dist/command/cli/adhoc-suite.d.ts +14 -0
- package/dist/command/cli/adhoc-suite.js +42 -7
- package/dist/command/cli/adhoc-verdict.d.ts +19 -2
- package/dist/command/cli/adhoc-verdict.js +76 -9
- package/dist/command/cli/answers/gate-exit.d.ts +23 -0
- package/dist/command/cli/answers/gate-exit.js +45 -0
- package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
- package/dist/command/cli/answers/gate-hook-message.js +3 -1
- package/dist/command/cli/answers/open-note.d.ts +2 -0
- package/dist/command/cli/answers/open-note.js +22 -0
- package/dist/command/cli/auth/device-flow.d.ts +13 -2
- package/dist/command/cli/auth/device-flow.js +17 -0
- package/dist/command/cli/cli-doctor.js +14 -0
- package/dist/command/cli/cli-flow-commands.d.ts +0 -11
- package/dist/command/cli/cli-flow-commands.js +31 -112
- package/dist/command/cli/cli-kill.js +3 -2
- package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
- package/dist/command/cli/cli-parse-grammar.js +75 -0
- package/dist/command/cli/cli-parse-verify.d.ts +2 -0
- package/dist/command/cli/cli-parse-verify.js +18 -0
- package/dist/command/cli/cli-parse.d.ts +19 -28
- package/dist/command/cli/cli-parse.js +82 -182
- package/dist/command/cli/cli-update-commands.d.ts +1 -1
- package/dist/command/cli/cli-update-commands.js +61 -9
- package/dist/command/cli/cli-usage.d.ts +33 -0
- package/dist/command/cli/cli-usage.js +287 -0
- package/dist/command/cli/cli-verify.d.ts +35 -5
- package/dist/command/cli/cli-verify.js +114 -35
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +192 -341
- package/dist/command/cli/cloud-kit.d.ts +12 -0
- package/dist/command/cli/cloud-kit.js +41 -2
- package/dist/command/cli/cloud-link.d.ts +57 -0
- package/dist/command/cli/cloud-link.js +308 -0
- package/dist/command/cli/cloud-login.d.ts +22 -0
- package/dist/command/cli/cloud-login.js +96 -8
- package/dist/command/cli/context-command.d.ts +1 -0
- package/dist/command/cli/context-command.js +33 -0
- package/dist/command/cli/daemon-start-options.d.ts +3 -0
- package/dist/command/cli/daemon-start-options.js +24 -3
- package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
- package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
- package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
- package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
- package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
- package/dist/command/cli/doctor/doctor-project-line.js +5 -4
- package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
- package/dist/command/cli/doctor/doctor-rows.js +6 -0
- package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
- package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
- package/dist/command/cli/drive/drive-attach.d.ts +27 -2
- package/dist/command/cli/drive/drive-attach.js +71 -4
- package/dist/command/cli/drive/drive-command.d.ts +2 -1
- package/dist/command/cli/drive/drive-command.js +13 -7
- package/dist/command/cli/known-regression.d.ts +13 -0
- package/dist/command/cli/known-regression.js +34 -0
- package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
- package/dist/command/cli/launch/sdk-version-match.js +25 -0
- package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
- package/dist/command/cli/mcp-command.d.ts +6 -0
- package/dist/command/cli/mcp-command.js +13 -5
- package/dist/command/cli/ports/port-holder.d.ts +10 -0
- package/dist/command/cli/ports/port-holder.js +25 -1
- package/dist/command/cli/project-name.d.ts +29 -1
- package/dist/command/cli/project-name.js +107 -2
- package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
- package/dist/command/cli/setup-mcp-cli.js +35 -12
- package/dist/command/cli/status/status-lines.d.ts +1 -0
- package/dist/command/cli/status/status-lines.js +47 -2
- package/dist/command/cli/status/workspace-links.d.ts +10 -0
- package/dist/command/cli/status/workspace-links.js +29 -0
- package/dist/command/cli/try-command.d.ts +96 -0
- package/dist/command/cli/try-command.js +362 -0
- package/dist/command/cli/tutorial.d.ts +0 -100
- package/dist/command/cli/tutorial.js +0 -181
- package/dist/command/cli/verify-results.d.ts +19 -0
- package/dist/command/cli/verify-results.js +29 -0
- package/dist/command/cli-onboarding.d.ts +0 -11
- package/dist/command/cli-onboarding.js +0 -15
- package/dist/command/cli.d.ts +20 -0
- package/dist/command/cli.js +130 -104
- package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
- package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +23 -1
- package/dist/command/daemon/daemon-resolve.js +79 -9
- package/dist/command/setup/agent-writer.d.ts +1 -1
- package/dist/command/setup/agent-writer.js +3 -2
- package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
- package/dist/command/setup/bringup/bridge-port.js +13 -3
- package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
- package/dist/command/setup/bringup/connect-lease.js +1 -0
- package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
- package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
- package/dist/command/setup/bringup/dev-server-wait.js +19 -0
- package/dist/command/setup/bringup/ensure-daemon.js +9 -2
- package/dist/command/setup/init/agent-restart.d.ts +23 -0
- package/dist/command/setup/init/agent-restart.js +28 -0
- package/dist/command/setup/init/init-port.d.ts +14 -1
- package/dist/command/setup/init/init-port.js +32 -2
- package/dist/command/setup/init/init-runtime.d.ts +22 -2
- package/dist/command/setup/init/init-runtime.js +114 -38
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +38 -9
- package/dist/command/setup/probe/existing-app.d.ts +12 -0
- package/dist/command/setup/probe/existing-app.js +14 -0
- package/dist/command/setup/remaining-steps.js +2 -1
- package/dist/command/setup/run-setup.d.ts +34 -9
- package/dist/command/setup/run-setup.js +65 -51
- package/dist/command/setup/setup-command.d.ts +25 -1
- package/dist/command/setup/setup-command.js +59 -4
- package/dist/command/setup/setup-mcp.js +25 -2
- package/dist/command/setup/tauri-signing.d.ts +19 -0
- package/dist/command/setup/tauri-signing.js +79 -0
- package/dist/command/setup/terminal/listeners.d.ts +10 -1
- package/dist/command/setup/terminal/listeners.js +37 -6
- package/dist/command/update/update-nudge.d.ts +9 -0
- package/dist/command/update/update-nudge.js +1 -1
- package/dist/command/update/updater.js +11 -15
- package/dist/command/version/version-nudge.js +3 -0
- package/dist/command/version/version-skew.d.ts +20 -1
- package/dist/command/version/version-skew.js +49 -4
- package/dist/features/crawl/crawl-tools.js +4 -0
- package/dist/features/crawl/crawl.d.ts +6 -0
- package/dist/features/crawl/crawl.js +23 -2
- package/dist/features/exhaust/ledger.d.ts +21 -14
- package/dist/features/exhaust/ledger.js +35 -9
- package/dist/features/harness/app-findings.d.ts +2 -0
- package/dist/features/harness/app-findings.js +52 -0
- package/dist/features/harness/drive-report.d.ts +61 -1
- package/dist/features/harness/drive-report.js +394 -26
- package/dist/features/harness/drive-runs.d.ts +120 -0
- package/dist/features/harness/drive-runs.js +289 -0
- package/dist/features/harness/drivers.d.ts +10 -14
- package/dist/features/harness/drivers.js +10 -14
- package/dist/features/harness/explore/console-pages.d.ts +15 -0
- package/dist/features/harness/explore/console-pages.js +146 -0
- package/dist/features/harness/explore/disparity.d.ts +19 -0
- package/dist/features/harness/explore/disparity.js +71 -0
- package/dist/features/harness/explore/fake-app.d.ts +16 -0
- package/dist/features/harness/explore/fake-app.js +49 -0
- package/dist/features/harness/explore/goal-search.d.ts +26 -0
- package/dist/features/harness/explore/goal-search.js +144 -0
- package/dist/features/harness/explore/page-tree.d.ts +49 -0
- package/dist/features/harness/explore/page-tree.js +148 -0
- package/dist/features/harness/explore/site-map.d.ts +34 -0
- package/dist/features/harness/explore/site-map.js +150 -0
- package/dist/features/harness/fill-values.d.ts +3 -73
- package/dist/features/harness/fill-values.js +3 -169
- package/dist/features/harness/goals.d.ts +82 -0
- package/dist/features/harness/goals.js +330 -0
- package/dist/features/harness/harness.d.ts +51 -1
- package/dist/features/harness/harness.js +207 -6
- package/dist/features/harness/platform/drive-target.d.ts +30 -0
- package/dist/features/harness/platform/drive-target.js +81 -0
- package/dist/features/harness/platform/local-apps.d.ts +127 -0
- package/dist/features/harness/platform/local-apps.js +280 -0
- package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
- package/dist/features/harness/platform/persona-credentials.js +69 -0
- package/dist/features/harness/platform/platform-drives.d.ts +61 -0
- package/dist/features/harness/platform/platform-drives.js +114 -0
- package/dist/features/harness/platform/refusal.d.ts +52 -0
- package/dist/features/harness/platform/refusal.js +71 -0
- package/dist/features/harness/platform/remote-drive.d.ts +186 -0
- package/dist/features/harness/platform/remote-drive.js +378 -0
- package/dist/features/harness/platform/script.d.ts +94 -0
- package/dist/features/harness/platform/script.js +260 -0
- package/dist/features/harness/platform/server-driver.d.ts +54 -0
- package/dist/features/harness/platform/server-driver.js +182 -0
- package/dist/features/harness/platform-config.d.ts +41 -1
- package/dist/features/harness/platform-config.js +106 -9
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/app-controls.d.ts +5 -0
- package/dist/features/harness/script/app-controls.js +40 -0
- package/dist/features/harness/script/lane-ids.d.ts +14 -0
- package/dist/features/harness/script/lane-ids.js +16 -0
- package/dist/features/harness/script/script-run.d.ts +70 -0
- package/dist/features/harness/script/script-run.js +606 -0
- package/dist/features/license/license.d.ts +2 -2
- package/dist/features/visual/step-shots.d.ts +31 -0
- package/dist/features/visual/step-shots.js +231 -0
- package/dist/features/visual/visual-tools.d.ts +10 -1
- package/dist/features/visual/visual-tools.js +62 -17
- package/dist/hooks/client-directory.d.ts +18 -0
- package/dist/hooks/client-directory.js +57 -0
- package/dist/hooks/coding-agents.d.ts +34 -0
- package/dist/hooks/coding-agents.js +117 -0
- package/dist/hooks/driven-by.d.ts +23 -0
- package/dist/hooks/driven-by.js +56 -0
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/hooks/hook-commands.js +15 -4
- package/dist/hooks/tool-log.d.ts +9 -0
- package/dist/hooks/tool-log.js +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +80 -243
- package/dist/judgement/capsule/capsule-store.d.ts +2 -2
- package/dist/judgement/capsule/causal-summary.d.ts +15 -1
- package/dist/judgement/capsule/causal-summary.js +33 -0
- package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
- package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
- package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
- package/dist/judgement/runs/artifact/gap-summary.js +12 -3
- package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
- package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
- package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
- package/dist/judgement/runs/artifact/run-store.js +195 -3
- package/dist/judgement/runs/context-tools.js +59 -1
- package/dist/judgement/runs/default-run-id.d.ts +3 -0
- package/dist/judgement/runs/default-run-id.js +16 -0
- package/dist/judgement/runs/drive-run.d.ts +71 -1
- package/dist/judgement/runs/drive-run.js +317 -5
- package/dist/judgement/runs/repair-prompt.js +1 -1
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +13 -3
- package/dist/judgement/runs/runner-port.d.ts +5 -1
- package/dist/judgement/runs/runner-port.js +8 -2
- package/dist/judgement/runs/verification-sync.d.ts +5 -2
- package/dist/judgement/runs/verification-sync.js +40 -18
- package/dist/language/flows/change/gate.d.ts +10 -0
- package/dist/language/flows/change/gate.js +22 -0
- package/dist/language/flows/decision.js +36 -1
- package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
- package/dist/language/flows/fields/flow-secret-field.js +25 -2
- package/dist/language/flows/flow-anchor.d.ts +61 -10
- package/dist/language/flows/flow-anchor.js +98 -6
- package/dist/language/flows/flow-cross-step.d.ts +15 -0
- package/dist/language/flows/flow-cross-step.js +21 -0
- package/dist/language/flows/flow-intent.d.ts +1 -0
- package/dist/language/flows/flow-journey.d.ts +6 -0
- package/dist/language/flows/flow-journey.js +20 -0
- package/dist/language/flows/flow-learning.d.ts +4 -0
- package/dist/language/flows/flow-learning.js +45 -14
- package/dist/language/flows/flow-mutate-tools.js +5 -3
- package/dist/language/flows/flow-replay-run.d.ts +23 -9
- package/dist/language/flows/flow-replay-run.js +115 -110
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +40 -1
- package/dist/language/flows/flow-replay.js +110 -22
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-scope.js +5 -1
- package/dist/language/flows/flow-step-runners.d.ts +22 -2
- package/dist/language/flows/flow-step-runners.js +247 -47
- package/dist/language/flows/flow-store-for-session.d.ts +2 -2
- package/dist/language/flows/flow-store-for-session.js +7 -3
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +112 -89
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +74 -12
- package/dist/language/flows/heal-run.js +6 -4
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/flake.d.ts +2 -2
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
- package/dist/language/flows/recording/tape/recordings.js +95 -13
- package/dist/language/flows/replay-from-hud.d.ts +20 -0
- package/dist/language/flows/replay-from-hud.js +51 -0
- package/dist/language/flows/replay.d.ts +9 -5
- package/dist/language/flows/replay.js +56 -15
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/suite/suite-flakes.js +2 -0
- package/dist/language/flows/suite-selection.d.ts +2 -15
- package/dist/language/flows/suite-selection.js +4 -3
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +202 -191
- package/dist/launch-chromium.d.ts +27 -5
- package/dist/launch-chromium.js +38 -8
- package/dist/memory/cloud/cloud-config.d.ts +22 -1
- package/dist/memory/cloud/cloud-config.js +34 -5
- package/dist/memory/cloud/cloud-sync.d.ts +17 -14
- package/dist/memory/cloud/cloud-sync.js +15 -4
- package/dist/memory/cloud/harness-config.d.ts +75 -1
- package/dist/memory/cloud/harness-config.js +115 -24
- package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
- package/dist/memory/cloud/hud-notices-source.js +128 -0
- package/dist/memory/cloud/memory-scope.d.ts +161 -0
- package/dist/memory/cloud/memory-scope.js +227 -0
- package/dist/memory/cloud/sync-cycle.d.ts +44 -7
- package/dist/memory/cloud/sync-cycle.js +129 -15
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +121 -9
- package/dist/memory/cloud/sync-disk.d.ts +1 -1
- package/dist/memory/cloud/sync-disk.js +31 -10
- package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
- package/dist/memory/cloud/sync-screenshots.js +105 -0
- package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
- package/dist/memory/cloud/unsynced-roots.js +166 -0
- package/dist/memory/impact/account-watch.d.ts +34 -0
- package/dist/memory/impact/account-watch.js +59 -0
- package/dist/memory/impact/impact-recorder.d.ts +8 -0
- package/dist/memory/impact/impact-recorder.js +12 -2
- package/dist/memory/impact/impact-store.d.ts +17 -4
- package/dist/memory/impact/impact-store.js +169 -63
- package/dist/memory/intent/inline-intent.d.ts +1 -0
- package/dist/memory/intent/intent-shard-store.js +16 -4
- package/dist/memory/intent/intent-shard.d.ts +14 -2
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +122 -4
- package/dist/memory/intent/open-intents.d.ts +6 -0
- package/dist/memory/intent/open-intents.js +10 -1
- package/dist/memory/intent/settled-words.d.ts +24 -0
- package/dist/memory/intent/settled-words.js +130 -0
- package/dist/memory/journal/drive-flow.d.ts +16 -0
- package/dist/memory/journal/drive-flow.js +34 -2
- package/dist/memory/journal/drive-run-flush.d.ts +2 -0
- package/dist/memory/journal/drive-run-flush.js +20 -5
- package/dist/memory/journal/envelope.d.ts +8 -8
- package/dist/memory/journal/journal-recorder.js +52 -3
- package/dist/memory/journal/on-disk/retention.d.ts +8 -0
- package/dist/memory/journal/on-disk/retention.js +32 -2
- package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
- package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +42 -9
- package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
- package/dist/memory/project/artifact-root-resolver.js +125 -16
- package/dist/memory/project/artifact-root.d.ts +46 -8
- package/dist/memory/project/artifact-root.js +89 -10
- package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
- package/dist/memory/project/dir/reticle-dir.js +26 -3
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- package/dist/memory/project/project-tools.js +22 -3
- package/dist/memory/project/root-claims.d.ts +6 -0
- package/dist/memory/project/root-claims.js +39 -0
- package/dist/memory/project/session-root.d.ts +26 -1
- package/dist/memory/project/session-root.js +49 -5
- package/dist/memory/project/sync-status.d.ts +85 -0
- package/dist/memory/project/sync-status.js +224 -0
- package/dist/memory/recall/memory-tools.js +47 -2
- package/dist/memory/recall/platform-memory.d.ts +34 -0
- package/dist/memory/recall/platform-memory.js +139 -0
- package/dist/memory/recall/project-memory.d.ts +19 -0
- package/dist/memory/recall/project-memory.js +80 -13
- package/dist/portal/bridge/bridge.d.ts +9 -3
- package/dist/portal/bridge/bridge.js +82 -22
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -0
- package/dist/portal/bridge/pairing-token.d.ts +9 -0
- package/dist/portal/bridge/pairing-token.js +17 -0
- package/dist/portal/bridge/wrong-path.d.ts +17 -0
- package/dist/portal/bridge/wrong-path.js +35 -0
- package/dist/portal/input/network-mock-tools.js +11 -2
- package/dist/portal/input/real-input.d.ts +83 -10
- package/dist/portal/input/real-input.js +218 -30
- package/dist/portal/input/viewport-tools.js +3 -3
- package/dist/portal/pool/browser-pool.d.ts +70 -9
- package/dist/portal/pool/browser-pool.js +190 -37
- package/dist/portal/pool/context-permissions.d.ts +33 -0
- package/dist/portal/pool/context-permissions.js +33 -0
- package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
- package/dist/portal/pool/lease-marker-stamp.js +49 -0
- package/dist/portal/pool/playwright-launcher.d.ts +35 -0
- package/dist/portal/pool/playwright-launcher.js +64 -3
- package/dist/portal/pool/pool-contract.d.ts +28 -5
- package/dist/portal/session/agent-link.d.ts +8 -0
- package/dist/portal/session/agent-link.js +17 -0
- package/dist/portal/session/command-payload.d.ts +8 -0
- package/dist/portal/session/command-payload.js +24 -0
- package/dist/portal/session/daemon-answers.d.ts +3 -3
- package/dist/portal/session/daemon-answers.js +4 -2
- package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
- package/dist/portal/session/dev-server/dev-command.js +87 -12
- package/dist/portal/session/facts/departure-note.d.ts +22 -0
- package/dist/portal/session/facts/departure-note.js +47 -0
- package/dist/portal/session/facts/observed-state.d.ts +16 -18
- package/dist/portal/session/facts/observed-state.js +46 -3
- package/dist/portal/session/facts/session-replaced.d.ts +5 -0
- package/dist/portal/session/facts/session-replaced.js +5 -0
- package/dist/portal/session/first-run-wiring.d.ts +42 -0
- package/dist/portal/session/first-run-wiring.js +132 -0
- package/dist/portal/session/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/human/notes-ledger.d.ts +20 -0
- package/dist/portal/session/human/notes-ledger.js +55 -0
- package/dist/portal/session/human/review-store.d.ts +12 -0
- package/dist/portal/session/human/review-store.js +18 -10
- package/dist/portal/session/live-control-tools.d.ts +0 -13
- package/dist/portal/session/live-control-tools.js +107 -13
- package/dist/portal/session/narration-args.d.ts +5 -0
- package/dist/portal/session/narration-args.js +17 -0
- package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
- package/dist/portal/session/no-session-diagnosis.js +46 -9
- package/dist/portal/session/no-session-next-action.d.ts +31 -0
- package/dist/portal/session/no-session-next-action.js +159 -60
- package/dist/portal/session/no-session-watch.d.ts +14 -1
- package/dist/portal/session/no-session-watch.js +227 -17
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/presence/session-mirror.js +3 -0
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/serving-directory.d.ts +27 -0
- package/dist/portal/session/serving-directory.js +45 -0
- package/dist/portal/session/session-health.d.ts +18 -0
- package/dist/portal/session/session-health.js +9 -1
- package/dist/portal/session/session-info.d.ts +8 -1
- package/dist/portal/session/session-info.js +8 -1
- package/dist/portal/session/session-manager.d.ts +39 -0
- package/dist/portal/session/session-manager.js +98 -11
- package/dist/portal/session/session-reaper.js +4 -1
- package/dist/portal/session/session-successor.d.ts +13 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session-tools.js +26 -3
- package/dist/portal/session/session.d.ts +22 -30
- package/dist/portal/session/session.js +81 -79
- package/dist/portal/session/timing/command-timeout.js +25 -1
- package/dist/portal/session/timing/wall-clock.d.ts +1 -1
- package/dist/portal/session/timing/wall-clock.js +1 -1
- package/dist/portal/session/zero-install-first-call.d.ts +31 -0
- package/dist/portal/session/zero-install-first-call.js +88 -0
- package/dist/start-options.d.ts +12 -0
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +23 -1
- package/dist/status-payload.js +36 -1
- package/dist/surface/http-server.js +18 -2
- package/dist/surface/mcp/attach-memory.d.ts +1 -0
- package/dist/surface/mcp/attach-memory.js +12 -1
- package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
- package/dist/surface/mcp/mcp-proxy.js +65 -13
- package/dist/surface/mcp/mcp.d.ts +34 -6
- package/dist/surface/mcp/mcp.js +61 -17
- package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
- package/dist/surface/mcp/proxy/drive-calls.js +27 -0
- package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
- package/dist/surface/mcp/server-instructions.d.ts +4 -2
- package/dist/surface/mcp/server-instructions.js +32 -14
- package/dist/surface/mcp/shared-params.js +2 -2
- package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
- package/dist/surface/mcp/surface-vocabulary.js +1 -0
- package/dist/surface/tools/account-tool.d.ts +22 -0
- package/dist/surface/tools/account-tool.js +157 -0
- package/dist/surface/tools/act/act-danger.d.ts +11 -0
- package/dist/surface/tools/act/act-danger.js +38 -1
- package/dist/surface/tools/act/act-observation.d.ts +33 -0
- package/dist/surface/tools/act/act-observation.js +57 -0
- package/dist/surface/tools/act/act-preflight.js +25 -2
- package/dist/surface/tools/act/act-target.js +8 -3
- package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
- package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
- package/dist/surface/tools/act/resolve-target.d.ts +1 -1
- package/dist/surface/tools/act/resolve-target.js +18 -3
- package/dist/surface/tools/act/screen-request.d.ts +34 -0
- package/dist/surface/tools/act/screen-request.js +113 -0
- package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
- package/dist/surface/tools/act/sequence-grade.js +13 -2
- package/dist/surface/tools/act/settle-in-flight.js +25 -3
- package/dist/surface/tools/act-sequence-tool.js +138 -29
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +71 -41
- package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
- package/dist/surface/tools/agent/app-notes-learning.js +80 -0
- package/dist/surface/tools/agent/app-notes.d.ts +4 -0
- package/dist/surface/tools/agent/app-notes.js +48 -0
- package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
- package/dist/surface/tools/agent/build-staleness.js +62 -0
- package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
- package/dist/surface/tools/agent/compact-envelope.js +374 -0
- package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
- package/dist/surface/tools/agent/for-the-agent.js +44 -0
- package/dist/surface/tools/agent/notices.d.ts +50 -0
- package/dist/surface/tools/agent/notices.js +152 -0
- package/dist/surface/tools/agent/reteach.d.ts +11 -0
- package/dist/surface/tools/agent/reteach.js +50 -0
- package/dist/surface/tools/args/alias-args.d.ts +5 -0
- package/dist/surface/tools/args/alias-args.js +10 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
- package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
- package/dist/surface/tools/assert/assert-source.d.ts +15 -0
- package/dist/surface/tools/assert/assert-source.js +40 -0
- package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
- package/dist/surface/tools/assert/assert-verdict.js +42 -17
- package/dist/surface/tools/browser-tools.js +51 -2
- package/dist/surface/tools/chat-drives.d.ts +101 -0
- package/dist/surface/tools/chat-drives.js +409 -0
- package/dist/surface/tools/coverage-tools.d.ts +2 -10
- package/dist/surface/tools/coverage-tools.js +2 -53
- package/dist/surface/tools/dynamic-tools.js +29 -1
- package/dist/surface/tools/empty-session-list.d.ts +51 -0
- package/dist/surface/tools/empty-session-list.js +120 -0
- package/dist/surface/tools/error-recovery.d.ts +14 -0
- package/dist/surface/tools/error-recovery.js +105 -8
- package/dist/surface/tools/explore-tools.d.ts +31 -1
- package/dist/surface/tools/explore-tools.js +438 -66
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +18 -3
- package/dist/surface/tools/gap-novelty.d.ts +3 -1
- package/dist/surface/tools/gap-novelty.js +8 -1
- package/dist/surface/tools/harness-explore.d.ts +118 -57
- package/dist/surface/tools/harness-explore.js +344 -292
- package/dist/surface/tools/harness-gate.d.ts +88 -0
- package/dist/surface/tools/harness-gate.js +235 -0
- package/dist/surface/tools/harness-hunt.d.ts +43 -0
- package/dist/surface/tools/harness-hunt.js +215 -0
- package/dist/surface/tools/harness-plan.d.ts +17 -0
- package/dist/surface/tools/harness-plan.js +38 -0
- package/dist/surface/tools/harness-script.d.ts +30 -0
- package/dist/surface/tools/harness-script.js +560 -0
- package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
- package/dist/surface/tools/harness-tab-guard.js +27 -0
- package/dist/surface/tools/harness-toolset.d.ts +22 -1
- package/dist/surface/tools/harness-toolset.js +101 -7
- package/dist/surface/tools/human-notes.d.ts +16 -0
- package/dist/surface/tools/human-notes.js +27 -0
- package/dist/surface/tools/invoke-tool.d.ts +5 -2
- package/dist/surface/tools/invoke-tool.js +263 -85
- package/dist/surface/tools/lease-hint.js +26 -5
- package/dist/surface/tools/lease-permissions.d.ts +33 -0
- package/dist/surface/tools/lease-permissions.js +73 -0
- package/dist/surface/tools/lease-readiness.d.ts +38 -0
- package/dist/surface/tools/lease-readiness.js +57 -0
- package/dist/surface/tools/lease-seed.d.ts +49 -0
- package/dist/surface/tools/lease-seed.js +167 -0
- package/dist/surface/tools/lease-tools.d.ts +13 -24
- package/dist/surface/tools/lease-tools.js +146 -197
- package/dist/surface/tools/live-call-text.js +4 -4
- package/dist/surface/tools/merge-tools.js +42 -2
- package/dist/surface/tools/merged-name-redirect.js +4 -0
- package/dist/surface/tools/next-step.d.ts +29 -0
- package/dist/surface/tools/next-step.js +214 -0
- package/dist/surface/tools/observe-tools.js +45 -9
- package/dist/surface/tools/platform-moment.d.ts +72 -0
- package/dist/surface/tools/platform-moment.js +296 -0
- package/dist/surface/tools/query-hint-schema.d.ts +7 -0
- package/dist/surface/tools/query-hint-schema.js +10 -0
- package/dist/surface/tools/read-tools.js +71 -14
- package/dist/surface/tools/real-input-attempt.js +96 -13
- package/dist/surface/tools/reticle-result.d.ts +120 -0
- package/dist/surface/tools/reticle-result.js +364 -0
- package/dist/surface/tools/tool-kit.d.ts +83 -3
- package/dist/surface/tools/tool-kit.js +77 -7
- package/dist/surface/tools/tools.js +43 -59
- package/dist/telemetry/account-envelope.d.ts +7 -0
- package/dist/telemetry/account-envelope.js +61 -0
- package/dist/telemetry/agent-client.d.ts +15 -0
- package/dist/telemetry/agent-client.js +57 -0
- package/dist/telemetry/app-instrumented.js +9 -2
- package/dist/telemetry/argument-shape.d.ts +7 -0
- package/dist/telemetry/argument-shape.js +86 -1
- package/dist/telemetry/automation-hint.d.ts +2 -3
- package/dist/telemetry/automation-hint.js +33 -8
- package/dist/telemetry/cli-telemetry.js +7 -2
- package/dist/telemetry/daemon-telemetry.js +3 -0
- package/dist/telemetry/error-fingerprint.d.ts +10 -1
- package/dist/telemetry/error-fingerprint.js +61 -5
- package/dist/telemetry/feedback-cli.d.ts +0 -13
- package/dist/telemetry/feedback-cli.js +0 -77
- package/dist/telemetry/feedback.d.ts +13 -0
- package/dist/telemetry/feedback.js +183 -17
- package/dist/telemetry/harness-run.d.ts +18 -0
- package/dist/telemetry/harness-run.js +80 -0
- package/dist/telemetry/hud-events.d.ts +16 -0
- package/dist/telemetry/hud-events.js +27 -0
- package/dist/telemetry/hud-metrics.d.ts +29 -6
- package/dist/telemetry/hud-metrics.js +116 -25
- package/dist/telemetry/init-telemetry.js +2 -2
- package/dist/telemetry/install-source.d.ts +13 -25
- package/dist/telemetry/install-source.js +44 -3
- package/dist/telemetry/mcp-connection.d.ts +0 -14
- package/dist/telemetry/mcp-connection.js +5 -1
- package/dist/telemetry/onboarding-firsts.d.ts +32 -0
- package/dist/telemetry/onboarding-firsts.js +81 -6
- package/dist/telemetry/platform-linked.d.ts +5 -0
- package/dist/telemetry/platform-linked.js +32 -0
- package/dist/telemetry/project-profile.js +5 -3
- package/dist/telemetry/proxy-telemetry.js +4 -1
- package/dist/telemetry/session-metrics.d.ts +15 -4
- package/dist/telemetry/session-metrics.js +88 -52
- package/dist/telemetry/telemetry.d.ts +38 -2
- package/dist/telemetry/telemetry.js +144 -34
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +13 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +20 -6
- package/docs/README.md +3 -3
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +25 -28
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +33 -28
- package/docs/benchmarks.md +5 -5
- package/docs/best-practices.mdx +27 -9
- package/docs/capabilities.mdx +14 -16
- package/docs/cli/affected.mdx +1 -1
- package/docs/cli/cloud.mdx +54 -75
- package/docs/cli/doctor.mdx +14 -3
- package/docs/cli/drive.mdx +20 -14
- package/docs/cli/feedback.mdx +3 -3
- package/docs/cli/gate.mdx +7 -2
- package/docs/cli/help.mdx +50 -55
- package/docs/cli/init.mdx +43 -28
- package/docs/cli/license.mdx +12 -8
- package/docs/cli/mcp.mdx +4 -4
- package/docs/cli/open.mdx +3 -3
- package/docs/cli/report.mdx +4 -2
- package/docs/cli/restart.mdx +2 -2
- package/docs/cli/rollback.mdx +14 -8
- package/docs/cli/serve.mdx +4 -4
- package/docs/cli/setup.mdx +23 -0
- package/docs/cli/status.mdx +18 -5
- package/docs/cli/stop.mdx +67 -8
- package/docs/cli/try.mdx +62 -0
- package/docs/cli/update.mdx +4 -3
- package/docs/cli/verify.mdx +17 -6
- package/docs/cli/version.mdx +5 -4
- package/docs/cli.mdx +111 -42
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +9 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +7 -8
- package/docs/faq.mdx +3 -3
- package/docs/first-drive.md +5 -4
- package/docs/flows.md +35 -27
- package/docs/for-agents.md +4 -5
- package/docs/frameworks.mdx +32 -21
- package/docs/getting-started.md +65 -61
- package/docs/human-control.md +16 -16
- package/docs/index.mdx +15 -42
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +23 -13
- package/docs/instrumentation.mdx +5 -3
- package/docs/integration-patterns.md +7 -7
- package/docs/license-activation.mdx +1 -1
- package/docs/multi-agent-testing.md +24 -6
- package/docs/packages/babel-plugin.mdx +4 -2
- package/docs/packages/browser.mdx +16 -10
- package/docs/packages/core.mdx +12 -5
- package/docs/packages/electron.mdx +3 -2
- package/docs/packages/engine.mdx +1 -1
- package/docs/packages/eslint-plugin.mdx +18 -12
- package/docs/packages/next.mdx +8 -7
- package/docs/packages/open-verification.mdx +1 -1
- package/docs/packages/server.mdx +5 -5
- package/docs/packages/tauri.mdx +9 -9
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +32 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +69 -30
- package/docs/required-checks.md +8 -7
- package/docs/reticle-manual.md +15 -5
- package/docs/skill-file.mdx +17 -79
- package/docs/skill-setup.md +9 -9
- package/docs/skill.md +200 -0
- package/docs/system-map.md +7 -7
- package/docs/telemetry.md +23 -25
- package/docs/testing.md +4 -4
- package/docs/token-efficiency.md +12 -12
- package/docs/tools/act-and-wait.mdx +9 -2
- package/docs/tools/act-sequence.mdx +6 -7
- package/docs/tools/act.mdx +2 -2
- package/docs/tools/assert.mdx +18 -17
- package/docs/tools/console.mdx +9 -9
- package/docs/tools/inspect.mdx +16 -7
- package/docs/tools/look.mdx +24 -0
- package/docs/tools/navigate.mdx +5 -3
- package/docs/tools/network.mdx +2 -2
- package/docs/tools/observe.mdx +6 -6
- package/docs/tools/overview.mdx +34 -33
- package/docs/tools/query.mdx +5 -5
- package/docs/tools/session-and-feedback.mdx +22 -13
- package/docs/tools/sessions.mdx +8 -8
- package/docs/tools/snapshot.mdx +6 -5
- package/docs/tools/state.mdx +9 -9
- package/docs/tools/tools-and-run.mdx +26 -24
- package/docs/tools/verify.mdx +28 -0
- package/docs/tools/wait-for.mdx +8 -4
- package/docs/troubleshooting.mdx +21 -6
- package/docs/usage.md +55 -46
- package/docs/use-cases.mdx +3 -3
- package/docs/vs-chrome-devtools-mcp.mdx +9 -6
- package/docs/vs-playwright-mcp.mdx +3 -1
- package/docs/what-is-recorded.md +17 -5
- package/docs/what-is-reticle.mdx +5 -3
- package/docs/why-reticle.mdx +1 -1
- package/package.json +9 -12
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -241
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- package/dist/features/harness/driver.d.ts +0 -50
- package/dist/features/harness/driver.js +0 -236
- package/dist/features/harness/jev-driver.d.ts +0 -188
- package/dist/features/harness/jev-driver.js +0 -678
- package/dist/features/harness/openai-driver.d.ts +0 -58
- package/dist/features/harness/openai-driver.js +0 -206
- package/dist/judgement/hunt/hunt-report.d.ts +0 -49
- package/dist/judgement/hunt/hunt-report.js +0 -84
- package/dist/language/flows/buddy-status.d.ts +0 -25
- package/dist/language/flows/buddy-status.js +0 -32
- package/dist/language/flows/change/watch-batcher.d.ts +0 -18
- package/dist/language/flows/change/watch-batcher.js +0 -19
- package/dist/memory/cloud/harness-offer.d.ts +0 -44
- package/dist/memory/cloud/harness-offer.js +0 -145
- package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
- package/dist/memory/project/dir/fill-value-store.js +0 -88
- package/dist/surface/tools/feature-capture.d.ts +0 -151
- package/dist/surface/tools/feature-capture.js +0 -235
- package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
- package/dist/surface/tools/tool-hit-rate.js +0 -90
- package/dist/telemetry/harness-drive.d.ts +0 -4
- package/dist/telemetry/harness-drive.js +0 -35
- package/dist/telemetry/identify.d.ts +0 -22
- package/dist/telemetry/identify.js +0 -73
- package/docs/cli/capsules.mdx +0 -70
- package/docs/cli/hunt.mdx +0 -73
- package/docs/cli/identify.mdx +0 -76
- package/docs/cli/kill.mdx +0 -91
- package/docs/cli/watch.mdx +0 -62
- package/docs/local-registry.md +0 -143
|
@@ -17,8 +17,6 @@ export interface ReticleDirPaths {
|
|
|
17
17
|
impact: string;
|
|
18
18
|
/**.../.reticle/intent.json — the LEGACY single ledger, read until the first write migrates it into .reticle/intent/ */
|
|
19
19
|
intent: string;
|
|
20
|
-
/**.../.reticle/fill-values.json (what a drive types into each labelled field — git-checked) */
|
|
21
|
-
fillValues: string;
|
|
22
20
|
/**.../.reticle/visual (PNG baselines + diffs) */
|
|
23
21
|
visual: string;
|
|
24
22
|
/**.../.reticle/runs (verification-run artifacts) */
|
|
@@ -37,8 +35,21 @@ export interface ReticleDirPaths {
|
|
|
37
35
|
coverage: string;
|
|
38
36
|
/**.../.reticle/assertion-tiers.json (last-passing assertion tiers; anti-reward-hacking baseline) */
|
|
39
37
|
tiers: string;
|
|
38
|
+
/**.../.reticle/request.json (the user's latest request, relayed by the agent, classified) */
|
|
39
|
+
request: string;
|
|
40
|
+
/** .reticle/plans/ — every Harness drive plan made here, and how it went. */
|
|
41
|
+
plans: string;
|
|
40
42
|
}
|
|
41
43
|
export declare function reticleDirPaths(root: string): ReticleDirPaths;
|
|
44
|
+
/**
|
|
45
|
+
* A Harness drive's own record beside its run —.reticle/runs/<runId>.drive.json. Not a run: every
|
|
46
|
+
* reader that counts or syncs run files skips it.
|
|
47
|
+
*/
|
|
48
|
+
export declare const DRIVE_RECORD_SUFFIX = ".drive.json";
|
|
49
|
+
/** Where evidence goes when no project could be named: `~/.reticle/unmatched/<id>`. */
|
|
50
|
+
export declare const UNMATCHED_SUBDIR = "unmatched";
|
|
51
|
+
/** Whether a root is one of those buckets: evidence from a page that never said its project. */
|
|
52
|
+
export declare function isUnmatchedRoot(root: string): boolean;
|
|
42
53
|
/** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
|
|
43
54
|
export declare function runPath(root: string, runId: RunId): string;
|
|
44
55
|
/** The journal directory for `sessionId` (.reticle/sessions/<id>). Guard the id first. */
|
|
@@ -86,6 +97,11 @@ export declare function visualPath(root: string, name: string, runtime?: string)
|
|
|
86
97
|
* every pre-existing baseline came from a driven browser, and moving them would orphan them.
|
|
87
98
|
*/
|
|
88
99
|
export declare function visualDir(root: string, runtime?: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* Where one run's step screenshots live: `.reticle/visual/runs/<runId>/`. Throws on an unsafe run id,
|
|
102
|
+
* like every other path built from one.
|
|
103
|
+
*/
|
|
104
|
+
export declare function stepShotDir(root: string, runId: string): string;
|
|
89
105
|
/** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
|
|
90
106
|
export declare function visualDiffPath(root: string, name: string, runtime?: string): string;
|
|
91
107
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { dirname, join } from 'node:path';
|
|
1
|
+
import { basename, dirname, join } from 'node:path';
|
|
2
2
|
import { realmOf } from '@reticlehq/core';
|
|
3
|
-
import { CONTRACT_FILE_VERSION, ContractFileSchema, ContractReadError, FLOW_NAME_PATTERN, SAFE_SEGMENT_PATTERN, ReticleDir, } from '@reticlehq/core';
|
|
3
|
+
import { CONTRACT_FILE_VERSION, ContractFileSchema, ContractReadError, FLOW_NAME_PATTERN, SAFE_SEGMENT_PATTERN, ReticleDir, STEP_SCREENSHOT, } from '@reticlehq/core';
|
|
4
4
|
export function reticleDirPaths(root) {
|
|
5
5
|
return {
|
|
6
6
|
root,
|
|
@@ -10,7 +10,6 @@ export function reticleDirPaths(root) {
|
|
|
10
10
|
project: join(root, ReticleDir.PROJECT_FILE),
|
|
11
11
|
impact: join(root, ReticleDir.IMPACT_FILE),
|
|
12
12
|
intent: join(root, ReticleDir.INTENT_FILE),
|
|
13
|
-
fillValues: join(root, ReticleDir.FILL_VALUES_FILE),
|
|
14
13
|
visual: join(root, ReticleDir.VISUAL_SUBDIR),
|
|
15
14
|
runs: join(root, ReticleDir.RUNS_SUBDIR),
|
|
16
15
|
sessions: join(root, ReticleDir.SESSIONS_SUBDIR),
|
|
@@ -20,8 +19,23 @@ export function reticleDirPaths(root) {
|
|
|
20
19
|
flake: join(root, ReticleDir.FLAKE_FILE),
|
|
21
20
|
coverage: join(root, ReticleDir.COVERAGE_FILE),
|
|
22
21
|
tiers: join(root, ReticleDir.TIERS_FILE),
|
|
22
|
+
// Beside `intent/`, not in it: `intent/` is committed, and this is the user's own words.
|
|
23
|
+
request: join(root, ReticleDir.REQUEST_FILE),
|
|
24
|
+
plans: join(root, ReticleDir.PLANS_SUBDIR),
|
|
23
25
|
};
|
|
24
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* A Harness drive's own record beside its run —.reticle/runs/<runId>.drive.json. Not a run: every
|
|
29
|
+
* reader that counts or syncs run files skips it.
|
|
30
|
+
*/
|
|
31
|
+
export const DRIVE_RECORD_SUFFIX = '.drive.json';
|
|
32
|
+
/** Where evidence goes when no project could be named: `~/.reticle/unmatched/<id>`. */
|
|
33
|
+
export const UNMATCHED_SUBDIR = 'unmatched';
|
|
34
|
+
/** Whether a root is one of those buckets: evidence from a page that never said its project. */
|
|
35
|
+
export function isUnmatchedRoot(root) {
|
|
36
|
+
const parent = dirname(root);
|
|
37
|
+
return UNMATCHED_SUBDIR === basename(parent) && ReticleDir.ROOT === basename(dirname(parent));
|
|
38
|
+
}
|
|
25
39
|
/** The verification-run artifact path for `runId`.reticle/runs/<runId>.json). */
|
|
26
40
|
export function runPath(root, runId) {
|
|
27
41
|
return join(root, ReticleDir.RUNS_SUBDIR, `${runId}.json`);
|
|
@@ -90,6 +104,15 @@ export function visualDir(root, runtime) {
|
|
|
90
104
|
? join(visual, runtime)
|
|
91
105
|
: visual;
|
|
92
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Where one run's step screenshots live: `.reticle/visual/runs/<runId>/`. Throws on an unsafe run id,
|
|
109
|
+
* like every other path built from one.
|
|
110
|
+
*/
|
|
111
|
+
export function stepShotDir(root, runId) {
|
|
112
|
+
if (!isValidRunId(runId))
|
|
113
|
+
throw new Error(`invalid run id: ${JSON.stringify(runId)}`);
|
|
114
|
+
return join(root, ReticleDir.VISUAL_SUBDIR, STEP_SCREENSHOT.RUNS_DIR, runId);
|
|
115
|
+
}
|
|
93
116
|
/** The overlay-diff PNG path for `name`.reticle/visual/<name>.diff.png). */
|
|
94
117
|
export function visualDiffPath(root, name, runtime) {
|
|
95
118
|
return join(visualDir(root, runtime), `${name}.diff.png`);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ConfigDiscovery } from '../../command/cli/config/config-discovery.js';
|
|
2
|
+
/**
|
|
3
|
+
* The declared project that encloses `cwd`, else the one project declared below it, else `cwd`
|
|
4
|
+
* itself. Several candidates below and none enclosing is a choice the caller must make, so `cwd` is
|
|
5
|
+
* kept rather than one picked silently.
|
|
6
|
+
*/
|
|
7
|
+
export declare function linkDirectoryFor(cwd: string, discovery: ConfigDiscovery): string;
|
|
8
|
+
/**
|
|
9
|
+
* The `.reticle` a command run here owns: the project's, when this folder is in or above exactly one
|
|
10
|
+
* declared project or already holds a `.reticle`. Undefined anywhere else, so a lease opened from a
|
|
11
|
+
* home directory never plants a `.reticle` in it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function callerArtifactRoot(cwd: string): string | undefined;
|
|
14
|
+
/** `linkDirectoryFor` over this machine's own discovery from `cwd`. */
|
|
15
|
+
export declare function linkDirectoryFrom(cwd: string): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The directory `reticle link` binds: the project a session from here would write its runs into.
|
|
3
|
+
*
|
|
4
|
+
* Runs land in the root the artifact resolver picks for the page's project, which comes from the same
|
|
5
|
+
* config discovery used here. Binding `cwd` instead left a monorepo's `apps/web/.reticle` unlinked
|
|
6
|
+
* while every run of that app landed in it.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync } from 'node:fs';
|
|
9
|
+
import { join, resolve, sep } from 'node:path';
|
|
10
|
+
import { ReticleDir } from '@reticlehq/core';
|
|
11
|
+
import { discoverProjectConfigs, hasProjectConfig, } from '../../command/cli/config/config-discovery.js';
|
|
12
|
+
/** `inner` is `outer` or sits inside it. */
|
|
13
|
+
const within = (inner, outer) => inner === outer || inner.startsWith(outer.endsWith(sep) ? outer : `${outer}${sep}`);
|
|
14
|
+
/**
|
|
15
|
+
* The declared project that encloses `cwd`, else the one project declared below it, else `cwd`
|
|
16
|
+
* itself. Several candidates below and none enclosing is a choice the caller must make, so `cwd` is
|
|
17
|
+
* kept rather than one picked silently.
|
|
18
|
+
*/
|
|
19
|
+
export function linkDirectoryFor(cwd, discovery) {
|
|
20
|
+
const here = resolve(cwd);
|
|
21
|
+
const enclosing = discovery.found
|
|
22
|
+
.map((found) => found.directory)
|
|
23
|
+
.filter((directory) => within(here, directory))
|
|
24
|
+
.sort((a, b) => b.length - a.length)[0];
|
|
25
|
+
if (enclosing !== undefined)
|
|
26
|
+
return enclosing;
|
|
27
|
+
const below = discovery.found.filter((found) => within(found.directory, here));
|
|
28
|
+
const only = 1 === below.length ? below[0] : undefined;
|
|
29
|
+
return only === undefined ? here : only.directory;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The `.reticle` a command run here owns: the project's, when this folder is in or above exactly one
|
|
33
|
+
* declared project or already holds a `.reticle`. Undefined anywhere else, so a lease opened from a
|
|
34
|
+
* home directory never plants a `.reticle` in it.
|
|
35
|
+
*/
|
|
36
|
+
export function callerArtifactRoot(cwd) {
|
|
37
|
+
const dir = linkDirectoryFrom(cwd);
|
|
38
|
+
const root = join(dir, ReticleDir.ROOT);
|
|
39
|
+
return hasProjectConfig(dir) || existsSync(root) ? root : undefined;
|
|
40
|
+
}
|
|
41
|
+
/** `linkDirectoryFor` over this machine's own discovery from `cwd`. */
|
|
42
|
+
export function linkDirectoryFrom(cwd) {
|
|
43
|
+
return linkDirectoryFor(cwd, discoverProjectConfigs(cwd));
|
|
44
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { describeSync, overallStatus, readSyncSummary } from './sync-status.js';
|
|
2
3
|
import { sessionRoot } from './session-root.js';
|
|
3
4
|
import { projectForRoot } from './project-for-root.js';
|
|
4
5
|
import { ProjectReadError, RunStatus } from '@reticlehq/core';
|
|
@@ -94,6 +95,7 @@ export const PROJECT_TOOLS = [
|
|
|
94
95
|
description: 'Read cross-run history from .reticle/project.json — the memory of how past runs behaved. With { name } it also returns the last run for that flow plus a diff-vs-last summary (status change, regressed flag, consoleErrors/driftSteps deltas) so you can answer "did it behave like last time?". `diff` is the lightweight status/console/drift delta vs the previous run of that NAME; `runDiff` is the per-flow duration/status delta between the two most-recent full verification artifacts ("step 3: 412ms -> 987ms (+140%), +2 requests"). When logged in to Reticle, also returns `cloud`: the team\'s server-side regression report (broken/changed flows vs before) — the durable memory a fresh or context-lost agent can rely on even when local history is empty. Returns { runs, learned?, lastRun?, diff?, runDiff?, cloud? } or { error, reason, cloud? }.',
|
|
95
96
|
inputSchema: {
|
|
96
97
|
name: z.string().optional().describe('Filter runs by this name. Omit to return all runs.'),
|
|
98
|
+
push: z.boolean().optional().describe('Sync with the platform now, before answering.'),
|
|
97
99
|
limit: countSchema
|
|
98
100
|
.optional()
|
|
99
101
|
.describe('Most-recent N runs to return. Defaults to 25 — the full history is unbounded and grows with every run (measured at ~20KB / ~5,000 tokens on a modest project), which is a large slice of an agent context for data it mostly does not read. `totalRuns` always reports the true count, so a cap is never silent.'),
|
|
@@ -110,14 +112,31 @@ export const PROJECT_TOOLS = [
|
|
|
110
112
|
cloud: z.unknown().optional(),
|
|
111
113
|
},
|
|
112
114
|
handler: async (deps, args) => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
// A push asked for is done first, so the status below describes what it achieved.
|
|
116
|
+
if (true === args['push'])
|
|
117
|
+
await deps.syncNow?.().catch(() => undefined);
|
|
118
|
+
const root = sessionRoot(deps, asString(args['sessionId']));
|
|
119
|
+
const linked = (await deps.linkedCloud?.().catch(() => null)) ?? null;
|
|
120
|
+
const summary = readSyncSummary(root, null !== linked);
|
|
121
|
+
const sync = {
|
|
122
|
+
...summary,
|
|
123
|
+
status: overallStatus(summary),
|
|
124
|
+
said: describeSync(summary, deps.now()),
|
|
125
|
+
};
|
|
126
|
+
const regression = await cloudRegression(deps, asString(args['sessionId']));
|
|
127
|
+
// Where this project's work stands with the platform rides in `cloud` beside the team's
|
|
128
|
+
// regression report: the two answers to "what does the platform know about this project".
|
|
129
|
+
const cloud = {
|
|
130
|
+
...('object' === typeof regression && null !== regression ? regression : {}),
|
|
131
|
+
sync,
|
|
132
|
+
};
|
|
133
|
+
const withCloud = (obj) => ({ ...obj, cloud });
|
|
115
134
|
const project = projectForRoot(deps, sessionRoot(deps, asString(args['sessionId'])));
|
|
116
135
|
const read = await project.read();
|
|
117
136
|
if (!read.ok) {
|
|
118
137
|
return withCloud({
|
|
119
138
|
error: read.reason === ProjectReadError.MISSING
|
|
120
|
-
? 'no .reticle/project.json yet — run
|
|
139
|
+
? 'no .reticle/project.json yet — the first verified run writes it: drive one step with reticle_act_and_wait and an `until`'
|
|
121
140
|
: '.reticle/project.json is malformed — it will self-heal on the next recorded run',
|
|
122
141
|
reason: read.reason,
|
|
123
142
|
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Claim `root` for the session a lease registers. Refuses anything but an absolute `.reticle`. */
|
|
2
|
+
export declare function claimArtifactRoot(leaseId: string, root: string): void;
|
|
3
|
+
/** The root claimed for this session, by its id or by the lease marker on its url. */
|
|
4
|
+
export declare function claimedArtifactRoot(sessionId: string, url: string | undefined): string | undefined;
|
|
5
|
+
/** Forget a lease's claim, once the lease is released. */
|
|
6
|
+
export declare function dropArtifactRootClaim(leaseId: string): void;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which `.reticle` a leased session writes into, when whoever opened the lease said so.
|
|
3
|
+
*
|
|
4
|
+
* The resolver can only go on the page's project id and origin, and a page with no project id lands
|
|
5
|
+
* in `~/.reticle/unmatched/`, which nothing links or syncs. A lease opened by `reticle try`, a chat
|
|
6
|
+
* drive or `verify` from a linked folder knows better: the run belongs to the folder that asked.
|
|
7
|
+
*
|
|
8
|
+
* Keyed by the lease id, which the leased tab carries as `__reticle_session` on its url, so a
|
|
9
|
+
* reconnect after a navigation, or an app that names its own session, still finds the claim. Lives
|
|
10
|
+
* until the lease is released.
|
|
11
|
+
*/
|
|
12
|
+
import { basename, isAbsolute } from 'node:path';
|
|
13
|
+
import { RETICLE_URL_PARAM, ReticleDir } from '@reticlehq/core';
|
|
14
|
+
const claims = new Map();
|
|
15
|
+
/** Claim `root` for the session a lease registers. Refuses anything but an absolute `.reticle`. */
|
|
16
|
+
export function claimArtifactRoot(leaseId, root) {
|
|
17
|
+
if (!isAbsolute(root) || ReticleDir.ROOT !== basename(root))
|
|
18
|
+
throw new Error(`root must be an absolute path to a ${ReticleDir.ROOT} folder, got ${root}`);
|
|
19
|
+
claims.set(leaseId, root);
|
|
20
|
+
}
|
|
21
|
+
/** The root claimed for this session, by its id or by the lease marker on its url. */
|
|
22
|
+
export function claimedArtifactRoot(sessionId, url) {
|
|
23
|
+
const direct = claims.get(sessionId);
|
|
24
|
+
if (direct !== undefined)
|
|
25
|
+
return direct;
|
|
26
|
+
if (url === undefined)
|
|
27
|
+
return undefined;
|
|
28
|
+
try {
|
|
29
|
+
const lease = new URL(url).searchParams.get(RETICLE_URL_PARAM.SESSION);
|
|
30
|
+
return null === lease ? undefined : claims.get(lease);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Forget a lease's claim, once the lease is released. */
|
|
37
|
+
export function dropArtifactRootClaim(leaseId) {
|
|
38
|
+
claims.delete(leaseId);
|
|
39
|
+
}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import type { ProjectId } from '@reticlehq/core';
|
|
2
2
|
import type { ToolDeps } from '../../surface/tools/tool-kit.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which project a call is about, and the page origin it came through.
|
|
5
|
+
*
|
|
6
|
+
* The projectId alone is not an address: every git worktree carries the same committed
|
|
7
|
+
* `.reticle.json`, so a daemon serving several worktrees sees one id for all of them. The origin
|
|
8
|
+
* names the dev server that served the page, and the resolver uses it to pick the checkout that
|
|
9
|
+
* server runs in. Carried as one value so no caller can resolve with half of it -- a flow saved
|
|
10
|
+
* through the worktree and replayed through the id alone would land in one tree and be read from
|
|
11
|
+
* another.
|
|
12
|
+
*/
|
|
13
|
+
export interface ProjectTarget {
|
|
14
|
+
projectId: ProjectId | undefined;
|
|
15
|
+
origin?: string | undefined;
|
|
16
|
+
/** The root whoever leased this session claimed for it (see `root-claims.ts`), which wins. */
|
|
17
|
+
claimedRoot?: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
/** The target for a caller that genuinely holds no session -- the id is all there is. */
|
|
20
|
+
export declare function projectOnly(projectId: ProjectId | undefined): ProjectTarget;
|
|
3
21
|
/**
|
|
4
22
|
* The `.reticle` directory a tool call's artifacts belong in.
|
|
5
23
|
*
|
|
@@ -24,7 +42,7 @@ export declare function sessionRoot(deps: ToolDeps, sessionId: string | undefine
|
|
|
24
42
|
* place and the id from another. `sessionRoot` is now this function plus a lookup, so the two
|
|
25
43
|
* cannot disagree about what a resolved root is.
|
|
26
44
|
*/
|
|
27
|
-
export declare function
|
|
45
|
+
export declare function rootForTarget(deps: ToolDeps, target: ProjectTarget): string;
|
|
28
46
|
/**
|
|
29
47
|
* The PROJECT directory -- one level above `.reticle` -- for a caller that runs a tool in a tree
|
|
30
48
|
* rather than writing a file into one. `git diff` is the case: it was being run in the daemon's
|
|
@@ -50,3 +68,10 @@ export declare function projectDirFor(deps: ToolDeps, sessionId: string | undefi
|
|
|
50
68
|
* there is no answer either.
|
|
51
69
|
*/
|
|
52
70
|
export declare function sessionProjectId(deps: ToolDeps, sessionId: string | undefined): ProjectId | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* `sessionTarget` for the paths that degrade instead of refusing: replay and learning resolve a
|
|
73
|
+
* missing session to the global store, and keep doing so -- with the origin when there is one.
|
|
74
|
+
*/
|
|
75
|
+
export declare function safeSessionTarget(deps: ToolDeps, sessionId: string | undefined): ProjectTarget;
|
|
76
|
+
/** `sessionProjectId` plus the origin the session's page was served from. Same refusals. */
|
|
77
|
+
export declare function sessionTarget(deps: ToolDeps, sessionId: string | undefined): ProjectTarget;
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { dirname } from 'node:path';
|
|
2
|
+
import { claimedArtifactRoot } from './root-claims.js';
|
|
3
|
+
/**
|
|
4
|
+
* The scheme://host:port a session's page was served from. Local rather than the session manager's
|
|
5
|
+
* copy because `memory/project` does not reach `portal/session`, and five lines are cheaper than a
|
|
6
|
+
* new dependency between the two.
|
|
7
|
+
*/
|
|
8
|
+
function originOf(url) {
|
|
9
|
+
if (url === undefined)
|
|
10
|
+
return undefined;
|
|
11
|
+
try {
|
|
12
|
+
return new URL(url).origin;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** The target for a caller that genuinely holds no session -- the id is all there is. */
|
|
19
|
+
export function projectOnly(projectId) {
|
|
20
|
+
return { projectId };
|
|
21
|
+
}
|
|
2
22
|
/**
|
|
3
23
|
* The `.reticle` directory a tool call's artifacts belong in.
|
|
4
24
|
*
|
|
@@ -26,7 +46,7 @@ export function sessionRoot(deps, sessionId) {
|
|
|
26
46
|
// nothing its answer could change, so that one case skips the lookup and costs what it always
|
|
27
47
|
// did. Every embedder of this engine, and every older construction of ToolDeps, is on it.
|
|
28
48
|
const nothingToRefuse = deps.artifactRootFor === undefined && sessionId === undefined;
|
|
29
|
-
return
|
|
49
|
+
return rootForTarget(deps, nothingToRefuse ? projectOnly(undefined) : sessionTarget(deps, sessionId));
|
|
30
50
|
}
|
|
31
51
|
/**
|
|
32
52
|
* The same answer for a caller that already holds the projectId rather than a sessionId.
|
|
@@ -37,8 +57,10 @@ export function sessionRoot(deps, sessionId) {
|
|
|
37
57
|
* place and the id from another. `sessionRoot` is now this function plus a lookup, so the two
|
|
38
58
|
* cannot disagree about what a resolved root is.
|
|
39
59
|
*/
|
|
40
|
-
export function
|
|
41
|
-
|
|
60
|
+
export function rootForTarget(deps, target) {
|
|
61
|
+
if (target.claimedRoot !== undefined)
|
|
62
|
+
return target.claimedRoot;
|
|
63
|
+
return deps.artifactRootFor?.(target.projectId, target.origin).root ?? deps.reticleRoot;
|
|
42
64
|
}
|
|
43
65
|
/**
|
|
44
66
|
* The PROJECT directory -- one level above `.reticle` -- for a caller that runs a tool in a tree
|
|
@@ -74,12 +96,34 @@ export function projectDirFor(deps, sessionId) {
|
|
|
74
96
|
* from this file so they cannot disagree again.
|
|
75
97
|
*/
|
|
76
98
|
export function sessionProjectId(deps, sessionId) {
|
|
99
|
+
return sessionTarget(deps, sessionId).projectId;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* `sessionTarget` for the paths that degrade instead of refusing: replay and learning resolve a
|
|
103
|
+
* missing session to the global store, and keep doing so -- with the origin when there is one.
|
|
104
|
+
*/
|
|
105
|
+
export function safeSessionTarget(deps, sessionId) {
|
|
106
|
+
try {
|
|
107
|
+
return sessionTarget(deps, sessionId);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return projectOnly(undefined);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** `sessionProjectId` plus the origin the session's page was served from. Same refusals. */
|
|
114
|
+
export function sessionTarget(deps, sessionId) {
|
|
77
115
|
try {
|
|
78
|
-
|
|
116
|
+
const session = deps.sessions.resolve(sessionId);
|
|
117
|
+
const claimedRoot = claimedArtifactRoot(session.id, session.url);
|
|
118
|
+
return {
|
|
119
|
+
projectId: session.projectId,
|
|
120
|
+
origin: originOf(session.url),
|
|
121
|
+
...(claimedRoot === undefined ? {} : { claimedRoot }),
|
|
122
|
+
};
|
|
79
123
|
}
|
|
80
124
|
catch (cause) {
|
|
81
125
|
if (sessionId === undefined)
|
|
82
|
-
return undefined;
|
|
126
|
+
return projectOnly(undefined);
|
|
83
127
|
throw unresolvedTargetRefusal(sessionId, cause);
|
|
84
128
|
}
|
|
85
129
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { CloudSyncState } from '../cloud/sync-cycle.js';
|
|
2
|
+
import { type UnsyncedRoot } from '../cloud/unsynced-roots.js';
|
|
3
|
+
import type { FileSystemPort } from './fs/fs-port.js';
|
|
4
|
+
export declare const SyncStatus: {
|
|
5
|
+
readonly ON_PLATFORM: "on-platform";
|
|
6
|
+
readonly PENDING: "pending";
|
|
7
|
+
readonly REFUSED: "refused";
|
|
8
|
+
readonly LOCAL_ONLY: "local-only";
|
|
9
|
+
};
|
|
10
|
+
export type SyncStatus = (typeof SyncStatus)[keyof typeof SyncStatus];
|
|
11
|
+
export interface SyncSummary {
|
|
12
|
+
linked: boolean;
|
|
13
|
+
/** Runs on this machine. */
|
|
14
|
+
runs: number;
|
|
15
|
+
onPlatform: number;
|
|
16
|
+
pending: number;
|
|
17
|
+
/** The runs the platform refused in their current form, with its reason. */
|
|
18
|
+
refused: {
|
|
19
|
+
runId: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
}[];
|
|
22
|
+
/** Refusals beyond the ones named. */
|
|
23
|
+
refusedMore: number;
|
|
24
|
+
lastPushAt?: number;
|
|
25
|
+
/** Why the last cycle failed, when it did. */
|
|
26
|
+
lastError?: string;
|
|
27
|
+
/** The newest run the platform holds in its current form: what "see it in your dashboard" opens. */
|
|
28
|
+
latestOnPlatform?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function summarizeSync(input: {
|
|
31
|
+
linked: boolean;
|
|
32
|
+
runs: readonly {
|
|
33
|
+
runId: string;
|
|
34
|
+
payload: unknown;
|
|
35
|
+
}[];
|
|
36
|
+
state: CloudSyncState;
|
|
37
|
+
}): SyncSummary;
|
|
38
|
+
/**
|
|
39
|
+
* Where this project's dashboard lives, if `reticle link` recorded one.
|
|
40
|
+
*
|
|
41
|
+
* Read from the link file rather than derived from the API url, because the API origin and the
|
|
42
|
+
* console origin are different hosts in every deployment that is not a laptop. Synchronous and
|
|
43
|
+
* best-effort, like every other read in this file: a missing or malformed link file means no link
|
|
44
|
+
* in the HUD, never a failed tool call.
|
|
45
|
+
*/
|
|
46
|
+
export declare function readDashboardUrl(reticleRoot: string): string | undefined;
|
|
47
|
+
/** The platform project this folder is linked to, from the same link file. */
|
|
48
|
+
export declare function readLinkedProjectId(reticleRoot: string): string | undefined;
|
|
49
|
+
/** The refused credential, in words: what a person has to act on. */
|
|
50
|
+
export declare const KEY_REFUSED = "the platform refused this project's API key: it was revoked, or its owner no longer has access to the workspace";
|
|
51
|
+
/**
|
|
52
|
+
* Why a credential was refused: the platform's own sentence when it names the reason ("You were
|
|
53
|
+
* removed from Acme.", a key whose owner lost the project), else ours. Reads an answer body.
|
|
54
|
+
*/
|
|
55
|
+
export declare function refusalSaid(body: string): string;
|
|
56
|
+
/** Why the platform refused this project's key at the last sync, or undefined. Never throws. */
|
|
57
|
+
export declare function keyRefusalAtLastSync(reticleRoot: string): string | undefined;
|
|
58
|
+
/** Whether the platform refused this project's key at the last sync. Never throws. */
|
|
59
|
+
export declare function keyRefusedAtLastSync(reticleRoot: string): boolean;
|
|
60
|
+
/** The dashboard's page for one run: the console's `/runs/:runId` route, at the dashboard's origin. */
|
|
61
|
+
export declare const DASHBOARD_RUN_PATH = "/runs/";
|
|
62
|
+
export declare const DASHBOARD_PLAN_PATH = "/plans/";
|
|
63
|
+
export declare function dashboardRunUrl(dashboardUrl: string, runId: string): string;
|
|
64
|
+
/** The line a command prints once its run reached the platform. */
|
|
65
|
+
export declare function seeRunLine(dashboardUrl: string, runId: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* A saved Harness plan's page on the dashboard, beside its runs, under its project: opened under
|
|
68
|
+
* another project's sticky scope the page answered "We could not find that plan" to its owner.
|
|
69
|
+
*/
|
|
70
|
+
export declare function dashboardPlanUrl({ dashboardUrl, planId, projectId, }: {
|
|
71
|
+
dashboardUrl: string;
|
|
72
|
+
planId: string;
|
|
73
|
+
projectId?: string | undefined;
|
|
74
|
+
}): string;
|
|
75
|
+
/** This project's summary, read from its `.reticle`. Never throws: an unreadable record is empty. */
|
|
76
|
+
export declare function readSyncSummary(reticleRoot: string, linked: boolean): SyncSummary;
|
|
77
|
+
/** One status for the whole project: the worst thing true of it. */
|
|
78
|
+
export declare function overallStatus(summary: SyncSummary): SyncStatus;
|
|
79
|
+
/** The summary in one sentence an agent can repeat to a person. */
|
|
80
|
+
export declare function describeSync(summary: SyncSummary, now: number): string;
|
|
81
|
+
/**
|
|
82
|
+
* Every project folder this machine knows with runs or flows the platform never got, linked by its OWN link
|
|
83
|
+
* file or not. `reticle sync` and `doctor` print these; a daemon tracks the same through its cycle.
|
|
84
|
+
*/
|
|
85
|
+
export declare function machineUnsyncedRoots(fs: FileSystemPort, home: string, env: NodeJS.ProcessEnv): Promise<UnsyncedRoot[]>;
|