@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,89 @@
|
|
|
1
|
+
/** MCP tool names exposed to the coding agent (plan/05). No free strings. */
|
|
2
|
+
export declare const ReticleTool: {
|
|
3
|
+
readonly SESSIONS: "reticle_sessions";
|
|
4
|
+
readonly SNAPSHOT: "reticle_snapshot";
|
|
5
|
+
readonly QUERY: "reticle_query";
|
|
6
|
+
readonly INSPECT: "reticle_inspect";
|
|
7
|
+
readonly ACT: "reticle_act";
|
|
8
|
+
readonly ACT_SEQUENCE: "reticle_act_sequence";
|
|
9
|
+
readonly ACT_AND_WAIT: "reticle_act_and_wait";
|
|
10
|
+
readonly OBSERVE: "reticle_observe";
|
|
11
|
+
readonly WAIT_FOR: "reticle_wait_for";
|
|
12
|
+
readonly NETWORK: "reticle_network";
|
|
13
|
+
readonly CONSOLE: "reticle_console";
|
|
14
|
+
readonly ANIMATIONS: "reticle_animations";
|
|
15
|
+
readonly ASSERT: "reticle_assert";
|
|
16
|
+
readonly BASELINE_SAVE: "reticle_baseline_save";
|
|
17
|
+
readonly BASELINE_LIST: "reticle_baseline_list";
|
|
18
|
+
readonly DIFF: "reticle_diff";
|
|
19
|
+
readonly RECORD_START: "reticle_record_start";
|
|
20
|
+
readonly RECORD_STOP: "reticle_record_stop";
|
|
21
|
+
readonly REPLAY: "reticle_replay";
|
|
22
|
+
readonly EXPLORE: "reticle_explore";
|
|
23
|
+
readonly NARRATE: "reticle_narrate";
|
|
24
|
+
readonly CLOCK: "reticle_clock";
|
|
25
|
+
readonly STATE: "reticle_state";
|
|
26
|
+
readonly CAPABILITIES: "reticle_capabilities";
|
|
27
|
+
readonly CONTRACT_SAVE: "reticle_contract_save";
|
|
28
|
+
readonly DOMAIN: "reticle_domain";
|
|
29
|
+
readonly FLOW_SAVE: "reticle_flow_save";
|
|
30
|
+
readonly FLOW_LIST: "reticle_flow_list";
|
|
31
|
+
readonly FLOW_LOAD: "reticle_flow_load";
|
|
32
|
+
readonly FLOW_REPLAY: "reticle_flow_replay";
|
|
33
|
+
/** replay EVERY saved flow → one consolidated suite verdict + prioritized fixes (the loop closer). */
|
|
34
|
+
readonly FLOW_VERIFY: "reticle_flow_verify";
|
|
35
|
+
/** persist the human-recorded flow from the live tab. */
|
|
36
|
+
readonly FLOW_SAVE_RECORDED: "reticle_flow_save_recorded";
|
|
37
|
+
/** propose (+ opt-in apply) a nearest-match rebind for a drifted flow. */
|
|
38
|
+
readonly FLOW_HEAL: "reticle_flow_heal";
|
|
39
|
+
/** structured annotation → compiles into the recording's expect/dynamic/success. */
|
|
40
|
+
readonly ANNOTATE: "reticle_annotate";
|
|
41
|
+
/** read cross-run history (.reticle/project.json) + diff-vs-last for a name. */
|
|
42
|
+
readonly PROJECT: "reticle_project";
|
|
43
|
+
/** explicitly record a run outcome (the manual companion to auto-recording). */
|
|
44
|
+
readonly RUN_RECORD: "reticle_run_record";
|
|
45
|
+
/** capture a pixel screenshot (CDP/driven browser) → .reticle/visual/<name>.png. */
|
|
46
|
+
readonly SCREENSHOT: "reticle_screenshot";
|
|
47
|
+
/** stub/intercept network on the driven page (500, offline, delay) for error/edge-state testing. */
|
|
48
|
+
readonly NETWORK_MOCK: "reticle_network_mock";
|
|
49
|
+
/** pin the driven page's viewport to fixed pixels for reproducible visual baselines. */
|
|
50
|
+
readonly VIEWPORT: "reticle_viewport";
|
|
51
|
+
/** perceptual-diff the live page against a saved visual baseline. */
|
|
52
|
+
readonly VISUAL_DIFF: "reticle_visual_diff";
|
|
53
|
+
/** autonomously click every reachable control + report anomalies (no script). */
|
|
54
|
+
readonly CRAWL: "reticle_crawl";
|
|
55
|
+
/** scroll a virtualized list until a queried row mounts, then return it. */
|
|
56
|
+
readonly SCROLL_TO: "reticle_scroll_to";
|
|
57
|
+
/** Session lifecycle: tune the presenter session (e.g. idle-end window) for the app's needs. */
|
|
58
|
+
readonly SESSION: "reticle_session";
|
|
59
|
+
/** Live-control: end the session (→ ended + push PRESENTER). Handlers live in the tools facet. */
|
|
60
|
+
readonly END_SESSION: "reticle_end_session";
|
|
61
|
+
/** Live-control: hand the session back to the human between turns (→ waiting/ask, revivable). */
|
|
62
|
+
readonly YIELD: "reticle_yield";
|
|
63
|
+
/** Live-control: clear a pause (→ active). */
|
|
64
|
+
readonly RESUME: "reticle_resume";
|
|
65
|
+
/** Live-control: drain the human→agent inbox (explicit poll). */
|
|
66
|
+
readonly MESSAGES: "reticle_messages";
|
|
67
|
+
/** Human review: list the mistakes the human pinned to elements, and resolve them once fixed. */
|
|
68
|
+
readonly REVIEW: "reticle_review";
|
|
69
|
+
/** First-run readiness: block briefly until the app's SDK connects (smooths the init→connect race). */
|
|
70
|
+
readonly WAIT_READY: "reticle_wait_ready";
|
|
71
|
+
/** Navigate the connected browser tab to a URL. */
|
|
72
|
+
readonly NAVIGATE: "reticle_navigate";
|
|
73
|
+
/** Reload the connected browser tab (soft or hard). */
|
|
74
|
+
readonly REFRESH: "reticle_refresh";
|
|
75
|
+
/** Report running version, latest available, changelog, and breaking changes. */
|
|
76
|
+
readonly VERSION_INFO: "reticle_version_info";
|
|
77
|
+
/** Install the latest server version and restart (Claude Code reconnects automatically). */
|
|
78
|
+
readonly APPLY_UPDATE: "reticle_apply_update";
|
|
79
|
+
/** Restore the previous server version and restart. */
|
|
80
|
+
readonly ROLLBACK: "reticle_rollback";
|
|
81
|
+
/** Export a verification-run artifact (.reticle/runs/<id>.json) — the OEM/CI-consumable verdict. */
|
|
82
|
+
readonly RUN_EXPORT: "reticle_run_export";
|
|
83
|
+
/** Lease a fresh isolated headless context from the shared browser pool (one per flow). */
|
|
84
|
+
readonly LEASE_ACQUIRE: "reticle_lease_acquire";
|
|
85
|
+
/** Release a previously leased context, freeing the pool slot. */
|
|
86
|
+
readonly LEASE_RELEASE: "reticle_lease_release";
|
|
87
|
+
};
|
|
88
|
+
export type ReticleTool = (typeof ReticleTool)[keyof typeof ReticleTool];
|
|
89
|
+
//# sourceMappingURL=tool-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/tools/tool-names.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BtB,sGAAsG;;IAEtG,yDAAyD;;IAEzD,0EAA0E;;IAE1E,oFAAoF;;IAEpF,gFAAgF;;IAEhF,gFAAgF;;IAEhF,oFAAoF;;IAEpF,oGAAoG;;IAEpG,wFAAwF;;IAExF,qEAAqE;;IAErE,iFAAiF;;IAEjF,4EAA4E;;IAE5E,gGAAgG;;IAEhG,kGAAkG;;IAElG,iGAAiG;;IAEjG,8CAA8C;;IAE9C,iEAAiE;;IAEjE,iGAAiG;;IAEjG,uGAAuG;;IAEvG,mDAAmD;;IAEnD,uDAAuD;;IAEvD,iFAAiF;;IAEjF,4FAA4F;;IAE5F,uDAAuD;;IAEvD,oGAAoG;;IAEpG,2FAA2F;;IAE3F,kEAAkE;;CAE1D,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** MCP tool names exposed to the coding agent (plan/05). No free strings. */
|
|
2
|
+
export const ReticleTool = {
|
|
3
|
+
SESSIONS: 'reticle_sessions',
|
|
4
|
+
SNAPSHOT: 'reticle_snapshot',
|
|
5
|
+
QUERY: 'reticle_query',
|
|
6
|
+
INSPECT: 'reticle_inspect',
|
|
7
|
+
ACT: 'reticle_act',
|
|
8
|
+
ACT_SEQUENCE: 'reticle_act_sequence',
|
|
9
|
+
ACT_AND_WAIT: 'reticle_act_and_wait',
|
|
10
|
+
OBSERVE: 'reticle_observe',
|
|
11
|
+
WAIT_FOR: 'reticle_wait_for',
|
|
12
|
+
NETWORK: 'reticle_network',
|
|
13
|
+
CONSOLE: 'reticle_console',
|
|
14
|
+
ANIMATIONS: 'reticle_animations',
|
|
15
|
+
ASSERT: 'reticle_assert',
|
|
16
|
+
BASELINE_SAVE: 'reticle_baseline_save',
|
|
17
|
+
BASELINE_LIST: 'reticle_baseline_list',
|
|
18
|
+
DIFF: 'reticle_diff',
|
|
19
|
+
RECORD_START: 'reticle_record_start',
|
|
20
|
+
RECORD_STOP: 'reticle_record_stop',
|
|
21
|
+
REPLAY: 'reticle_replay',
|
|
22
|
+
EXPLORE: 'reticle_explore',
|
|
23
|
+
NARRATE: 'reticle_narrate',
|
|
24
|
+
CLOCK: 'reticle_clock',
|
|
25
|
+
STATE: 'reticle_state',
|
|
26
|
+
CAPABILITIES: 'reticle_capabilities',
|
|
27
|
+
CONTRACT_SAVE: 'reticle_contract_save',
|
|
28
|
+
DOMAIN: 'reticle_domain',
|
|
29
|
+
FLOW_SAVE: 'reticle_flow_save',
|
|
30
|
+
FLOW_LIST: 'reticle_flow_list',
|
|
31
|
+
FLOW_LOAD: 'reticle_flow_load',
|
|
32
|
+
FLOW_REPLAY: 'reticle_flow_replay',
|
|
33
|
+
/** replay EVERY saved flow → one consolidated suite verdict + prioritized fixes (the loop closer). */
|
|
34
|
+
FLOW_VERIFY: 'reticle_flow_verify',
|
|
35
|
+
/** persist the human-recorded flow from the live tab. */
|
|
36
|
+
FLOW_SAVE_RECORDED: 'reticle_flow_save_recorded',
|
|
37
|
+
/** propose (+ opt-in apply) a nearest-match rebind for a drifted flow. */
|
|
38
|
+
FLOW_HEAL: 'reticle_flow_heal',
|
|
39
|
+
/** structured annotation → compiles into the recording's expect/dynamic/success. */
|
|
40
|
+
ANNOTATE: 'reticle_annotate',
|
|
41
|
+
/** read cross-run history (.reticle/project.json) + diff-vs-last for a name. */
|
|
42
|
+
PROJECT: 'reticle_project',
|
|
43
|
+
/** explicitly record a run outcome (the manual companion to auto-recording). */
|
|
44
|
+
RUN_RECORD: 'reticle_run_record',
|
|
45
|
+
/** capture a pixel screenshot (CDP/driven browser) → .reticle/visual/<name>.png. */
|
|
46
|
+
SCREENSHOT: 'reticle_screenshot',
|
|
47
|
+
/** stub/intercept network on the driven page (500, offline, delay) for error/edge-state testing. */
|
|
48
|
+
NETWORK_MOCK: 'reticle_network_mock',
|
|
49
|
+
/** pin the driven page's viewport to fixed pixels for reproducible visual baselines. */
|
|
50
|
+
VIEWPORT: 'reticle_viewport',
|
|
51
|
+
/** perceptual-diff the live page against a saved visual baseline. */
|
|
52
|
+
VISUAL_DIFF: 'reticle_visual_diff',
|
|
53
|
+
/** autonomously click every reachable control + report anomalies (no script). */
|
|
54
|
+
CRAWL: 'reticle_crawl',
|
|
55
|
+
/** scroll a virtualized list until a queried row mounts, then return it. */
|
|
56
|
+
SCROLL_TO: 'reticle_scroll_to',
|
|
57
|
+
/** Session lifecycle: tune the presenter session (e.g. idle-end window) for the app's needs. */
|
|
58
|
+
SESSION: 'reticle_session',
|
|
59
|
+
/** Live-control: end the session (→ ended + push PRESENTER). Handlers live in the tools facet. */
|
|
60
|
+
END_SESSION: 'reticle_end_session',
|
|
61
|
+
/** Live-control: hand the session back to the human between turns (→ waiting/ask, revivable). */
|
|
62
|
+
YIELD: 'reticle_yield',
|
|
63
|
+
/** Live-control: clear a pause (→ active). */
|
|
64
|
+
RESUME: 'reticle_resume',
|
|
65
|
+
/** Live-control: drain the human→agent inbox (explicit poll). */
|
|
66
|
+
MESSAGES: 'reticle_messages',
|
|
67
|
+
/** Human review: list the mistakes the human pinned to elements, and resolve them once fixed. */
|
|
68
|
+
REVIEW: 'reticle_review',
|
|
69
|
+
/** First-run readiness: block briefly until the app's SDK connects (smooths the init→connect race). */
|
|
70
|
+
WAIT_READY: 'reticle_wait_ready',
|
|
71
|
+
/** Navigate the connected browser tab to a URL. */
|
|
72
|
+
NAVIGATE: 'reticle_navigate',
|
|
73
|
+
/** Reload the connected browser tab (soft or hard). */
|
|
74
|
+
REFRESH: 'reticle_refresh',
|
|
75
|
+
/** Report running version, latest available, changelog, and breaking changes. */
|
|
76
|
+
VERSION_INFO: 'reticle_version_info',
|
|
77
|
+
/** Install the latest server version and restart (Claude Code reconnects automatically). */
|
|
78
|
+
APPLY_UPDATE: 'reticle_apply_update',
|
|
79
|
+
/** Restore the previous server version and restart. */
|
|
80
|
+
ROLLBACK: 'reticle_rollback',
|
|
81
|
+
/** Export a verification-run artifact (.reticle/runs/<id>.json) — the OEM/CI-consumable verdict. */
|
|
82
|
+
RUN_EXPORT: 'reticle_run_export',
|
|
83
|
+
/** Lease a fresh isolated headless context from the shared browser pool (one per flow). */
|
|
84
|
+
LEASE_ACQUIRE: 'reticle_lease_acquire',
|
|
85
|
+
/** Release a previously leased context, freeing the pool slot. */
|
|
86
|
+
LEASE_RELEASE: 'reticle_lease_release',
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=tool-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.js","sourceRoot":"","sources":["../../src/tools/tool-names.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,kBAAkB;IAC5B,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,iBAAiB;IAC1B,GAAG,EAAE,aAAa;IAClB,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,sBAAsB;IACpC,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,iBAAiB;IAC1B,UAAU,EAAE,oBAAoB;IAChC,MAAM,EAAE,gBAAgB;IACxB,aAAa,EAAE,uBAAuB;IACtC,aAAa,EAAE,uBAAuB;IACtC,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,eAAe;IACtB,YAAY,EAAE,sBAAsB;IACpC,aAAa,EAAE,uBAAuB;IACtC,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,WAAW,EAAE,qBAAqB;IAClC,sGAAsG;IACtG,WAAW,EAAE,qBAAqB;IAClC,yDAAyD;IACzD,kBAAkB,EAAE,4BAA4B;IAChD,0EAA0E;IAC1E,SAAS,EAAE,mBAAmB;IAC9B,oFAAoF;IACpF,QAAQ,EAAE,kBAAkB;IAC5B,gFAAgF;IAChF,OAAO,EAAE,iBAAiB;IAC1B,gFAAgF;IAChF,UAAU,EAAE,oBAAoB;IAChC,oFAAoF;IACpF,UAAU,EAAE,oBAAoB;IAChC,oGAAoG;IACpG,YAAY,EAAE,sBAAsB;IACpC,wFAAwF;IACxF,QAAQ,EAAE,kBAAkB;IAC5B,qEAAqE;IACrE,WAAW,EAAE,qBAAqB;IAClC,iFAAiF;IACjF,KAAK,EAAE,eAAe;IACtB,4EAA4E;IAC5E,SAAS,EAAE,mBAAmB;IAC9B,gGAAgG;IAChG,OAAO,EAAE,iBAAiB;IAC1B,kGAAkG;IAClG,WAAW,EAAE,qBAAqB;IAClC,iGAAiG;IACjG,KAAK,EAAE,eAAe;IACtB,8CAA8C;IAC9C,MAAM,EAAE,gBAAgB;IACxB,iEAAiE;IACjE,QAAQ,EAAE,kBAAkB;IAC5B,iGAAiG;IACjG,MAAM,EAAE,gBAAgB;IACxB,uGAAuG;IACvG,UAAU,EAAE,oBAAoB;IAChC,mDAAmD;IACnD,QAAQ,EAAE,kBAAkB;IAC5B,uDAAuD;IACvD,OAAO,EAAE,iBAAiB;IAC1B,iFAAiF;IACjF,YAAY,EAAE,sBAAsB;IACpC,4FAA4F;IAC5F,YAAY,EAAE,sBAAsB;IACpC,uDAAuD;IACvD,QAAQ,EAAE,kBAAkB;IAC5B,oGAAoG;IACpG,UAAU,EAAE,oBAAoB;IAChC,2FAA2F;IAC3F,aAAa,EAAE,uBAAuB;IACtC,kEAAkE;IAClE,aAAa,EAAE,uBAAuB;CAC9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Small pure helpers shared by the MCP tool handlers. */
|
|
2
|
+
interface InteractiveItem {
|
|
3
|
+
ref: string;
|
|
4
|
+
desc: string;
|
|
5
|
+
}
|
|
6
|
+
/** Parse interactive elements (with refs) out of a snapshot tree for exploration. */
|
|
7
|
+
export declare function parseInteractive(tree: string): InteractiveItem[];
|
|
8
|
+
export declare function asString(value: unknown): string | undefined;
|
|
9
|
+
export declare function asNumber(value: unknown): number | undefined;
|
|
10
|
+
export declare function asRecord(value: unknown): Record<string, unknown>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=tools-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAShE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Small pure helpers shared by the MCP tool handlers. */
|
|
2
|
+
/** Parse interactive elements (with refs) out of a snapshot tree for exploration. */
|
|
3
|
+
export function parseInteractive(tree) {
|
|
4
|
+
const items = [];
|
|
5
|
+
for (const line of tree.split('\n')) {
|
|
6
|
+
const match = /\(ref=(e\d+)\)/.exec(line);
|
|
7
|
+
if (match !== null) {
|
|
8
|
+
items.push({ ref: match[1] ?? '', desc: line.replace(/\s*\(ref=e\d+\)/, '').trim() });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return items;
|
|
12
|
+
}
|
|
13
|
+
export function asString(value) {
|
|
14
|
+
return typeof value === 'string' ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
export function asNumber(value) {
|
|
17
|
+
return typeof value === 'number' ? value : undefined;
|
|
18
|
+
}
|
|
19
|
+
export function asRecord(value) {
|
|
20
|
+
return typeof value === 'object' && value !== null ? value : {};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tools-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools-helpers.js","sourceRoot":"","sources":["../../src/tools/tools-helpers.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAO1D,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,eAAe,CAAC;AAO7E,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKvD,eAAO,MAAM,KAAK,EAAE,OAAO,EAsR1B,CAAC"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ReticleCommand, SnapshotMode } from '@reticlehq/core';
|
|
3
|
+
import { ReticleTool } from './tool-names.js';
|
|
4
|
+
import { withSizeCost } from '../session/output-budget.js';
|
|
5
|
+
import { applySnapshotDelta, SnapshotCache } from './snapshot-delta.js';
|
|
6
|
+
import { asString, asNumber } from './tools-helpers.js';
|
|
7
|
+
import { paginateQueryResult } from './query-paginate.js';
|
|
8
|
+
import { CONTRACT_TOOLS } from './contract-tools.js';
|
|
9
|
+
import { DOMAIN_TOOLS } from '../domain/domain-tools.js';
|
|
10
|
+
import { BROWSER_TOOLS } from './browser-tools.js';
|
|
11
|
+
import { FLOW_TOOLS } from '../flows/flow-tools.js';
|
|
12
|
+
import { PROJECT_TOOLS } from '../project/project-tools.js';
|
|
13
|
+
import { RUN_TOOLS } from '../runs/run-tools.js';
|
|
14
|
+
import { VISUAL_TOOLS } from '../visual/visual-tools.js';
|
|
15
|
+
import { CRAWL_TOOLS } from '../crawl/crawl-tools.js';
|
|
16
|
+
import { SCROLL_TOOLS } from '../input/scroll-tools.js';
|
|
17
|
+
import { NETWORK_MOCK_TOOLS } from '../input/network-mock-tools.js';
|
|
18
|
+
import { VIEWPORT_TOOLS } from '../input/viewport-tools.js';
|
|
19
|
+
import { SESSION_TOOLS } from '../session/session-tools.js';
|
|
20
|
+
import { ANNOTATE_TOOLS } from '../flows/annotate-tools.js';
|
|
21
|
+
import { LIVE_CONTROL_TOOLS } from '../session/live-control-tools.js';
|
|
22
|
+
import { UPDATE_TOOLS } from '../update/update-tools.js';
|
|
23
|
+
import { sessionIdShape, commandOrThrow } from './tool-kit.js';
|
|
24
|
+
import { ACT_TOOLS } from './act-tools.js';
|
|
25
|
+
import { OBSERVE_TOOLS } from './observe-tools.js';
|
|
26
|
+
import { READ_TOOLS } from './read-tools.js';
|
|
27
|
+
import { LEASE_TOOLS } from './lease-tools.js';
|
|
28
|
+
/** Per-server last-snapshot cache backing reticle_snapshot's diff:true delta mode (route-invalidated). */
|
|
29
|
+
const SNAPSHOT_CACHE = new SnapshotCache();
|
|
30
|
+
export const TOOLS = [
|
|
31
|
+
{
|
|
32
|
+
name: ReticleTool.SESSIONS,
|
|
33
|
+
description: 'List connected browser sessions (tab url/title, sessionId, last-seen, health: hidden/focused/throttled, and `realInputAvailable` — true when native CDP/launched real input is driving this tab), plus a `recommendation` pointing to `reticle drive` when a tab is hidden/throttled and may be un-scriptable from here.',
|
|
34
|
+
inputSchema: {},
|
|
35
|
+
outputSchema: {
|
|
36
|
+
sessions: z
|
|
37
|
+
.array(
|
|
38
|
+
// Keep in sync with SessionInfo (session.ts) plus the handler-added realInputAvailable/leased.
|
|
39
|
+
// A strict MCP client validates this against the payload, so an undeclared field is a hard error.
|
|
40
|
+
z.object({
|
|
41
|
+
sessionId: z.string(),
|
|
42
|
+
url: z.string(),
|
|
43
|
+
projectId: z.string().optional(),
|
|
44
|
+
title: z.string().optional(),
|
|
45
|
+
adapters: z.array(z.string()),
|
|
46
|
+
hasCapabilities: z.boolean(),
|
|
47
|
+
lastSeenMs: z.number(),
|
|
48
|
+
throttled: z.boolean(),
|
|
49
|
+
focused: z.boolean(),
|
|
50
|
+
hidden: z.boolean(),
|
|
51
|
+
realInputAvailable: z.boolean().optional(),
|
|
52
|
+
leased: z.boolean().optional(),
|
|
53
|
+
stale: z.boolean().optional(),
|
|
54
|
+
cleanup_suggestion: z.string().optional(),
|
|
55
|
+
pendingMarks: z.number().optional(),
|
|
56
|
+
review_suggestion: z.string().optional(),
|
|
57
|
+
recommendation: z.string().optional(),
|
|
58
|
+
}))
|
|
59
|
+
.describe('Connected browser sessions with health state. `projectId` groups sessions by app (stable across port changes); `leased` marks a pool-managed headless context vs a human tab.'),
|
|
60
|
+
},
|
|
61
|
+
handler: async (deps) => {
|
|
62
|
+
const provider = deps.realInput;
|
|
63
|
+
const leasedIds = new Set(deps.pool?.leasedSessionIds() ?? []);
|
|
64
|
+
const sessions = await Promise.all(deps.sessions.list().map(async (s) => ({
|
|
65
|
+
...s,
|
|
66
|
+
realInputAvailable: provider !== undefined ? await provider.isAvailableFor(s.url) : false,
|
|
67
|
+
leased: leasedIds.has(s.sessionId),
|
|
68
|
+
})));
|
|
69
|
+
return { sessions };
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: ReticleTool.SNAPSHOT,
|
|
74
|
+
description: 'Semantic accessibility snapshot of the page or a subtree. mode: full|interactive|status. Use to see what is on screen right now. The result carries cost:{ bytes, tokens } (estimated) — if it is large, re-scope (pass `scope`) or use mode:interactive/status instead of reading the whole tree. Pass diff:true after your first snapshot to get back ONLY what changed since your last look (mode:delta with added/removed, or mode:unchanged) — far fewer tokens and no stale tree to mis-read; a route change resets it to a full snapshot automatically.',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
scope: z
|
|
77
|
+
.string()
|
|
78
|
+
.optional()
|
|
79
|
+
.describe('CSS selector or element ref to restrict the snapshot to a subtree. Omit to snapshot the whole page.'),
|
|
80
|
+
mode: z
|
|
81
|
+
.nativeEnum(SnapshotMode)
|
|
82
|
+
.optional()
|
|
83
|
+
.describe('full = all elements; interactive = only clickable/focusable elements; status = only route + title. Default: full.'),
|
|
84
|
+
diff: z
|
|
85
|
+
.boolean()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Return only what changed since your last snapshot of the same scope/mode (mode:delta|unchanged). First call (or after a route change) still returns the full tree.'),
|
|
88
|
+
...sessionIdShape,
|
|
89
|
+
},
|
|
90
|
+
outputSchema: {
|
|
91
|
+
tree: z
|
|
92
|
+
.string()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe('Indented ARIA tree of every element on the page (or the scoped subtree).'),
|
|
95
|
+
status: z.object({ route: z.string(), title: z.string().optional() }).optional(),
|
|
96
|
+
mode: z
|
|
97
|
+
.string()
|
|
98
|
+
.optional()
|
|
99
|
+
.describe('delta | unchanged when diff:true returned a change set.'),
|
|
100
|
+
delta: z
|
|
101
|
+
.object({
|
|
102
|
+
added: z.array(z.string()),
|
|
103
|
+
removed: z.array(z.string()),
|
|
104
|
+
addedCount: z.number(),
|
|
105
|
+
removedCount: z.number(),
|
|
106
|
+
})
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Only present on a diff:true call that found changes.'),
|
|
109
|
+
cost: z
|
|
110
|
+
.object({ bytes: z.number(), tokens: z.number() })
|
|
111
|
+
.optional()
|
|
112
|
+
.describe('Estimated size of this result — re-scope if large.'),
|
|
113
|
+
},
|
|
114
|
+
handler: (deps, args) => {
|
|
115
|
+
const sessionId = asString(args['sessionId']);
|
|
116
|
+
const mode = asString(args['mode']) ?? SnapshotMode.FULL;
|
|
117
|
+
return commandOrThrow(deps, sessionId, ReticleCommand.SNAPSHOT, {
|
|
118
|
+
scope: args['scope'],
|
|
119
|
+
mode,
|
|
120
|
+
}).then((raw) => withSizeCost(applySnapshotDelta(raw, {
|
|
121
|
+
sessionId: sessionId ?? 'default',
|
|
122
|
+
scope: asString(args['scope']) ?? '',
|
|
123
|
+
mode,
|
|
124
|
+
diff: args['diff'] === true,
|
|
125
|
+
}, SNAPSHOT_CACHE)));
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: ReticleTool.QUERY,
|
|
130
|
+
description: 'Find elements by Testing-Library semantics. Pass `by` (role|text|label|placeholder|testid|alt) and `value` (the query string). Returns matching refs + descriptors + visibility. Pass `limit` to cap descriptors (broad role queries can be large) or `count_only:true` for just the match count — both cut tokens. On zero matches, also returns hint:{ route, presentTestids[], knownEmptyState } so you can distinguish an empty state from a missing element WITHOUT taking a snapshot.',
|
|
131
|
+
inputSchema: {
|
|
132
|
+
by: z.string().describe('Query strategy: role | text | label | placeholder | testid | alt'),
|
|
133
|
+
value: z
|
|
134
|
+
.string()
|
|
135
|
+
.describe('Query value for the selected strategy (e.g. by=role value=button, or by=testid value=submit-btn).'),
|
|
136
|
+
name: z
|
|
137
|
+
.string()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe('Accessible name filter — narrows results when `by` is role and the page has many elements of that role.'),
|
|
140
|
+
scope: z
|
|
141
|
+
.string()
|
|
142
|
+
.optional()
|
|
143
|
+
.describe('CSS selector or element ref to restrict the search to a subtree.'),
|
|
144
|
+
limit: z
|
|
145
|
+
.number()
|
|
146
|
+
.optional()
|
|
147
|
+
.describe('Cap the returned descriptors to the first N (cuts tokens on broad queries). If more matched, the result carries total + truncated:true so the trim is never silent — narrow with name/scope.'),
|
|
148
|
+
count_only: z
|
|
149
|
+
.boolean()
|
|
150
|
+
.optional()
|
|
151
|
+
.describe('Return just { count } (no element descriptors) — use when you only need "how many match?" and not their refs.'),
|
|
152
|
+
...sessionIdShape,
|
|
153
|
+
},
|
|
154
|
+
outputSchema: {
|
|
155
|
+
elements: z
|
|
156
|
+
.array(z.object({
|
|
157
|
+
ref: z.string(),
|
|
158
|
+
role: z.string(),
|
|
159
|
+
name: z.string(),
|
|
160
|
+
value: z.string().optional(),
|
|
161
|
+
states: z.array(z.string()),
|
|
162
|
+
visible: z.boolean(),
|
|
163
|
+
}))
|
|
164
|
+
.optional(),
|
|
165
|
+
count: z.number().optional().describe('Match count — present when count_only is set.'),
|
|
166
|
+
total: z
|
|
167
|
+
.number()
|
|
168
|
+
.optional()
|
|
169
|
+
.describe('Total matches before `limit` truncation — present only when truncated.'),
|
|
170
|
+
truncated: z.boolean().optional().describe('True when `limit` dropped some matches.'),
|
|
171
|
+
hint: z
|
|
172
|
+
.object({
|
|
173
|
+
route: z.string(),
|
|
174
|
+
presentTestids: z.array(z.string()),
|
|
175
|
+
knownEmptyState: z.boolean(),
|
|
176
|
+
})
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Present only on zero matches — tells you what IS on the page so you can diagnose the miss.'),
|
|
179
|
+
cost: z
|
|
180
|
+
.object({ bytes: z.number(), tokens: z.number() })
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Estimated size of this result — narrow with `name`/`scope`/`limit` if large.'),
|
|
183
|
+
},
|
|
184
|
+
handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.QUERY, {
|
|
185
|
+
by: args['by'],
|
|
186
|
+
value: args['value'],
|
|
187
|
+
name: args['name'],
|
|
188
|
+
scope: args['scope'],
|
|
189
|
+
}).then((result) => withSizeCost(paginateQueryResult(result, asNumber(args['limit']), args['count_only'] === true))),
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: ReticleTool.INSPECT,
|
|
193
|
+
description: 'Deep info on one element by ref: full a11y props, visibility, box, and (with @reticlehq/react) component stack + source file.',
|
|
194
|
+
inputSchema: {
|
|
195
|
+
ref: z.string().describe("Element ref from reticle_snapshot or reticle_query (e.g. 'e42')."),
|
|
196
|
+
...sessionIdShape,
|
|
197
|
+
},
|
|
198
|
+
outputSchema: {
|
|
199
|
+
ref: z.string(),
|
|
200
|
+
role: z.string(),
|
|
201
|
+
name: z.string(),
|
|
202
|
+
value: z.string().optional(),
|
|
203
|
+
states: z.array(z.string()),
|
|
204
|
+
visible: z.boolean(),
|
|
205
|
+
box: z
|
|
206
|
+
.object({ x: z.number(), y: z.number(), width: z.number(), height: z.number() })
|
|
207
|
+
.optional(),
|
|
208
|
+
// True when another element covers this one's center (z-index/overlay bug — unclickable).
|
|
209
|
+
occluded: z.boolean().optional(),
|
|
210
|
+
// Computed style the a11y tree omits: cursor/display/visibility/color so a "present but
|
|
211
|
+
// unusable" UI bug (dead cursor, invisible, recolored) is observable in one inspect.
|
|
212
|
+
styles: z
|
|
213
|
+
.object({
|
|
214
|
+
color: z.string(),
|
|
215
|
+
backgroundColor: z.string(),
|
|
216
|
+
opacity: z.string(),
|
|
217
|
+
cursor: z.string(),
|
|
218
|
+
display: z.string(),
|
|
219
|
+
visibility: z.string(),
|
|
220
|
+
})
|
|
221
|
+
.partial()
|
|
222
|
+
.optional(),
|
|
223
|
+
// Theme compliance vs the app's design tokens: { colorToken, backgroundToken (null = off-palette),
|
|
224
|
+
// offTheme, tokenCount }. Kept as unknown — the structured-content serializer can truncate a
|
|
225
|
+
// large inspect payload's fields to strings, which a strict shape would reject; the full object
|
|
226
|
+
// is always present in the text content the agent reads.
|
|
227
|
+
theme: z.unknown().optional(),
|
|
228
|
+
component: z
|
|
229
|
+
.object({ name: z.string().optional(), sourceFile: z.string().optional() })
|
|
230
|
+
.optional(),
|
|
231
|
+
},
|
|
232
|
+
handler: (deps, args) => commandOrThrow(deps, asString(args['sessionId']), ReticleCommand.INSPECT, {
|
|
233
|
+
ref: args['ref'],
|
|
234
|
+
}),
|
|
235
|
+
},
|
|
236
|
+
// reticle_capabilities (live | fromDisk) + reticle_contract_save. See contract-tools.ts.
|
|
237
|
+
...CONTRACT_TOOLS,
|
|
238
|
+
...DOMAIN_TOOLS,
|
|
239
|
+
// reticle_flow_save / reticle_flow_list / reticle_flow_load. See flow-tools.ts.
|
|
240
|
+
...FLOW_TOOLS,
|
|
241
|
+
// reticle_project (read history + diff-vs-last) / reticle_run_record. See project-tools.ts.
|
|
242
|
+
...PROJECT_TOOLS,
|
|
243
|
+
// reticle_run_export — export the verification-run verdict artifact (.reticle/runs/). See run-tools.ts.
|
|
244
|
+
...RUN_TOOLS,
|
|
245
|
+
// reticle_screenshot / reticle_visual_diff — opt-in, CDP-driven. See visual-tools.ts.
|
|
246
|
+
...VISUAL_TOOLS,
|
|
247
|
+
...NETWORK_MOCK_TOOLS,
|
|
248
|
+
...VIEWPORT_TOOLS,
|
|
249
|
+
// reticle_crawl — autonomous click-everything + anomaly report. See crawl-tools.ts.
|
|
250
|
+
...CRAWL_TOOLS,
|
|
251
|
+
// reticle_scroll_to — reveal a virtualized off-screen row. See scroll-tools.ts.
|
|
252
|
+
...SCROLL_TOOLS,
|
|
253
|
+
// Session lifecycle: reticle_session — tune the presenter session (idle-end). See session-tools.ts.
|
|
254
|
+
...SESSION_TOOLS,
|
|
255
|
+
// reticle_annotate (structured annotation → expect/dynamic/success). See annotate-tools.ts.
|
|
256
|
+
...ANNOTATE_TOOLS,
|
|
257
|
+
// Live-control: reticle_end_session / reticle_resume / reticle_messages. See live-control-tools.ts.
|
|
258
|
+
...LIVE_CONTROL_TOOLS,
|
|
259
|
+
// reticle_navigate / reticle_refresh — browser navigation tools. See browser-tools.ts.
|
|
260
|
+
...BROWSER_TOOLS,
|
|
261
|
+
// reticle_version_info / reticle_apply_update / reticle_rollback — update lifecycle tools.
|
|
262
|
+
...UPDATE_TOOLS,
|
|
263
|
+
...ACT_TOOLS,
|
|
264
|
+
...OBSERVE_TOOLS,
|
|
265
|
+
...READ_TOOLS,
|
|
266
|
+
...LEASE_TOOLS,
|
|
267
|
+
];
|
|
268
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface UpdateManifest {
|
|
2
|
+
currentVersion: string;
|
|
3
|
+
latestVersion?: string;
|
|
4
|
+
updateAvailable: boolean;
|
|
5
|
+
lastChecked: string;
|
|
6
|
+
changelog?: string;
|
|
7
|
+
breakingChanges?: string[];
|
|
8
|
+
/** The version that was running before the last update — used for rollback. */
|
|
9
|
+
previousVersion?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadManifest(): UpdateManifest | null;
|
|
12
|
+
export declare function saveManifest(manifest: UpdateManifest): void;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the current update manifest, refreshing from the npm registry when the cache
|
|
15
|
+
* is older than UpdateCheckIntervalMs. Never throws — falls back to the cached manifest
|
|
16
|
+
* (or a safe "no update" default) when the registry is unreachable.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkForUpdate(currentVersion: string, now: () => number): Promise<UpdateManifest>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=update-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/update/update-checker.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAUD,wBAAgB,YAAY,IAAI,cAAc,GAAG,IAAI,CAQpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAG3D;AAgCD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as https from 'node:https';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { UpdateCheckIntervalMs } from '@reticlehq/core';
|
|
6
|
+
import { log } from '../log.js';
|
|
7
|
+
const RETICLE_HOME = join(homedir(), '.reticle');
|
|
8
|
+
const MANIFEST_PATH = join(RETICLE_HOME, 'update-manifest.json');
|
|
9
|
+
const NPM_REGISTRY = 'https://registry.npmjs.org/@reticlehq/core/latest';
|
|
10
|
+
export function loadManifest() {
|
|
11
|
+
if (!fs.existsSync(MANIFEST_PATH))
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
const raw = fs.readFileSync(MANIFEST_PATH, 'utf8');
|
|
15
|
+
return JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function saveManifest(manifest) {
|
|
22
|
+
fs.mkdirSync(RETICLE_HOME, { recursive: true });
|
|
23
|
+
fs.writeFileSync(MANIFEST_PATH, JSON.stringify(manifest, null, 2), 'utf8');
|
|
24
|
+
}
|
|
25
|
+
function isCacheFresh(manifest, now) {
|
|
26
|
+
const checked = new Date(manifest.lastChecked).getTime();
|
|
27
|
+
return now() - checked < UpdateCheckIntervalMs;
|
|
28
|
+
}
|
|
29
|
+
function fetchNpmInfo() {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const req = https.get(NPM_REGISTRY, (res) => {
|
|
32
|
+
let body = '';
|
|
33
|
+
res.setEncoding('utf8');
|
|
34
|
+
res.on('data', (chunk) => {
|
|
35
|
+
body += chunk;
|
|
36
|
+
});
|
|
37
|
+
res.on('end', () => {
|
|
38
|
+
try {
|
|
39
|
+
resolve(JSON.parse(body));
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
res.on('error', reject);
|
|
46
|
+
});
|
|
47
|
+
req.setTimeout(5000, () => {
|
|
48
|
+
req.destroy();
|
|
49
|
+
reject(new Error('npm registry request timed out'));
|
|
50
|
+
});
|
|
51
|
+
req.on('error', reject);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns the current update manifest, refreshing from the npm registry when the cache
|
|
56
|
+
* is older than UpdateCheckIntervalMs. Never throws — falls back to the cached manifest
|
|
57
|
+
* (or a safe "no update" default) when the registry is unreachable.
|
|
58
|
+
*/
|
|
59
|
+
export async function checkForUpdate(currentVersion, now) {
|
|
60
|
+
const cached = loadManifest();
|
|
61
|
+
if (cached !== null && cached.currentVersion === currentVersion && isCacheFresh(cached, now)) {
|
|
62
|
+
return cached;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const info = await fetchNpmInfo();
|
|
66
|
+
const updateAvailable = info.version !== currentVersion;
|
|
67
|
+
const manifest = {
|
|
68
|
+
currentVersion,
|
|
69
|
+
latestVersion: info.version,
|
|
70
|
+
updateAvailable,
|
|
71
|
+
lastChecked: new Date(now()).toISOString(),
|
|
72
|
+
...(info.reticle?.changelog !== undefined ? { changelog: info.reticle.changelog } : {}),
|
|
73
|
+
...(info.reticle?.breakingChanges !== undefined
|
|
74
|
+
? { breakingChanges: info.reticle.breakingChanges }
|
|
75
|
+
: {}),
|
|
76
|
+
...(cached?.previousVersion !== undefined ? { previousVersion: cached.previousVersion } : {}),
|
|
77
|
+
};
|
|
78
|
+
saveManifest(manifest);
|
|
79
|
+
return manifest;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
log('reticle_update_check_failed', {
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
});
|
|
85
|
+
if (cached !== null)
|
|
86
|
+
return { ...cached, currentVersion };
|
|
87
|
+
return {
|
|
88
|
+
currentVersion,
|
|
89
|
+
updateAvailable: false,
|
|
90
|
+
lastChecked: new Date(now()).toISOString(),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=update-checker.js.map
|