@reticlehq/server 2.0.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/LICENSE +105 -0
- package/README.md +17 -0
- package/dist/bridge-security.d.ts +23 -0
- package/dist/bridge-security.d.ts.map +1 -0
- package/dist/bridge-security.js +44 -0
- package/dist/bridge-security.js.map +1 -0
- package/dist/bridge.d.ts +42 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +281 -0
- package/dist/bridge.js.map +1 -0
- package/dist/bridge.test-harness.d.ts +42 -0
- package/dist/bridge.test-harness.d.ts.map +1 -0
- package/dist/bridge.test-harness.js +192 -0
- package/dist/bridge.test-harness.js.map +1 -0
- package/dist/cli-launch.d.ts +53 -0
- package/dist/cli-launch.d.ts.map +1 -0
- package/dist/cli-launch.js +109 -0
- package/dist/cli-launch.js.map +1 -0
- package/dist/cli-parse.d.ts +74 -0
- package/dist/cli-parse.d.ts.map +1 -0
- package/dist/cli-parse.js +321 -0
- package/dist/cli-parse.js.map +1 -0
- package/dist/cli-port.d.ts +26 -0
- package/dist/cli-port.d.ts.map +1 -0
- package/dist/cli-port.js +57 -0
- package/dist/cli-port.js.map +1 -0
- package/dist/cli-verify.d.ts +46 -0
- package/dist/cli-verify.d.ts.map +1 -0
- package/dist/cli-verify.js +181 -0
- package/dist/cli-verify.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +337 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud/cloud-sync.d.ts +50 -0
- package/dist/cloud/cloud-sync.d.ts.map +1 -0
- package/dist/cloud/cloud-sync.js +47 -0
- package/dist/cloud/cloud-sync.js.map +1 -0
- package/dist/crawl/crawl-tools.d.ts +8 -0
- package/dist/crawl/crawl-tools.d.ts.map +1 -0
- package/dist/crawl/crawl-tools.js +61 -0
- package/dist/crawl/crawl-tools.js.map +1 -0
- package/dist/crawl/crawl.d.ts +45 -0
- package/dist/crawl/crawl.d.ts.map +1 -0
- package/dist/crawl/crawl.js +106 -0
- package/dist/crawl/crawl.js.map +1 -0
- package/dist/daemon-resilience.d.ts +17 -0
- package/dist/daemon-resilience.d.ts.map +1 -0
- package/dist/daemon-resilience.js +23 -0
- package/dist/daemon-resilience.js.map +1 -0
- package/dist/daemon.d.ts +26 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +122 -0
- package/dist/daemon.js.map +1 -0
- package/dist/domain/domain-model.d.ts +64 -0
- package/dist/domain/domain-model.d.ts.map +1 -0
- package/dist/domain/domain-model.js +127 -0
- package/dist/domain/domain-model.js.map +1 -0
- package/dist/domain/domain-tools.d.ts +9 -0
- package/dist/domain/domain-tools.d.ts.map +1 -0
- package/dist/domain/domain-tools.js +66 -0
- package/dist/domain/domain-tools.js.map +1 -0
- package/dist/domain/flow-risk.d.ts +34 -0
- package/dist/domain/flow-risk.d.ts.map +1 -0
- package/dist/domain/flow-risk.js +81 -0
- package/dist/domain/flow-risk.js.map +1 -0
- package/dist/ee/audit-log.d.ts +15 -0
- package/dist/ee/audit-log.d.ts.map +1 -0
- package/dist/ee/audit-log.js +12 -0
- package/dist/ee/audit-log.js.map +1 -0
- package/dist/events/event-filters.d.ts +65 -0
- package/dist/events/event-filters.d.ts.map +1 -0
- package/dist/events/event-filters.js +98 -0
- package/dist/events/event-filters.js.map +1 -0
- package/dist/events/predicate-eval.d.ts +91 -0
- package/dist/events/predicate-eval.d.ts.map +1 -0
- package/dist/events/predicate-eval.js +299 -0
- package/dist/events/predicate-eval.js.map +1 -0
- package/dist/events/predicate.d.ts +19 -0
- package/dist/events/predicate.d.ts.map +1 -0
- package/dist/events/predicate.js +188 -0
- package/dist/events/predicate.js.map +1 -0
- package/dist/events/reaction.d.ts +34 -0
- package/dist/events/reaction.d.ts.map +1 -0
- package/dist/events/reaction.js +60 -0
- package/dist/events/reaction.js.map +1 -0
- package/dist/events/ring-buffer.d.ts +32 -0
- package/dist/events/ring-buffer.d.ts.map +1 -0
- package/dist/events/ring-buffer.js +75 -0
- package/dist/events/ring-buffer.js.map +1 -0
- package/dist/flows/annotate-tools.d.ts +16 -0
- package/dist/flows/annotate-tools.d.ts.map +1 -0
- package/dist/flows/annotate-tools.js +136 -0
- package/dist/flows/annotate-tools.js.map +1 -0
- package/dist/flows/annotate.d.ts +22 -0
- package/dist/flows/annotate.d.ts.map +1 -0
- package/dist/flows/annotate.js +134 -0
- package/dist/flows/annotate.js.map +1 -0
- package/dist/flows/annotation-store.d.ts +23 -0
- package/dist/flows/annotation-store.d.ts.map +1 -0
- package/dist/flows/annotation-store.js +51 -0
- package/dist/flows/annotation-store.js.map +1 -0
- package/dist/flows/decision.d.ts +13 -0
- package/dist/flows/decision.d.ts.map +1 -0
- package/dist/flows/decision.js +111 -0
- package/dist/flows/decision.js.map +1 -0
- package/dist/flows/flow-classify.d.ts +52 -0
- package/dist/flows/flow-classify.d.ts.map +1 -0
- package/dist/flows/flow-classify.js +99 -0
- package/dist/flows/flow-classify.js.map +1 -0
- package/dist/flows/flow-replay-run.d.ts +15 -0
- package/dist/flows/flow-replay-run.d.ts.map +1 -0
- package/dist/flows/flow-replay-run.js +120 -0
- package/dist/flows/flow-replay-run.js.map +1 -0
- package/dist/flows/flow-replay.d.ts +49 -0
- package/dist/flows/flow-replay.d.ts.map +1 -0
- package/dist/flows/flow-replay.js +391 -0
- package/dist/flows/flow-replay.js.map +1 -0
- package/dist/flows/flow-report.d.ts +23 -0
- package/dist/flows/flow-report.d.ts.map +1 -0
- package/dist/flows/flow-report.js +106 -0
- package/dist/flows/flow-report.js.map +1 -0
- package/dist/flows/flow-scope.d.ts +25 -0
- package/dist/flows/flow-scope.d.ts.map +1 -0
- package/dist/flows/flow-scope.js +32 -0
- package/dist/flows/flow-scope.js.map +1 -0
- package/dist/flows/flow-success.d.ts +33 -0
- package/dist/flows/flow-success.d.ts.map +1 -0
- package/dist/flows/flow-success.js +131 -0
- package/dist/flows/flow-success.js.map +1 -0
- package/dist/flows/flow-tools.d.ts +4 -0
- package/dist/flows/flow-tools.d.ts.map +1 -0
- package/dist/flows/flow-tools.js +460 -0
- package/dist/flows/flow-tools.js.map +1 -0
- package/dist/flows/flows.d.ts +86 -0
- package/dist/flows/flows.d.ts.map +1 -0
- package/dist/flows/flows.js +319 -0
- package/dist/flows/flows.js.map +1 -0
- package/dist/flows/heal.d.ts +43 -0
- package/dist/flows/heal.d.ts.map +1 -0
- package/dist/flows/heal.js +98 -0
- package/dist/flows/heal.js.map +1 -0
- package/dist/flows/recordings.d.ts +46 -0
- package/dist/flows/recordings.d.ts.map +1 -0
- package/dist/flows/recordings.js +43 -0
- package/dist/flows/recordings.js.map +1 -0
- package/dist/flows/replay.d.ts +23 -0
- package/dist/flows/replay.d.ts.map +1 -0
- package/dist/flows/replay.js +160 -0
- package/dist/flows/replay.js.map +1 -0
- package/dist/http-server.d.ts +39 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +145 -0
- package/dist/http-server.js.map +1 -0
- package/dist/idle-shutdown.d.ts +34 -0
- package/dist/idle-shutdown.d.ts.map +1 -0
- package/dist/idle-shutdown.js +68 -0
- package/dist/idle-shutdown.js.map +1 -0
- package/dist/index.d.ts +135 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +371 -0
- package/dist/index.js.map +1 -0
- package/dist/init/cursor.d.ts +25 -0
- package/dist/init/cursor.d.ts.map +1 -0
- package/dist/init/cursor.js +49 -0
- package/dist/init/cursor.js.map +1 -0
- package/dist/init/detect.d.ts +49 -0
- package/dist/init/detect.d.ts.map +1 -0
- package/dist/init/detect.js +84 -0
- package/dist/init/detect.js.map +1 -0
- package/dist/init/mcp.d.ts +40 -0
- package/dist/init/mcp.d.ts.map +1 -0
- package/dist/init/mcp.js +55 -0
- package/dist/init/mcp.js.map +1 -0
- package/dist/init/node-io.d.ts +8 -0
- package/dist/init/node-io.d.ts.map +1 -0
- package/dist/init/node-io.js +57 -0
- package/dist/init/node-io.js.map +1 -0
- package/dist/init/plan.d.ts +72 -0
- package/dist/init/plan.d.ts.map +1 -0
- package/dist/init/plan.js +280 -0
- package/dist/init/plan.js.map +1 -0
- package/dist/init/project-id.d.ts +17 -0
- package/dist/init/project-id.d.ts.map +1 -0
- package/dist/init/project-id.js +38 -0
- package/dist/init/project-id.js.map +1 -0
- package/dist/init/run.d.ts +42 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +171 -0
- package/dist/init/run.js.map +1 -0
- package/dist/init/snippets.d.ts +33 -0
- package/dist/init/snippets.d.ts.map +1 -0
- package/dist/init/snippets.js +117 -0
- package/dist/init/snippets.js.map +1 -0
- package/dist/init/vite-config.d.ts +25 -0
- package/dist/init/vite-config.d.ts.map +1 -0
- package/dist/init/vite-config.js +45 -0
- package/dist/init/vite-config.js.map +1 -0
- package/dist/input/network-mock-tools.d.ts +3 -0
- package/dist/input/network-mock-tools.d.ts.map +1 -0
- package/dist/input/network-mock-tools.js +94 -0
- package/dist/input/network-mock-tools.js.map +1 -0
- package/dist/input/network-mock.d.ts +55 -0
- package/dist/input/network-mock.d.ts.map +1 -0
- package/dist/input/network-mock.js +62 -0
- package/dist/input/network-mock.js.map +1 -0
- package/dist/input/real-input.d.ts +174 -0
- package/dist/input/real-input.d.ts.map +1 -0
- package/dist/input/real-input.js +289 -0
- package/dist/input/real-input.js.map +1 -0
- package/dist/input/scroll-find.d.ts +41 -0
- package/dist/input/scroll-find.d.ts.map +1 -0
- package/dist/input/scroll-find.js +59 -0
- package/dist/input/scroll-find.js.map +1 -0
- package/dist/input/scroll-tools.d.ts +8 -0
- package/dist/input/scroll-tools.d.ts.map +1 -0
- package/dist/input/scroll-tools.js +68 -0
- package/dist/input/scroll-tools.js.map +1 -0
- package/dist/input/viewport-tools.d.ts +3 -0
- package/dist/input/viewport-tools.d.ts.map +1 -0
- package/dist/input/viewport-tools.js +65 -0
- package/dist/input/viewport-tools.js.map +1 -0
- package/dist/license/license.d.ts +108 -0
- package/dist/license/license.d.ts.map +1 -0
- package/dist/license/license.js +203 -0
- package/dist/license/license.js.map +1 -0
- package/dist/log.d.ts +6 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +9 -0
- package/dist/log.js.map +1 -0
- package/dist/mcp-proxy.d.ts +16 -0
- package/dist/mcp-proxy.d.ts.map +1 -0
- package/dist/mcp-proxy.js +168 -0
- package/dist/mcp-proxy.js.map +1 -0
- package/dist/mcp.d.ts +14 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +101 -0
- package/dist/mcp.js.map +1 -0
- package/dist/pairing-token.d.ts +28 -0
- package/dist/pairing-token.d.ts.map +1 -0
- package/dist/pairing-token.js +62 -0
- package/dist/pairing-token.js.map +1 -0
- package/dist/pool/browser-pool.d.ts +90 -0
- package/dist/pool/browser-pool.d.ts.map +1 -0
- package/dist/pool/browser-pool.js +221 -0
- package/dist/pool/browser-pool.js.map +1 -0
- package/dist/pool/lease-reaper.d.ts +16 -0
- package/dist/pool/lease-reaper.d.ts.map +1 -0
- package/dist/pool/lease-reaper.js +41 -0
- package/dist/pool/lease-reaper.js.map +1 -0
- package/dist/pool/playwright-launcher.d.ts +19 -0
- package/dist/pool/playwright-launcher.d.ts.map +1 -0
- package/dist/pool/playwright-launcher.js +51 -0
- package/dist/pool/playwright-launcher.js.map +1 -0
- package/dist/project/baselines.d.ts +22 -0
- package/dist/project/baselines.d.ts.map +1 -0
- package/dist/project/baselines.js +45 -0
- package/dist/project/baselines.js.map +1 -0
- package/dist/project/fs-port.d.ts +27 -0
- package/dist/project/fs-port.d.ts.map +1 -0
- package/dist/project/fs-port.js +32 -0
- package/dist/project/fs-port.js.map +1 -0
- package/dist/project/project-store.d.ts +32 -0
- package/dist/project/project-store.d.ts.map +1 -0
- package/dist/project/project-store.js +127 -0
- package/dist/project/project-store.js.map +1 -0
- package/dist/project/project-tools.d.ts +9 -0
- package/dist/project/project-tools.d.ts.map +1 -0
- package/dist/project/project-tools.js +118 -0
- package/dist/project/project-tools.js.map +1 -0
- package/dist/project/reticle-dir.d.ts +61 -0
- package/dist/project/reticle-dir.d.ts.map +1 -0
- package/dist/project/reticle-dir.js +144 -0
- package/dist/project/reticle-dir.js.map +1 -0
- package/dist/runs/build-verification-run.d.ts +30 -0
- package/dist/runs/build-verification-run.d.ts.map +1 -0
- package/dist/runs/build-verification-run.js +71 -0
- package/dist/runs/build-verification-run.js.map +1 -0
- package/dist/runs/profile-redact.d.ts +16 -0
- package/dist/runs/profile-redact.d.ts.map +1 -0
- package/dist/runs/profile-redact.js +32 -0
- package/dist/runs/profile-redact.js.map +1 -0
- package/dist/runs/render-report.d.ts +9 -0
- package/dist/runs/render-report.d.ts.map +1 -0
- package/dist/runs/render-report.js +70 -0
- package/dist/runs/render-report.js.map +1 -0
- package/dist/runs/repair-prompt.d.ts +15 -0
- package/dist/runs/repair-prompt.d.ts.map +1 -0
- package/dist/runs/repair-prompt.js +59 -0
- package/dist/runs/repair-prompt.js.map +1 -0
- package/dist/runs/replay-mapping.d.ts +12 -0
- package/dist/runs/replay-mapping.d.ts.map +1 -0
- package/dist/runs/replay-mapping.js +35 -0
- package/dist/runs/replay-mapping.js.map +1 -0
- package/dist/runs/reticle-runner.d.ts +48 -0
- package/dist/runs/reticle-runner.d.ts.map +1 -0
- package/dist/runs/reticle-runner.js +56 -0
- package/dist/runs/reticle-runner.js.map +1 -0
- package/dist/runs/risk-classify.d.ts +27 -0
- package/dist/runs/risk-classify.d.ts.map +1 -0
- package/dist/runs/risk-classify.js +76 -0
- package/dist/runs/risk-classify.js.map +1 -0
- package/dist/runs/run-store.d.ts +40 -0
- package/dist/runs/run-store.d.ts.map +1 -0
- package/dist/runs/run-store.js +118 -0
- package/dist/runs/run-store.js.map +1 -0
- package/dist/runs/run-tools.d.ts +10 -0
- package/dist/runs/run-tools.d.ts.map +1 -0
- package/dist/runs/run-tools.js +69 -0
- package/dist/runs/run-tools.js.map +1 -0
- package/dist/runs/runner-port.d.ts +14 -0
- package/dist/runs/runner-port.d.ts.map +1 -0
- package/dist/runs/runner-port.js +23 -0
- package/dist/runs/runner-port.js.map +1 -0
- package/dist/runs/verify-http.d.ts +34 -0
- package/dist/runs/verify-http.d.ts.map +1 -0
- package/dist/runs/verify-http.js +102 -0
- package/dist/runs/verify-http.js.map +1 -0
- package/dist/runs/verify-server.d.ts +26 -0
- package/dist/runs/verify-server.d.ts.map +1 -0
- package/dist/runs/verify-server.js +99 -0
- package/dist/runs/verify-server.js.map +1 -0
- package/dist/server-version.d.ts +3 -0
- package/dist/server-version.d.ts.map +1 -0
- package/dist/server-version.js +5 -0
- package/dist/server-version.js.map +1 -0
- package/dist/session/control-envelope.d.ts +49 -0
- package/dist/session/control-envelope.d.ts.map +1 -0
- package/dist/session/control-envelope.js +44 -0
- package/dist/session/control-envelope.js.map +1 -0
- package/dist/session/live-control-tools.d.ts +16 -0
- package/dist/session/live-control-tools.d.ts.map +1 -0
- package/dist/session/live-control-tools.js +204 -0
- package/dist/session/live-control-tools.js.map +1 -0
- package/dist/session/output-budget.d.ts +41 -0
- package/dist/session/output-budget.d.ts.map +1 -0
- package/dist/session/output-budget.js +54 -0
- package/dist/session/output-budget.js.map +1 -0
- package/dist/session/presenter-args.d.ts +8 -0
- package/dist/session/presenter-args.d.ts.map +1 -0
- package/dist/session/presenter-args.js +15 -0
- package/dist/session/presenter-args.js.map +1 -0
- package/dist/session/review-store.d.ts +40 -0
- package/dist/session/review-store.d.ts.map +1 -0
- package/dist/session/review-store.js +61 -0
- package/dist/session/review-store.js.map +1 -0
- package/dist/session/session-health.d.ts +22 -0
- package/dist/session/session-health.d.ts.map +1 -0
- package/dist/session/session-health.js +26 -0
- package/dist/session/session-health.js.map +1 -0
- package/dist/session/session-manager.d.ts +43 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +155 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/session-readiness.d.ts +35 -0
- package/dist/session/session-readiness.d.ts.map +1 -0
- package/dist/session/session-readiness.js +32 -0
- package/dist/session/session-readiness.js.map +1 -0
- package/dist/session/session-reaper.d.ts +37 -0
- package/dist/session/session-reaper.d.ts.map +1 -0
- package/dist/session/session-reaper.js +94 -0
- package/dist/session/session-reaper.js.map +1 -0
- package/dist/session/session-recommendation.d.ts +18 -0
- package/dist/session/session-recommendation.d.ts.map +1 -0
- package/dist/session/session-recommendation.js +14 -0
- package/dist/session/session-recommendation.js.map +1 -0
- package/dist/session/session-tools.d.ts +9 -0
- package/dist/session/session-tools.d.ts.map +1 -0
- package/dist/session/session-tools.js +43 -0
- package/dist/session/session-tools.js.map +1 -0
- package/dist/session/session.d.ts +166 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +408 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/state-select.d.ts +8 -0
- package/dist/session/state-select.d.ts.map +1 -0
- package/dist/session/state-select.js +8 -0
- package/dist/session/state-select.js.map +1 -0
- package/dist/token-auth.d.ts +24 -0
- package/dist/token-auth.d.ts.map +1 -0
- package/dist/token-auth.js +71 -0
- package/dist/token-auth.js.map +1 -0
- package/dist/tools/act-tools.d.ts +3 -0
- package/dist/tools/act-tools.d.ts.map +1 -0
- package/dist/tools/act-tools.js +327 -0
- package/dist/tools/act-tools.js.map +1 -0
- package/dist/tools/act-view.d.ts +19 -0
- package/dist/tools/act-view.d.ts.map +1 -0
- package/dist/tools/act-view.js +46 -0
- package/dist/tools/act-view.js.map +1 -0
- package/dist/tools/assert-grade.d.ts +21 -0
- package/dist/tools/assert-grade.d.ts.map +1 -0
- package/dist/tools/assert-grade.js +52 -0
- package/dist/tools/assert-grade.js.map +1 -0
- package/dist/tools/browser-tools.d.ts +3 -0
- package/dist/tools/browser-tools.d.ts.map +1 -0
- package/dist/tools/browser-tools.js +52 -0
- package/dist/tools/browser-tools.js.map +1 -0
- package/dist/tools/contract-tools.d.ts +8 -0
- package/dist/tools/contract-tools.d.ts.map +1 -0
- package/dist/tools/contract-tools.js +62 -0
- package/dist/tools/contract-tools.js.map +1 -0
- package/dist/tools/dynamic-tools.d.ts +7 -0
- package/dist/tools/dynamic-tools.d.ts.map +1 -0
- package/dist/tools/dynamic-tools.js +103 -0
- package/dist/tools/dynamic-tools.js.map +1 -0
- package/dist/tools/error-recovery.d.ts +31 -0
- package/dist/tools/error-recovery.d.ts.map +1 -0
- package/dist/tools/error-recovery.js +52 -0
- package/dist/tools/error-recovery.js.map +1 -0
- package/dist/tools/invoke-tool.d.ts +23 -0
- package/dist/tools/invoke-tool.d.ts.map +1 -0
- package/dist/tools/invoke-tool.js +99 -0
- package/dist/tools/invoke-tool.js.map +1 -0
- package/dist/tools/lease-tools.d.ts +31 -0
- package/dist/tools/lease-tools.d.ts.map +1 -0
- package/dist/tools/lease-tools.js +164 -0
- package/dist/tools/lease-tools.js.map +1 -0
- package/dist/tools/observe-tools.d.ts +3 -0
- package/dist/tools/observe-tools.d.ts.map +1 -0
- package/dist/tools/observe-tools.js +259 -0
- package/dist/tools/observe-tools.js.map +1 -0
- package/dist/tools/profiles.d.ts +33 -0
- package/dist/tools/profiles.d.ts.map +1 -0
- package/dist/tools/profiles.js +105 -0
- package/dist/tools/profiles.js.map +1 -0
- package/dist/tools/query-paginate.d.ts +15 -0
- package/dist/tools/query-paginate.d.ts.map +1 -0
- package/dist/tools/query-paginate.js +31 -0
- package/dist/tools/query-paginate.js.map +1 -0
- package/dist/tools/read-tools.d.ts +3 -0
- package/dist/tools/read-tools.d.ts.map +1 -0
- package/dist/tools/read-tools.js +329 -0
- package/dist/tools/read-tools.js.map +1 -0
- package/dist/tools/snapshot-delta.d.ts +59 -0
- package/dist/tools/snapshot-delta.d.ts.map +1 -0
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/snapshot-delta.js.map +1 -0
- package/dist/tools/tool-invoker.d.ts +15 -0
- package/dist/tools/tool-invoker.d.ts.map +1 -0
- package/dist/tools/tool-invoker.js +20 -0
- package/dist/tools/tool-invoker.js.map +1 -0
- package/dist/tools/tool-kit.d.ts +60 -0
- package/dist/tools/tool-kit.d.ts.map +1 -0
- package/dist/tools/tool-kit.js +33 -0
- package/dist/tools/tool-kit.js.map +1 -0
- package/dist/tools/tool-names.d.ts +89 -0
- package/dist/tools/tool-names.d.ts.map +1 -0
- package/dist/tools/tool-names.js +88 -0
- package/dist/tools/tool-names.js.map +1 -0
- package/dist/tools/tools-helpers.d.ts +12 -0
- package/dist/tools/tools-helpers.d.ts.map +1 -0
- package/dist/tools/tools-helpers.js +22 -0
- package/dist/tools/tools-helpers.js.map +1 -0
- package/dist/tools/tools.d.ts +4 -0
- package/dist/tools/tools.d.ts.map +1 -0
- package/dist/tools/tools.js +268 -0
- package/dist/tools/tools.js.map +1 -0
- package/dist/update/update-checker.d.ts +20 -0
- package/dist/update/update-checker.d.ts.map +1 -0
- package/dist/update/update-checker.js +94 -0
- package/dist/update/update-checker.js.map +1 -0
- package/dist/update/update-tools.d.ts +3 -0
- package/dist/update/update-tools.d.ts.map +1 -0
- package/dist/update/update-tools.js +94 -0
- package/dist/update/update-tools.js.map +1 -0
- package/dist/update/updater.d.ts +31 -0
- package/dist/update/updater.d.ts.map +1 -0
- package/dist/update/updater.js +120 -0
- package/dist/update/updater.js.map +1 -0
- package/dist/visual/visual-diff.d.ts +46 -0
- package/dist/visual/visual-diff.d.ts.map +1 -0
- package/dist/visual/visual-diff.js +100 -0
- package/dist/visual/visual-diff.js.map +1 -0
- package/dist/visual/visual-store.d.ts +22 -0
- package/dist/visual/visual-store.d.ts.map +1 -0
- package/dist/visual/visual-store.js +60 -0
- package/dist/visual/visual-store.js.map +1 -0
- package/dist/visual/visual-tools.d.ts +9 -0
- package/dist/visual/visual-tools.d.ts.map +1 -0
- package/dist/visual/visual-tools.js +182 -0
- package/dist/visual/visual-tools.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-tools.d.ts","sourceRoot":"","sources":["../../src/tools/observe-tools.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,eAAe,CAAC;AAE7E,eAAO,MAAM,aAAa,EAAE,OAAO,EAmSlC,CAAC"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observe / wait / assert tools — reticle_observe, reticle_wait_for, reticle_assert, reticle_network,
|
|
3
|
+
* reticle_console, reticle_animations. Split out of tools.ts; assembled back via ...OBSERVE_TOOLS.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ReticleCommand } from '@reticlehq/core';
|
|
7
|
+
import { ReticleTool } from './tool-names.js';
|
|
8
|
+
import { buildReactionReport } from '../events/reaction.js';
|
|
9
|
+
import { evaluatePredicate, waitForPredicate, PredicateSchema } from '../events/predicate.js';
|
|
10
|
+
import { matchNet, matchConsole, isConsoleEvent, netEmptyHint, consoleEmptyHint, reconcileNet, projectNetCall, projectConsoleLog, } from '../events/event-filters.js';
|
|
11
|
+
import { applyEventBudget, costHint, withSizeCost } from '../session/output-budget.js';
|
|
12
|
+
import { healthEnvelope } from '../session/session-health.js';
|
|
13
|
+
import { isPresenceOnlyAssertion, PRESENCE_ONLY_ADVICE } from './assert-grade.js';
|
|
14
|
+
import { withControl } from '../session/control-envelope.js';
|
|
15
|
+
import { asString, asNumber } from './tools-helpers.js';
|
|
16
|
+
import { sessionIdShape, commandOrThrow } from './tool-kit.js';
|
|
17
|
+
export const OBSERVE_TOOLS = [
|
|
18
|
+
{
|
|
19
|
+
name: ReticleTool.OBSERVE,
|
|
20
|
+
description: 'Return the timeline of everything the app did in a window (DOM/network/route/console/animation/signal), with a summary. Use after an action. Pass `max_events` to cap the timeline to the most recent N (older events are dropped and counted in cost.droppedOldest). Every result carries a `cost:{events,bytes}` hint so you can self-budget your next call.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
window_ms: z
|
|
23
|
+
.number()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Time window to look back. Default: 2000ms. Ignored when `since` is provided.'),
|
|
26
|
+
since: z
|
|
27
|
+
.number()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Cursor from a prior reticle_act or reticle_observe call. Scopes the event window to exactly that span.'),
|
|
30
|
+
filters: z
|
|
31
|
+
.array(z.string())
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Event type allowlist: dom | net | route | console | animation | signal. Omit to return all types.'),
|
|
34
|
+
max_events: z
|
|
35
|
+
.number()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Cap the timeline to the most recent N events. Older events are counted in cost.droppedOldest.'),
|
|
38
|
+
...sessionIdShape,
|
|
39
|
+
},
|
|
40
|
+
outputSchema: {
|
|
41
|
+
events: z.array(z.unknown()),
|
|
42
|
+
summary: z.object({
|
|
43
|
+
total: z.number(),
|
|
44
|
+
network: z.number(),
|
|
45
|
+
domAdded: z.number(),
|
|
46
|
+
domRemoved: z.number(),
|
|
47
|
+
domChanged: z.number(),
|
|
48
|
+
routeChanges: z.number(),
|
|
49
|
+
consoleErrors: z.number(),
|
|
50
|
+
animations: z.number(),
|
|
51
|
+
signals: z.number(),
|
|
52
|
+
}),
|
|
53
|
+
cost: z.object({
|
|
54
|
+
events: z.number(),
|
|
55
|
+
bytes: z.number(),
|
|
56
|
+
droppedOldest: z.number().optional(),
|
|
57
|
+
recommendation: z
|
|
58
|
+
.string()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Present when the timeline is large — scope your next call (filters/max_events).'),
|
|
61
|
+
}),
|
|
62
|
+
session: z
|
|
63
|
+
.object({ lastSeenMs: z.number(), throttled: z.boolean(), focused: z.boolean() })
|
|
64
|
+
.optional(),
|
|
65
|
+
},
|
|
66
|
+
handler: (deps, args) => {
|
|
67
|
+
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
68
|
+
const since = asNumber(args['since']);
|
|
69
|
+
const windowMs = asNumber(args['window_ms']) ?? 2000;
|
|
70
|
+
const events = since !== undefined ? session.eventsSince(since) : session.eventsInWindow(windowMs);
|
|
71
|
+
const filters = Array.isArray(args['filters']) ? args['filters'] : undefined;
|
|
72
|
+
const filtered = filters === undefined ? events : events.filter((e) => filters.includes(e.type));
|
|
73
|
+
// Output budget: cap to the most recent N (no silent caps — droppedOldest is surfaced in cost).
|
|
74
|
+
const { events: budgeted, droppedOldest } = applyEventBudget(filtered, asNumber(args['max_events']));
|
|
75
|
+
const report = buildReactionReport(budgeted, windowMs);
|
|
76
|
+
// carry session health — a throttled tab means the observed timeline may be incomplete.
|
|
77
|
+
return Promise.resolve(withControl(session, {
|
|
78
|
+
...report,
|
|
79
|
+
cost: costHint(report, budgeted.length, droppedOldest),
|
|
80
|
+
...healthEnvelope(session),
|
|
81
|
+
}));
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: ReticleTool.WAIT_FOR,
|
|
86
|
+
description: 'Block until a predicate is satisfied (or already true in the recent buffer), else time out. Returns matching evidence or a near-miss diagnosis. By default it only counts events since your last act, so a signal buffered BEFORE the action can never fake a pass; pass `since` (an observe/act cursor) to widen or narrow that window explicitly.',
|
|
87
|
+
inputSchema: {
|
|
88
|
+
predicate: PredicateSchema.describe('Predicate to wait for: { signal }, { net }, { element }, { kind: "state", store, path, equals } (assert a registered store\'s value directly — the source of truth no DOM read can reach; equals takes a literal or { $gte | $contains | $length } pattern), { kind: "settled", quietMs } (deterministic network + DOM idle — prefer this over a fixed sleep), or a combination via allOf/anyOf.'),
|
|
89
|
+
timeout_ms: z.number().optional().describe('Maximum wait in milliseconds. Default: 4000.'),
|
|
90
|
+
since: z
|
|
91
|
+
.number()
|
|
92
|
+
.optional()
|
|
93
|
+
.describe('Cursor from a prior reticle_act — scopes the wait to events after that act.'),
|
|
94
|
+
...sessionIdShape,
|
|
95
|
+
},
|
|
96
|
+
outputSchema: {
|
|
97
|
+
pass: z.boolean(),
|
|
98
|
+
evidence: z.unknown().optional(),
|
|
99
|
+
failureReason: z.string().optional(),
|
|
100
|
+
session: z
|
|
101
|
+
.object({ lastSeenMs: z.number(), throttled: z.boolean(), focused: z.boolean() })
|
|
102
|
+
.optional(),
|
|
103
|
+
},
|
|
104
|
+
handler: async (deps, args) => {
|
|
105
|
+
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
106
|
+
const predicate = PredicateSchema.parse(args['predicate']);
|
|
107
|
+
// Honesty: explicit since wins; else default to the last act's cursor; else the whole buffer.
|
|
108
|
+
const since = asNumber(args['since']) ?? session.lastActCursor() ?? 0;
|
|
109
|
+
const verdict = await waitForPredicate(session, predicate, asNumber(args['timeout_ms']) ?? 4000, since);
|
|
110
|
+
// match reticle_assert — wrap with control + session health (throttle matters most while blocking).
|
|
111
|
+
return withControl(session, { ...verdict, ...healthEnvelope(session) });
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: ReticleTool.ASSERT,
|
|
116
|
+
description: 'Evaluate a predicate (optionally waiting up to timeout_ms). Returns { pass, evidence, failureReason? }. The end of every verify loop. Prefer a { signal } or { net } consequence over { element }/{ text } presence — a passing presence-only assertion returns `advice` because a wrong/healed element can fake it. By default it only counts events since your last act, so a stale buffered signal can never fake a pass; pass `since` (an observe/act cursor) to set the window explicitly.',
|
|
117
|
+
inputSchema: {
|
|
118
|
+
predicate: PredicateSchema.describe('Predicate to evaluate: { signal }, { net }, { element } or a combination.'),
|
|
119
|
+
timeout_ms: z
|
|
120
|
+
.number()
|
|
121
|
+
.optional()
|
|
122
|
+
.describe('If > 0, wait up to this many milliseconds before failing. Default: 0 (evaluate once).'),
|
|
123
|
+
since: z
|
|
124
|
+
.number()
|
|
125
|
+
.optional()
|
|
126
|
+
.describe('Cursor from a prior reticle_act — scopes the assertion to events after that act.'),
|
|
127
|
+
...sessionIdShape,
|
|
128
|
+
},
|
|
129
|
+
outputSchema: {
|
|
130
|
+
pass: z.boolean(),
|
|
131
|
+
evidence: z.unknown().optional(),
|
|
132
|
+
failureReason: z.string().optional(),
|
|
133
|
+
advice: z
|
|
134
|
+
.string()
|
|
135
|
+
.optional()
|
|
136
|
+
.describe('Present on a PASSING presence-only assertion — nudges toward a consequence.'),
|
|
137
|
+
session: z
|
|
138
|
+
.object({ lastSeenMs: z.number(), throttled: z.boolean(), focused: z.boolean() })
|
|
139
|
+
.optional(),
|
|
140
|
+
},
|
|
141
|
+
handler: async (deps, args) => {
|
|
142
|
+
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
143
|
+
const predicate = PredicateSchema.parse(args['predicate']);
|
|
144
|
+
const timeout = asNumber(args['timeout_ms']) ?? 0;
|
|
145
|
+
// Honesty: explicit since wins; else default to the last act's cursor; else the whole buffer.
|
|
146
|
+
const since = asNumber(args['since']) ?? session.lastActCursor() ?? 0;
|
|
147
|
+
const verdict = timeout > 0
|
|
148
|
+
? await waitForPredicate(session, predicate, timeout, since)
|
|
149
|
+
: await evaluatePredicate(session, predicate, since);
|
|
150
|
+
// A GREEN presence-only assertion is the dangerous case (a wrong element can fake it) — nudge
|
|
151
|
+
// toward a consequence. Never on a failing verdict (moot) or when a signal/net is asserted.
|
|
152
|
+
const advice = verdict.pass && isPresenceOnlyAssertion(predicate) ? { advice: PRESENCE_ONLY_ADVICE } : {};
|
|
153
|
+
return withControl(session, { ...verdict, ...advice, ...healthEnvelope(session) });
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: ReticleTool.NETWORK,
|
|
158
|
+
description: 'Filtered list of network calls. Fast path for "did POST /x return 200?". A zero-match filter returns a `hint` { totalInWindow, present[] } of the calls that DID fire, so a miss is diagnosable.',
|
|
159
|
+
inputSchema: {
|
|
160
|
+
since: z
|
|
161
|
+
.number()
|
|
162
|
+
.optional()
|
|
163
|
+
.describe('Cursor from a prior reticle_act — scopes the query to requests fired after that act.'),
|
|
164
|
+
method: z
|
|
165
|
+
.string()
|
|
166
|
+
.optional()
|
|
167
|
+
.describe('HTTP method filter: GET | POST | PUT | DELETE | PATCH etc.'),
|
|
168
|
+
urlContains: z.string().optional().describe('Substring that the request URL must contain.'),
|
|
169
|
+
status: z.number().optional().describe('HTTP status code filter (e.g. 200, 404, 500).'),
|
|
170
|
+
limit: z
|
|
171
|
+
.number()
|
|
172
|
+
.optional()
|
|
173
|
+
.describe('Keep only the most recent N matching calls (older are dropped and counted in droppedOldest) — cuts tokens on a wide window.'),
|
|
174
|
+
...sessionIdShape,
|
|
175
|
+
},
|
|
176
|
+
outputSchema: {
|
|
177
|
+
calls: z.array(z.unknown()),
|
|
178
|
+
total: z
|
|
179
|
+
.number()
|
|
180
|
+
.optional()
|
|
181
|
+
.describe('Total matches before `limit` — present only when capped.'),
|
|
182
|
+
droppedOldest: z.number().optional().describe('How many older matches `limit` dropped.'),
|
|
183
|
+
hint: z.object({ totalInWindow: z.number(), present: z.array(z.string()) }).optional(),
|
|
184
|
+
cost: z.object({ bytes: z.number(), tokens: z.number() }).optional(),
|
|
185
|
+
},
|
|
186
|
+
handler: (deps, args) => {
|
|
187
|
+
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
188
|
+
const since = asNumber(args['since']) ?? 0;
|
|
189
|
+
const method = asString(args['method']);
|
|
190
|
+
const urlContains = asString(args['urlContains']);
|
|
191
|
+
const status = asNumber(args['status']);
|
|
192
|
+
const limit = asNumber(args['limit']);
|
|
193
|
+
// Completed calls + unresolved in-flight requests (a hung request shows as pending).
|
|
194
|
+
const allNet = reconcileNet(session.eventsSince(since));
|
|
195
|
+
const matched = allNet.filter((e) => matchNet(e, method, urlContains, status));
|
|
196
|
+
// zero-match filter returns what DID fire, not a bare [].
|
|
197
|
+
if (matched.length === 0 && allNet.length > 0) {
|
|
198
|
+
return Promise.resolve(withSizeCost({ calls: matched, hint: netEmptyHint(allNet) }));
|
|
199
|
+
}
|
|
200
|
+
const { events: budgeted, droppedOldest } = applyEventBudget(matched, limit);
|
|
201
|
+
const calls = budgeted.map(projectNetCall);
|
|
202
|
+
return Promise.resolve(withSizeCost(droppedOldest > 0 ? { calls, total: matched.length, droppedOldest } : { calls }));
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: ReticleTool.CONSOLE,
|
|
207
|
+
description: 'Console/error log. Fast path for "were there any errors during this flow?". When a level filter matches nothing, returns a `hint` { totalInWindow, byLevel } so 0 errors is distinguishable from a silent page.',
|
|
208
|
+
inputSchema: {
|
|
209
|
+
level: z
|
|
210
|
+
.string()
|
|
211
|
+
.optional()
|
|
212
|
+
.describe('Log level filter: error | warn | info | log. Omit to return all levels.'),
|
|
213
|
+
since: z
|
|
214
|
+
.number()
|
|
215
|
+
.optional()
|
|
216
|
+
.describe('Cursor from a prior reticle_act — scopes the query to log entries after that act.'),
|
|
217
|
+
limit: z
|
|
218
|
+
.number()
|
|
219
|
+
.optional()
|
|
220
|
+
.describe('Keep only the most recent N matching entries (older are dropped and counted in droppedOldest) — cuts tokens when a page spams the console.'),
|
|
221
|
+
...sessionIdShape,
|
|
222
|
+
},
|
|
223
|
+
outputSchema: {
|
|
224
|
+
logs: z.array(z.unknown()),
|
|
225
|
+
total: z
|
|
226
|
+
.number()
|
|
227
|
+
.optional()
|
|
228
|
+
.describe('Total matches before `limit` — present only when capped.'),
|
|
229
|
+
droppedOldest: z.number().optional().describe('How many older matches `limit` dropped.'),
|
|
230
|
+
hint: z.object({ totalInWindow: z.number(), byLevel: z.record(z.number()) }).optional(),
|
|
231
|
+
cost: z.object({ bytes: z.number(), tokens: z.number() }).optional(),
|
|
232
|
+
},
|
|
233
|
+
handler: (deps, args) => {
|
|
234
|
+
const session = deps.sessions.resolve(asString(args['sessionId']));
|
|
235
|
+
const since = asNumber(args['since']) ?? 0;
|
|
236
|
+
const level = asString(args['level']);
|
|
237
|
+
const limit = asNumber(args['limit']);
|
|
238
|
+
const allConsole = session.eventsSince(since).filter(isConsoleEvent);
|
|
239
|
+
const matched = allConsole.filter((e) => matchConsole(e, level));
|
|
240
|
+
// zero matches at this level → report what levels ARE present (not a bare []).
|
|
241
|
+
if (matched.length === 0 && allConsole.length > 0) {
|
|
242
|
+
return Promise.resolve(withSizeCost({ logs: matched, hint: consoleEmptyHint(allConsole) }));
|
|
243
|
+
}
|
|
244
|
+
const { events: budgeted, droppedOldest } = applyEventBudget(matched, limit);
|
|
245
|
+
const logs = budgeted.map(projectConsoleLog);
|
|
246
|
+
return Promise.resolve(withSizeCost(droppedOldest > 0 ? { logs, total: matched.length, droppedOldest } : { logs }));
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: ReticleTool.ANIMATIONS,
|
|
251
|
+
description: 'Currently running + recently completed animations with targets/timing.',
|
|
252
|
+
inputSchema: { ...sessionIdShape },
|
|
253
|
+
outputSchema: {
|
|
254
|
+
animations: z.array(z.unknown()),
|
|
255
|
+
},
|
|
256
|
+
handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.ANIMATIONS, {}),
|
|
257
|
+
},
|
|
258
|
+
];
|
|
259
|
+
//# sourceMappingURL=observe-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-tools.js","sourceRoot":"","sources":["../../src/tools/observe-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ToolDef } from './tools.js';
|
|
2
|
+
/**
|
|
3
|
+
* Which MCP tool surface to expose. The advertised tool DEFINITIONS are re-sent to the model on
|
|
4
|
+
* every turn, so a smaller surface is a per-turn token saving that compounds across a loop —
|
|
5
|
+
* measured ~14.6k tok/turn at full (48 tools) vs ~half that for core. Fewer tools also makes the
|
|
6
|
+
* model wander less (fewer turns, higher accuracy). See bench/LAYER-B.md.
|
|
7
|
+
*
|
|
8
|
+
* core — the verify loop a coding agent actually needs: navigate→look→act→observe→assert,
|
|
9
|
+
* WITH direct network + console + state observability (the highest-signal checks).
|
|
10
|
+
* ~12 tools. The recommended profile for agent-driven verification.
|
|
11
|
+
* standard — core + common extras (inspect, sequences, animations, flows, session lifecycle,
|
|
12
|
+
* scroll, baselines, …). For agents that need more than the bare loop.
|
|
13
|
+
* hybrid — THE DEFAULT: core verify+oracle tools advertised directly + 2 meta-tools for on-demand
|
|
14
|
+
* reach to everything else. Core accuracy/detection at ~64% less schema tax than full.
|
|
15
|
+
* full — all tools advertised directly. Opt in via RETICLE_TOOL_PROFILE=full for hard-call scripts.
|
|
16
|
+
*/
|
|
17
|
+
export declare const TOOL_PROFILE: {
|
|
18
|
+
/** dynamic — advertise only 2 meta-tools (reticle_tools + reticle_run); load real tools on demand.
|
|
19
|
+
* Fixed ~hundreds of tokens/turn regardless of how many tools exist. See dynamic-tools.ts. */
|
|
20
|
+
readonly DYNAMIC: "dynamic";
|
|
21
|
+
/** hybrid — the core verify tools advertised directly (so the agent acts reliably) PLUS the 2
|
|
22
|
+
* meta-tools for on-demand reach to every other tool. Core accuracy + full reach at ~core cost. */
|
|
23
|
+
readonly HYBRID: "hybrid";
|
|
24
|
+
readonly CORE: "core";
|
|
25
|
+
readonly STANDARD: "standard";
|
|
26
|
+
readonly FULL: "full";
|
|
27
|
+
};
|
|
28
|
+
export type ToolProfile = (typeof TOOL_PROFILE)[keyof typeof TOOL_PROFILE];
|
|
29
|
+
export declare const TOOL_PROFILE_ENV = "RETICLE_TOOL_PROFILE";
|
|
30
|
+
export declare const CORE_TOOL_NAMES: ReadonlySet<string>;
|
|
31
|
+
export declare function resolveToolProfile(explicit?: string): ToolProfile;
|
|
32
|
+
export declare function filterTools(tools: ToolDef[], profile: ToolProfile): ToolDef[];
|
|
33
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/tools/profiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY;IACvB;mGAC+F;;IAE/F;wGACoG;;;;;CAK5F,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAQvD,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAa9C,CAAC;AAmCH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAWjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,EAAE,CAK7E"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ReticleTool } from './tool-names.js';
|
|
2
|
+
/**
|
|
3
|
+
* Which MCP tool surface to expose. The advertised tool DEFINITIONS are re-sent to the model on
|
|
4
|
+
* every turn, so a smaller surface is a per-turn token saving that compounds across a loop —
|
|
5
|
+
* measured ~14.6k tok/turn at full (48 tools) vs ~half that for core. Fewer tools also makes the
|
|
6
|
+
* model wander less (fewer turns, higher accuracy). See bench/LAYER-B.md.
|
|
7
|
+
*
|
|
8
|
+
* core — the verify loop a coding agent actually needs: navigate→look→act→observe→assert,
|
|
9
|
+
* WITH direct network + console + state observability (the highest-signal checks).
|
|
10
|
+
* ~12 tools. The recommended profile for agent-driven verification.
|
|
11
|
+
* standard — core + common extras (inspect, sequences, animations, flows, session lifecycle,
|
|
12
|
+
* scroll, baselines, …). For agents that need more than the bare loop.
|
|
13
|
+
* hybrid — THE DEFAULT: core verify+oracle tools advertised directly + 2 meta-tools for on-demand
|
|
14
|
+
* reach to everything else. Core accuracy/detection at ~64% less schema tax than full.
|
|
15
|
+
* full — all tools advertised directly. Opt in via RETICLE_TOOL_PROFILE=full for hard-call scripts.
|
|
16
|
+
*/
|
|
17
|
+
export const TOOL_PROFILE = {
|
|
18
|
+
/** dynamic — advertise only 2 meta-tools (reticle_tools + reticle_run); load real tools on demand.
|
|
19
|
+
* Fixed ~hundreds of tokens/turn regardless of how many tools exist. See dynamic-tools.ts. */
|
|
20
|
+
DYNAMIC: 'dynamic',
|
|
21
|
+
/** hybrid — the core verify tools advertised directly (so the agent acts reliably) PLUS the 2
|
|
22
|
+
* meta-tools for on-demand reach to every other tool. Core accuracy + full reach at ~core cost. */
|
|
23
|
+
HYBRID: 'hybrid',
|
|
24
|
+
CORE: 'core',
|
|
25
|
+
STANDARD: 'standard',
|
|
26
|
+
FULL: 'full',
|
|
27
|
+
};
|
|
28
|
+
export const TOOL_PROFILE_ENV = 'RETICLE_TOOL_PROFILE';
|
|
29
|
+
// The set an agent needs to verify a change end-to-end. Tool DEFINITIONS are re-sent every turn,
|
|
30
|
+
// so a smaller surface compounds — but there is a floor: an 8-tool cut (dropping act/navigate/
|
|
31
|
+
// wait_for/sessions) was MEASURED to regress real-agent accuracy from 5/5 to 3/5, because the
|
|
32
|
+
// model loses scaffolding and wanders (more turns) on harder flows. These 12 are the lean sweet
|
|
33
|
+
// spot that holds 5/5 in a real gpt-4o loop. Direct network/console stay (far more discoverable
|
|
34
|
+
// than observe-with-filters → fewer turns, better verdicts). See bench/LAYER-B.md.
|
|
35
|
+
export const CORE_TOOL_NAMES = new Set([
|
|
36
|
+
ReticleTool.SESSIONS,
|
|
37
|
+
ReticleTool.NAVIGATE,
|
|
38
|
+
ReticleTool.SNAPSHOT,
|
|
39
|
+
ReticleTool.QUERY,
|
|
40
|
+
ReticleTool.ACT,
|
|
41
|
+
ReticleTool.ACT_AND_WAIT,
|
|
42
|
+
ReticleTool.OBSERVE,
|
|
43
|
+
ReticleTool.NETWORK,
|
|
44
|
+
ReticleTool.CONSOLE,
|
|
45
|
+
ReticleTool.WAIT_FOR,
|
|
46
|
+
ReticleTool.ASSERT,
|
|
47
|
+
ReticleTool.STATE,
|
|
48
|
+
]);
|
|
49
|
+
const STANDARD_TOOL_NAMES = new Set([
|
|
50
|
+
...CORE_TOOL_NAMES,
|
|
51
|
+
ReticleTool.ACT_SEQUENCE,
|
|
52
|
+
ReticleTool.INSPECT,
|
|
53
|
+
ReticleTool.NETWORK,
|
|
54
|
+
ReticleTool.CONSOLE,
|
|
55
|
+
ReticleTool.ANIMATIONS,
|
|
56
|
+
ReticleTool.FLOW_SAVE,
|
|
57
|
+
ReticleTool.FLOW_LIST,
|
|
58
|
+
ReticleTool.FLOW_LOAD,
|
|
59
|
+
ReticleTool.FLOW_REPLAY,
|
|
60
|
+
ReticleTool.FLOW_VERIFY,
|
|
61
|
+
ReticleTool.FLOW_HEAL,
|
|
62
|
+
ReticleTool.SESSION,
|
|
63
|
+
ReticleTool.END_SESSION,
|
|
64
|
+
ReticleTool.YIELD,
|
|
65
|
+
ReticleTool.RESUME,
|
|
66
|
+
ReticleTool.MESSAGES,
|
|
67
|
+
ReticleTool.REVIEW,
|
|
68
|
+
ReticleTool.WAIT_READY,
|
|
69
|
+
ReticleTool.SCROLL_TO,
|
|
70
|
+
ReticleTool.CRAWL,
|
|
71
|
+
ReticleTool.RECORD_START,
|
|
72
|
+
ReticleTool.RECORD_STOP,
|
|
73
|
+
ReticleTool.REPLAY,
|
|
74
|
+
ReticleTool.EXPLORE,
|
|
75
|
+
ReticleTool.BASELINE_SAVE,
|
|
76
|
+
ReticleTool.BASELINE_LIST,
|
|
77
|
+
ReticleTool.CONTRACT_SAVE,
|
|
78
|
+
ReticleTool.NETWORK_MOCK,
|
|
79
|
+
ReticleTool.VIEWPORT,
|
|
80
|
+
]);
|
|
81
|
+
export function resolveToolProfile(explicit) {
|
|
82
|
+
const raw = explicit ?? process.env[TOOL_PROFILE_ENV];
|
|
83
|
+
if (raw === TOOL_PROFILE.DYNAMIC)
|
|
84
|
+
return TOOL_PROFILE.DYNAMIC;
|
|
85
|
+
if (raw === TOOL_PROFILE.HYBRID)
|
|
86
|
+
return TOOL_PROFILE.HYBRID;
|
|
87
|
+
if (raw === TOOL_PROFILE.CORE)
|
|
88
|
+
return TOOL_PROFILE.CORE;
|
|
89
|
+
if (raw === TOOL_PROFILE.STANDARD)
|
|
90
|
+
return TOOL_PROFILE.STANDARD;
|
|
91
|
+
if (raw === TOOL_PROFILE.FULL)
|
|
92
|
+
return TOOL_PROFILE.FULL;
|
|
93
|
+
// Default: hybrid — the core verify+oracle tools advertised directly (no detection loss, verified
|
|
94
|
+
// 10/10 on the regression bench) PLUS the 2 meta-tools for on-demand reach to every other tool. ~64%
|
|
95
|
+
// less per-turn schema than `full` at the same accuracy. Explicit `full` still opts into all tools.
|
|
96
|
+
return TOOL_PROFILE.HYBRID;
|
|
97
|
+
}
|
|
98
|
+
export function filterTools(tools, profile) {
|
|
99
|
+
if (profile === TOOL_PROFILE.CORE)
|
|
100
|
+
return tools.filter((t) => CORE_TOOL_NAMES.has(t.name));
|
|
101
|
+
if (profile === TOOL_PROFILE.STANDARD)
|
|
102
|
+
return tools.filter((t) => STANDARD_TOOL_NAMES.has(t.name));
|
|
103
|
+
return tools;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/tools/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token-efficiency for reticle_query: a `by=role value=button` on a busy page can return dozens of
|
|
3
|
+
* element descriptors the agent must read in full. This trims the result the AGENT sees — the most
|
|
4
|
+
* expensive part of a tool call is the bytes that land in its context.
|
|
5
|
+
*
|
|
6
|
+
* - count_only: drop the elements array entirely, return just `count` (the agent often only needs
|
|
7
|
+
* "how many?" — e.g. "are there 3 rows now?").
|
|
8
|
+
* - limit: keep the first N descriptors, report `total` + `truncated:true` so the trim is never
|
|
9
|
+
* silent (the agent knows to narrow with name/scope rather than assume it saw everything).
|
|
10
|
+
*
|
|
11
|
+
* Pure and result-shape-tolerant: anything that is not a `{ elements: [...] }` object passes
|
|
12
|
+
* through untouched (a thrown-error envelope, a zero-match hint result, etc.).
|
|
13
|
+
*/
|
|
14
|
+
export declare function paginateQueryResult(result: unknown, limit: number | undefined, countOnly: boolean): unknown;
|
|
15
|
+
//# sourceMappingURL=query-paginate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-paginate.d.ts","sourceRoot":"","sources":["../../src/tools/query-paginate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,OAAO,GACjB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token-efficiency for reticle_query: a `by=role value=button` on a busy page can return dozens of
|
|
3
|
+
* element descriptors the agent must read in full. This trims the result the AGENT sees — the most
|
|
4
|
+
* expensive part of a tool call is the bytes that land in its context.
|
|
5
|
+
*
|
|
6
|
+
* - count_only: drop the elements array entirely, return just `count` (the agent often only needs
|
|
7
|
+
* "how many?" — e.g. "are there 3 rows now?").
|
|
8
|
+
* - limit: keep the first N descriptors, report `total` + `truncated:true` so the trim is never
|
|
9
|
+
* silent (the agent knows to narrow with name/scope rather than assume it saw everything).
|
|
10
|
+
*
|
|
11
|
+
* Pure and result-shape-tolerant: anything that is not a `{ elements: [...] }` object passes
|
|
12
|
+
* through untouched (a thrown-error envelope, a zero-match hint result, etc.).
|
|
13
|
+
*/
|
|
14
|
+
export function paginateQueryResult(result, limit, countOnly) {
|
|
15
|
+
if (typeof result !== 'object' || result === null)
|
|
16
|
+
return result;
|
|
17
|
+
const record = result;
|
|
18
|
+
const elements = record['elements'];
|
|
19
|
+
if (!Array.isArray(elements))
|
|
20
|
+
return result;
|
|
21
|
+
const total = elements.length;
|
|
22
|
+
if (countOnly) {
|
|
23
|
+
const { elements: _dropped, ...rest } = record;
|
|
24
|
+
return { ...rest, count: total };
|
|
25
|
+
}
|
|
26
|
+
if (limit !== undefined && limit >= 0 && total > limit) {
|
|
27
|
+
return { ...record, elements: elements.slice(0, limit), total, truncated: true };
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=query-paginate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-paginate.js","sourceRoot":"","sources":["../../src/tools/query-paginate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,KAAyB,EACzB,SAAkB;IAElB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACjE,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE9B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QACvD,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-tools.d.ts","sourceRoot":"","sources":["../../src/tools/read-tools.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,OAAO,EAAgD,MAAM,eAAe,CAAC;AAE3F,eAAO,MAAM,UAAU,EAAE,OAAO,EAwW/B,CAAC"}
|