@reticlehq/server 3.6.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/SKILL.md +122 -123
- 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 +18 -2
- package/dist/command/cli/adhoc-verdict.js +70 -6
- 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/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 +28 -105
- 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 +34 -4
- package/dist/command/cli/cli-verify.js +81 -12
- package/dist/command/cli/cloud-cli.d.ts +13 -0
- package/dist/command/cli/cloud-cli.js +145 -333
- 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 +15 -1
- package/dist/command/cli/cloud-login.js +67 -13
- 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/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/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 +11 -2
- 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.js +1 -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 +29 -8
- 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 -178
- 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 +14 -0
- package/dist/command/cli.js +103 -83
- package/dist/command/daemon/daemon-resilience.js +4 -4
- package/dist/command/daemon/daemon-resolve.d.ts +9 -1
- package/dist/command/daemon/daemon-resolve.js +49 -10
- 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/dev-server-log-cap.js +2 -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 +10 -1
- package/dist/command/setup/init/init-port.js +22 -2
- package/dist/command/setup/init/init-runtime.d.ts +12 -2
- package/dist/command/setup/init/init-runtime.js +96 -37
- package/dist/command/setup/node-effects.d.ts +2 -0
- package/dist/command/setup/node-effects.js +36 -8
- 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 +1 -1
- package/dist/command/setup/run-setup.d.ts +29 -9
- package/dist/command/setup/run-setup.js +34 -28
- package/dist/command/setup/setup-command.d.ts +23 -0
- package/dist/command/setup/setup-command.js +57 -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 +38 -2
- package/dist/features/crawl/crawl.js +14 -1
- package/dist/features/exhaust/ledger.d.ts +14 -14
- package/dist/features/harness/drive-report.d.ts +39 -5
- package/dist/features/harness/drive-report.js +271 -54
- 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 +1 -1
- package/dist/features/harness/drivers.js +1 -1
- 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/goals.d.ts +68 -7
- package/dist/features/harness/goals.js +289 -36
- package/dist/features/harness/harness.d.ts +30 -1
- package/dist/features/harness/harness.js +141 -7
- package/dist/features/harness/platform/local-apps.d.ts +36 -3
- package/dist/features/harness/platform/local-apps.js +81 -5
- 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 +8 -2
- package/dist/features/harness/platform/remote-drive.js +22 -9
- package/dist/features/harness/platform/script.d.ts +57 -11
- package/dist/features/harness/platform/script.js +144 -12
- package/dist/features/harness/platform/server-driver.d.ts +17 -4
- package/dist/features/harness/platform/server-driver.js +29 -26
- package/dist/features/harness/platform-config.d.ts +38 -5
- package/dist/features/harness/platform-config.js +93 -8
- package/dist/features/harness/route-guess.d.ts +13 -0
- package/dist/features/harness/route-guess.js +49 -0
- package/dist/features/harness/script/script-run.d.ts +30 -1
- package/dist/features/harness/script/script-run.js +355 -48
- 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.js +22 -14
- 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 +21 -2
- package/dist/hooks/driven-by.js +42 -2
- package/dist/hooks/hook-bus.d.ts +4 -0
- package/dist/hooks/hook-bus.js +18 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +26 -183
- 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 +20 -4
- 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.js +25 -9
- package/dist/judgement/runs/artifact/run-store.d.ts +13 -1
- package/dist/judgement/runs/artifact/run-store.js +175 -8
- 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 +53 -5
- package/dist/judgement/runs/drive-run.js +234 -20
- package/dist/judgement/runs/resume.d.ts +44 -0
- package/dist/judgement/runs/resume.js +137 -0
- package/dist/judgement/runs/reticle-runner.js +5 -2
- 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 +2 -0
- package/dist/judgement/runs/verification-sync.js +36 -15
- package/dist/language/flows/decision.js +2 -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 +7 -2
- package/dist/language/flows/flow-anchor.js +10 -3
- 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 +37 -3
- package/dist/language/flows/flow-replay-run.js +16 -18
- package/dist/language/flows/flow-replay-types.d.ts +1 -1
- package/dist/language/flows/flow-replay.d.ts +18 -1
- package/dist/language/flows/flow-replay.js +22 -7
- package/dist/language/flows/flow-result.d.ts +22 -1
- package/dist/language/flows/flow-result.js +47 -2
- package/dist/language/flows/flow-step-runners.d.ts +2 -0
- package/dist/language/flows/flow-step-runners.js +12 -6
- package/dist/language/flows/flow-store-for-session.js +5 -1
- package/dist/language/flows/flow-tools.d.ts +10 -0
- package/dist/language/flows/flow-tools.js +61 -62
- package/dist/language/flows/flows.d.ts +16 -1
- package/dist/language/flows/flows.js +69 -10
- package/dist/language/flows/narrow-write.d.ts +7 -0
- package/dist/language/flows/narrow-write.js +36 -1
- package/dist/language/flows/recording/recording-backtrack.js +14 -1
- package/dist/language/flows/recording/tape/recordings.d.ts +29 -1
- package/dist/language/flows/recording/tape/recordings.js +60 -10
- package/dist/language/flows/replay.js +29 -6
- package/dist/language/flows/single-replay.d.ts +7 -0
- package/dist/language/flows/single-replay.js +26 -0
- package/dist/language/flows/verify-change-tools.d.ts +1 -0
- package/dist/language/flows/verify-change-tools.js +200 -193
- package/dist/memory/cloud/cloud-config.d.ts +10 -1
- package/dist/memory/cloud/cloud-config.js +19 -5
- package/dist/memory/cloud/cloud-sync.js +3 -3
- package/dist/memory/cloud/harness-config.d.ts +49 -0
- package/dist/memory/cloud/harness-config.js +16 -20
- package/dist/memory/cloud/memory-scope.d.ts +17 -0
- package/dist/memory/cloud/memory-scope.js +22 -0
- package/dist/memory/cloud/sync-cycle.d.ts +32 -4
- package/dist/memory/cloud/sync-cycle.js +113 -12
- package/dist/memory/cloud/sync-daemon.d.ts +11 -0
- package/dist/memory/cloud/sync-daemon.js +114 -4
- package/dist/memory/cloud/sync-disk.js +26 -2
- 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 +16 -1
- package/dist/memory/impact/account-watch.js +26 -1
- package/dist/memory/impact/impact-store.d.ts +1 -4
- package/dist/memory/impact/impact-store.js +32 -42
- 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 +12 -0
- package/dist/memory/intent/intent-store.d.ts +1 -0
- package/dist/memory/intent/intent-tools.js +42 -2
- 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/journal-recorder.js +46 -3
- package/dist/memory/journal/on-disk/retention.d.ts +5 -0
- package/dist/memory/journal/on-disk/retention.js +27 -2
- package/dist/memory/journal/on-disk/workspace-tiers.js +2 -0
- package/dist/memory/journal/session-end.d.ts +15 -1
- package/dist/memory/journal/session-end.js +38 -7
- package/dist/memory/project/artifact-root-resolver.js +33 -5
- package/dist/memory/project/artifact-root.d.ts +4 -3
- package/dist/memory/project/artifact-root.js +2 -2
- package/dist/memory/project/dir/reticle-dir.d.ts +14 -0
- package/dist/memory/project/dir/reticle-dir.js +23 -2
- package/dist/memory/project/link-directory.d.ts +15 -0
- package/dist/memory/project/link-directory.js +44 -0
- 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 +2 -0
- package/dist/memory/project/session-root.js +9 -1
- package/dist/memory/project/sync-status.d.ts +46 -0
- package/dist/memory/project/sync-status.js +135 -1
- package/dist/memory/recall/memory-tools.js +46 -3
- 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.js +36 -8
- package/dist/portal/bridge/bridge.d.ts +9 -5
- package/dist/portal/bridge/bridge.js +66 -23
- package/dist/portal/bridge/harness-request.d.ts +23 -0
- package/dist/portal/bridge/harness-request.js +27 -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 +2 -0
- package/dist/portal/input/real-input.js +13 -10
- package/dist/portal/pool/browser-pool.d.ts +48 -0
- package/dist/portal/pool/browser-pool.js +120 -2
- 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 +27 -5
- package/dist/portal/pool/playwright-launcher.js +59 -14
- package/dist/portal/pool/pool-contract.d.ts +21 -1
- 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.js +6 -1
- 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 +9 -0
- package/dist/portal/session/dev-server/dev-command.js +27 -1
- 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/human/live-control.d.ts +9 -2
- package/dist/portal/session/human/live-control.js +12 -3
- package/dist/portal/session/live-control-tools.js +82 -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 +1 -1
- package/dist/portal/session/no-session-diagnosis.js +31 -9
- package/dist/portal/session/no-session-next-action.d.ts +20 -0
- package/dist/portal/session/no-session-next-action.js +134 -61
- package/dist/portal/session/no-session-watch.js +179 -22
- package/dist/portal/session/presence/session-lease.js +1 -1
- package/dist/portal/session/recorded-gaps.d.ts +97 -0
- package/dist/portal/session/recorded-gaps.js +251 -0
- package/dist/portal/session/session-health.d.ts +11 -0
- package/dist/portal/session/session-health.js +3 -1
- package/dist/portal/session/session-info.js +2 -1
- package/dist/portal/session/session-manager.d.ts +18 -0
- package/dist/portal/session/session-manager.js +54 -3
- package/dist/portal/session/session-successor.d.ts +8 -0
- package/dist/portal/session/session-successor.js +1 -1
- package/dist/portal/session/session.d.ts +15 -28
- package/dist/portal/session/session.js +60 -61
- 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 +7 -1
- package/dist/start-wiring.d.ts +63 -0
- package/dist/start-wiring.js +169 -0
- package/dist/status-payload.d.ts +13 -1
- package/dist/status-payload.js +13 -1
- package/dist/surface/http-server.js +7 -1
- 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 +4 -0
- package/dist/surface/mcp/mcp-proxy.js +29 -8
- package/dist/surface/mcp/mcp.d.ts +23 -0
- package/dist/surface/mcp/mcp.js +34 -4
- 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.js +22 -14
- package/dist/surface/mcp/shared-params.js +1 -1
- 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/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-sequence-tool.js +136 -27
- package/dist/surface/tools/act-tools.d.ts +0 -9
- package/dist/surface/tools/act-tools.js +48 -34
- 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.js +25 -15
- package/dist/surface/tools/browser-tools.js +43 -1
- package/dist/surface/tools/chat-drives.d.ts +75 -0
- package/dist/surface/tools/chat-drives.js +265 -21
- 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 +10 -0
- package/dist/surface/tools/empty-session-list.js +45 -5
- package/dist/surface/tools/error-recovery.d.ts +8 -0
- package/dist/surface/tools/error-recovery.js +69 -5
- package/dist/surface/tools/explore-tools.d.ts +23 -2
- package/dist/surface/tools/explore-tools.js +377 -74
- package/dist/surface/tools/feedback-tools.d.ts +2 -3
- package/dist/surface/tools/feedback-tools.js +4 -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 +52 -73
- package/dist/surface/tools/harness-explore.js +177 -146
- 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 +5 -0
- package/dist/surface/tools/harness-plan.js +7 -0
- package/dist/surface/tools/harness-script.d.ts +22 -0
- package/dist/surface/tools/harness-script.js +256 -38
- 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 +8 -0
- package/dist/surface/tools/harness-toolset.js +27 -4
- 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 +220 -93
- 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 +20 -0
- package/dist/surface/tools/lease-seed.js +45 -1
- package/dist/surface/tools/lease-tools.d.ts +10 -1
- package/dist/surface/tools/lease-tools.js +119 -69
- package/dist/surface/tools/live-call-text.js +2 -2
- 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 +11 -1
- package/dist/surface/tools/next-step.js +73 -18
- package/dist/surface/tools/observe-tools.js +43 -5
- package/dist/surface/tools/platform-moment.d.ts +60 -0
- package/dist/surface/tools/platform-moment.js +132 -4
- package/dist/surface/tools/read-tools.js +65 -14
- 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 +68 -2
- package/dist/surface/tools/tool-kit.js +73 -1
- package/dist/surface/tools/tools.js +25 -13
- 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 +27 -6
- package/dist/telemetry/hud-metrics.js +99 -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 +26 -2
- package/dist/telemetry/telemetry.js +102 -21
- package/dist/telemetry/verification-of.d.ts +3 -1
- package/dist/telemetry/verification-of.js +12 -4
- package/dist/wire-journal.d.ts +2 -2
- package/dist/wire-journal.js +16 -5
- package/docs/README.md +2 -2
- package/docs/actions.mdx +6 -3
- package/docs/adapters.md +1 -1
- package/docs/agent-cheatsheet.md +24 -27
- package/docs/architecture.md +5 -5
- package/docs/autodrive.md +13 -12
- 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 +8 -3
- package/docs/cli/drive.mdx +12 -12
- 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 +32 -15
- 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 +13 -4
- 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 +3 -2
- package/docs/cli.mdx +110 -41
- package/docs/debugging.md +3 -3
- package/docs/deploy-checks.md +1 -1
- package/docs/desktop.mdx +5 -3
- package/docs/enterprise.md +11 -10
- package/docs/environment.mdx +5 -2
- 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 +66 -64
- package/docs/human-control.md +15 -14
- package/docs/index.mdx +15 -43
- package/docs/install-agentic.mdx +22 -37
- package/docs/install-manual.mdx +22 -12
- 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 +8 -8
- package/docs/packages/test.mdx +4 -10
- package/docs/packages/vite-plugin.mdx +11 -4
- package/docs/packages.mdx +11 -15
- package/docs/platform-integration.md +6 -5
- package/docs/predicates.mdx +40 -24
- package/docs/quickstart.mdx +58 -29
- 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 +22 -24
- 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 +13 -4
- 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 +51 -45
- 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 +7 -5
- package/docs/what-is-reticle.mdx +2 -2
- package/docs/why-reticle.mdx +1 -1
- package/package.json +6 -5
- package/dist/command/cli/demo/demo-page.d.ts +0 -78
- package/dist/command/cli/demo/demo-page.js +0 -249
- package/dist/command/cli/demo/demo-run.d.ts +0 -38
- package/dist/command/cli/demo/demo-run.js +0 -138
- 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/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
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action tools — reticle_act and reticle_act_and_wait. Split out of tools.ts to keep that file under
|
|
3
|
+
* the line cap and assembled back into the tool list there via ...ACT_TOOLS; the native-input attempt
|
|
4
|
+
* itself lives in real-input-attempt.ts for the same reason.
|
|
5
|
+
*
|
|
6
|
+
* `reticle_act_sequence` is a sibling file and is assembled by `tools.ts` directly. It used to be
|
|
7
|
+
* re-exported through this list, which made a cycle out of nothing: that file needs `actCommand` from
|
|
8
|
+
* here, and a registry is the right place to collect a definition from.
|
|
9
|
+
*/
|
|
10
|
+
import { checkWords, runIdOfCall } from '../../judgement/runs/drive-run.js';
|
|
1
11
|
import { z } from 'zod';
|
|
2
12
|
import { aliasParam } from './args/alias-args.js';
|
|
3
13
|
import { resolveSessionWithin } from '../../portal/session/timing/resolve-within.js';
|
|
@@ -18,7 +28,7 @@ import { gapsForAction } from '@reticlehq/engine/evidence/instrumentation-gaps.j
|
|
|
18
28
|
import { withGapNovelty } from './gap-novelty.js';
|
|
19
29
|
import { noteSessionGaps } from '@reticlehq/engine/evidence/gap-ledger.js';
|
|
20
30
|
import { isChangeUndeclared } from '@reticlehq/engine/evidence/undeclared-change.js';
|
|
21
|
-
import { intentDebt,
|
|
31
|
+
import { intentDebt, ledgerFor } from '../../memory/intent/open-intents.js';
|
|
22
32
|
import { dischargeInlineIntent, inlineVerdictId, linkInlineIntent, } from '../../memory/intent/inline-intent.js';
|
|
23
33
|
import { declaresState } from '@reticlehq/engine/question/predicate/predicate-asks.js';
|
|
24
34
|
import { isStateUnwatched } from '@reticlehq/engine/evidence/blind-spots.js';
|
|
@@ -43,32 +53,21 @@ import { currentOf, healthEnvelope, refuseIfThrottled } from '../../portal/sessi
|
|
|
43
53
|
import { pausedShortCircuit, pausedOutputShape, withControl, PAUSED_NO_VERDICT, } from '../../portal/session/control-envelope.js';
|
|
44
54
|
import { asNumber, asRecord, asString } from '@reticlehq/core';
|
|
45
55
|
import { sourceOf } from './tools-helpers.js';
|
|
56
|
+
import { confirmedByDeclaration } from './act/act-danger.js';
|
|
46
57
|
import { dispatchAct, preflightAct } from './act/act-preflight.js';
|
|
47
|
-
import { followLostObservation } from './act/act-observation.js';
|
|
58
|
+
import { checkNet, disabledTargetNote, followLostObservation } from './act/act-observation.js';
|
|
48
59
|
import { intentArg, sessionIdShape } from './tool-kit.js';
|
|
49
60
|
import { verdictIntentGap } from '@reticlehq/engine/evidence/verdict-intent-gap.js';
|
|
50
61
|
import { asActionType, gradeOf } from './act/act-helpers.js';
|
|
51
62
|
import { resolveActTarget } from './act/act-target.js';
|
|
63
|
+
import { screenRequestFindings, withAdvisories } from './act/screen-request.js';
|
|
52
64
|
import { tryRealInput, rewriteUploadArgs, HOVER_NEEDS_POINTER_MSG } from './real-input-attempt.js';
|
|
53
65
|
import { gradeOfPredicate } from './assert/assert-grade.js';
|
|
54
66
|
import { readAlreadyTrue } from './act/already-true.js';
|
|
67
|
+
import { noteSourceSeen } from '../../portal/session/recorded-gaps.js';
|
|
55
68
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* It used to be `asString(args['action']) ?? ''`, so an unknown or missing action became the empty
|
|
59
|
-
* string and travelled on — reaching the browser as a command it could not perform, and reported back
|
|
60
|
-
* as a generic failure rather than "that is not an action". Validate at the boundary, per the project's
|
|
61
|
-
* unknown-plus-narrowing rule, so a typo is rejected where it can still be explained.
|
|
62
|
-
*/
|
|
63
|
-
/**
|
|
64
|
-
* The action vocabulary, derived from ActionType — never retyped.
|
|
65
|
-
*
|
|
66
|
-
* The description used to omit callable actions such as blur, upload and drag,
|
|
67
|
-
* because a hand-copied list drifts the moment
|
|
68
|
-
* someone adds an arm. Deriving both the schema and the prose from the enum makes that impossible.
|
|
69
|
-
*
|
|
70
|
-
* The handler already refused an unknown action with a good message; the schema now refuses it
|
|
71
|
-
* one layer earlier, before any session is resolved or any work is done.
|
|
69
|
+
* The action vocabulary, derived from ActionType — never retyped: a hand-copied list once omitted
|
|
70
|
+
* blur, upload and drag. The schema refuses an unknown action before any session is resolved.
|
|
72
71
|
*/
|
|
73
72
|
const ACTION_TYPE_VALUES = Object.values(ActionType);
|
|
74
73
|
const actionTypeEnum = z.enum(ACTION_TYPE_VALUES);
|
|
@@ -103,9 +102,8 @@ export async function actCommand(deps, session, actArgs, timeoutMs) {
|
|
|
103
102
|
};
|
|
104
103
|
}
|
|
105
104
|
const bridgeArgs = { ...actArgs, args: rewritten };
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
: session.command(ReticleCommand.ACT, bridgeArgs);
|
|
105
|
+
// What the acted element shows (test id, source) is noted in `Session.command`, Harness acts too.
|
|
106
|
+
return session.command(ReticleCommand.ACT, bridgeArgs, timeoutMs);
|
|
109
107
|
}
|
|
110
108
|
export const ACT_TOOLS = [
|
|
111
109
|
{
|
|
@@ -313,6 +311,8 @@ export const ACT_TOOLS = [
|
|
|
313
311
|
observed: z.string().optional(),
|
|
314
312
|
expected: z.string().optional(),
|
|
315
313
|
assertion: z.string().optional(),
|
|
314
|
+
caseOnlyMiss: z.boolean().optional(),
|
|
315
|
+
wouldHold: z.string().optional(),
|
|
316
316
|
}),
|
|
317
317
|
trace: z
|
|
318
318
|
.unknown()
|
|
@@ -388,7 +388,9 @@ export const ACT_TOOLS = [
|
|
|
388
388
|
// Omitting `until` waits for the page to settle (idle) — the deterministic default vs a sleep.
|
|
389
389
|
// `predicate` is what reticle_assert / reticle_wait_for call this — see alias-args.ts.
|
|
390
390
|
const withUntil = aliasParam(args, 'until', ['predicate']);
|
|
391
|
-
|
|
391
|
+
// Declared: the consequence is named, which also confirms a named dangerous control.
|
|
392
|
+
const untilNamed = withUntil['until'] !== undefined;
|
|
393
|
+
const until = untilNamed
|
|
392
394
|
? parsePredicate(withUntil['until'])
|
|
393
395
|
: { kind: PredicateKind.SETTLED };
|
|
394
396
|
// BEFORE the action. A body clause this session cannot answer would fail whatever the app
|
|
@@ -401,6 +403,8 @@ export const ACT_TOOLS = [
|
|
|
401
403
|
// the undeclared-change gap silent on THIS verdict rather than the next one: it reads the
|
|
402
404
|
// ledger below and finds something open. The discharge comes after that read.
|
|
403
405
|
const intentId = await linkInlineIntent(deps, asString(args['sessionId']), asString(args['intent']), PredicateKind.SETTLED === until.kind ? undefined : until);
|
|
406
|
+
// Bound while the session is live: the action may take the tab off the app's origin.
|
|
407
|
+
const readLedger = ledgerFor(deps, asString(args['sessionId']));
|
|
404
408
|
// Everything refusable without touching the page — see act-preflight.ts.
|
|
405
409
|
preflightAct(asRecord(args['args']), until);
|
|
406
410
|
// Resolve `target` to a ref BEFORE the action window opens, so the lookup is not attributed to
|
|
@@ -438,7 +442,7 @@ export const ACT_TOOLS = [
|
|
|
438
442
|
const actResult = await dispatchAct(() => actCommand(deps, session, {
|
|
439
443
|
ref: resolved.ref,
|
|
440
444
|
action: args['action'],
|
|
441
|
-
args: args['args']
|
|
445
|
+
args: confirmedByDeclaration(asRecord(args['args']), args['target'], untilNamed),
|
|
442
446
|
}));
|
|
443
447
|
if (actResult !== null) {
|
|
444
448
|
if (!actResult.ok)
|
|
@@ -479,13 +483,13 @@ export const ACT_TOOLS = [
|
|
|
479
483
|
const r = asRecord(actResult?.result);
|
|
480
484
|
if ('boolean' === typeof r['settled'])
|
|
481
485
|
settledOutcome = r['settled'];
|
|
482
|
-
// Where the acted element is written
|
|
483
|
-
// available even when the action unmounted its own target.
|
|
486
|
+
// Where the acted element is written, captured at act time even if the action unmounted it.
|
|
484
487
|
const actedSource = sourceOf(r['source']);
|
|
485
|
-
// Remembered
|
|
486
|
-
//
|
|
488
|
+
// Remembered so a LATER assertion can name a file with no element to point at, and so the
|
|
489
|
+
// app's coverage counts source mapping as seen.
|
|
487
490
|
const actedSourceLabel = actedSource === undefined ? undefined : `${actedSource.file}:${String(actedSource.line)}`;
|
|
488
491
|
session.lastAct.markSource(actedSourceLabel);
|
|
492
|
+
noteSourceSeen(session, actedSourceLabel);
|
|
489
493
|
const windowEvents = session.eventsSince(since);
|
|
490
494
|
const trace = summarizeReaction(buildReactionReport(windowEvents, session.elapsed() - since));
|
|
491
495
|
// The bounded Tier-1 causal summary — net/console/state/storage diffs the trace's counts miss.
|
|
@@ -523,7 +527,9 @@ export const ACT_TOOLS = [
|
|
|
523
527
|
// Coverage: cross-origin frames / other blind spots the SDK reported during this window mean the
|
|
524
528
|
// verdict didn't see everything — say so, never imply full coverage.
|
|
525
529
|
const spots = blindSpotsFromState(session.blindSpots(), session.runtime);
|
|
526
|
-
|
|
530
|
+
// The window's own counts, so sampling before it is not described as this window's (#1414).
|
|
531
|
+
const windowSpots = blindSpotsFromState(session.blindSpots(since), session.runtime);
|
|
532
|
+
const coverage = buildCoverageStatement(spots, windowSpots);
|
|
527
533
|
const absenceBlindSpot = absenceBlindSpotNote(until, spots);
|
|
528
534
|
// A green resting on hidden matches says the node exists, not that it shows (#1408).
|
|
529
535
|
const hiddenMatch = hiddenMatchNote(until, verdict.evidence);
|
|
@@ -533,7 +539,9 @@ export const ACT_TOOLS = [
|
|
|
533
539
|
// Only a spot that IMPEACHES the capture belongs in integrity — see impeachesCapture. A
|
|
534
540
|
// structural boundary (virtualized rows, a cross-origin frame) is reported as coverage and
|
|
535
541
|
// must not downgrade a verdict about what WAS observed.
|
|
536
|
-
const impeaching = buildCoverageStatement(
|
|
542
|
+
const impeaching = buildCoverageStatement(
|
|
543
|
+
// The WINDOW's blind spots: sampling before it is a coverage fact, not this verdict's gap (#1414).
|
|
544
|
+
windowSpots.filter((s) => impeachesCapture(s.kind)));
|
|
537
545
|
// Same rule as reticle_assert: a browser-side transport gap means part of this window was
|
|
538
546
|
// never seen, which is what `blindSpots` exists to say. `truncated` above covers the SERVER
|
|
539
547
|
// ring buffer evicting; this covers the BROWSER queue overflowing, and they are not the same
|
|
@@ -614,6 +622,7 @@ export const ACT_TOOLS = [
|
|
|
614
622
|
actionSince: since,
|
|
615
623
|
expectedFailures: declared.netFailures,
|
|
616
624
|
namedNetUrls: declared.netUrls,
|
|
625
|
+
repeatableNetUrls: declared.repeatableNetUrls,
|
|
617
626
|
// A consequence that was already true before the action proves nothing about it, so it is
|
|
618
627
|
// not evidence the destination rendered either — `alreadyTrue` decides that, once.
|
|
619
628
|
renderProved: verdict.pass && !alreadyTrue && declared.rendersContent,
|
|
@@ -635,6 +644,8 @@ export const ACT_TOOLS = [
|
|
|
635
644
|
});
|
|
636
645
|
const outcomeUnread = unreadWriteLabels(windowEvents);
|
|
637
646
|
const stillInFlight = inFlightRequestLabels(windowEvents, session.url, session.background);
|
|
647
|
+
// A click on a disabled control cannot cause anything: a miss there is not the app's.
|
|
648
|
+
const inconclusive = verdict.inconclusive ?? disabledTargetNote(verdict.pass, actResult?.result);
|
|
638
649
|
const { decision, durable } = await withDurability(args['durable'], until, decideVerified({
|
|
639
650
|
pass: verdict.pass,
|
|
640
651
|
// Threaded rather than looked up: decideVerified is pure and has no session.
|
|
@@ -650,7 +661,7 @@ export const ACT_TOOLS = [
|
|
|
650
661
|
...(alreadyTrue ? { alreadyTrue } : {}),
|
|
651
662
|
...(alreadyTrueHiddenMatch ? { alreadyTrueHiddenMatch } : {}),
|
|
652
663
|
// An assertion nobody could evaluate must not be reported as one the app failed.
|
|
653
|
-
...(
|
|
664
|
+
...(inconclusive === undefined ? {} : { inconclusive }),
|
|
654
665
|
// Nor must one nobody could OBSERVE. This is the act path, so it is the one that produced
|
|
655
666
|
// the measured false red: a reload mid-wait, graded assertion_failed at the clicked
|
|
656
667
|
// component's own file and line.
|
|
@@ -690,7 +701,7 @@ export const ACT_TOOLS = [
|
|
|
690
701
|
// Read ONCE and used twice: `changeUndeclared` asks whether the ledger is empty, and the
|
|
691
702
|
// undischarged-intent gap asks how much it still holds. Two reads would be two chances for
|
|
692
703
|
// them to disagree about the same file.
|
|
693
|
-
const openIntents = await
|
|
704
|
+
const openIntents = await readLedger();
|
|
694
705
|
const changeUndeclared = await isChangeUndeclared(session.currentEditEpoch, () => Promise.resolve(openIntents));
|
|
695
706
|
const intentGap = verdictIntentGap({
|
|
696
707
|
verified: decision.verified,
|
|
@@ -732,6 +743,7 @@ export const ACT_TOOLS = [
|
|
|
732
743
|
verdictId: inlineVerdictId(ReticleTool.ACT_AND_WAIT, deps.now()),
|
|
733
744
|
grade,
|
|
734
745
|
at: deps.now(),
|
|
746
|
+
runId: runIdOfCall(session.id), // the run it lands in: linked by id, never by time
|
|
735
747
|
},
|
|
736
748
|
// Where the acted element is written, so the record can name a file somebody would open
|
|
737
749
|
// to change the thing it describes.
|
|
@@ -741,14 +753,15 @@ export const ACT_TOOLS = [
|
|
|
741
753
|
claim: describeWaitTarget(until),
|
|
742
754
|
verified: decision.verified,
|
|
743
755
|
...(actedSourceLabel === undefined ? {} : { source: actedSourceLabel }),
|
|
756
|
+
...checkWords(verdict),
|
|
744
757
|
// TRUE here, and false on the `assert` path, and the difference is the point. This tool
|
|
745
758
|
// takes `until` BEFORE it acts: the consequence is named in advance and can then only be
|
|
746
759
|
// met or missed. A claim written after the fact can be shaped to fit whatever happened,
|
|
747
760
|
// which is why the two are recorded apart rather than assumed alike.
|
|
748
761
|
declaredBeforeActing: true,
|
|
762
|
+
...checkNet(verdict, windowEvents), // the calls that explain a miss, or the one that held
|
|
749
763
|
grade: gradeOfPredicate(until),
|
|
750
|
-
// What the declared consequence READ
|
|
751
|
-
// here was being invented there as `element`. Same field, same reason, on the assert path.
|
|
764
|
+
// What the declared consequence READ: a kind absent here was invented by the run fold.
|
|
752
765
|
kind: until.kind,
|
|
753
766
|
// The deciding clause, kept — and it was NOT, on this path, the commonest one. `unknown`
|
|
754
767
|
// alone cannot tell an outcome that has not arrived from a capture that could not be
|
|
@@ -805,7 +818,8 @@ export const ACT_TOOLS = [
|
|
|
805
818
|
// whole point is catching what NOBODY suspected. It now travels with the action, so an
|
|
806
819
|
// agent cannot miss it by not asking. Omitted entirely when clean, so a healthy action
|
|
807
820
|
// pays nothing.
|
|
808
|
-
|
|
821
|
+
// + the opt-in, advisory screen/request check, appended AFTER the verdict (act/screen-request.ts).
|
|
822
|
+
...withAdvisories(contradictions, await screenRequestFindings(session, windowEvents)),
|
|
809
823
|
...(durable === undefined ? {} : { durable }),
|
|
810
824
|
honesty: honestyForVerdict(String(decision.verified), honesty),
|
|
811
825
|
// Without its summary: it is byte-identical to `summary` two fields up. See wireCapsule.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Tests only. */
|
|
2
|
+
export declare function resetAppNoteLearning(): void;
|
|
3
|
+
/**
|
|
4
|
+
* Read one verdict result. Returns a CONFIRMED note to persist, if this call confirmed one.
|
|
5
|
+
* `session` is the agent session (MCP connection); undefined does nothing.
|
|
6
|
+
*/
|
|
7
|
+
export declare function learnFromVerdict(session: string | undefined, args: Record<string, unknown>, result: unknown): string | undefined;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning an app note from a corrected failure. Pure: the dispatcher does the disk write.
|
|
3
|
+
*
|
|
4
|
+
* A failed verdict whose diagnosis names the fix — the text is there in another case, the name is on
|
|
5
|
+
* a control with another role — is a CANDIDATE. It becomes a note only when a later passing verdict
|
|
6
|
+
* in the same agent session used that fix. So a note records what worked, never what was guessed.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here can change a verdict: it reads results after they are decided, and its only output
|
|
9
|
+
* is a sentence. See app-notes.ts.
|
|
10
|
+
*/
|
|
11
|
+
import { Verified, asRecord } from '@reticlehq/core';
|
|
12
|
+
const MAX_PENDING = 10;
|
|
13
|
+
const pendingBySession = new Map();
|
|
14
|
+
/** Tests only. */
|
|
15
|
+
export function resetAppNoteLearning() {
|
|
16
|
+
pendingBySession.clear();
|
|
17
|
+
}
|
|
18
|
+
/** The verdict block, wherever this tool keeps it (nested on act_and_wait, spread on assert). */
|
|
19
|
+
function verdictOf(result) {
|
|
20
|
+
return 'object' === typeof result['verdict'] && null !== result['verdict']
|
|
21
|
+
? asRecord(result['verdict'])
|
|
22
|
+
: result;
|
|
23
|
+
}
|
|
24
|
+
function candidatesIn(result) {
|
|
25
|
+
const verdict = verdictOf(result);
|
|
26
|
+
const evidence = asRecord(verdict['evidence']);
|
|
27
|
+
const out = [];
|
|
28
|
+
const shown = evidence['caseMiss'];
|
|
29
|
+
if (true === verdict['caseOnlyMiss'] && 'string' === typeof shown && shown.length > 0) {
|
|
30
|
+
out.push({
|
|
31
|
+
usedWhen: [JSON.stringify(shown).slice(1, -1), '"ignoreCase":true'],
|
|
32
|
+
note: `this app writes "${shown}" — match that case exactly, or use ignoreCase: true where case does not matter`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const nearest = evidence['nearestByName'];
|
|
36
|
+
if (Array.isArray(nearest) && nearest.length > 0) {
|
|
37
|
+
const first = asRecord(nearest[0]);
|
|
38
|
+
const name = first['name'];
|
|
39
|
+
const role = first['role'];
|
|
40
|
+
if ('string' === typeof name && name.length > 0) {
|
|
41
|
+
const kind = 'string' === typeof role && role.length > 0 ? `a ${role}` : 'an element with no role';
|
|
42
|
+
out.push({
|
|
43
|
+
usedWhen: [
|
|
44
|
+
`"label":"${name}"`,
|
|
45
|
+
...('string' === typeof role && role.length > 0 ? [`"role":"${role}"`] : []),
|
|
46
|
+
],
|
|
47
|
+
note: `"${name}" is ${kind} here — target it by { label: "${name}" }, not by a guessed role`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read one verdict result. Returns a CONFIRMED note to persist, if this call confirmed one.
|
|
55
|
+
* `session` is the agent session (MCP connection); undefined does nothing.
|
|
56
|
+
*/
|
|
57
|
+
export function learnFromVerdict(session, args, result) {
|
|
58
|
+
if (session === undefined || 'object' !== typeof result || null === result)
|
|
59
|
+
return undefined;
|
|
60
|
+
const r = result;
|
|
61
|
+
if (Verified.NO === r['verified']) {
|
|
62
|
+
const found = candidatesIn(r);
|
|
63
|
+
if (found.length > 0) {
|
|
64
|
+
const pending = pendingBySession.get(session) ?? [];
|
|
65
|
+
pendingBySession.set(session, [...pending, ...found].slice(-MAX_PENDING));
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
if (Verified.YES !== r['verified'])
|
|
70
|
+
return undefined;
|
|
71
|
+
const pending = pendingBySession.get(session);
|
|
72
|
+
if (pending === undefined || 0 === pending.length)
|
|
73
|
+
return undefined;
|
|
74
|
+
const written = JSON.stringify(args);
|
|
75
|
+
const used = pending.find((c) => c.usedWhen.some((needle) => written.includes(needle)));
|
|
76
|
+
if (used === undefined)
|
|
77
|
+
return undefined;
|
|
78
|
+
pendingBySession.set(session, pending.filter((c) => c !== used));
|
|
79
|
+
return used.note;
|
|
80
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The notes for the project at `root` (its `.reticle` directory). Never throws. */
|
|
2
|
+
export declare function readAppNotes(root: string): string[];
|
|
3
|
+
/** Add a confirmed note; true when it was new. Never throws: a note is never why a call fails. */
|
|
4
|
+
export declare function addAppNote(root: string, note: string): boolean;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App notes: what an agent learned about TARGETING this app, kept for the next session.
|
|
3
|
+
*
|
|
4
|
+
* "The composer is a contenteditable labelled 'Ask a question'", "this app writes 'Trial' capitalised"
|
|
5
|
+
* — facts an agent pays one failed verdict to learn, and the next agent on the same app pays again.
|
|
6
|
+
* A note is written only after it was CONFIRMED (a later verdict that used it passed), so a guess
|
|
7
|
+
* never becomes lore.
|
|
8
|
+
*
|
|
9
|
+
* Hints, never evidence. Nothing that decides a verdict reads this file; it is surfaced to the agent
|
|
10
|
+
* in its first notices and in `reticle_context`, and an agent may use it to aim a check, never to
|
|
11
|
+
* pass one. Local to `.reticle/` (checked in with the project, so a team shares it through git).
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { ReticleDir } from '@reticlehq/core';
|
|
16
|
+
/** Most notes kept: the oldest drop first. A notebook, not a database. */
|
|
17
|
+
const MAX_NOTES = 30;
|
|
18
|
+
function pathOf(root) {
|
|
19
|
+
return join(root, ReticleDir.APP_NOTES_FILE);
|
|
20
|
+
}
|
|
21
|
+
/** The notes for the project at `root` (its `.reticle` directory). Never throws. */
|
|
22
|
+
export function readAppNotes(root) {
|
|
23
|
+
try {
|
|
24
|
+
const path = pathOf(root);
|
|
25
|
+
if (!existsSync(path))
|
|
26
|
+
return [];
|
|
27
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
28
|
+
const notes = 'object' === typeof parsed && null !== parsed ? parsed.notes : [];
|
|
29
|
+
return Array.isArray(notes) ? notes.filter((n) => 'string' === typeof n) : [];
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Add a confirmed note; true when it was new. Never throws: a note is never why a call fails. */
|
|
36
|
+
export function addAppNote(root, note) {
|
|
37
|
+
try {
|
|
38
|
+
const notes = readAppNotes(root);
|
|
39
|
+
if (notes.includes(note) || !existsSync(root))
|
|
40
|
+
return false;
|
|
41
|
+
const kept = [...notes, note].slice(-MAX_NOTES);
|
|
42
|
+
writeFileSync(pathOf(root), `${JSON.stringify({ notes: kept }, null, 2)}\n`);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const STALE_BUILD_NOTICE = "Reticle's code on disk changed after this daemon started, so it is still running the old build. Restart it (`npx @reticlehq/server restart`) and retry before trusting a fix to Reticle itself.";
|
|
2
|
+
/** Newest `.js` mtime under `dir`, or 0 when it cannot be read. */
|
|
3
|
+
export declare function newestJsMtime(dir: string): number;
|
|
4
|
+
/** A watcher over one directory, started now. Exported for tests; the daemon uses the default. */
|
|
5
|
+
export declare function buildWatcher(dir: string, clock: () => number): (now?: number) => string | undefined;
|
|
6
|
+
/** The running daemon's watcher, started when this module is first loaded (daemon start). */
|
|
7
|
+
export declare const staleBuildNotice: (now?: number) => string | undefined;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "The daemon is running an older build than the one on disk."
|
|
3
|
+
*
|
|
4
|
+
* A daemon loads its code once. Rebuild Reticle (or update it in place) while one is running and
|
|
5
|
+
* every tool keeps answering from the old code — measured as most of a lost afternoon: fixes that
|
|
6
|
+
* "did not work" because the process serving them predated them. Nothing said so.
|
|
7
|
+
*
|
|
8
|
+
* So the newest `.js` mtime under this package's `dist` is read when the daemon starts, and again
|
|
9
|
+
* (at most every CHECK_EVERY_MS, on a tool call) to say once, in notices, that a restart is needed.
|
|
10
|
+
* A fact about the process, never about the app: no verdict reads it.
|
|
11
|
+
*/
|
|
12
|
+
import { readdirSync, statSync } from 'node:fs';
|
|
13
|
+
import { dirname, join, resolve } from 'node:path';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
/** How often the walk may run. A few hundred stats, so cheap, but not on every call. */
|
|
16
|
+
const CHECK_EVERY_MS = 30_000;
|
|
17
|
+
export const STALE_BUILD_NOTICE = "Reticle's code on disk changed after this daemon started, so it is still running the old build. Restart it (`npx @reticlehq/server restart`) and retry before trusting a fix to Reticle itself.";
|
|
18
|
+
/** `dist/` of this package: this file sits at dist/surface/tools/agent/. */
|
|
19
|
+
const DIST_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
|
|
20
|
+
/** Newest `.js` mtime under `dir`, or 0 when it cannot be read. */
|
|
21
|
+
export function newestJsMtime(dir) {
|
|
22
|
+
let newest = 0;
|
|
23
|
+
const walk = (at) => {
|
|
24
|
+
let entries;
|
|
25
|
+
try {
|
|
26
|
+
entries = readdirSync(at, { withFileTypes: true });
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const path = join(at, entry.name);
|
|
33
|
+
if (entry.isDirectory())
|
|
34
|
+
walk(path);
|
|
35
|
+
else if (entry.name.endsWith('.js')) {
|
|
36
|
+
try {
|
|
37
|
+
newest = Math.max(newest, statSync(path).mtimeMs);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
/* removed mid-walk: a build in progress, read again next time */
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
walk(dir);
|
|
46
|
+
return newest;
|
|
47
|
+
}
|
|
48
|
+
/** A watcher over one directory, started now. Exported for tests; the daemon uses the default. */
|
|
49
|
+
export function buildWatcher(dir, clock) {
|
|
50
|
+
const atStart = newestJsMtime(dir);
|
|
51
|
+
let checkedAt = clock();
|
|
52
|
+
let stale = false;
|
|
53
|
+
return (now = clock()) => {
|
|
54
|
+
if (!stale && now - checkedAt >= CHECK_EVERY_MS) {
|
|
55
|
+
checkedAt = now;
|
|
56
|
+
stale = atStart > 0 && newestJsMtime(dir) > atStart;
|
|
57
|
+
}
|
|
58
|
+
return stale ? STALE_BUILD_NOTICE : undefined;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/** The running daemon's watcher, started when this module is first loaded (daemon start). */
|
|
62
|
+
export const staleBuildNotice = buildWatcher(DIST_ROOT, () => Date.now());
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The compact envelope: what a verdict result carries by default, and what waits behind
|
|
3
|
+
* `detail: "full"`.
|
|
4
|
+
*
|
|
5
|
+
* The rule (plan: "the middle ground — what a result carries"): answer the question, include what
|
|
6
|
+
* decides the next move, and give a cursor for the rest. A click on a cache-backed page used to
|
|
7
|
+
* return several thousand tokens, most of it store snapshots and counters, and the verdict was a
|
|
8
|
+
* field among them. Compaction never touches a decisive key — `verified`, `because`, the verdict's
|
|
9
|
+
* expected/observed/evidence, contradictions, capture integrity, failed requests, console errors,
|
|
10
|
+
* the acted element's source — and `compact-envelope.contract.test.ts` fails the build if it ever
|
|
11
|
+
* does. What it drops is redundant (identity fields the agent sent), restated (counts the `changed`
|
|
12
|
+
* line already says) or always one `reticle_observe { since }` away.
|
|
13
|
+
*
|
|
14
|
+
* It works by DROPPING named keys, never by allow-listing: a field added to a result later survives
|
|
15
|
+
* compaction until somebody decides it should not. The accurate direction to fail in.
|
|
16
|
+
*
|
|
17
|
+
* Applied once, at the dispatch chokepoint, to an agent's own calls. The Harness and the HUD read
|
|
18
|
+
* the full result; so does telemetry, which runs before this.
|
|
19
|
+
*/
|
|
20
|
+
import { z } from 'zod';
|
|
21
|
+
/** The argument that asks for today's full envelope. */
|
|
22
|
+
export declare const DETAIL_ARG = "detail";
|
|
23
|
+
export declare const Detail: {
|
|
24
|
+
readonly COMPACT: "compact";
|
|
25
|
+
readonly FULL: "full";
|
|
26
|
+
};
|
|
27
|
+
export type Detail = (typeof Detail)[keyof typeof Detail];
|
|
28
|
+
/**
|
|
29
|
+
* The A/B control: `RETICLE_RESULT_DETAIL=full` makes every agent call answer as if it had passed
|
|
30
|
+
* `detail: "full"`, so the agent-loop benchmark can run compact against full on the same build with
|
|
31
|
+
* nothing else different — the measurement CLAUDE.md requires beside any token optimisation.
|
|
32
|
+
*/
|
|
33
|
+
export declare const RESULT_DETAIL_ENV = "RETICLE_RESULT_DETAIL";
|
|
34
|
+
/**
|
|
35
|
+
* Did this call (or the daemon's environment) ask for the full envelope AND nothing else — no
|
|
36
|
+
* notices, no re-teach? Only an explicit ask: the A/B control arm, and an agent that said so.
|
|
37
|
+
*/
|
|
38
|
+
export declare function wantsFull(args: Record<string, unknown>): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Did this call (or the daemon) ask for the compact envelope? Compaction is opt-in: in the
|
|
41
|
+
* agent-loop A/B the compact arm saved little per task and missed one failure the full arm caught,
|
|
42
|
+
* and a token saving ships only beside a correctness measurement that is at least as good.
|
|
43
|
+
*/
|
|
44
|
+
export declare function wantsCompact(args: Record<string, unknown>): boolean;
|
|
45
|
+
/** The tools whose results are compacted. Each one's full shape stays one argument away. */
|
|
46
|
+
export declare const COMPACTED_TOOLS: ReadonlySet<string>;
|
|
47
|
+
/** Short enough for the per-turn surface; the reasoning lives in this file and the instructions. */
|
|
48
|
+
export declare const DETAIL_ARG_DESCRIPTION = "\"compact\" keeps only the deciding fields.";
|
|
49
|
+
/** Where the aliases a predicate was normalised from are named. */
|
|
50
|
+
export declare const NORMALIZED_KEY = "normalized";
|
|
51
|
+
/** The key the one-line "what changed" summary travels under. */
|
|
52
|
+
export declare const CHANGED_KEY = "changed";
|
|
53
|
+
/** Evidence with transport detail removed, recursively, keeping every deciding field. */
|
|
54
|
+
export declare function trimEvidence(value: unknown, depth?: number): unknown;
|
|
55
|
+
/**
|
|
56
|
+
* One line naming what moved: the route, the requests, the MEANINGFUL state paths (cache
|
|
57
|
+
* bookkeeping is already filtered out upstream), storage keys, fields and signals.
|
|
58
|
+
*/
|
|
59
|
+
export declare function changedLine(summary: Record<string, unknown>): string | undefined;
|
|
60
|
+
/** One verdict result (act_and_wait, assert, wait_for), compacted. Idempotent. */
|
|
61
|
+
export declare function compactVerdict(result: Record<string, unknown>): Record<string, unknown>;
|
|
62
|
+
/** A sequence result, compacted per step. Idempotent. */
|
|
63
|
+
export declare function compactSequence(result: Record<string, unknown>): Record<string, unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* The result as an agent receives it: full unless it asked for `detail: "compact"`.
|
|
66
|
+
*
|
|
67
|
+
* `agentCall` is the dispatcher's own judgement (an MCP connection, not the Harness or the HUD).
|
|
68
|
+
*/
|
|
69
|
+
export declare function shapeForAgent(tool: string, args: Record<string, unknown>, result: unknown, agentCall: boolean): unknown;
|
|
70
|
+
/**
|
|
71
|
+
* The compacted tools, with `detail` accepted and the compact-only keys declared.
|
|
72
|
+
*
|
|
73
|
+
* Declared because a schema-strict client validates `structuredContent` against `outputSchema` and
|
|
74
|
+
* drops what is not there: `changed`, `ref` and `source` would be built and silently thrown away.
|
|
75
|
+
*/
|
|
76
|
+
export declare function withCompactEnvelope<T extends {
|
|
77
|
+
name: string;
|
|
78
|
+
inputSchema: z.ZodRawShape;
|
|
79
|
+
outputSchema?: z.ZodRawShape;
|
|
80
|
+
}>(tools: T[]): T[];
|