@reticlehq/server 2.11.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +93 -111
- package/dist/bridge/auth-failure-reason.d.ts +6 -2
- package/dist/bridge/auth-failure-reason.js +15 -8
- package/dist/bridge/bridge.d.ts +18 -14
- package/dist/bridge/bridge.js +248 -165
- package/dist/bridge/bridge.test-harness.d.ts +2 -0
- package/dist/bridge/bridge.test-harness.js +8 -1
- package/dist/bridge/pairing-token.d.ts +5 -0
- package/dist/bridge/pairing-token.js +28 -0
- package/dist/bridge/protocol-skew.d.ts +37 -0
- package/dist/bridge/protocol-skew.js +45 -0
- package/dist/capsule/capsule-store.d.ts +8 -7
- package/dist/capsule/capsule-store.js +1 -1
- package/dist/capsule/causal-summary.d.ts +2 -2
- package/dist/capsule/causal-summary.js +7 -2
- package/dist/chromium-launch-options.d.ts +28 -0
- package/dist/chromium-launch-options.js +29 -0
- package/dist/cli/cli-doctor.js +39 -1
- package/dist/cli/cli-flow-commands.d.ts +3 -1
- package/dist/cli/cli-flow-commands.js +34 -4
- package/dist/cli/cli-kill.d.ts +2 -1
- package/dist/cli/cli-launch.d.ts +11 -1
- package/dist/cli/cli-launch.js +59 -10
- package/dist/cli/cli-parse.d.ts +17 -1
- package/dist/cli/cli-parse.js +238 -12
- package/dist/cli/cli-update-commands.js +20 -1
- package/dist/cli/cli-verify.d.ts +2 -1
- package/dist/cli/cli-verify.js +5 -4
- package/dist/cli/cloud-cli.js +428 -253
- package/dist/cli/cloud-keystore.d.ts +37 -0
- package/dist/cli/cloud-keystore.js +97 -0
- package/dist/cli/cloud-kit.d.ts +37 -0
- package/dist/cli/cloud-kit.js +121 -0
- package/dist/cli/cloud-login.d.ts +17 -0
- package/dist/cli/cloud-login.js +183 -0
- package/dist/cli/cloud-session.d.ts +48 -0
- package/dist/cli/cloud-session.js +53 -0
- package/dist/cli/config-discovery.d.ts +2 -1
- package/dist/cli/config-discovery.js +1 -0
- package/dist/cli/daemon-start-options.d.ts +32 -0
- package/dist/cli/daemon-start-options.js +38 -0
- package/dist/cli/device-flow.d.ts +76 -0
- package/dist/cli/device-flow.js +56 -0
- package/dist/cli/doctor-rows.d.ts +12 -1
- package/dist/cli/doctor-rows.js +12 -1
- package/dist/cli/drive-attach.d.ts +13 -0
- package/dist/cli/drive-attach.js +18 -0
- package/dist/cli/drive-command.js +7 -3
- package/dist/cli/gate-exit.d.ts +21 -0
- package/dist/cli/gate-exit.js +21 -0
- package/dist/cli/gate-hook-message.d.ts +33 -0
- package/dist/cli/gate-hook-message.js +46 -0
- package/dist/cli/mcp-command.d.ts +25 -0
- package/dist/cli/mcp-command.js +174 -0
- package/dist/cli/project-name.d.ts +30 -0
- package/dist/cli/project-name.js +44 -0
- package/dist/cli/sibling-ports.d.ts +37 -0
- package/dist/cli/sibling-ports.js +56 -0
- package/dist/cli/status-next-action.d.ts +14 -0
- package/dist/cli/status-next-action.js +4 -4
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +167 -186
- package/dist/cloud/cloud-config.d.ts +24 -2
- package/dist/cloud/cloud-config.js +64 -5
- package/dist/cloud/cloud-sync.d.ts +16 -5
- package/dist/cloud/cloud-sync.js +64 -1
- package/dist/cloud/sync-cycle.d.ts +110 -0
- package/dist/cloud/sync-cycle.js +270 -0
- package/dist/cloud/sync-daemon.d.ts +69 -0
- package/dist/cloud/sync-daemon.js +260 -0
- package/dist/cloud/sync-disk.d.ts +9 -0
- package/dist/cloud/sync-disk.js +191 -0
- package/dist/cloud/sync-hash.d.ts +2 -0
- package/dist/cloud/sync-hash.js +35 -0
- package/dist/crawl/crawl-tools.js +5 -3
- package/dist/crawl/crawl.d.ts +12 -13
- package/dist/crawl/crawl.js +25 -3
- package/dist/daemon/daemon-resolve.d.ts +122 -0
- package/dist/daemon/daemon-resolve.js +187 -0
- package/dist/daemon/dev-servers.d.ts +15 -0
- package/dist/daemon/dev-servers.js +68 -0
- package/dist/daemon/free-port.d.ts +29 -0
- package/dist/daemon/free-port.js +55 -0
- package/dist/daemon/heartbeat.d.ts +0 -4
- package/dist/daemon/heartbeat.js +2 -2
- package/dist/daemon/wake-decision.d.ts +32 -0
- package/dist/daemon/wake-decision.js +38 -0
- package/dist/dev/stale-issue-guard.d.ts +0 -2
- package/dist/dev/stale-issue-guard.js +1 -1
- package/dist/domain/domain-tools.js +2 -2
- package/dist/events/contradictions.d.ts +59 -0
- package/dist/events/contradictions.js +253 -27
- package/dist/events/declared.d.ts +17 -0
- package/dist/events/declared.js +43 -1
- package/dist/events/echo-mismatch.js +65 -1
- package/dist/events/event-filters.d.ts +8 -0
- package/dist/events/event-filters.js +19 -2
- package/dist/events/observed-in-window.d.ts +12 -0
- package/dist/events/observed-in-window.js +17 -0
- package/dist/events/predicate-asks.d.ts +13 -0
- package/dist/events/predicate-asks.js +22 -0
- package/dist/events/predicate-eval.js +117 -27
- package/dist/events/predicate-parse.d.ts +0 -6
- package/dist/events/predicate-parse.js +43 -3
- package/dist/events/predicate-precheck.d.ts +8 -0
- package/dist/events/predicate-precheck.js +41 -0
- package/dist/events/predicate-route.d.ts +14 -0
- package/dist/events/predicate-route.js +36 -8
- package/dist/events/predicate-schema.d.ts +44 -0
- package/dist/events/predicate-schema.js +126 -23
- package/dist/events/predicate.d.ts +20 -0
- package/dist/events/predicate.js +77 -6
- package/dist/events/split-text-miss.d.ts +30 -0
- package/dist/events/split-text-miss.js +44 -0
- package/dist/flows/coverage.d.ts +0 -8
- package/dist/flows/coverage.js +1 -1
- package/dist/flows/decision.d.ts +5 -1
- package/dist/flows/decision.js +33 -7
- package/dist/flows/flake.d.ts +6 -8
- package/dist/flows/flake.js +1 -1
- package/dist/flows/flow-intent.d.ts +52 -0
- package/dist/flows/flow-intent.js +123 -0
- package/dist/flows/flow-memory-consult.d.ts +55 -0
- package/dist/flows/flow-memory-consult.js +38 -0
- package/dist/flows/flow-replay-run.d.ts +18 -7
- package/dist/flows/flow-replay-run.js +263 -23
- package/dist/flows/flow-replay.js +11 -2
- package/dist/flows/flow-step-runners.d.ts +8 -0
- package/dist/flows/flow-step-runners.js +8 -2
- package/dist/flows/flow-store-for-session.d.ts +31 -0
- package/dist/flows/flow-store-for-session.js +33 -0
- package/dist/flows/flow-success.js +15 -3
- package/dist/flows/flow-tools.js +87 -33
- package/dist/flows/flows.d.ts +14 -1
- package/dist/flows/flows.js +502 -24
- package/dist/flows/heal-run.js +5 -2
- package/dist/flows/predicate-to-expect.d.ts +17 -12
- package/dist/flows/predicate-to-expect.js +36 -15
- package/dist/flows/recordings.d.ts +13 -1
- package/dist/flows/recordings.js +17 -2
- package/dist/flows/replay.d.ts +22 -2
- package/dist/flows/replay.js +28 -2
- package/dist/flows/server-verify.js +16 -2
- package/dist/flows/verify-change-tools.js +9 -3
- package/dist/honesty/blind-spots.d.ts +51 -15
- package/dist/honesty/blind-spots.js +64 -4
- package/dist/honesty/feature-capture.d.ts +150 -0
- package/dist/honesty/feature-capture.js +233 -0
- package/dist/honesty/honesty.d.ts +24 -0
- package/dist/honesty/honesty.js +25 -1
- package/dist/honesty/instrumentation-gaps.d.ts +39 -6
- package/dist/honesty/instrumentation-gaps.js +88 -5
- package/dist/honesty/tool-hit-rate.d.ts +86 -0
- package/dist/honesty/tool-hit-rate.js +90 -0
- package/dist/honesty/undeclared-change.d.ts +51 -0
- package/dist/honesty/undeclared-change.js +56 -0
- package/dist/honesty/verified.d.ts +16 -0
- package/dist/honesty/verified.js +84 -5
- package/dist/http-server.d.ts +0 -1
- package/dist/http-server.js +13 -1
- package/dist/hunt/hunt-report.d.ts +0 -2
- package/dist/hunt/hunt-report.js +1 -1
- package/dist/impact/impact-recorder.d.ts +31 -8
- package/dist/impact/impact-recorder.js +104 -21
- package/dist/impact/impact-store.d.ts +13 -4
- package/dist/impact/impact-store.js +44 -3
- package/dist/index.d.ts +4 -1
- package/dist/index.js +113 -7
- package/dist/init/agent-rules.d.ts +30 -6
- package/dist/init/agent-rules.js +54 -13
- package/dist/init/astro-patch.d.ts +16 -0
- package/dist/init/astro-patch.js +28 -0
- package/dist/init/capabilities.d.ts +4 -3
- package/dist/init/capabilities.js +23 -3
- package/dist/init/closing-hint.d.ts +36 -0
- package/dist/init/closing-hint.js +120 -0
- package/dist/init/confirm.d.ts +27 -28
- package/dist/init/confirm.js +51 -11
- package/dist/init/cra.d.ts +34 -5
- package/dist/init/cra.js +96 -25
- package/dist/init/csp-check.js +17 -2
- package/dist/init/csp-doctor.d.ts +8 -1
- package/dist/init/csp-doctor.js +8 -3
- package/dist/init/dev-script.d.ts +50 -0
- package/dist/init/dev-script.js +66 -0
- package/dist/init/format-generated.d.ts +18 -0
- package/dist/init/format-generated.js +39 -0
- package/dist/init/install-hint.d.ts +9 -0
- package/dist/init/install-hint.js +29 -0
- package/dist/init/mcp-clients.d.ts +7 -0
- package/dist/init/mcp-clients.js +7 -0
- package/dist/init/mcp.d.ts +17 -6
- package/dist/init/mcp.js +27 -11
- package/dist/init/node-io.js +11 -1
- package/dist/init/plan-framework.d.ts +0 -5
- package/dist/init/plan-framework.js +147 -37
- package/dist/init/plan.d.ts +30 -37
- package/dist/init/plan.js +50 -60
- package/dist/init/preflight.d.ts +28 -0
- package/dist/init/preflight.js +38 -0
- package/dist/init/refresh-rules.d.ts +39 -0
- package/dist/init/refresh-rules.js +51 -0
- package/dist/init/run.d.ts +32 -35
- package/dist/init/run.js +151 -202
- package/dist/init/slash-command.d.ts +1 -1
- package/dist/init/snippets.js +90 -31
- package/dist/init/vite-config.d.ts +1 -1
- package/dist/init/vite-config.js +39 -25
- package/dist/init/workspace-apps.d.ts +17 -10
- package/dist/init/workspace-apps.js +110 -0
- package/dist/input/network-mock-tools.js +3 -6
- package/dist/input/real-input.d.ts +2 -0
- package/dist/input/real-input.js +28 -7
- package/dist/input/scroll-find.d.ts +7 -4
- package/dist/input/scroll-find.js +63 -25
- package/dist/input/scroll-tools.js +4 -6
- package/dist/input/viewport-tools.js +5 -4
- package/dist/intent/inline-intent.d.ts +37 -0
- package/dist/intent/inline-intent.js +193 -0
- package/dist/intent/intent-shard-store.d.ts +72 -0
- package/dist/intent/intent-shard-store.js +203 -0
- package/dist/intent/intent-shard.d.ts +411 -0
- package/dist/intent/intent-shard.js +176 -0
- package/dist/intent/intent-store.d.ts +49 -0
- package/dist/intent/intent-store.js +133 -0
- package/dist/intent/intent-subject.d.ts +45 -0
- package/dist/intent/intent-subject.js +177 -0
- package/dist/intent/intent-tools.d.ts +2 -0
- package/dist/intent/intent-tools.js +143 -0
- package/dist/intent/open-intents.d.ts +42 -0
- package/dist/intent/open-intents.js +40 -0
- package/dist/journal/envelope.d.ts +26 -26
- package/dist/journal/journal-recorder.d.ts +23 -0
- package/dist/journal/journal-recorder.js +35 -0
- package/dist/license/license-env.d.ts +29 -0
- package/dist/license/license-env.js +148 -0
- package/dist/loopback-agent.d.ts +31 -0
- package/dist/loopback-agent.js +57 -0
- package/dist/mcp/attach-memory.d.ts +83 -0
- package/dist/mcp/attach-memory.js +185 -0
- package/dist/mcp/client-identity.d.ts +31 -0
- package/dist/mcp/client-identity.js +51 -0
- package/dist/mcp/mcp-post-transport.d.ts +26 -0
- package/dist/mcp/mcp-post-transport.js +109 -0
- package/dist/mcp/mcp-proxy.d.ts +2 -8
- package/dist/mcp/mcp-proxy.js +64 -62
- package/dist/mcp/mcp.d.ts +2 -0
- package/dist/mcp/mcp.js +52 -24
- package/dist/mcp/proxy-backoff.d.ts +11 -0
- package/dist/mcp/proxy-backoff.js +13 -0
- package/dist/mcp/proxy-daemon-probe.d.ts +1 -0
- package/dist/mcp/proxy-daemon-probe.js +7 -1
- package/dist/mcp/proxy-handshake.d.ts +23 -0
- package/dist/mcp/proxy-handshake.js +31 -0
- package/dist/mcp/server-instructions.js +45 -3
- package/dist/mcp/tool-catalog-cache.d.ts +16 -0
- package/dist/mcp/tool-catalog-cache.js +22 -0
- package/dist/memory/memory-tools.d.ts +2 -0
- package/dist/memory/memory-tools.js +82 -0
- package/dist/memory/project-memory.d.ts +34 -0
- package/dist/memory/project-memory.js +96 -0
- package/dist/oracles/flow-instrument-gaps.d.ts +4 -4
- package/dist/oracles/flow-instrument-gaps.js +4 -5
- package/dist/oracles/propose-consequences.js +12 -3
- package/dist/oracles/self-instrument.d.ts +9 -9
- package/dist/oracles/self-instrument.js +19 -13
- package/dist/pool/browser-pool.d.ts +75 -5
- package/dist/pool/browser-pool.js +144 -5
- package/dist/pool/playwright-launcher.js +12 -1
- package/dist/project/fs-port.d.ts +3 -0
- package/dist/project/fs-port.js +3 -2
- package/dist/project/memory-fs.js +6 -1
- package/dist/project/project-tools.js +6 -35
- package/dist/project/reticle-dir.d.ts +17 -2
- package/dist/project/reticle-dir.js +22 -4
- package/dist/runs/context-tools.d.ts +2 -0
- package/dist/runs/context-tools.js +89 -0
- package/dist/runs/run-context.d.ts +40 -0
- package/dist/runs/run-context.js +158 -0
- package/dist/runs/run-diff.d.ts +2 -1
- package/dist/runs/run-store.d.ts +10 -0
- package/dist/runs/run-store.js +10 -0
- package/dist/runs/verification-sync.d.ts +0 -11
- package/dist/runs/verification-sync.js +24 -3
- package/dist/runs/verify-server.d.ts +8 -1
- package/dist/runs/verify-server.js +14 -2
- package/dist/session/command-timeout.d.ts +5 -2
- package/dist/session/command-timeout.js +5 -4
- package/dist/session/dev-server-probe.d.ts +0 -8
- package/dist/session/dev-server-probe.js +1 -1
- package/dist/session/last-act.d.ts +7 -1
- package/dist/session/last-act.js +2 -2
- package/dist/session/lease-visibility.d.ts +67 -0
- package/dist/session/lease-visibility.js +76 -0
- package/dist/session/live-control-tools.js +1 -42
- package/dist/session/no-session-diagnosis.d.ts +33 -0
- package/dist/session/no-session-diagnosis.js +82 -24
- package/dist/session/no-session-next-action.d.ts +12 -0
- package/dist/session/no-session-next-action.js +77 -6
- package/dist/session/no-session-watch.d.ts +18 -6
- package/dist/session/no-session-watch.js +125 -75
- package/dist/session/output-budget.js +4 -1
- package/dist/session/pending-commands.d.ts +11 -1
- package/dist/session/pending-commands.js +12 -2
- package/dist/session/resolve-within.d.ts +34 -0
- package/dist/session/resolve-within.js +53 -0
- package/dist/session/session-health.d.ts +9 -0
- package/dist/session/session-health.js +23 -0
- package/dist/session/session-info.d.ts +18 -0
- package/dist/session/session-info.js +11 -0
- package/dist/session/session-manager.d.ts +14 -0
- package/dist/session/session-manager.js +111 -4
- package/dist/session/session-mirror.d.ts +16 -0
- package/dist/session/session-mirror.js +22 -0
- package/dist/session/session-recommendation.d.ts +19 -5
- package/dist/session/session-recommendation.js +25 -9
- package/dist/session/session-successor.d.ts +37 -0
- package/dist/session/session-successor.js +113 -0
- package/dist/session/session-tools.js +2 -2
- package/dist/session/session.d.ts +53 -3
- package/dist/session/session.js +162 -9
- package/dist/session/wall-clock.d.ts +12 -0
- package/dist/session/wall-clock.js +14 -0
- package/dist/setup/agent-configs.d.ts +96 -0
- package/dist/setup/agent-configs.js +333 -0
- package/dist/setup/agent-io.d.ts +9 -0
- package/dist/setup/agent-io.js +16 -0
- package/dist/setup/agent-writer.d.ts +51 -0
- package/dist/setup/agent-writer.js +115 -0
- package/dist/setup/approval-migration.d.ts +47 -0
- package/dist/setup/approval-migration.js +68 -0
- package/dist/setup/auto-approve.d.ts +85 -0
- package/dist/setup/auto-approve.js +150 -0
- package/dist/setup/bridge-port.d.ts +15 -0
- package/dist/setup/bridge-port.js +24 -0
- package/dist/setup/desktop-shape.d.ts +57 -0
- package/dist/setup/desktop-shape.js +63 -0
- package/dist/setup/dev-server-wait.d.ts +60 -0
- package/dist/setup/dev-server-wait.js +65 -0
- package/dist/setup/drive-agent.d.ts +71 -0
- package/dist/setup/drive-agent.js +171 -0
- package/dist/setup/drive-plan.d.ts +68 -0
- package/dist/setup/drive-plan.js +130 -0
- package/dist/setup/ensure-daemon.d.ts +29 -0
- package/dist/setup/ensure-daemon.js +58 -0
- package/dist/setup/init-runtime.d.ts +47 -0
- package/dist/setup/init-runtime.js +160 -0
- package/dist/setup/interrupt.d.ts +25 -0
- package/dist/setup/interrupt.js +40 -0
- package/dist/setup/license-key.d.ts +39 -0
- package/dist/setup/license-key.js +72 -0
- package/dist/setup/listeners.d.ts +37 -0
- package/dist/setup/listeners.js +85 -0
- package/dist/setup/node-effects.d.ts +60 -0
- package/dist/setup/node-effects.js +210 -0
- package/dist/setup/page-probe.d.ts +39 -0
- package/dist/setup/page-probe.js +49 -0
- package/dist/setup/relaunch.d.ts +36 -0
- package/dist/setup/relaunch.js +57 -0
- package/dist/setup/remaining-steps.d.ts +19 -0
- package/dist/setup/remaining-steps.js +31 -0
- package/dist/setup/run-setup.d.ts +99 -0
- package/dist/setup/run-setup.js +187 -0
- package/dist/setup/session-pick.d.ts +47 -0
- package/dist/setup/session-pick.js +51 -0
- package/dist/setup/setup-command.d.ts +45 -0
- package/dist/setup/setup-command.js +199 -0
- package/dist/setup/setup-options.d.ts +74 -0
- package/dist/setup/setup-options.js +67 -0
- package/dist/setup/transcripts.d.ts +16 -0
- package/dist/setup/transcripts.js +43 -0
- package/dist/status-payload.d.ts +14 -1
- package/dist/status-payload.js +23 -1
- package/dist/telemetry/automation-hint.d.ts +2 -1
- package/dist/telemetry/daemon-telemetry.d.ts +8 -1
- package/dist/telemetry/daemon-telemetry.js +52 -5
- package/dist/telemetry/error-class.js +1 -1
- package/dist/telemetry/feedback-context.d.ts +9 -1
- package/dist/telemetry/feedback-context.js +60 -29
- package/dist/telemetry/feedback-local.d.ts +15 -0
- package/dist/telemetry/feedback-local.js +56 -0
- package/dist/telemetry/feedback-outbox.d.ts +2 -1
- package/dist/telemetry/feedback.d.ts +11 -0
- package/dist/telemetry/feedback.js +19 -6
- package/dist/telemetry/init-telemetry.d.ts +2 -0
- package/dist/telemetry/init-telemetry.js +2 -0
- package/dist/telemetry/install-source.d.ts +14 -0
- package/dist/telemetry/install-source.js +30 -0
- package/dist/telemetry/license-activation.d.ts +7 -1
- package/dist/telemetry/license-activation.js +9 -5
- package/dist/telemetry/mcp-connection.js +7 -0
- package/dist/telemetry/project-profile.d.ts +12 -9
- package/dist/telemetry/project-profile.js +12 -7
- package/dist/telemetry/proxy-telemetry.d.ts +3 -0
- package/dist/telemetry/proxy-telemetry.js +21 -0
- package/dist/telemetry/run-telemetry.d.ts +0 -2
- package/dist/telemetry/run-telemetry.js +1 -1
- package/dist/telemetry/session-metrics.d.ts +12 -0
- package/dist/telemetry/session-metrics.js +35 -1
- package/dist/telemetry/telemetry.js +17 -2
- package/dist/telemetry/tool-refused.d.ts +3 -1
- package/dist/telemetry/tool-refused.js +34 -2
- package/dist/telemetry/verification-of.js +2 -2
- package/dist/tools/act-capsule.d.ts +10 -0
- package/dist/tools/act-capsule.js +8 -2
- package/dist/tools/act-danger.d.ts +2 -1
- package/dist/tools/act-danger.js +11 -3
- package/dist/tools/act-observation.d.ts +41 -0
- package/dist/tools/act-observation.js +36 -0
- package/dist/tools/act-preflight.d.ts +20 -0
- package/dist/tools/act-preflight.js +98 -0
- package/dist/tools/act-sequence-retry.d.ts +45 -0
- package/dist/tools/act-sequence-retry.js +58 -0
- package/dist/tools/act-sequence-tool.d.ts +13 -0
- package/dist/tools/act-sequence-tool.js +135 -0
- package/dist/tools/act-target.d.ts +14 -0
- package/dist/tools/act-target.js +47 -0
- package/dist/tools/act-tools.d.ts +21 -1
- package/dist/tools/act-tools.js +196 -204
- package/dist/tools/assert-source.d.ts +22 -0
- package/dist/tools/assert-source.js +53 -0
- package/dist/tools/assert-verdict.d.ts +20 -3
- package/dist/tools/assert-verdict.js +58 -20
- package/dist/tools/browser-tools.js +6 -22
- package/dist/tools/complete-snapshot.d.ts +48 -0
- package/dist/tools/complete-snapshot.js +75 -0
- package/dist/tools/coverage-tools.d.ts +10 -1
- package/dist/tools/coverage-tools.js +123 -69
- package/dist/tools/dynamic-tools.js +53 -13
- package/dist/tools/error-recovery.d.ts +25 -14
- package/dist/tools/error-recovery.js +78 -9
- package/dist/tools/feedback-tools.d.ts +1 -1
- package/dist/tools/feedback-tools.js +2 -2
- package/dist/tools/invoke-tool.js +121 -11
- package/dist/tools/lease-hint.d.ts +10 -0
- package/dist/tools/lease-hint.js +53 -4
- package/dist/tools/lease-tools.d.ts +35 -5
- package/dist/tools/lease-tools.js +191 -13
- package/dist/tools/merged-name-redirect.d.ts +13 -0
- package/dist/tools/merged-name-redirect.js +22 -0
- package/dist/tools/navigate-arrival.d.ts +0 -2
- package/dist/tools/navigate-arrival.js +1 -1
- package/dist/tools/numeric-bounds.d.ts +100 -0
- package/dist/tools/numeric-bounds.js +125 -0
- package/dist/tools/observe-tools.js +109 -65
- package/dist/tools/read-tools.js +31 -8
- package/dist/tools/real-input-attempt.d.ts +32 -0
- package/dist/tools/real-input-attempt.js +212 -2
- package/dist/tools/reconcile-tools.js +22 -8
- package/dist/tools/resolve-target.d.ts +0 -7
- package/dist/tools/sdk-marker-probe.d.ts +29 -0
- package/dist/tools/sdk-marker-probe.js +57 -0
- package/dist/tools/snapshot-delta.d.ts +1 -1
- package/dist/tools/tool-kit.d.ts +24 -0
- package/dist/tools/tool-kit.js +21 -0
- package/dist/tools/tool-names.d.ts +5 -0
- package/dist/tools/tool-names.js +5 -0
- package/dist/tools/tool-surface.d.ts +85 -6
- package/dist/tools/tool-surface.js +122 -2
- package/dist/tools/tools-helpers.d.ts +19 -0
- package/dist/tools/tools-helpers.js +46 -0
- package/dist/tools/tools.d.ts +2 -0
- package/dist/tools/tools.js +78 -12
- package/dist/tools/unadvertised-help.js +4 -4
- package/dist/tools/verify-next-baton.d.ts +53 -0
- package/dist/tools/verify-next-baton.js +52 -0
- package/dist/update/reticle-deps.d.ts +9 -0
- package/dist/update/reticle-deps.js +27 -0
- package/dist/update/sdk-sync.d.ts +1 -2
- package/dist/update/sdk-sync.js +1 -21
- package/dist/update/update-nudge.d.ts +25 -10
- package/dist/update/update-nudge.js +32 -3
- package/dist/update/updater.d.ts +1 -1
- package/dist/version/peer-announce.js +4 -2
- package/dist/version/sdk-fix.d.ts +47 -0
- package/dist/version/sdk-fix.js +127 -0
- package/dist/version/version-nudge.d.ts +14 -0
- package/dist/version/version-nudge.js +21 -0
- package/dist/version/version-skew.d.ts +38 -3
- package/dist/version/version-skew.js +83 -7
- package/dist/visual/visual-store.d.ts +6 -6
- package/dist/visual/visual-store.js +18 -16
- package/dist/visual/visual-tools.js +57 -12
- package/docs/README.md +2 -1
- package/docs/cli/cloud.mdx +1 -1
- package/docs/cli/doctor.mdx +2 -0
- package/docs/cli/serve.mdx +4 -2
- package/docs/cli/verify.mdx +4 -5
- package/docs/cli.mdx +7 -3
- package/docs/desktop.mdx +1 -1
- package/docs/docs.json +2 -2
- package/docs/gates.md +1 -1
- package/docs/getting-started.md +19 -3
- package/docs/index.mdx +9 -6
- package/docs/install-agentic.mdx +38 -12
- package/docs/install-manual.mdx +1 -1
- package/docs/packages/browser.mdx +2 -2
- package/docs/packages/server.mdx +1 -1
- package/docs/packages.mdx +8 -6
- package/docs/platform-integration.md +17 -0
- package/docs/predicates.mdx +8 -0
- package/docs/reticle-manual.md +106 -0
- package/docs/skill-file.mdx +3 -3
- package/docs/telemetry-contract.md +108 -4
- package/docs/tools-act-sequence.mdx +16 -0
- package/docs/tools-tools-and-run.mdx +2 -4
- package/docs/troubleshooting.mdx +9 -0
- package/docs/usage.md +4 -3
- package/package.json +4 -3
- package/dist/init/cursor.d.ts +0 -24
- package/dist/init/cursor.js +0 -80
- package/dist/session/session-readiness.d.ts +0 -34
- package/dist/session/session-readiness.js +0 -36
package/dist/cli/cli-parse.js
CHANGED
|
@@ -17,8 +17,21 @@ export { AGENT_FLAG, BUG_FLAG, FEEDBACK_KINDS, KIND_FLAG, RATING_FLAG, } from '.
|
|
|
17
17
|
*/
|
|
18
18
|
export const CLI_USAGE = `usage: npx @reticlehq/server <command> (or \`reticle <command>\` once the bin is on your PATH)
|
|
19
19
|
|
|
20
|
-
reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>]
|
|
20
|
+
reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>]
|
|
21
|
+
[--flow "<what to drive>"] [--env KEY=VALUE]... [--files-only] (wire Reticle into the project in this directory)
|
|
21
22
|
--app picks WHICH app in a monorepo, when several are found
|
|
23
|
+
--flow names the journey worth proving, in your own words. Only you know
|
|
24
|
+
which one matters, and naming it is the difference between a drive that
|
|
25
|
+
finishes and one that spends its budget looking for something to do
|
|
26
|
+
--env is what the app needs to reach a usable state: the key from
|
|
27
|
+
.env.example, the mock backend, the variable that skips an auth wall.
|
|
28
|
+
Repeatable, and a value may contain spaces and equals signs
|
|
29
|
+
--files-only writes the files and stops, which is what init did before it
|
|
30
|
+
learned to boot the app and prove the install works
|
|
31
|
+
--license writes the key to .env and keeps .env out of git
|
|
32
|
+
--json puts the result on stdout, so an agent reads one object
|
|
33
|
+
--no-drive / --no-open / --no-agents / --url / --timeout / --drive-model
|
|
34
|
+
are the runtime dials: CI, a headless box, or an app you already run
|
|
22
35
|
--no-mcp skips MORE than the server registration: also the agent rule files
|
|
23
36
|
(CLAUDE.md / AGENTS.md / .cursor) and the /reticle command, because all three
|
|
24
37
|
only make sense once the tools are reachable.
|
|
@@ -29,7 +42,7 @@ export const CLI_USAGE = `usage: npx @reticlehq/server <command> (or \`reticl
|
|
|
29
42
|
reticle status [--port N]
|
|
30
43
|
reticle doctor [--port N] (one command to diagnose setup: Chromium, daemon, port)
|
|
31
44
|
reticle open [url] [--port N] (show the app: reuse the connected tab, else open one)
|
|
32
|
-
reticle verify <url> [--headed] [--timeout N] [--storage-state <file>] (one-shot: drive the URL, verify saved flows, exit 0=pass)
|
|
45
|
+
reticle verify <url> [--port N] [--headed] [--timeout N] [--storage-state <file>] [--session-id <id>] (one-shot: drive the URL, verify saved flows, exit 0=pass)
|
|
33
46
|
reticle affected [--since <ref>] [file...] (which saved flows must re-verify for the changed files)
|
|
34
47
|
reticle gate [--since <ref>] [file...] (exit non-zero unless passing artifacts cover the affected flows)
|
|
35
48
|
reticle watch [url] (on save, report which saved flows must re-verify)
|
|
@@ -45,13 +58,15 @@ export const CLI_USAGE = `usage: npx @reticlehq/server <command> (or \`reticl
|
|
|
45
58
|
reticle identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
|
|
46
59
|
(OPT-IN: tell us who you are, e.g. for support or an enterprise trial)
|
|
47
60
|
|
|
48
|
-
Cloud (link this project to Reticle
|
|
49
|
-
reticle login --email <e> [--code <c>] [--org <n>]
|
|
61
|
+
Cloud (link this project to Reticle; runs/flows recorded on the dashboard):
|
|
62
|
+
reticle login [--url <u>] [--email <e>] [--code <c>] [--org <n>]
|
|
63
|
+
(browser device flow by default; --email mails a code)
|
|
64
|
+
reticle logout [--url <u>] (sign out of ONE host; others stay signed in)
|
|
50
65
|
reticle link [--project <name|id>] (bind this repo: mints a scoped key, writes .reticle/cloud.json)
|
|
51
66
|
reticle whoami (who am I signed in as, and is this repo attached?)
|
|
52
67
|
reticle project <ls|create <name>> (list or create cloud projects)
|
|
53
68
|
reticle config [--runs on|off] [--memory on|off] [--flows on|off] [--verify local|server]
|
|
54
|
-
reticle push
|
|
69
|
+
reticle push | sync [--watch] (one sync cycle: send the difference, collect decisions)
|
|
55
70
|
reticle runs | regression | share <runId> (read cloud state; regression exits 3 if any flow broke)
|
|
56
71
|
|
|
57
72
|
'drive' shows the browser; everything else is hidden (serve/mcp own the pool behind leases, replay
|
|
@@ -69,6 +84,8 @@ const AFFECTED_COMMAND = 'affected';
|
|
|
69
84
|
const HUNT_COMMAND = 'hunt';
|
|
70
85
|
const CAPSULES_COMMAND = 'capsules';
|
|
71
86
|
const GATE_COMMAND = 'gate';
|
|
87
|
+
/** Hook mode: prose a human can read, and silence when there was simply nothing to check. */
|
|
88
|
+
const HOOK_FLAG = '--hook';
|
|
72
89
|
const WATCH_COMMAND = 'watch';
|
|
73
90
|
const UPDATE_COMMAND = 'update';
|
|
74
91
|
const ROLLBACK_COMMAND = 'rollback';
|
|
@@ -132,6 +149,8 @@ const KNOWN_COMMANDS = new Set([
|
|
|
132
149
|
'config',
|
|
133
150
|
'push',
|
|
134
151
|
'runs',
|
|
152
|
+
'issues',
|
|
153
|
+
'memory',
|
|
135
154
|
'regression',
|
|
136
155
|
'share',
|
|
137
156
|
'doctor',
|
|
@@ -157,12 +176,64 @@ const DRY_RUN_FLAG = '--dry-run';
|
|
|
157
176
|
const YES_FLAG = '--yes';
|
|
158
177
|
const NO_MCP_FLAG = '--no-mcp';
|
|
159
178
|
const APP_FLAG = '--app';
|
|
179
|
+
/**
|
|
180
|
+
* What only the caller can know, and what it may switch off.
|
|
181
|
+
*
|
|
182
|
+
* `--flow`, `--env` and `--app` are an AGENT's answers: which journey proves the thing the user
|
|
183
|
+
* cares about, what the app needs to reach a usable state, and which app in a monorepo. None is
|
|
184
|
+
* inferable from the repository alone, and a run without them either guesses or stops.
|
|
185
|
+
*
|
|
186
|
+
* `--files-only` is the escape hatch for a caller that wants what init used to do and nothing more.
|
|
187
|
+
*/
|
|
188
|
+
const FLOW_FLAG = '--flow';
|
|
189
|
+
const ENV_FLAG = '--env';
|
|
190
|
+
const FILES_ONLY_FLAG = '--files-only';
|
|
191
|
+
/**
|
|
192
|
+
* Write `captureNetworkBodies: true` into the app's config. OFF unless asked (#705).
|
|
193
|
+
*
|
|
194
|
+
* Body capture is what makes a 2xx write's OUTCOME readable rather than just its transport, so it
|
|
195
|
+
* is worth having — but a body is the one part of a request that routinely carries personal data,
|
|
196
|
+
* and `init` runs unattended. Whoever passes this has decided; nothing decides it for them.
|
|
197
|
+
*/
|
|
198
|
+
const CAPTURE_BODIES_FLAG = '--capture-bodies';
|
|
199
|
+
/**
|
|
200
|
+
* The rest of the runtime surface.
|
|
201
|
+
*
|
|
202
|
+
* `--json` is not a convenience: SKILL.md tells an agent to read the result and act on `agentTodo`,
|
|
203
|
+
* and reading one object is one turn where interpreting a report is several. The three opt-outs are
|
|
204
|
+
* what a machine without a browser, or a caller already running their app, actually needs.
|
|
205
|
+
*/
|
|
206
|
+
const JSON_FLAG = '--json';
|
|
207
|
+
const NO_DRIVE_FLAG = '--no-drive';
|
|
208
|
+
const NO_OPEN_FLAG = '--no-open';
|
|
209
|
+
const NO_AGENTS_FLAG = '--no-agents';
|
|
210
|
+
/**
|
|
211
|
+
* Restart the calling client so IT gets the tools.
|
|
212
|
+
*
|
|
213
|
+
* The flag was accepted by the prototype and not by `init`, so passing it printed the whole usage
|
|
214
|
+
* text. `init` decides what a restart should do — including refusing an id with no transcript, which
|
|
215
|
+
* is the case that looks exactly like success — and prints it; performing the restart is the
|
|
216
|
+
* caller's, because opening a terminal is not something a one-shot command should do behind a flag.
|
|
217
|
+
*/
|
|
218
|
+
const RELAUNCH_FLAG = '--relaunch';
|
|
219
|
+
const URL_FLAG = '--url';
|
|
220
|
+
const TIMEOUT_FLAG_INIT = '--timeout';
|
|
221
|
+
const DRIVE_MODEL_FLAG = '--drive-model';
|
|
222
|
+
/**
|
|
223
|
+
* The key, written to .env by the command rather than by hand.
|
|
224
|
+
*
|
|
225
|
+
* The instructions used to ask an agent for three steps: append to .env, check .gitignore, confirm.
|
|
226
|
+
* All three are deterministic, and the second is the one that costs something when skipped, because
|
|
227
|
+
* a key committed to git is leaked and stays leaked after the file is removed.
|
|
228
|
+
*/
|
|
229
|
+
const LICENSE_FLAG = '--license';
|
|
160
230
|
const NO_INSTALL_FLAG = '--no-install';
|
|
161
231
|
export const HTTP_FLAG = '--http';
|
|
162
232
|
export const HTTP_PORT_FLAG = '--http-port';
|
|
163
233
|
export const HTTP_TOKEN_FLAG = '--http-token';
|
|
164
234
|
const TIMEOUT_FLAG = '--timeout';
|
|
165
235
|
const STORAGE_STATE_FLAG = '--storage-state';
|
|
236
|
+
const SESSION_ID_FLAG = '--session-id';
|
|
166
237
|
const unknownArgument = (arg) => ({
|
|
167
238
|
kind: 'error',
|
|
168
239
|
message: `unknown argument '${arg}'`,
|
|
@@ -179,6 +250,10 @@ const missingOperand = (command, what) => ({
|
|
|
179
250
|
kind: 'error',
|
|
180
251
|
message: `${command} needs ${what}`,
|
|
181
252
|
});
|
|
253
|
+
const requiresHttp = (flag) => ({
|
|
254
|
+
kind: 'error',
|
|
255
|
+
message: `${flag} requires ${HTTP_FLAG} — it configures the verify endpoint ${HTTP_FLAG} starts`,
|
|
256
|
+
});
|
|
182
257
|
const unknownCommand = (command) => ({
|
|
183
258
|
kind: 'error',
|
|
184
259
|
message: `unknown command '${command}'`,
|
|
@@ -243,6 +318,13 @@ function parseServeFlags(args, defaultPort, _defaultHeadless) {
|
|
|
243
318
|
}
|
|
244
319
|
i++;
|
|
245
320
|
}
|
|
321
|
+
// Without `--http` these flags configure an endpoint nothing starts, and they were accepted and
|
|
322
|
+
// silently ignored — worse than being rejected, because the whole reason to pass them is to be
|
|
323
|
+
// honoured (#687).
|
|
324
|
+
if (!http && httpPort !== undefined)
|
|
325
|
+
return requiresHttp(HTTP_PORT_FLAG);
|
|
326
|
+
if (!http && httpToken !== undefined)
|
|
327
|
+
return requiresHttp(HTTP_TOKEN_FLAG);
|
|
246
328
|
return {
|
|
247
329
|
kind: 'ok',
|
|
248
330
|
port,
|
|
@@ -288,14 +370,17 @@ function parseDriveSuffix(args, port, defaultHeadless) {
|
|
|
288
370
|
return { kind: 'ok', port, driveUrl, headless };
|
|
289
371
|
}
|
|
290
372
|
/**
|
|
291
|
-
* Parse `verify <url> [--headed] [--timeout N] [--storage-state <file>]
|
|
292
|
-
* the preview URL.
|
|
373
|
+
* Parse `verify <url> [--port N] [--headed] [--timeout N] [--storage-state <file>]
|
|
374
|
+
* [--session-id <id>]`. The first non-flag token is the preview URL. `defaultPort` is already
|
|
375
|
+
* env + `.reticle.json` + 4400.
|
|
293
376
|
*/
|
|
294
|
-
function parseVerifySuffix(args) {
|
|
377
|
+
function parseVerifySuffix(args, defaultPort) {
|
|
295
378
|
let headless = true;
|
|
296
379
|
let url;
|
|
297
380
|
let timeoutMs;
|
|
298
381
|
let storageState;
|
|
382
|
+
let sessionId;
|
|
383
|
+
let port = defaultPort;
|
|
299
384
|
let i = 0;
|
|
300
385
|
while (i < args.length) {
|
|
301
386
|
const arg = args[i];
|
|
@@ -304,6 +389,16 @@ function parseVerifySuffix(args) {
|
|
|
304
389
|
if (arg === HEADED_FLAG) {
|
|
305
390
|
headless = false;
|
|
306
391
|
}
|
|
392
|
+
else if (arg === PORT_FLAG) {
|
|
393
|
+
i++;
|
|
394
|
+
const n = args[i];
|
|
395
|
+
if (n === undefined)
|
|
396
|
+
return missingValue(PORT_FLAG);
|
|
397
|
+
const parsed = parseInt(n, 10);
|
|
398
|
+
if (isNaN(parsed))
|
|
399
|
+
return notANumber(PORT_FLAG, n);
|
|
400
|
+
port = parsed;
|
|
401
|
+
}
|
|
307
402
|
else if (arg === TIMEOUT_FLAG) {
|
|
308
403
|
i++;
|
|
309
404
|
const n = args[i];
|
|
@@ -321,6 +416,13 @@ function parseVerifySuffix(args) {
|
|
|
321
416
|
return missingValue(STORAGE_STATE_FLAG);
|
|
322
417
|
storageState = v;
|
|
323
418
|
}
|
|
419
|
+
else if (arg === SESSION_ID_FLAG) {
|
|
420
|
+
i++;
|
|
421
|
+
const v = args[i];
|
|
422
|
+
if (v === undefined)
|
|
423
|
+
return missingValue(SESSION_ID_FLAG);
|
|
424
|
+
sessionId = v;
|
|
425
|
+
}
|
|
324
426
|
else if (arg.startsWith('--')) {
|
|
325
427
|
return unknownArgument(arg);
|
|
326
428
|
}
|
|
@@ -338,8 +440,10 @@ function parseVerifySuffix(args) {
|
|
|
338
440
|
kind: 'ok',
|
|
339
441
|
url,
|
|
340
442
|
headless,
|
|
443
|
+
port,
|
|
341
444
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
342
445
|
...(storageState !== undefined ? { storageState } : {}),
|
|
446
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
343
447
|
};
|
|
344
448
|
}
|
|
345
449
|
function parseInitFlags(args) {
|
|
@@ -348,6 +452,20 @@ function parseInitFlags(args) {
|
|
|
348
452
|
let dryRun = false;
|
|
349
453
|
let install = true;
|
|
350
454
|
let app;
|
|
455
|
+
let flow;
|
|
456
|
+
// Repeatable: one variable per flag, so a value containing spaces or `=` needs no quoting rules.
|
|
457
|
+
const env = [];
|
|
458
|
+
let filesOnly = false;
|
|
459
|
+
let captureBodies = false;
|
|
460
|
+
let json = false;
|
|
461
|
+
let drive = true;
|
|
462
|
+
let open = true;
|
|
463
|
+
let relaunch = false;
|
|
464
|
+
let agents = true;
|
|
465
|
+
let url;
|
|
466
|
+
let timeoutSeconds;
|
|
467
|
+
let driveModel;
|
|
468
|
+
let licenseKey;
|
|
351
469
|
let i = 0;
|
|
352
470
|
while (i < args.length) {
|
|
353
471
|
const arg = args[i];
|
|
@@ -372,6 +490,72 @@ function parseInitFlags(args) {
|
|
|
372
490
|
return missingValue(APP_FLAG);
|
|
373
491
|
app = value;
|
|
374
492
|
}
|
|
493
|
+
else if (arg === FLOW_FLAG) {
|
|
494
|
+
i++;
|
|
495
|
+
const value = args[i];
|
|
496
|
+
if (value === undefined)
|
|
497
|
+
return missingValue(FLOW_FLAG);
|
|
498
|
+
flow = value;
|
|
499
|
+
}
|
|
500
|
+
else if (arg === ENV_FLAG) {
|
|
501
|
+
i++;
|
|
502
|
+
const value = args[i];
|
|
503
|
+
if (value === undefined)
|
|
504
|
+
return missingValue(ENV_FLAG);
|
|
505
|
+
env.push(value);
|
|
506
|
+
}
|
|
507
|
+
else if (arg === FILES_ONLY_FLAG) {
|
|
508
|
+
filesOnly = true;
|
|
509
|
+
}
|
|
510
|
+
else if (arg === CAPTURE_BODIES_FLAG) {
|
|
511
|
+
captureBodies = true;
|
|
512
|
+
}
|
|
513
|
+
else if (arg === JSON_FLAG) {
|
|
514
|
+
json = true;
|
|
515
|
+
}
|
|
516
|
+
else if (arg === NO_DRIVE_FLAG) {
|
|
517
|
+
drive = false;
|
|
518
|
+
}
|
|
519
|
+
else if (arg === NO_OPEN_FLAG) {
|
|
520
|
+
open = false;
|
|
521
|
+
}
|
|
522
|
+
else if (arg === RELAUNCH_FLAG) {
|
|
523
|
+
relaunch = true;
|
|
524
|
+
}
|
|
525
|
+
else if (arg === NO_AGENTS_FLAG) {
|
|
526
|
+
agents = false;
|
|
527
|
+
}
|
|
528
|
+
else if (arg === URL_FLAG) {
|
|
529
|
+
i++;
|
|
530
|
+
const value = args[i];
|
|
531
|
+
if (value === undefined)
|
|
532
|
+
return missingValue(URL_FLAG);
|
|
533
|
+
url = value;
|
|
534
|
+
}
|
|
535
|
+
else if (arg === LICENSE_FLAG) {
|
|
536
|
+
i++;
|
|
537
|
+
const value = args[i];
|
|
538
|
+
if (value === undefined)
|
|
539
|
+
return missingValue(LICENSE_FLAG);
|
|
540
|
+
licenseKey = value;
|
|
541
|
+
}
|
|
542
|
+
else if (arg === DRIVE_MODEL_FLAG) {
|
|
543
|
+
i++;
|
|
544
|
+
const value = args[i];
|
|
545
|
+
if (value === undefined)
|
|
546
|
+
return missingValue(DRIVE_MODEL_FLAG);
|
|
547
|
+
driveModel = value;
|
|
548
|
+
}
|
|
549
|
+
else if (arg === TIMEOUT_FLAG_INIT) {
|
|
550
|
+
i++;
|
|
551
|
+
const value = args[i];
|
|
552
|
+
if (value === undefined)
|
|
553
|
+
return missingValue(TIMEOUT_FLAG_INIT);
|
|
554
|
+
const seconds = parseInt(value, 10);
|
|
555
|
+
if (isNaN(seconds))
|
|
556
|
+
return notANumber(TIMEOUT_FLAG_INIT, value);
|
|
557
|
+
timeoutSeconds = seconds;
|
|
558
|
+
}
|
|
375
559
|
else if (arg === NO_MCP_FLAG) {
|
|
376
560
|
mcp = false;
|
|
377
561
|
}
|
|
@@ -389,7 +573,27 @@ function parseInitFlags(args) {
|
|
|
389
573
|
}
|
|
390
574
|
i++;
|
|
391
575
|
}
|
|
392
|
-
return {
|
|
576
|
+
return {
|
|
577
|
+
kind: 'ok',
|
|
578
|
+
port,
|
|
579
|
+
mcp,
|
|
580
|
+
dryRun,
|
|
581
|
+
install,
|
|
582
|
+
app,
|
|
583
|
+
flow,
|
|
584
|
+
env,
|
|
585
|
+
filesOnly,
|
|
586
|
+
captureBodies,
|
|
587
|
+
json,
|
|
588
|
+
drive,
|
|
589
|
+
open,
|
|
590
|
+
relaunch,
|
|
591
|
+
agents,
|
|
592
|
+
url,
|
|
593
|
+
timeoutSeconds,
|
|
594
|
+
driveModel,
|
|
595
|
+
licenseKey,
|
|
596
|
+
};
|
|
393
597
|
}
|
|
394
598
|
/** Pure CLI arg parser — exported for unit tests. argv = process.argv.slice(2). */
|
|
395
599
|
const SINCE_FLAG = '--since';
|
|
@@ -457,6 +661,19 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
457
661
|
dryRun: r.dryRun,
|
|
458
662
|
install: r.install,
|
|
459
663
|
app: r.app,
|
|
664
|
+
flow: r.flow,
|
|
665
|
+
env: r.env,
|
|
666
|
+
filesOnly: r.filesOnly,
|
|
667
|
+
captureBodies: r.captureBodies,
|
|
668
|
+
json: r.json,
|
|
669
|
+
drive: r.drive,
|
|
670
|
+
open: r.open,
|
|
671
|
+
relaunch: r.relaunch,
|
|
672
|
+
agents: r.agents,
|
|
673
|
+
url: r.url,
|
|
674
|
+
timeoutSeconds: r.timeoutSeconds,
|
|
675
|
+
driveModel: r.driveModel,
|
|
676
|
+
licenseKey: r.licenseKey,
|
|
460
677
|
};
|
|
461
678
|
}
|
|
462
679
|
case SERVE_COMMAND: {
|
|
@@ -550,15 +767,17 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
550
767
|
};
|
|
551
768
|
}
|
|
552
769
|
case VERIFY_COMMAND: {
|
|
553
|
-
const r = parseVerifySuffix(rest);
|
|
770
|
+
const r = parseVerifySuffix(rest, defaultPort);
|
|
554
771
|
if ('error' === r.kind)
|
|
555
772
|
return r;
|
|
556
773
|
return {
|
|
557
774
|
kind: 'verify',
|
|
558
775
|
url: r.url,
|
|
559
776
|
headless: r.headless,
|
|
777
|
+
port: r.port,
|
|
560
778
|
...(r.timeoutMs !== undefined ? { timeoutMs: r.timeoutMs } : {}),
|
|
561
779
|
...(r.storageState !== undefined ? { storageState: r.storageState } : {}),
|
|
780
|
+
...(r.sessionId !== undefined ? { sessionId: r.sessionId } : {}),
|
|
562
781
|
};
|
|
563
782
|
}
|
|
564
783
|
case CAPSULES_COMMAND:
|
|
@@ -575,9 +794,16 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
|
|
|
575
794
|
return { kind: 'affected', files: t.files, ...(since === undefined ? {} : { since }) };
|
|
576
795
|
}
|
|
577
796
|
case GATE_COMMAND: {
|
|
578
|
-
|
|
797
|
+
// `--hook` is stripped before target parsing, which would reject it as an unknown flag.
|
|
798
|
+
const hook = rest.includes(HOOK_FLAG);
|
|
799
|
+
const t = parseTargetArgs(rest.filter((a) => a !== HOOK_FLAG));
|
|
579
800
|
const since = t.since ?? implicitSince(t.files);
|
|
580
|
-
return {
|
|
801
|
+
return {
|
|
802
|
+
kind: 'gate',
|
|
803
|
+
files: t.files,
|
|
804
|
+
...(since === undefined ? {} : { since }),
|
|
805
|
+
...(hook ? { hook: true } : {}),
|
|
806
|
+
};
|
|
581
807
|
}
|
|
582
808
|
case WATCH_COMMAND: {
|
|
583
809
|
// `reticle watch [url]` — on file save, report which saved flows must re-verify.
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
import { checkForUpdate } from '../update/update-checker.js';
|
|
9
9
|
import { updateTarget } from '../update/update-nudge.js';
|
|
10
10
|
import { applyUpdate, rollback } from '../update/updater.js';
|
|
11
|
+
import { refreshAgentRules } from '../init/refresh-rules.js';
|
|
11
12
|
import { SERVER_VERSION } from '../version/server-version.js';
|
|
12
13
|
import { log } from '../log.js';
|
|
13
|
-
import { readFileSync } from 'node:fs';
|
|
14
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
14
15
|
import { join } from 'node:path';
|
|
15
16
|
import { reticleDepsOf, sdkSyncCommand } from '../update/sdk-sync.js';
|
|
16
17
|
import { detectPackageManager } from '../init/detect.js';
|
|
@@ -64,6 +65,24 @@ export async function handleUpdate() {
|
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
67
|
log('reticle_update', { ok: true, from: SERVER_VERSION, to: target });
|
|
68
|
+
// Bring this project's agent rules up with the version.
|
|
69
|
+
//
|
|
70
|
+
// The managed block has always been updatable — marker-delimited, idempotent by comparing
|
|
71
|
+
// content — and nothing called it after the first install. `mergeMarkedInstruction` is reachable
|
|
72
|
+
// from `buildPlan` alone, so a project set up on an older release kept that release's
|
|
73
|
+
// instructions forever and every improvement to them reached new projects only.
|
|
74
|
+
//
|
|
75
|
+
// That is backwards: the people who most need better instructions are the ones already
|
|
76
|
+
// installed and not getting value, and this is the moment they are touching the install anyway.
|
|
77
|
+
// Only files that ALREADY carry the block are touched, and only inside the markers.
|
|
78
|
+
const refreshed = refreshAgentRules(process.cwd(), {
|
|
79
|
+
read: (path) => (existsSync(path) ? readFileSync(path, 'utf8') : null),
|
|
80
|
+
write: (path, content) => {
|
|
81
|
+
writeFileSync(path, content, 'utf8');
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
if (0 !== refreshed.updated.length)
|
|
85
|
+
log('reticle_rules_refreshed', { files: refreshed.updated, to: target });
|
|
67
86
|
// The app's SDK FIRST, then the CLI. `reticle update` used to swap only the CLI, so the command
|
|
68
87
|
// whose job is keeping an install current was itself a way to produce a version-skewed pair —
|
|
69
88
|
// and the skew message told people to run it to fix an outdated SDK, which it could not do.
|
package/dist/cli/cli-verify.d.ts
CHANGED
|
@@ -62,7 +62,8 @@ export declare function handleVerify(parsed: {
|
|
|
62
62
|
headless: boolean;
|
|
63
63
|
timeoutMs?: number;
|
|
64
64
|
storageState?: string;
|
|
65
|
+
sessionId?: string;
|
|
65
66
|
/** Bridge port — parseCliArgs already resolves --port / RETICLE_PORT / .reticle.json into this. */
|
|
66
|
-
port
|
|
67
|
+
port: number;
|
|
67
68
|
}): void;
|
|
68
69
|
export {};
|
package/dist/cli/cli-verify.js
CHANGED
|
@@ -16,7 +16,7 @@ import { start } from '../index.js';
|
|
|
16
16
|
import { probePresence, PortPresence } from '../daemon/port-presence.js';
|
|
17
17
|
import { probeDaemon } from '../mcp/mcp-proxy.js';
|
|
18
18
|
import { fetchStatus } from './cli-launch.js';
|
|
19
|
-
import { resolveCloudConfig, syncRunToCloud, SyncOutcome } from '../cloud/cloud-sync.js';
|
|
19
|
+
import { cloudFetch, resolveCloudConfig, syncRunToCloud, SyncOutcome, } from '../cloud/cloud-sync.js';
|
|
20
20
|
import { ReticleRunner } from '../runs/reticle-runner.js';
|
|
21
21
|
import { createRunnerPort } from '../runs/runner-port.js';
|
|
22
22
|
import { RunStore } from '../runs/run-store.js';
|
|
@@ -94,9 +94,9 @@ async function pushRunToCloud(run, ports) {
|
|
|
94
94
|
const config = resolveCloudConfig(process.env);
|
|
95
95
|
if (null === config)
|
|
96
96
|
return;
|
|
97
|
-
const result = await syncRunToCloud(run, config,
|
|
97
|
+
const result = await syncRunToCloud(run, config, cloudFetch);
|
|
98
98
|
if (result.outcome === SyncOutcome.SYNCED) {
|
|
99
|
-
ports.out(`↑ run ${run.runId} recorded on the Reticle
|
|
99
|
+
ports.out(`↑ run ${run.runId} recorded on the Reticle dashboard`);
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
102
|
ports.fail(`cloud run sync failed (${result.status ?? result.error ?? 'error'}); run kept locally`);
|
|
@@ -175,7 +175,7 @@ async function openLiveConnection(opts) {
|
|
|
175
175
|
...(opts.storageState !== undefined ? { storageState: opts.storageState } : {}),
|
|
176
176
|
});
|
|
177
177
|
const deps = buildVerifyDeps(running, opts.reticleRoot, opts.now);
|
|
178
|
-
const runner = new ReticleRunner(createRunnerPort(deps));
|
|
178
|
+
const runner = new ReticleRunner(createRunnerPort(deps, opts.sessionId));
|
|
179
179
|
return {
|
|
180
180
|
sessionReady: (timeoutMs) => waitForSession(deps.sessions, timeoutMs, opts.now),
|
|
181
181
|
listFlows: () => deps.flows.list(),
|
|
@@ -244,6 +244,7 @@ export function handleVerify(parsed) {
|
|
|
244
244
|
now,
|
|
245
245
|
port: parsed.port ?? RETICLE_DEFAULT_PORT,
|
|
246
246
|
...(parsed.storageState !== undefined ? { storageState: parsed.storageState } : {}),
|
|
247
|
+
...(parsed.sessionId !== undefined ? { sessionId: parsed.sessionId } : {}),
|
|
247
248
|
}),
|
|
248
249
|
out: (line) => process.stdout.write(`${line}\n`),
|
|
249
250
|
fail: (line) => process.stderr.write(`${line}\n`),
|