@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
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { keyRefusalAtLastSync } from '../../memory/project/sync-status.js';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { ReticleDir, ReticleEnv } from '@reticlehq/core';
|
|
5
|
+
import { DRIVE_RECORD_SUFFIX } from '../../memory/project/dir/reticle-dir.js';
|
|
6
|
+
import { callingAttachId } from '../../hooks/coding-agents.js';
|
|
7
|
+
/**
|
|
8
|
+
* The one thing the agent should do next, on the result of the call it just made.
|
|
9
|
+
*
|
|
10
|
+
* Every client reads tool results; few read a briefing twice, and none keep a skill in mind across a
|
|
11
|
+
* long session. So what an agent must not forget (record what the user asked, hand the tab back,
|
|
12
|
+
* notice when its runs are not reaching the platform) is said where
|
|
13
|
+
* the agent is already looking, one short line, on the moment it applies. It is placed first in the
|
|
14
|
+
* result, because a model that truncates a long result keeps its beginning.
|
|
15
|
+
*
|
|
16
|
+
* The daemon syncs runs itself, whichever agent drove them; nothing here asks an agent to push.
|
|
17
|
+
* It only says when the sync needs a person (a refusal, a failure, a project never connected).
|
|
18
|
+
*/
|
|
19
|
+
/** How long a declared request counts as "the current task". Matches the run store's window. */
|
|
20
|
+
const REQUEST_FRESH_MS = 6 * 60 * 60 * 1000;
|
|
21
|
+
/** A reminder that is not about a verdict is repeated at most this often, per project. */
|
|
22
|
+
const QUIET_CALLS = 10;
|
|
23
|
+
/**
|
|
24
|
+
* How often the agent is asked to record the request before the other lines get their turn. In
|
|
25
|
+
* every recorded run the agent ignored it, and because it always won, no agent was ever told its
|
|
26
|
+
* runs were not reaching the platform.
|
|
27
|
+
*/
|
|
28
|
+
const DECLARE_ASKS = 2;
|
|
29
|
+
/** A run file this much newer than the last push, and this old, was not sent. */
|
|
30
|
+
const UNSENT_AFTER_MS = 2 * 60 * 1000;
|
|
31
|
+
export const NextText = {
|
|
32
|
+
DECLARE: 'Record what the user asked, once per task, verbatim: reticle_run { tool: "reticle_intent", args: { action: "declare", request: "<their words>" } }. It travels with every run.',
|
|
33
|
+
SYNC_PROBLEM: (why) => `Runs are not reaching the platform (${why}). reticle_run { tool: "reticle_project", args: { push: true } } retries and reports why.`,
|
|
34
|
+
FINISH_LINKED: 'Done driving? reticle_session { action: "yield" } hands the tab back; this run syncs to the platform on its own.',
|
|
35
|
+
FINISH: 'Done driving? reticle_session { action: "yield" } hands the tab back.',
|
|
36
|
+
/**
|
|
37
|
+
* The evidence of this app is landing outside any project, so nothing will send it. A second
|
|
38
|
+
* checkout's runs and flows went to `~/.reticle/unmatched/<id>` and the agent was told nothing.
|
|
39
|
+
*/
|
|
40
|
+
UNMATCHED: (root, contenders, serving) => {
|
|
41
|
+
const app = serving === undefined ? "This app's" : `The app served from ${serving}: its`;
|
|
42
|
+
const lead = `${app} runs and flows are going to ${root}, not your project, so they will not reach the dashboard: `;
|
|
43
|
+
if (0 === contenders.length) {
|
|
44
|
+
return `${lead}no folder on this machine declares its project. Run \`reticle init\` in the app's folder.`;
|
|
45
|
+
}
|
|
46
|
+
return (`${lead}${String(contenders.length)} folders claim its project id (${contenders.join(', ')}). ` +
|
|
47
|
+
'Serve the app from the checkout that owns the id, or give this one its own id with ' +
|
|
48
|
+
"`reticle init` in it — that rewrites its committed .reticle.json, so keep the change on this checkout's branch.");
|
|
49
|
+
},
|
|
50
|
+
REPLAY: (flows) => `This app has ${String(flows)} saved flow(s). Replay them before driving anything by hand: reticle_verify { action: "flows" } re-verifies them with no model.`,
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Keyed by the agent session AND the folder: what is "said once" is said once to each agent. The
|
|
54
|
+
* daemon outlives agent sessions, and keyed by folder alone a fresh session in a second checkout
|
|
55
|
+
* was diverted into ~/.reticle/unmatched with nothing said, because an earlier one had been told.
|
|
56
|
+
*/
|
|
57
|
+
const roots = new Map();
|
|
58
|
+
/** Tests only. */
|
|
59
|
+
export function resetNextStep() {
|
|
60
|
+
roots.clear();
|
|
61
|
+
}
|
|
62
|
+
function readJson(path) {
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
65
|
+
return 'object' === typeof parsed && null !== parsed
|
|
66
|
+
? parsed
|
|
67
|
+
: undefined;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Declared within the window, read from the file's own stamp (or its age when it has none). */
|
|
74
|
+
function requestDeclared(root, now) {
|
|
75
|
+
const path = join(root, ReticleDir.REQUEST_FILE);
|
|
76
|
+
if (!existsSync(path))
|
|
77
|
+
return false;
|
|
78
|
+
const at = readJson(path)?.['at'];
|
|
79
|
+
const when = 'number' === typeof at ? at : statSync(path).mtimeMs;
|
|
80
|
+
return now - when < REQUEST_FRESH_MS;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Run files THIS agent session wrote (at or after `since`) after the last push, and old enough that a
|
|
84
|
+
* sync cycle should have sent them. Another session's are not this one's to be told about.
|
|
85
|
+
*/
|
|
86
|
+
function unsentRuns(root, lastPushAt, now, since) {
|
|
87
|
+
try {
|
|
88
|
+
const dir = join(root, ReticleDir.RUNS_SUBDIR);
|
|
89
|
+
return readdirSync(dir).filter((name) => {
|
|
90
|
+
// A drive's own record is not a run and never syncs.
|
|
91
|
+
if (name.endsWith(DRIVE_RECORD_SUFFIX))
|
|
92
|
+
return false;
|
|
93
|
+
const at = statSync(join(dir, name)).mtimeMs;
|
|
94
|
+
return at >= since && at > lastPushAt + UNSENT_AFTER_MS && now - at > UNSENT_AFTER_MS;
|
|
95
|
+
}).length;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Whether this agent session wrote a run or a flow here since it began. */
|
|
102
|
+
function wroteSince(root, since) {
|
|
103
|
+
for (const sub of [ReticleDir.RUNS_SUBDIR, ReticleDir.FLOWS_SUBDIR]) {
|
|
104
|
+
try {
|
|
105
|
+
const dir = join(root, sub);
|
|
106
|
+
if (readdirSync(dir).some((name) => statSync(join(dir, name)).mtimeMs >= since))
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
/* nothing written there */
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Why sync needs a person, from the sync's own bookkeeping; undefined when it is fine.
|
|
117
|
+
*
|
|
118
|
+
* Runs that were written and never sent count too. A project the sync loop never looked at has no
|
|
119
|
+
* error and no refusal, which is how a whole day of runs stayed on one machine with every check
|
|
120
|
+
* reporting fine.
|
|
121
|
+
*/
|
|
122
|
+
function syncProblem(root, now, since) {
|
|
123
|
+
const state = readJson(join(root, ReticleDir.CLOUD_STATE_FILE));
|
|
124
|
+
const pushed = state?.['lastPushAt'];
|
|
125
|
+
const unsent = unsentRuns(root, 'number' === typeof pushed ? pushed : 0, now, since);
|
|
126
|
+
if (0 < unsent)
|
|
127
|
+
return `${String(unsent)} run(s) written here were never sent`;
|
|
128
|
+
if (state === undefined)
|
|
129
|
+
return undefined;
|
|
130
|
+
const error = state['lastError'];
|
|
131
|
+
// A refused key read as the platform's "valid API key required" to a member removed from the
|
|
132
|
+
// workspace, whose key was set: it was refused, which is what they have to act on — and it holds
|
|
133
|
+
// back this session's work too, so it is said whoever wrote what.
|
|
134
|
+
const refusal = keyRefusalAtLastSync(root);
|
|
135
|
+
if (refusal !== undefined)
|
|
136
|
+
return refusal;
|
|
137
|
+
// Anything else the project's sync reports is said to a session whose own work it holds back: a
|
|
138
|
+
// flow another session saved was named on every result of one that had written nothing.
|
|
139
|
+
if (!wroteSince(root, since))
|
|
140
|
+
return undefined;
|
|
141
|
+
if ('string' === typeof error && 0 < error.length)
|
|
142
|
+
return error.slice(0, 120);
|
|
143
|
+
const refused = state['refusedRuns'];
|
|
144
|
+
const count = 'object' === typeof refused && null !== refused ? Object.keys(refused).length : 0;
|
|
145
|
+
return 0 < count ? `${String(count)} run(s) refused` : undefined;
|
|
146
|
+
}
|
|
147
|
+
/** Saved flow files under `flows/`, one level of project folders deep. */
|
|
148
|
+
function savedFlows(dir) {
|
|
149
|
+
try {
|
|
150
|
+
return readdirSync(dir, { withFileTypes: true }).reduce((n, entry) => n +
|
|
151
|
+
(entry.isDirectory()
|
|
152
|
+
? readdirSync(join(dir, entry.name)).filter((f) => f.endsWith('.json')).length
|
|
153
|
+
: entry.name.endsWith('.json')
|
|
154
|
+
? 1
|
|
155
|
+
: 0), 0);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** The line, or undefined when there is nothing the agent should be told right now. */
|
|
162
|
+
export function nextStep(input) {
|
|
163
|
+
const { root } = input;
|
|
164
|
+
if (root === undefined)
|
|
165
|
+
return undefined;
|
|
166
|
+
const key = `${callingAttachId() ?? ''}\u0000${root}`;
|
|
167
|
+
const state = roots.get(key) ?? {
|
|
168
|
+
calls: 0,
|
|
169
|
+
lastQuietAt: Number.NEGATIVE_INFINITY,
|
|
170
|
+
declareAsks: 0,
|
|
171
|
+
replayTold: false,
|
|
172
|
+
since: input.now,
|
|
173
|
+
};
|
|
174
|
+
roots.set(key, state);
|
|
175
|
+
state.calls += 1;
|
|
176
|
+
const linked = existsSync(join(root, ReticleDir.CLOUD_LINK_FILE));
|
|
177
|
+
// A key in the environment syncs too, so its runs not arriving is just as much a problem.
|
|
178
|
+
const sends = linked || 0 < (process.env[ReticleEnv.API_KEY] ?? '').length;
|
|
179
|
+
const quietDue = state.calls - state.lastQuietAt >= QUIET_CALLS;
|
|
180
|
+
// Before anything else, once per folder: everything else said here assumes the work is landing
|
|
181
|
+
// in the project.
|
|
182
|
+
const unmatched = input.unmatched;
|
|
183
|
+
if (unmatched !== undefined && unmatched.root !== state.unmatchedTold) {
|
|
184
|
+
state.unmatchedTold = unmatched.root;
|
|
185
|
+
return NextText.UNMATCHED(unmatched.root, unmatched.contenders, unmatched.serving);
|
|
186
|
+
}
|
|
187
|
+
// Measured on a whole-app drive: an agent re-drove everything by hand while saved flows sat
|
|
188
|
+
// unreplayed, though the skill says to replay first. Said on the first call, where it is in time.
|
|
189
|
+
if (!state.replayTold && !input.tool.endsWith('verify')) {
|
|
190
|
+
state.replayTold = true;
|
|
191
|
+
const saved = savedFlows(join(root, ReticleDir.FLOWS_SUBDIR));
|
|
192
|
+
if (0 < saved)
|
|
193
|
+
return NextText.REPLAY(saved);
|
|
194
|
+
}
|
|
195
|
+
const problem = sends ? syncProblem(root, input.now, state.since) : undefined;
|
|
196
|
+
if (problem !== undefined && problem !== state.problemTold && (input.verdict || quietDue)) {
|
|
197
|
+
state.lastQuietAt = state.calls;
|
|
198
|
+
state.problemTold = problem;
|
|
199
|
+
return NextText.SYNC_PROBLEM(problem);
|
|
200
|
+
}
|
|
201
|
+
// Not on the declare call itself, which is the answer to this line.
|
|
202
|
+
if (!input.tool.endsWith('intent') &&
|
|
203
|
+
state.declareAsks < DECLARE_ASKS &&
|
|
204
|
+
!requestDeclared(root, input.now) &&
|
|
205
|
+
(input.verdict || quietDue)) {
|
|
206
|
+
state.lastQuietAt = state.calls;
|
|
207
|
+
state.declareAsks += 1;
|
|
208
|
+
return NextText.DECLARE;
|
|
209
|
+
}
|
|
210
|
+
if (!input.verdict)
|
|
211
|
+
return undefined;
|
|
212
|
+
// How to connect is the agent nudge's to say, once per session (`platform-moment.ts`).
|
|
213
|
+
return sends ? NextText.FINISH_LINKED : NextText.FINISH;
|
|
214
|
+
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Observe / wait / assert tools — reticle_observe, reticle_wait_for, reticle_assert, reticle_network,
|
|
3
3
|
* reticle_console, reticle_animations. Split out of tools.ts; assembled back via...OBSERVE_TOOLS.
|
|
4
4
|
*/
|
|
5
|
+
import { checkWords, runIdOfCall } from '../../judgement/runs/drive-run.js';
|
|
5
6
|
import { noteEmptyRead } from './gaps/observed-nothing.js';
|
|
6
7
|
import { z } from 'zod';
|
|
7
8
|
import { aliasParam } from './args/alias-args.js';
|
|
@@ -159,8 +160,11 @@ export const OBSERVE_TOOLS = [
|
|
|
159
160
|
// Output budget: cap to the most recent N (no silent caps — droppedOldest is surfaced in cost).
|
|
160
161
|
const { events: budgeted, droppedOldest } = applyEventBudget(filtered, asNumber(args['max_events']) ?? DEFAULT_OBSERVE_EVENT_LIMIT);
|
|
161
162
|
const report = buildReactionReport(budgeted, windowMs);
|
|
162
|
-
// Run over the
|
|
163
|
-
// timeline was capped for tokens
|
|
163
|
+
// Run over the WHOLE window: neither unfiltered nor unbudgeted is a display choice. A contradiction
|
|
164
|
+
// must not vanish because the timeline was capped for tokens, and it must not APPEAR because a
|
|
165
|
+
// filter removed its counter-evidence: `filters: ["route"]` dropped the DOM events proving a
|
|
166
|
+
// destination rendered, and the call reported `route-rendered-nothing` the unfiltered call did
|
|
167
|
+
// not (#1359). Detection is cheap; the events are already in hand.
|
|
164
168
|
// The act that opened this window is not in `args` — observe is a separate call — so its action
|
|
165
169
|
// and in-target mutation count are read back off the session. Without them the "this click did
|
|
166
170
|
// nothing" check is unreachable on the ordinary act-then-observe flow, which is most of them.
|
|
@@ -169,7 +173,7 @@ export const OBSERVE_TOOLS = [
|
|
|
169
173
|
// never asked about.
|
|
170
174
|
const actCursor = session.lastAct.cursor();
|
|
171
175
|
const judgingTheAct = actCursor !== undefined && actCursor >= since;
|
|
172
|
-
const contradictions = findContradictions(
|
|
176
|
+
const contradictions = findContradictions(events, {
|
|
173
177
|
currentDocumentId: session.currentDocumentId,
|
|
174
178
|
currentEditEpoch: session.currentEditEpoch,
|
|
175
179
|
appOrigin: session.url,
|
|
@@ -208,6 +212,12 @@ export const OBSERVE_TOOLS = [
|
|
|
208
212
|
.number()
|
|
209
213
|
.optional()
|
|
210
214
|
.describe('Present when this call stopped at the per-call limit before the predicate was seen. Call again with timeout_ms set to this, the same predicate and the same since, to keep waiting.'),
|
|
215
|
+
verified: z
|
|
216
|
+
.string()
|
|
217
|
+
.optional()
|
|
218
|
+
.describe('THE field to gate on, graded as reticle_assert grades it: "yes" | "no" | "unknown".'),
|
|
219
|
+
verifiedReason: z.string().optional().describe('The deciding clause, as one code.'),
|
|
220
|
+
because: z.string().optional().describe('One sentence naming the deciding evidence.'),
|
|
211
221
|
pass: z.boolean(),
|
|
212
222
|
evidence: z.unknown().optional(),
|
|
213
223
|
failureReason: z.string().optional(),
|
|
@@ -258,7 +268,7 @@ export const OBSERVE_TOOLS = [
|
|
|
258
268
|
if (bodyRefusal !== undefined)
|
|
259
269
|
throw new Error(bodyRefusal);
|
|
260
270
|
// Honesty: explicit since wins; else default to the last act's cursor; else the whole buffer.
|
|
261
|
-
|
|
271
|
+
const since = asNumber(args['since']) ?? session.lastAct.cursor() ?? 0;
|
|
262
272
|
// See the note on the assert handler below: a wait cut off by a full-document navigation is
|
|
263
273
|
// followed to the document that took over, rather than graded as a lost observation there.
|
|
264
274
|
const predicateStarted = session.elapsed();
|
|
@@ -270,20 +280,37 @@ export const OBSERVE_TOOLS = [
|
|
|
270
280
|
predicateStarted,
|
|
271
281
|
reevaluate: (next, budget) => waitForPredicate(next, predicate, budget, 0),
|
|
272
282
|
});
|
|
273
|
-
if (followed.followed)
|
|
274
|
-
since = 0;
|
|
275
283
|
session = followed.session;
|
|
276
284
|
const verdict = followed.verdict;
|
|
285
|
+
// Stopped at the per-call limit before the predicate was seen: "not yet", which is not a "no".
|
|
286
|
+
// Grading it read as a failure of the app while the caller is told to keep waiting (#1119).
|
|
287
|
+
const resume = resumeAfter(requestedMs, waitBudget, verdict);
|
|
288
|
+
if (resume !== undefined && !verdict.pass) {
|
|
289
|
+
return withControl(session, {
|
|
290
|
+
...annotateStarvedFailure(session, verdict),
|
|
291
|
+
...(followed.followed ? { sessionId: session.id } : {}),
|
|
292
|
+
resume_ms: resume,
|
|
293
|
+
...healthEnvelope(session),
|
|
294
|
+
...bufferEnvelope(session),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// The verdict, graded as `reticle_assert` grades it. This is `reticle_assert { action: "wait" }`,
|
|
298
|
+
// and it answered `pass` with no `verified` — the one field an agent is told to gate on — while
|
|
299
|
+
// `action: "now"` carried it. Not journaled: a wait settles the page; the proof is the assert.
|
|
300
|
+
const { decision } = await assertVerdict(session, predicate, verdict.pass, verdict.evidence, followed.followed ? 0 : since, verdict.inconclusive, verdict.observationLost);
|
|
277
301
|
// match reticle_assert — wrap with control + session health (throttle matters most while blocking)
|
|
278
302
|
// and the buffer envelope, so a verdict reached over an evicted window says so.
|
|
279
303
|
return withControl(session, {
|
|
304
|
+
verified: decision['verified'],
|
|
305
|
+
verifiedReason: decision['verifiedReason'],
|
|
306
|
+
because: decision['because'],
|
|
280
307
|
// #537's starved-wait note wraps the verdict (it RETURNS the verdict), so it stands where
|
|
281
308
|
// `...verdict` did. The source line is #533's `assertionSource`, which superseded
|
|
282
309
|
// `lastActSourceOnFailure` — an assert used to be blamed on the previous act's file:line.
|
|
283
310
|
...annotateStarvedFailure(session, verdict),
|
|
284
311
|
...assertionSource(session, predicate, verdict),
|
|
285
312
|
...(followed.followed ? { sessionId: session.id } : {}),
|
|
286
|
-
...(
|
|
313
|
+
...(resume === undefined ? {} : { resume_ms: resume }),
|
|
287
314
|
...healthEnvelope(session),
|
|
288
315
|
...bufferEnvelope(session),
|
|
289
316
|
});
|
|
@@ -316,6 +343,10 @@ export const OBSERVE_TOOLS = [
|
|
|
316
343
|
...sessionIdShape,
|
|
317
344
|
},
|
|
318
345
|
outputSchema: {
|
|
346
|
+
// Returned on every graded answer and undeclared, so a schema-strict client dropped the one
|
|
347
|
+
// field an agent is told to gate on (#1119).
|
|
348
|
+
verified: z.string().optional().describe('THE field to gate on: "yes" | "no" | "unknown".'),
|
|
349
|
+
verifiedReason: z.string().optional().describe('The deciding clause, as one code.'),
|
|
319
350
|
pass: z.boolean(),
|
|
320
351
|
evidence: z.unknown().optional(),
|
|
321
352
|
failureReason: z.string().optional(),
|
|
@@ -433,6 +464,8 @@ export const OBSERVE_TOOLS = [
|
|
|
433
464
|
verdictId: inlineVerdictId(ReticleTool.ASSERT, deps.now()),
|
|
434
465
|
grade: gradeOfPredicate(predicate),
|
|
435
466
|
at: deps.now(),
|
|
467
|
+
// The run this check lands in, so the platform links proof and run by id, not by time.
|
|
468
|
+
runId: runIdOfCall(session.id),
|
|
436
469
|
},
|
|
437
470
|
/*
|
|
438
471
|
* An assertion has no element of its own — it observes, it does not act. The file it names
|
|
@@ -446,13 +479,16 @@ export const OBSERVE_TOOLS = [
|
|
|
446
479
|
// in the response lives only in the agent's context window, which is the copy a compaction
|
|
447
480
|
// destroys — see runs/run-context.ts. Recorded WITHOUT an attribution window: this tool drives
|
|
448
481
|
// nothing, so no event it observed was caused by it.
|
|
449
|
-
session.recordAction(ReticleTool.ASSERT, asRecord(args),
|
|
482
|
+
session.recordAction(ReticleTool.ASSERT, asRecord(args), {
|
|
483
|
+
...verdictEffect,
|
|
484
|
+
...checkWords(verdict),
|
|
485
|
+
});
|
|
450
486
|
// A passing check over the default window (since the last act) is proof of that act, so it
|
|
451
487
|
// joins that step in the recording — otherwise "act, then assert" saves a bare click. An
|
|
452
488
|
// explicit `since` may reach back past the last step, where replay would not find it. The
|
|
453
489
|
// store itself refuses when a navigation came after that step: see RecordingStore.markNavigated.
|
|
454
490
|
if (Verified.YES === decision['verified'] && args['since'] === undefined) {
|
|
455
|
-
captureAssertion(deps.recordings, predicate);
|
|
491
|
+
captureAssertion(deps.recordings, predicate, session.id);
|
|
456
492
|
}
|
|
457
493
|
return withControl(session, {
|
|
458
494
|
...decision,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { AgentNudgeKind } from '@reticlehq/core';
|
|
2
|
+
import { type InstrumentedTab } from '../../portal/session/recorded-gaps.js';
|
|
3
|
+
import type { ToolDeps } from './tool-kit.js';
|
|
4
|
+
/** Verified runs kept only on this machine before the platform is worth a sentence. */
|
|
5
|
+
export declare const LOCAL_RUNS_MOMENT = 5;
|
|
6
|
+
/** A `.reticle` this large is history worth keeping somewhere other than one laptop. */
|
|
7
|
+
export declare const LARGE_RETICLE_BYTES: number;
|
|
8
|
+
export declare const CONNECT = "`npx @reticlehq/server connect`";
|
|
9
|
+
export declare function takePlatformMoment(deps: Pick<ToolDeps, 'fs' | 'linkedCloud'> & {
|
|
10
|
+
now?: () => number;
|
|
11
|
+
}, raw: Record<string, unknown>,
|
|
12
|
+
/** The `.reticle` of the project the verdict was about — the session's, not the daemon's. */
|
|
13
|
+
rootOf: () => string): Promise<string | undefined>;
|
|
14
|
+
/** Tests only. */
|
|
15
|
+
export declare function resetPlatformMoments(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Hand-driven actions before the agent is told to hand journeys to the Harness. One: with the
|
|
18
|
+
* Harness switched on, the person has said they want journeys driven by it, so the agent hears it on
|
|
19
|
+
* its first hand-driven step rather than after eight.
|
|
20
|
+
*/
|
|
21
|
+
export declare const LONG_JOURNEY_ACTS = 1;
|
|
22
|
+
export declare const NudgeText: {
|
|
23
|
+
readonly CONNECT: string;
|
|
24
|
+
readonly closeGaps: (reason: string) => string;
|
|
25
|
+
readonly switchOn: (percent: number) => string;
|
|
26
|
+
readonly explore: () => string;
|
|
27
|
+
};
|
|
28
|
+
export interface NudgeInput {
|
|
29
|
+
/** The agent's connection: a session. Absent means not an agent's own call, and nothing is said. */
|
|
30
|
+
session: string | undefined;
|
|
31
|
+
/** The project the call was about. */
|
|
32
|
+
root: string | undefined;
|
|
33
|
+
tool: string;
|
|
34
|
+
/** Whether this result carries a verdict. */
|
|
35
|
+
verdict: boolean;
|
|
36
|
+
/** Whether this result failed: an error, a refusal, or a verdict that came back no. */
|
|
37
|
+
failed: boolean;
|
|
38
|
+
/** Whether the project is linked to the platform. Read only when a kind needs it. */
|
|
39
|
+
linked: () => Promise<boolean>;
|
|
40
|
+
/** The driven tab's Harness gate, when one is resolved. */
|
|
41
|
+
gate: {
|
|
42
|
+
percent: number;
|
|
43
|
+
unlocked: boolean;
|
|
44
|
+
reason?: string;
|
|
45
|
+
} | undefined;
|
|
46
|
+
/** Whether the Harness is switched on, when the platform has said. Read only when needed. */
|
|
47
|
+
harnessOn: () => boolean | undefined;
|
|
48
|
+
/** Whether this call drives the page by hand. */
|
|
49
|
+
acted: boolean;
|
|
50
|
+
}
|
|
51
|
+
/** Tests only. */
|
|
52
|
+
export declare function resetNudges(): void;
|
|
53
|
+
/** The advisory for this result, and its kind, or undefined. Never throws. */
|
|
54
|
+
export declare function takeNudge(input: NudgeInput): Promise<{
|
|
55
|
+
kind: AgentNudgeKind;
|
|
56
|
+
text: string;
|
|
57
|
+
} | undefined>;
|
|
58
|
+
/** A result that failed: thrown or returned as an error, refused, or a verdict that said no. */
|
|
59
|
+
export declare function resultFailed(raw: Record<string, unknown>, isError: boolean): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* The advisory for one agent call, wired to this daemon: the tab's gate, the project's link and the
|
|
62
|
+
* Harness switch as the platform last said it. Counted when shown. Never throws.
|
|
63
|
+
*/
|
|
64
|
+
export declare function agentNudge(input: {
|
|
65
|
+
deps: Pick<ToolDeps, 'attachId' | 'linkedCloud'>;
|
|
66
|
+
tool: string;
|
|
67
|
+
raw: Record<string, unknown>;
|
|
68
|
+
isError: boolean;
|
|
69
|
+
tab: InstrumentedTab | undefined;
|
|
70
|
+
root: string | undefined;
|
|
71
|
+
harnessOn: () => boolean | undefined;
|
|
72
|
+
}): Promise<string | undefined>;
|