@reticlehq/server 2.2.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bridge-security.d.ts +0 -1
- package/dist/bridge-security.js +0 -1
- package/dist/bridge.d.ts +0 -1
- package/dist/bridge.js +102 -12
- package/dist/bridge.test-harness.d.ts +5 -1
- package/dist/bridge.test-harness.js +12 -1
- package/dist/capsule/capsule-store.d.ts +2 -3
- package/dist/capsule/capsule-store.js +0 -1
- package/dist/capsule/capsule.d.ts +0 -1
- package/dist/capsule/capsule.js +0 -1
- package/dist/capsule/causal-summary.d.ts +21 -1
- package/dist/capsule/causal-summary.js +20 -2
- package/dist/capsule/divergence.d.ts +0 -1
- package/dist/capsule/divergence.js +0 -1
- package/dist/capsule/minimize.d.ts +0 -1
- package/dist/capsule/minimize.js +0 -1
- package/dist/capsule/predicate-to-links.d.ts +0 -1
- package/dist/capsule/predicate-to-links.js +0 -1
- package/dist/cli-doctor.d.ts +6 -0
- package/dist/cli-doctor.js +60 -0
- package/dist/cli-flow-commands.d.ts +0 -1
- package/dist/cli-flow-commands.js +0 -1
- package/dist/cli-launch.d.ts +0 -1
- package/dist/cli-launch.js +7 -3
- package/dist/cli-parse.d.ts +47 -3
- package/dist/cli-parse.js +147 -13
- package/dist/cli-port.d.ts +3 -1
- package/dist/cli-port.js +21 -1
- package/dist/cli-verify.d.ts +0 -1
- package/dist/cli-verify.js +1 -2
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +88 -69
- package/dist/cloud/cloud-config.d.ts +0 -1
- package/dist/cloud/cloud-config.js +0 -1
- package/dist/cloud/cloud-sync.d.ts +4 -5
- package/dist/cloud/cloud-sync.js +0 -1
- package/dist/cloud-cli.d.ts +0 -1
- package/dist/cloud-cli.js +9 -2
- package/dist/crawl/crawl-tools.d.ts +0 -1
- package/dist/crawl/crawl-tools.js +1 -2
- package/dist/crawl/crawl.d.ts +17 -3
- package/dist/crawl/crawl.js +43 -4
- package/dist/daemon-resilience.d.ts +6 -1
- package/dist/daemon-resilience.js +63 -1
- package/dist/daemon.d.ts +23 -3
- package/dist/daemon.js +36 -24
- package/dist/domain/domain-model.d.ts +0 -1
- package/dist/domain/domain-model.js +1 -2
- package/dist/domain/domain-tools.d.ts +0 -7
- package/dist/domain/domain-tools.js +21 -4
- package/dist/domain/flow-risk.d.ts +0 -1
- package/dist/domain/flow-risk.js +0 -1
- package/dist/ee/audit-log.d.ts +0 -1
- package/dist/ee/audit-log.js +0 -1
- package/dist/events/body-failures.d.ts +4 -0
- package/dist/events/body-failures.js +113 -0
- package/dist/events/contradictions.d.ts +53 -0
- package/dist/events/contradictions.js +282 -0
- package/dist/events/echo-mismatch.d.ts +4 -0
- package/dist/events/echo-mismatch.js +138 -0
- package/dist/events/event-filters.d.ts +17 -3
- package/dist/events/event-filters.js +13 -3
- package/dist/events/json-salvage.d.ts +32 -0
- package/dist/events/json-salvage.js +96 -0
- package/dist/events/predicate-eval.d.ts +2 -1
- package/dist/events/predicate-eval.js +56 -9
- package/dist/events/predicate.d.ts +0 -1
- package/dist/events/predicate.js +56 -2
- package/dist/events/reaction.d.ts +0 -1
- package/dist/events/reaction.js +0 -1
- package/dist/events/reconcile.d.ts +39 -0
- package/dist/events/reconcile.js +211 -0
- package/dist/events/ring-buffer.d.ts +0 -1
- package/dist/events/ring-buffer.js +0 -1
- package/dist/events/stale-response.d.ts +4 -0
- package/dist/events/stale-response.js +139 -0
- package/dist/events/unit-mismatch.d.ts +16 -0
- package/dist/events/unit-mismatch.js +167 -0
- package/dist/flows/affected-tools.d.ts +18 -0
- package/dist/flows/affected-tools.js +52 -0
- package/dist/flows/affected.d.ts +0 -1
- package/dist/flows/affected.js +0 -1
- package/dist/flows/annotate-tools.d.ts +0 -1
- package/dist/flows/annotate-tools.js +21 -3
- package/dist/flows/annotate.d.ts +0 -1
- package/dist/flows/annotate.js +0 -1
- package/dist/flows/annotation-store.d.ts +0 -1
- package/dist/flows/annotation-store.js +0 -1
- package/dist/flows/assertion-integrity.d.ts +0 -1
- package/dist/flows/assertion-integrity.js +0 -1
- package/dist/flows/assertion-tiers-store.d.ts +0 -1
- package/dist/flows/assertion-tiers-store.js +0 -1
- package/dist/flows/buddy-status.d.ts +0 -1
- package/dist/flows/buddy-status.js +0 -1
- package/dist/flows/coverage.d.ts +0 -1
- package/dist/flows/coverage.js +0 -1
- package/dist/flows/decision.d.ts +0 -7
- package/dist/flows/decision.js +47 -7
- package/dist/flows/flake-store.d.ts +0 -1
- package/dist/flows/flake-store.js +0 -1
- package/dist/flows/flake.d.ts +0 -1
- package/dist/flows/flake.js +0 -1
- package/dist/flows/flow-classify.d.ts +0 -1
- package/dist/flows/flow-classify.js +0 -1
- package/dist/flows/flow-replay-run.d.ts +0 -1
- package/dist/flows/flow-replay-run.js +2 -3
- package/dist/flows/flow-replay.d.ts +20 -4
- package/dist/flows/flow-replay.js +9 -43
- package/dist/flows/flow-report.d.ts +0 -1
- package/dist/flows/flow-report.js +0 -1
- package/dist/flows/flow-scope.d.ts +0 -1
- package/dist/flows/flow-scope.js +0 -1
- package/dist/flows/flow-sources.d.ts +0 -1
- package/dist/flows/flow-sources.js +0 -1
- package/dist/flows/flow-step-runners.d.ts +23 -0
- package/dist/flows/flow-step-runners.js +102 -0
- package/dist/flows/flow-success.d.ts +0 -1
- package/dist/flows/flow-success.js +0 -1
- package/dist/flows/flow-tools.d.ts +0 -1
- package/dist/flows/flow-tools.js +44 -14
- package/dist/flows/flows.d.ts +6 -2
- package/dist/flows/flows.js +15 -2
- package/dist/flows/gate.d.ts +0 -1
- package/dist/flows/gate.js +0 -1
- package/dist/flows/git-changed.d.ts +0 -1
- package/dist/flows/git-changed.js +0 -1
- package/dist/flows/heal-run.d.ts +0 -1
- package/dist/flows/heal-run.js +0 -1
- package/dist/flows/heal.d.ts +0 -1
- package/dist/flows/heal.js +0 -1
- package/dist/flows/parallel-suite.d.ts +0 -1
- package/dist/flows/parallel-suite.js +0 -1
- package/dist/flows/recordings.d.ts +0 -1
- package/dist/flows/recordings.js +0 -1
- package/dist/flows/replay.d.ts +0 -1
- package/dist/flows/replay.js +71 -4
- package/dist/flows/server-verify.d.ts +0 -1
- package/dist/flows/server-verify.js +0 -1
- package/dist/flows/verify-change-tools.d.ts +2 -0
- package/dist/flows/verify-change-tools.js +187 -0
- package/dist/flows/watch-batcher.d.ts +0 -1
- package/dist/flows/watch-batcher.js +0 -1
- package/dist/honesty/accepted-write.d.ts +14 -0
- package/dist/honesty/accepted-write.js +17 -0
- package/dist/honesty/blind-spots.d.ts +18 -1
- package/dist/honesty/blind-spots.js +47 -5
- package/dist/honesty/honesty.d.ts +0 -1
- package/dist/honesty/honesty.js +0 -1
- package/dist/honesty/uncaptured-bodies.d.ts +19 -0
- package/dist/honesty/uncaptured-bodies.js +30 -0
- package/dist/honesty/unread-outcome.d.ts +2 -0
- package/dist/honesty/unread-outcome.js +50 -0
- package/dist/honesty/verified.d.ts +40 -0
- package/dist/honesty/verified.js +86 -0
- package/dist/http-server.d.ts +0 -1
- package/dist/http-server.js +5 -1
- package/dist/hunt/hunt-report.d.ts +50 -0
- package/dist/hunt/hunt-report.js +84 -0
- package/dist/idle-shutdown.d.ts +0 -1
- package/dist/idle-shutdown.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/init/agent-rules.d.ts +0 -1
- package/dist/init/agent-rules.js +4 -2
- package/dist/init/capabilities.d.ts +17 -0
- package/dist/init/capabilities.js +51 -0
- package/dist/init/cursor.d.ts +0 -1
- package/dist/init/cursor.js +0 -1
- package/dist/init/desktop-doctor.d.ts +40 -0
- package/dist/init/desktop-doctor.js +198 -0
- package/dist/init/detect.d.ts +25 -1
- package/dist/init/detect.js +65 -4
- package/dist/init/mcp.d.ts +0 -1
- package/dist/init/mcp.js +0 -1
- package/dist/init/next-patch.d.ts +41 -0
- package/dist/init/next-patch.js +106 -0
- package/dist/init/node-io.d.ts +0 -1
- package/dist/init/node-io.js +25 -1
- package/dist/init/patch-kind.d.ts +20 -0
- package/dist/init/patch-kind.js +10 -0
- package/dist/init/plan-framework.d.ts +35 -0
- package/dist/init/plan-framework.js +217 -0
- package/dist/init/plan.d.ts +55 -4
- package/dist/init/plan.js +130 -112
- package/dist/init/project-id.d.ts +0 -1
- package/dist/init/project-id.js +0 -1
- package/dist/init/run.d.ts +17 -1
- package/dist/init/run.js +237 -18
- package/dist/init/slash-command.d.ts +18 -0
- package/dist/init/slash-command.js +52 -0
- package/dist/init/snippets.d.ts +48 -3
- package/dist/init/snippets.js +156 -6
- package/dist/init/vite-config.d.ts +4 -11
- package/dist/init/vite-config.js +15 -8
- package/dist/input/driven-redaction.d.ts +15 -0
- package/dist/input/driven-redaction.js +76 -0
- package/dist/input/network-detail.d.ts +9 -4
- package/dist/input/network-detail.js +35 -16
- package/dist/input/network-mock-tools.d.ts +0 -1
- package/dist/input/network-mock-tools.js +3 -4
- package/dist/input/network-mock.d.ts +0 -1
- package/dist/input/network-mock.js +0 -1
- package/dist/input/real-input.d.ts +14 -1
- package/dist/input/real-input.js +45 -3
- package/dist/input/scroll-find.d.ts +0 -1
- package/dist/input/scroll-find.js +0 -1
- package/dist/input/scroll-tools.d.ts +0 -1
- package/dist/input/scroll-tools.js +0 -1
- package/dist/input/viewport-tools.d.ts +0 -1
- package/dist/input/viewport-tools.js +3 -4
- package/dist/journal/ambient-store.d.ts +0 -1
- package/dist/journal/ambient-store.js +0 -1
- package/dist/journal/ambient.d.ts +0 -1
- package/dist/journal/ambient.js +0 -1
- package/dist/journal/attach-journal.d.ts +0 -1
- package/dist/journal/attach-journal.js +0 -1
- package/dist/journal/deviation-report.d.ts +0 -1
- package/dist/journal/deviation-report.js +0 -1
- package/dist/journal/deviation-service.d.ts +0 -1
- package/dist/journal/deviation-service.js +0 -1
- package/dist/journal/envelope-store.d.ts +0 -1
- package/dist/journal/envelope-store.js +0 -1
- package/dist/journal/envelope.d.ts +8 -9
- package/dist/journal/envelope.js +0 -1
- package/dist/journal/journal-query.d.ts +0 -1
- package/dist/journal/journal-query.js +0 -1
- package/dist/journal/journal-recorder.d.ts +0 -1
- package/dist/journal/journal-recorder.js +0 -1
- package/dist/journal/retention.d.ts +0 -1
- package/dist/journal/retention.js +0 -1
- package/dist/journal/rollups.d.ts +0 -1
- package/dist/journal/rollups.js +0 -1
- package/dist/journal/session-end.d.ts +0 -1
- package/dist/journal/session-end.js +0 -1
- package/dist/journal/session-journal.d.ts +0 -1
- package/dist/journal/session-journal.js +0 -1
- package/dist/license/license.d.ts +0 -1
- package/dist/license/license.js +0 -1
- package/dist/log.d.ts +0 -1
- package/dist/log.js +0 -1
- package/dist/mcp-proxy.d.ts +35 -4
- package/dist/mcp-proxy.js +174 -28
- package/dist/mcp.d.ts +15 -1
- package/dist/mcp.js +145 -17
- package/dist/oracles/flow-instrument-gaps.d.ts +0 -1
- package/dist/oracles/flow-instrument-gaps.js +0 -1
- package/dist/oracles/propose-consequences.d.ts +0 -1
- package/dist/oracles/propose-consequences.js +0 -1
- package/dist/oracles/self-instrument.d.ts +0 -1
- package/dist/oracles/self-instrument.js +0 -1
- package/dist/pairing-token.d.ts +0 -1
- package/dist/pairing-token.js +0 -1
- package/dist/phenomena/phenomena.d.ts +0 -1
- package/dist/phenomena/phenomena.js +0 -1
- package/dist/pool/browser-pool.d.ts +0 -1
- package/dist/pool/browser-pool.js +0 -1
- package/dist/pool/lease-reaper.d.ts +0 -1
- package/dist/pool/lease-reaper.js +0 -1
- package/dist/pool/playwright-launcher.d.ts +0 -1
- package/dist/pool/playwright-launcher.js +10 -2
- package/dist/project/baselines.d.ts +0 -1
- package/dist/project/baselines.js +0 -1
- package/dist/project/file-lock.d.ts +2 -1
- package/dist/project/file-lock.js +12 -2
- package/dist/project/fs-port.d.ts +0 -1
- package/dist/project/fs-port.js +0 -1
- package/dist/project/project-store.d.ts +0 -1
- package/dist/project/project-store.js +0 -1
- package/dist/project/project-tools.d.ts +0 -1
- package/dist/project/project-tools.js +29 -4
- package/dist/project/reticle-dir.d.ts +0 -1
- package/dist/project/reticle-dir.js +0 -1
- package/dist/runs/build-verification-run.d.ts +0 -1
- package/dist/runs/build-verification-run.js +0 -1
- package/dist/runs/profile-redact.d.ts +0 -1
- package/dist/runs/profile-redact.js +0 -1
- package/dist/runs/render-report.d.ts +0 -1
- package/dist/runs/render-report.js +0 -1
- package/dist/runs/repair-prompt.d.ts +0 -1
- package/dist/runs/repair-prompt.js +0 -1
- package/dist/runs/replay-mapping.d.ts +0 -1
- package/dist/runs/replay-mapping.js +0 -1
- package/dist/runs/reticle-runner.d.ts +0 -1
- package/dist/runs/reticle-runner.js +4 -2
- package/dist/runs/risk-classify.d.ts +0 -1
- package/dist/runs/risk-classify.js +0 -1
- package/dist/runs/run-diff.d.ts +0 -1
- package/dist/runs/run-diff.js +0 -1
- package/dist/runs/run-store.d.ts +0 -1
- package/dist/runs/run-store.js +0 -1
- package/dist/runs/run-tools.d.ts +0 -1
- package/dist/runs/run-tools.js +0 -1
- package/dist/runs/runner-port.d.ts +0 -1
- package/dist/runs/runner-port.js +0 -1
- package/dist/runs/verification-sync.d.ts +0 -1
- package/dist/runs/verification-sync.js +0 -1
- package/dist/runs/verify-http.d.ts +0 -1
- package/dist/runs/verify-http.js +0 -1
- package/dist/runs/verify-server.d.ts +0 -1
- package/dist/runs/verify-server.js +0 -1
- package/dist/server-version.d.ts +0 -1
- package/dist/server-version.js +0 -1
- package/dist/session/command-timeout.d.ts +35 -0
- package/dist/session/command-timeout.js +41 -0
- package/dist/session/control-envelope.d.ts +2 -3
- package/dist/session/control-envelope.js +2 -3
- package/dist/session/last-act.d.ts +31 -0
- package/dist/session/last-act.js +24 -0
- package/dist/session/live-control-tools.d.ts +0 -1
- package/dist/session/live-control-tools.js +3 -4
- package/dist/session/live-control.d.ts +0 -1
- package/dist/session/live-control.js +0 -1
- package/dist/session/observed-state.d.ts +12 -2
- package/dist/session/observed-state.js +29 -2
- package/dist/session/output-budget.d.ts +0 -1
- package/dist/session/output-budget.js +0 -1
- package/dist/session/pending-commands.d.ts +12 -0
- package/dist/session/pending-commands.js +36 -0
- package/dist/session/presenter-args.d.ts +0 -1
- package/dist/session/presenter-args.js +0 -1
- package/dist/session/review-store.d.ts +0 -1
- package/dist/session/review-store.js +0 -1
- package/dist/session/session-health.d.ts +26 -2
- package/dist/session/session-health.js +13 -1
- package/dist/session/session-info.d.ts +29 -0
- package/dist/session/session-info.js +1 -0
- package/dist/session/session-lease.d.ts +25 -0
- package/dist/session/session-lease.js +14 -0
- package/dist/session/session-manager.d.ts +7 -19
- package/dist/session/session-manager.js +35 -2
- package/dist/session/session-readiness.d.ts +0 -1
- package/dist/session/session-readiness.js +3 -4
- package/dist/session/session-reaper.d.ts +0 -1
- package/dist/session/session-reaper.js +0 -1
- package/dist/session/session-recommendation.d.ts +0 -1
- package/dist/session/session-recommendation.js +0 -1
- package/dist/session/session-tools.d.ts +0 -1
- package/dist/session/session-tools.js +2 -3
- package/dist/session/session.d.ts +33 -53
- package/dist/session/session.js +102 -66
- package/dist/session/state-select.d.ts +0 -1
- package/dist/session/state-select.js +0 -1
- package/dist/telemetry/argument-shape.d.ts +41 -0
- package/dist/telemetry/argument-shape.js +87 -0
- package/dist/telemetry/bug-found.d.ts +33 -0
- package/dist/telemetry/bug-found.js +95 -0
- package/dist/telemetry/cli-telemetry.d.ts +13 -0
- package/dist/telemetry/cli-telemetry.js +43 -0
- package/dist/telemetry/connect-failure.d.ts +16 -0
- package/dist/telemetry/connect-failure.js +44 -0
- package/dist/telemetry/daemon-telemetry.d.ts +19 -0
- package/dist/telemetry/daemon-telemetry.js +76 -0
- package/dist/telemetry/dev-repo.d.ts +10 -0
- package/dist/telemetry/dev-repo.js +80 -0
- package/dist/telemetry/error-fingerprint.d.ts +24 -0
- package/dist/telemetry/error-fingerprint.js +88 -0
- package/dist/telemetry/feedback-cli.d.ts +31 -0
- package/dist/telemetry/feedback-cli.js +102 -0
- package/dist/telemetry/feedback-context.d.ts +32 -0
- package/dist/telemetry/feedback-context.js +143 -0
- package/dist/telemetry/feedback.d.ts +66 -0
- package/dist/telemetry/feedback.js +175 -0
- package/dist/telemetry/git-facts.d.ts +21 -0
- package/dist/telemetry/git-facts.js +109 -0
- package/dist/telemetry/identify.d.ts +22 -0
- package/dist/telemetry/identify.js +73 -0
- package/dist/telemetry/init-telemetry.d.ts +26 -0
- package/dist/telemetry/init-telemetry.js +33 -0
- package/dist/telemetry/machine-snapshot.d.ts +6 -0
- package/dist/telemetry/machine-snapshot.js +39 -0
- package/dist/telemetry/mcp-connection.d.ts +5 -0
- package/dist/telemetry/mcp-connection.js +44 -0
- package/dist/telemetry/project-profile.d.ts +44 -0
- package/dist/telemetry/project-profile.js +205 -0
- package/dist/telemetry/run-telemetry.d.ts +21 -0
- package/dist/telemetry/run-telemetry.js +62 -0
- package/dist/telemetry/session-metrics.d.ts +103 -0
- package/dist/telemetry/session-metrics.js +329 -0
- package/dist/telemetry/telemetry.d.ts +35 -8
- package/dist/telemetry/telemetry.js +105 -12
- package/dist/token-auth.d.ts +0 -1
- package/dist/token-auth.js +0 -1
- package/dist/tools/act-capsule.d.ts +23 -0
- package/dist/tools/act-capsule.js +47 -0
- package/dist/tools/act-danger.d.ts +7 -0
- package/dist/tools/act-danger.js +44 -0
- package/dist/tools/act-helpers.d.ts +17 -0
- package/dist/tools/act-helpers.js +40 -0
- package/dist/tools/act-tools.d.ts +8 -1
- package/dist/tools/act-tools.js +96 -98
- package/dist/tools/act-view.d.ts +7 -1
- package/dist/tools/act-view.js +13 -1
- package/dist/tools/assert-grade.d.ts +22 -1
- package/dist/tools/assert-grade.js +46 -1
- package/dist/tools/assert-verdict.d.ts +21 -0
- package/dist/tools/assert-verdict.js +62 -0
- package/dist/tools/browser-tools.d.ts +0 -1
- package/dist/tools/browser-tools.js +2 -2
- package/dist/tools/contract-tools.d.ts +0 -1
- package/dist/tools/contract-tools.js +0 -1
- package/dist/tools/coverage-tools.d.ts +9 -0
- package/dist/tools/coverage-tools.js +92 -0
- package/dist/tools/dynamic-tools.d.ts +0 -1
- package/dist/tools/dynamic-tools.js +21 -2
- package/dist/tools/error-recovery.d.ts +18 -2
- package/dist/tools/error-recovery.js +42 -7
- package/dist/tools/feedback-tools.d.ts +24 -0
- package/dist/tools/feedback-tools.js +180 -0
- package/dist/tools/invoke-tool.d.ts +0 -1
- package/dist/tools/invoke-tool.js +115 -5
- package/dist/tools/lease-tools.d.ts +0 -1
- package/dist/tools/lease-tools.js +6 -5
- package/dist/tools/merge-tools.d.ts +0 -1
- package/dist/tools/merge-tools.js +0 -1
- package/dist/tools/observe-tools.d.ts +0 -1
- package/dist/tools/observe-tools.js +91 -39
- package/dist/tools/profiles.d.ts +1 -2
- package/dist/tools/profiles.js +43 -16
- package/dist/tools/query-paginate.d.ts +0 -1
- package/dist/tools/query-paginate.js +0 -1
- package/dist/tools/read-tools.d.ts +0 -1
- package/dist/tools/read-tools.js +14 -8
- package/dist/tools/reconcile-tools.d.ts +2 -0
- package/dist/tools/reconcile-tools.js +111 -0
- package/dist/tools/snapshot-delta.d.ts +0 -1
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/tool-invoker.d.ts +0 -1
- package/dist/tools/tool-invoker.js +0 -1
- package/dist/tools/tool-kit.d.ts +16 -1
- package/dist/tools/tool-kit.js +8 -2
- package/dist/tools/tool-names.d.ts +6 -1
- package/dist/tools/tool-names.js +6 -1
- package/dist/tools/tools-helpers.d.ts +0 -1
- package/dist/tools/tools-helpers.js +0 -1
- package/dist/tools/tools.d.ts +0 -1
- package/dist/tools/tools.js +24 -4
- package/dist/update/update-checker.d.ts +0 -1
- package/dist/update/update-checker.js +0 -1
- package/dist/update/update-nudge.d.ts +20 -0
- package/dist/update/update-nudge.js +72 -0
- package/dist/update/updater.d.ts +14 -1
- package/dist/update/updater.js +33 -2
- package/dist/visual/visual-diff.d.ts +0 -1
- package/dist/visual/visual-diff.js +0 -1
- package/dist/visual/visual-store.d.ts +0 -1
- package/dist/visual/visual-store.js +0 -1
- package/dist/visual/visual-tools.d.ts +0 -1
- package/dist/visual/visual-tools.js +103 -16
- package/package.json +2 -2
- package/dist/bridge-security.d.ts.map +0 -1
- package/dist/bridge-security.js.map +0 -1
- package/dist/bridge.d.ts.map +0 -1
- package/dist/bridge.js.map +0 -1
- package/dist/bridge.test-harness.d.ts.map +0 -1
- package/dist/bridge.test-harness.js.map +0 -1
- package/dist/capsule/capsule-store.d.ts.map +0 -1
- package/dist/capsule/capsule-store.js.map +0 -1
- package/dist/capsule/capsule.d.ts.map +0 -1
- package/dist/capsule/capsule.js.map +0 -1
- package/dist/capsule/causal-summary.d.ts.map +0 -1
- package/dist/capsule/causal-summary.js.map +0 -1
- package/dist/capsule/divergence.d.ts.map +0 -1
- package/dist/capsule/divergence.js.map +0 -1
- package/dist/capsule/minimize.d.ts.map +0 -1
- package/dist/capsule/minimize.js.map +0 -1
- package/dist/capsule/predicate-to-links.d.ts.map +0 -1
- package/dist/capsule/predicate-to-links.js.map +0 -1
- package/dist/cli-flow-commands.d.ts.map +0 -1
- package/dist/cli-flow-commands.js.map +0 -1
- package/dist/cli-launch.d.ts.map +0 -1
- package/dist/cli-launch.js.map +0 -1
- package/dist/cli-parse.d.ts.map +0 -1
- package/dist/cli-parse.js.map +0 -1
- package/dist/cli-port.d.ts.map +0 -1
- package/dist/cli-port.js.map +0 -1
- package/dist/cli-verify.d.ts.map +0 -1
- package/dist/cli-verify.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cloud/cloud-config.d.ts.map +0 -1
- package/dist/cloud/cloud-config.js.map +0 -1
- package/dist/cloud/cloud-sync.d.ts.map +0 -1
- package/dist/cloud/cloud-sync.js.map +0 -1
- package/dist/cloud-cli.d.ts.map +0 -1
- package/dist/cloud-cli.js.map +0 -1
- package/dist/crawl/crawl-tools.d.ts.map +0 -1
- package/dist/crawl/crawl-tools.js.map +0 -1
- package/dist/crawl/crawl.d.ts.map +0 -1
- package/dist/crawl/crawl.js.map +0 -1
- package/dist/daemon-resilience.d.ts.map +0 -1
- package/dist/daemon-resilience.js.map +0 -1
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js.map +0 -1
- package/dist/domain/domain-model.d.ts.map +0 -1
- package/dist/domain/domain-model.js.map +0 -1
- package/dist/domain/domain-tools.d.ts.map +0 -1
- package/dist/domain/domain-tools.js.map +0 -1
- package/dist/domain/flow-risk.d.ts.map +0 -1
- package/dist/domain/flow-risk.js.map +0 -1
- package/dist/ee/audit-log.d.ts.map +0 -1
- package/dist/ee/audit-log.js.map +0 -1
- package/dist/events/event-filters.d.ts.map +0 -1
- package/dist/events/event-filters.js.map +0 -1
- package/dist/events/predicate-eval.d.ts.map +0 -1
- package/dist/events/predicate-eval.js.map +0 -1
- package/dist/events/predicate.d.ts.map +0 -1
- package/dist/events/predicate.js.map +0 -1
- package/dist/events/reaction.d.ts.map +0 -1
- package/dist/events/reaction.js.map +0 -1
- package/dist/events/ring-buffer.d.ts.map +0 -1
- package/dist/events/ring-buffer.js.map +0 -1
- package/dist/flows/affected.d.ts.map +0 -1
- package/dist/flows/affected.js.map +0 -1
- package/dist/flows/annotate-tools.d.ts.map +0 -1
- package/dist/flows/annotate-tools.js.map +0 -1
- package/dist/flows/annotate.d.ts.map +0 -1
- package/dist/flows/annotate.js.map +0 -1
- package/dist/flows/annotation-store.d.ts.map +0 -1
- package/dist/flows/annotation-store.js.map +0 -1
- package/dist/flows/assertion-integrity.d.ts.map +0 -1
- package/dist/flows/assertion-integrity.js.map +0 -1
- package/dist/flows/assertion-tiers-store.d.ts.map +0 -1
- package/dist/flows/assertion-tiers-store.js.map +0 -1
- package/dist/flows/buddy-status.d.ts.map +0 -1
- package/dist/flows/buddy-status.js.map +0 -1
- package/dist/flows/coverage.d.ts.map +0 -1
- package/dist/flows/coverage.js.map +0 -1
- package/dist/flows/decision.d.ts.map +0 -1
- package/dist/flows/decision.js.map +0 -1
- package/dist/flows/flake-store.d.ts.map +0 -1
- package/dist/flows/flake-store.js.map +0 -1
- package/dist/flows/flake.d.ts.map +0 -1
- package/dist/flows/flake.js.map +0 -1
- package/dist/flows/flow-classify.d.ts.map +0 -1
- package/dist/flows/flow-classify.js.map +0 -1
- package/dist/flows/flow-replay-run.d.ts.map +0 -1
- package/dist/flows/flow-replay-run.js.map +0 -1
- package/dist/flows/flow-replay.d.ts.map +0 -1
- package/dist/flows/flow-replay.js.map +0 -1
- package/dist/flows/flow-report.d.ts.map +0 -1
- package/dist/flows/flow-report.js.map +0 -1
- package/dist/flows/flow-scope.d.ts.map +0 -1
- package/dist/flows/flow-scope.js.map +0 -1
- package/dist/flows/flow-sources.d.ts.map +0 -1
- package/dist/flows/flow-sources.js.map +0 -1
- package/dist/flows/flow-success.d.ts.map +0 -1
- package/dist/flows/flow-success.js.map +0 -1
- package/dist/flows/flow-tools.d.ts.map +0 -1
- package/dist/flows/flow-tools.js.map +0 -1
- package/dist/flows/flows.d.ts.map +0 -1
- package/dist/flows/flows.js.map +0 -1
- package/dist/flows/gate.d.ts.map +0 -1
- package/dist/flows/gate.js.map +0 -1
- package/dist/flows/git-changed.d.ts.map +0 -1
- package/dist/flows/git-changed.js.map +0 -1
- package/dist/flows/heal-run.d.ts.map +0 -1
- package/dist/flows/heal-run.js.map +0 -1
- package/dist/flows/heal.d.ts.map +0 -1
- package/dist/flows/heal.js.map +0 -1
- package/dist/flows/parallel-suite.d.ts.map +0 -1
- package/dist/flows/parallel-suite.js.map +0 -1
- package/dist/flows/recordings.d.ts.map +0 -1
- package/dist/flows/recordings.js.map +0 -1
- package/dist/flows/replay.d.ts.map +0 -1
- package/dist/flows/replay.js.map +0 -1
- package/dist/flows/server-verify.d.ts.map +0 -1
- package/dist/flows/server-verify.js.map +0 -1
- package/dist/flows/watch-batcher.d.ts.map +0 -1
- package/dist/flows/watch-batcher.js.map +0 -1
- package/dist/honesty/blind-spots.d.ts.map +0 -1
- package/dist/honesty/blind-spots.js.map +0 -1
- package/dist/honesty/honesty.d.ts.map +0 -1
- package/dist/honesty/honesty.js.map +0 -1
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js.map +0 -1
- package/dist/idle-shutdown.d.ts.map +0 -1
- package/dist/idle-shutdown.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init/agent-rules.d.ts.map +0 -1
- package/dist/init/agent-rules.js.map +0 -1
- package/dist/init/cursor.d.ts.map +0 -1
- package/dist/init/cursor.js.map +0 -1
- package/dist/init/detect.d.ts.map +0 -1
- package/dist/init/detect.js.map +0 -1
- package/dist/init/mcp.d.ts.map +0 -1
- package/dist/init/mcp.js.map +0 -1
- package/dist/init/node-io.d.ts.map +0 -1
- package/dist/init/node-io.js.map +0 -1
- package/dist/init/plan.d.ts.map +0 -1
- package/dist/init/plan.js.map +0 -1
- package/dist/init/project-id.d.ts.map +0 -1
- package/dist/init/project-id.js.map +0 -1
- package/dist/init/run.d.ts.map +0 -1
- package/dist/init/run.js.map +0 -1
- package/dist/init/snippets.d.ts.map +0 -1
- package/dist/init/snippets.js.map +0 -1
- package/dist/init/vite-config.d.ts.map +0 -1
- package/dist/init/vite-config.js.map +0 -1
- package/dist/input/network-detail.d.ts.map +0 -1
- package/dist/input/network-detail.js.map +0 -1
- package/dist/input/network-mock-tools.d.ts.map +0 -1
- package/dist/input/network-mock-tools.js.map +0 -1
- package/dist/input/network-mock.d.ts.map +0 -1
- package/dist/input/network-mock.js.map +0 -1
- package/dist/input/real-input.d.ts.map +0 -1
- package/dist/input/real-input.js.map +0 -1
- package/dist/input/scroll-find.d.ts.map +0 -1
- package/dist/input/scroll-find.js.map +0 -1
- package/dist/input/scroll-tools.d.ts.map +0 -1
- package/dist/input/scroll-tools.js.map +0 -1
- package/dist/input/viewport-tools.d.ts.map +0 -1
- package/dist/input/viewport-tools.js.map +0 -1
- package/dist/journal/ambient-store.d.ts.map +0 -1
- package/dist/journal/ambient-store.js.map +0 -1
- package/dist/journal/ambient.d.ts.map +0 -1
- package/dist/journal/ambient.js.map +0 -1
- package/dist/journal/attach-journal.d.ts.map +0 -1
- package/dist/journal/attach-journal.js.map +0 -1
- package/dist/journal/deviation-report.d.ts.map +0 -1
- package/dist/journal/deviation-report.js.map +0 -1
- package/dist/journal/deviation-service.d.ts.map +0 -1
- package/dist/journal/deviation-service.js.map +0 -1
- package/dist/journal/envelope-store.d.ts.map +0 -1
- package/dist/journal/envelope-store.js.map +0 -1
- package/dist/journal/envelope.d.ts.map +0 -1
- package/dist/journal/envelope.js.map +0 -1
- package/dist/journal/journal-query.d.ts.map +0 -1
- package/dist/journal/journal-query.js.map +0 -1
- package/dist/journal/journal-recorder.d.ts.map +0 -1
- package/dist/journal/journal-recorder.js.map +0 -1
- package/dist/journal/retention.d.ts.map +0 -1
- package/dist/journal/retention.js.map +0 -1
- package/dist/journal/rollups.d.ts.map +0 -1
- package/dist/journal/rollups.js.map +0 -1
- package/dist/journal/session-end.d.ts.map +0 -1
- package/dist/journal/session-end.js.map +0 -1
- package/dist/journal/session-journal.d.ts.map +0 -1
- package/dist/journal/session-journal.js.map +0 -1
- package/dist/license/license.d.ts.map +0 -1
- package/dist/license/license.js.map +0 -1
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js.map +0 -1
- package/dist/mcp-proxy.d.ts.map +0 -1
- package/dist/mcp-proxy.js.map +0 -1
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js.map +0 -1
- package/dist/oracles/flow-instrument-gaps.d.ts.map +0 -1
- package/dist/oracles/flow-instrument-gaps.js.map +0 -1
- package/dist/oracles/propose-consequences.d.ts.map +0 -1
- package/dist/oracles/propose-consequences.js.map +0 -1
- package/dist/oracles/self-instrument.d.ts.map +0 -1
- package/dist/oracles/self-instrument.js.map +0 -1
- package/dist/pairing-token.d.ts.map +0 -1
- package/dist/pairing-token.js.map +0 -1
- package/dist/phenomena/phenomena.d.ts.map +0 -1
- package/dist/phenomena/phenomena.js.map +0 -1
- package/dist/pool/browser-pool.d.ts.map +0 -1
- package/dist/pool/browser-pool.js.map +0 -1
- package/dist/pool/lease-reaper.d.ts.map +0 -1
- package/dist/pool/lease-reaper.js.map +0 -1
- package/dist/pool/playwright-launcher.d.ts.map +0 -1
- package/dist/pool/playwright-launcher.js.map +0 -1
- package/dist/project/baselines.d.ts.map +0 -1
- package/dist/project/baselines.js.map +0 -1
- package/dist/project/file-lock.d.ts.map +0 -1
- package/dist/project/file-lock.js.map +0 -1
- package/dist/project/fs-port.d.ts.map +0 -1
- package/dist/project/fs-port.js.map +0 -1
- package/dist/project/project-store.d.ts.map +0 -1
- package/dist/project/project-store.js.map +0 -1
- package/dist/project/project-tools.d.ts.map +0 -1
- package/dist/project/project-tools.js.map +0 -1
- package/dist/project/reticle-dir.d.ts.map +0 -1
- package/dist/project/reticle-dir.js.map +0 -1
- package/dist/runs/build-verification-run.d.ts.map +0 -1
- package/dist/runs/build-verification-run.js.map +0 -1
- package/dist/runs/profile-redact.d.ts.map +0 -1
- package/dist/runs/profile-redact.js.map +0 -1
- package/dist/runs/render-report.d.ts.map +0 -1
- package/dist/runs/render-report.js.map +0 -1
- package/dist/runs/repair-prompt.d.ts.map +0 -1
- package/dist/runs/repair-prompt.js.map +0 -1
- package/dist/runs/replay-mapping.d.ts.map +0 -1
- package/dist/runs/replay-mapping.js.map +0 -1
- package/dist/runs/reticle-runner.d.ts.map +0 -1
- package/dist/runs/reticle-runner.js.map +0 -1
- package/dist/runs/risk-classify.d.ts.map +0 -1
- package/dist/runs/risk-classify.js.map +0 -1
- package/dist/runs/run-diff.d.ts.map +0 -1
- package/dist/runs/run-diff.js.map +0 -1
- package/dist/runs/run-store.d.ts.map +0 -1
- package/dist/runs/run-store.js.map +0 -1
- package/dist/runs/run-tools.d.ts.map +0 -1
- package/dist/runs/run-tools.js.map +0 -1
- package/dist/runs/runner-port.d.ts.map +0 -1
- package/dist/runs/runner-port.js.map +0 -1
- package/dist/runs/verification-sync.d.ts.map +0 -1
- package/dist/runs/verification-sync.js.map +0 -1
- package/dist/runs/verify-http.d.ts.map +0 -1
- package/dist/runs/verify-http.js.map +0 -1
- package/dist/runs/verify-server.d.ts.map +0 -1
- package/dist/runs/verify-server.js.map +0 -1
- package/dist/server-version.d.ts.map +0 -1
- package/dist/server-version.js.map +0 -1
- package/dist/session/control-envelope.d.ts.map +0 -1
- package/dist/session/control-envelope.js.map +0 -1
- package/dist/session/live-control-tools.d.ts.map +0 -1
- package/dist/session/live-control-tools.js.map +0 -1
- package/dist/session/live-control.d.ts.map +0 -1
- package/dist/session/live-control.js.map +0 -1
- package/dist/session/observed-state.d.ts.map +0 -1
- package/dist/session/observed-state.js.map +0 -1
- package/dist/session/output-budget.d.ts.map +0 -1
- package/dist/session/output-budget.js.map +0 -1
- package/dist/session/presenter-args.d.ts.map +0 -1
- package/dist/session/presenter-args.js.map +0 -1
- package/dist/session/review-store.d.ts.map +0 -1
- package/dist/session/review-store.js.map +0 -1
- package/dist/session/session-health.d.ts.map +0 -1
- package/dist/session/session-health.js.map +0 -1
- package/dist/session/session-manager.d.ts.map +0 -1
- package/dist/session/session-manager.js.map +0 -1
- package/dist/session/session-readiness.d.ts.map +0 -1
- package/dist/session/session-readiness.js.map +0 -1
- package/dist/session/session-reaper.d.ts.map +0 -1
- package/dist/session/session-reaper.js.map +0 -1
- package/dist/session/session-recommendation.d.ts.map +0 -1
- package/dist/session/session-recommendation.js.map +0 -1
- package/dist/session/session-tools.d.ts.map +0 -1
- package/dist/session/session-tools.js.map +0 -1
- package/dist/session/session.d.ts.map +0 -1
- package/dist/session/session.js.map +0 -1
- package/dist/session/state-select.d.ts.map +0 -1
- package/dist/session/state-select.js.map +0 -1
- package/dist/telemetry/telemetry.d.ts.map +0 -1
- package/dist/telemetry/telemetry.js.map +0 -1
- package/dist/token-auth.d.ts.map +0 -1
- package/dist/token-auth.js.map +0 -1
- package/dist/tools/act-tools.d.ts.map +0 -1
- package/dist/tools/act-tools.js.map +0 -1
- package/dist/tools/act-view.d.ts.map +0 -1
- package/dist/tools/act-view.js.map +0 -1
- package/dist/tools/assert-grade.d.ts.map +0 -1
- package/dist/tools/assert-grade.js.map +0 -1
- package/dist/tools/browser-tools.d.ts.map +0 -1
- package/dist/tools/browser-tools.js.map +0 -1
- package/dist/tools/contract-tools.d.ts.map +0 -1
- package/dist/tools/contract-tools.js.map +0 -1
- package/dist/tools/dynamic-tools.d.ts.map +0 -1
- package/dist/tools/dynamic-tools.js.map +0 -1
- package/dist/tools/error-recovery.d.ts.map +0 -1
- package/dist/tools/error-recovery.js.map +0 -1
- package/dist/tools/invoke-tool.d.ts.map +0 -1
- package/dist/tools/invoke-tool.js.map +0 -1
- package/dist/tools/lease-tools.d.ts.map +0 -1
- package/dist/tools/lease-tools.js.map +0 -1
- package/dist/tools/merge-tools.d.ts.map +0 -1
- package/dist/tools/merge-tools.js.map +0 -1
- package/dist/tools/observe-tools.d.ts.map +0 -1
- package/dist/tools/observe-tools.js.map +0 -1
- package/dist/tools/profiles.d.ts.map +0 -1
- package/dist/tools/profiles.js.map +0 -1
- package/dist/tools/query-paginate.d.ts.map +0 -1
- package/dist/tools/query-paginate.js.map +0 -1
- package/dist/tools/read-tools.d.ts.map +0 -1
- package/dist/tools/read-tools.js.map +0 -1
- package/dist/tools/snapshot-delta.d.ts.map +0 -1
- package/dist/tools/snapshot-delta.js.map +0 -1
- package/dist/tools/tool-invoker.d.ts.map +0 -1
- package/dist/tools/tool-invoker.js.map +0 -1
- package/dist/tools/tool-kit.d.ts.map +0 -1
- package/dist/tools/tool-kit.js.map +0 -1
- package/dist/tools/tool-names.d.ts.map +0 -1
- package/dist/tools/tool-names.js.map +0 -1
- package/dist/tools/tools-helpers.d.ts.map +0 -1
- package/dist/tools/tools-helpers.js.map +0 -1
- package/dist/tools/tools.d.ts.map +0 -1
- package/dist/tools/tools.js.map +0 -1
- package/dist/update/update-checker.d.ts.map +0 -1
- package/dist/update/update-checker.js.map +0 -1
- package/dist/update/updater.d.ts.map +0 -1
- package/dist/update/updater.js.map +0 -1
- package/dist/visual/visual-diff.d.ts.map +0 -1
- package/dist/visual/visual-diff.js.map +0 -1
- package/dist/visual/visual-store.d.ts.map +0 -1
- package/dist/visual/visual-store.js.map +0 -1
- package/dist/visual/visual-tools.d.ts.map +0 -1
- package/dist/visual/visual-tools.js.map +0 -1
package/dist/init/run.js
CHANGED
|
@@ -5,10 +5,16 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { dirname, join } from 'node:path';
|
|
7
7
|
import { detect, Framework } from './detect.js';
|
|
8
|
-
import { buildPlan, StepStatus } from './plan.js';
|
|
8
|
+
import { DEPS_TARGET, MCP_TARGET, buildPlan, StepStatus, } from './plan.js';
|
|
9
9
|
import { claudeAvailableProbe, claudeExistsProbe } from './mcp.js';
|
|
10
|
+
import { reticleDevLocation } from './next-patch.js';
|
|
11
|
+
import { scanTestids, storeHints } from './capabilities.js';
|
|
10
12
|
import { CURSOR_DIR_RELPATH, CURSOR_MCP_RELPATH } from './cursor.js';
|
|
11
13
|
import { deriveProjectId, packageName } from './project-id.js';
|
|
14
|
+
import { VITE_DEV_MODULE_PATH } from './snippets.js';
|
|
15
|
+
import { CLAUDE_COMMAND_PATH, CURSOR_COMMAND_PATH } from './slash-command.js';
|
|
16
|
+
import { SERVER_VERSION } from '../server-version.js';
|
|
17
|
+
import { InitFailure, reportInitOutcome } from '../telemetry/init-telemetry.js';
|
|
12
18
|
/** Lockfile basenames, in package-manager preference order (mirrors detect.ts). */
|
|
13
19
|
const LOCKFILE_NAMES = [
|
|
14
20
|
'pnpm-lock.yaml',
|
|
@@ -42,8 +48,60 @@ export function resolveLockfiles(rootFiles, cwd, io) {
|
|
|
42
48
|
return set;
|
|
43
49
|
}
|
|
44
50
|
const PACKAGE_JSON = 'package.json';
|
|
45
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Root-layout candidates, App Router only. `--src-dir` apps keep theirs under `src/app`, and the
|
|
53
|
+
* ReticleDev component has to land NEXT TO the layout or the relative import it generates is dead.
|
|
54
|
+
*/
|
|
55
|
+
const NEXT_LAYOUT_CANDIDATES = [
|
|
56
|
+
'app/layout.tsx',
|
|
57
|
+
'app/layout.jsx',
|
|
58
|
+
'app/layout.js',
|
|
59
|
+
'src/app/layout.tsx',
|
|
60
|
+
'src/app/layout.jsx',
|
|
61
|
+
'src/app/layout.js',
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Pages Router mount points, checked only when there is no App Router layout. A Pages app has no
|
|
65
|
+
* `app/` directory at all, so writing the component there produced a file nothing imported.
|
|
66
|
+
*/
|
|
67
|
+
const NEXT_PAGES_APP_CANDIDATES = [
|
|
68
|
+
'pages/_app.tsx',
|
|
69
|
+
'pages/_app.jsx',
|
|
70
|
+
'pages/_app.js',
|
|
71
|
+
'src/pages/_app.tsx',
|
|
72
|
+
'src/pages/_app.jsx',
|
|
73
|
+
'src/pages/_app.js',
|
|
74
|
+
];
|
|
46
75
|
const SVELTEKIT_HOOKS = 'src/hooks.client.ts';
|
|
76
|
+
/** Where an app's components live. Bounded on purpose — this is a hint, not an index of the repo. */
|
|
77
|
+
const SOURCE_DIRS = ['src', 'src/components', 'src/pages', 'app', 'components'];
|
|
78
|
+
const SOURCE_FILE = /\.(tsx|jsx|ts|js|svelte|vue|astro)$/;
|
|
79
|
+
/** Files read for the testid scan. A capabilities block is a hint; reading a whole repo for it is not. */
|
|
80
|
+
const MAX_SCANNED_FILES = 200;
|
|
81
|
+
/** Read a bounded set of the app's source files, for the `data-testid` scan. */
|
|
82
|
+
function readSourceFiles(io) {
|
|
83
|
+
const out = [];
|
|
84
|
+
for (const dir of SOURCE_DIRS) {
|
|
85
|
+
for (const name of io.listFiles(dir)) {
|
|
86
|
+
if (!SOURCE_FILE.test(name))
|
|
87
|
+
continue;
|
|
88
|
+
const content = io.readFile(`${dir}/${name}`);
|
|
89
|
+
if (content !== null)
|
|
90
|
+
out.push(content);
|
|
91
|
+
if (out.length >= MAX_SCANNED_FILES)
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
/** Direct dependency names, for naming the state libraries an app actually has. */
|
|
98
|
+
function dependencyNames(pkg) {
|
|
99
|
+
const p = (pkg ?? {});
|
|
100
|
+
return new Set([
|
|
101
|
+
...Object.keys(p['dependencies'] ?? {}),
|
|
102
|
+
...Object.keys(p['devDependencies'] ?? {}),
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
47
105
|
const VITE_CONFIG_CANDIDATES = [
|
|
48
106
|
'vite.config.ts',
|
|
49
107
|
'vite.config.js',
|
|
@@ -56,11 +114,17 @@ const NEXT_CONFIG_CANDIDATES = [
|
|
|
56
114
|
'next.config.ts',
|
|
57
115
|
'next.config.cjs',
|
|
58
116
|
];
|
|
117
|
+
/**
|
|
118
|
+
* `⚠` means WORK LEFT TO DO and nothing else — it is what an agent (and the release gate) counts to
|
|
119
|
+
* decide whether the install finished. A notice gets its own mark so "steps remaining" can reach zero
|
|
120
|
+
* on a working install that happens to be on an ungated stack.
|
|
121
|
+
*/
|
|
59
122
|
const STATUS_SYMBOL = {
|
|
60
123
|
[StepStatus.APPLY]: '✓',
|
|
61
124
|
[StepStatus.MANUAL]: '⚠',
|
|
62
125
|
[StepStatus.ALREADY]: '·',
|
|
63
126
|
[StepStatus.SKIP]: '–',
|
|
127
|
+
[StepStatus.NOTICE]: 'ℹ',
|
|
64
128
|
};
|
|
65
129
|
function firstPresent(files, candidates) {
|
|
66
130
|
for (const c of candidates)
|
|
@@ -78,6 +142,8 @@ function gatherPlanInput(options, io, pkgRaw) {
|
|
|
78
142
|
configFiles: rootFiles,
|
|
79
143
|
// Walk up for the lockfile so a monorepo sub-package picks the workspace's package manager.
|
|
80
144
|
lockfiles: resolveLockfiles(rootFiles, options.cwd, io),
|
|
145
|
+
// An already-installed tree names its own manager, which matters when no lockfile is committed.
|
|
146
|
+
nodeModulesMarkers: new Set(io.listFiles('node_modules')),
|
|
81
147
|
};
|
|
82
148
|
const detection = detect(detectInput);
|
|
83
149
|
const vitePath = firstPresent(rootFiles, VITE_CONFIG_CANDIDATES);
|
|
@@ -93,51 +159,121 @@ function gatherPlanInput(options, io, pkgRaw) {
|
|
|
93
159
|
const cursorConfigPath = `${io.homeDir()}/${CURSOR_MCP_RELPATH}`;
|
|
94
160
|
const cursorPresent = options.mcp && io.exists(cursorDir);
|
|
95
161
|
const cursorConfig = cursorPresent ? io.readFile(cursorConfigPath) : null;
|
|
162
|
+
const nextConfigFile = firstPresent(rootFiles, NEXT_CONFIG_CANDIDATES);
|
|
163
|
+
// App Router first; a Pages Router app has no layout, and its mount point is pages/_app.
|
|
164
|
+
const layoutPath = (NEXT_LAYOUT_CANDIDATES.find((p) => io.exists(p)) ??
|
|
165
|
+
NEXT_PAGES_APP_CANDIDATES.find((p) => io.exists(p))) ??
|
|
166
|
+
null;
|
|
167
|
+
const layoutSource = layoutPath === null ? null : io.readFile(layoutPath);
|
|
168
|
+
// Where the component goes depends on WHICH router mounts it: `pages/` routes on presence, so a
|
|
169
|
+
// component there becomes a broken route; `app/` routes on filename, so a sibling is inert.
|
|
170
|
+
const devLocation = reticleDevLocation(layoutPath ?? 'app/layout.tsx', detection.typescript);
|
|
96
171
|
return {
|
|
97
172
|
detection,
|
|
98
173
|
claudeCli,
|
|
99
174
|
mcpExists,
|
|
100
175
|
cursorPresent,
|
|
176
|
+
cursorProjectPresent: io.exists(CURSOR_DIR_RELPATH),
|
|
101
177
|
cursorConfig,
|
|
102
178
|
cursorConfigPath,
|
|
103
179
|
viteConfig,
|
|
104
|
-
nextConfigFile
|
|
105
|
-
|
|
180
|
+
nextConfigFile,
|
|
181
|
+
nextConfigSource: nextConfigFile === null ? null : io.readFile(nextConfigFile),
|
|
182
|
+
nextLayout: layoutPath !== null && layoutSource !== null
|
|
183
|
+
? { path: layoutPath, source: layoutSource }
|
|
184
|
+
: null,
|
|
185
|
+
// Capabilities: scanned, never asked for. Bounded — a hint for the agent, not a repo index.
|
|
186
|
+
testids: scanTestids(readSourceFiles(io)),
|
|
187
|
+
storeHints: storeHints(dependencyNames(pkg)),
|
|
188
|
+
viteDevModuleExists: io.exists(VITE_DEV_MODULE_PATH),
|
|
189
|
+
nextReticleDevPath: devLocation.path,
|
|
190
|
+
nextReticleDevImport: devLocation.importSpecifier,
|
|
191
|
+
nextReticleDevExists: io.exists(devLocation.path),
|
|
106
192
|
svelteKitHooksExists: io.exists(SVELTEKIT_HOOKS),
|
|
107
193
|
reticleConfigExists: io.exists('.reticle.json'),
|
|
108
194
|
// Read the agent instruction files so the rule merge stays idempotent across re-runs.
|
|
109
195
|
claudeMdContent: io.readFile('CLAUDE.md'),
|
|
110
196
|
agentsMdContent: io.readFile('AGENTS.md'),
|
|
111
197
|
cursorRuleExists: io.exists('.cursor/rules/reticle.mdc'),
|
|
112
|
-
|
|
198
|
+
claudeCommandExists: io.exists(CLAUDE_COMMAND_PATH),
|
|
199
|
+
cursorCommandExists: io.exists(CURSOR_COMMAND_PATH),
|
|
200
|
+
options: {
|
|
201
|
+
port: options.port,
|
|
202
|
+
mcp: options.mcp,
|
|
203
|
+
install: options.install,
|
|
204
|
+
projectId,
|
|
205
|
+
// The SDK must match the CLI asking for it — see pinnedPackages.
|
|
206
|
+
sdkVersion: SERVER_VERSION,
|
|
207
|
+
},
|
|
113
208
|
};
|
|
114
209
|
}
|
|
210
|
+
/** Where workspace tooling conventionally puts packages. */
|
|
211
|
+
const WORKSPACE_PARENTS = ['apps', 'packages'];
|
|
212
|
+
/** Deps that mark a directory as a runnable web app even when it has no bundler config file. */
|
|
213
|
+
const APP_DEPS = ['next', 'vite'];
|
|
214
|
+
function looksLikeApp(dir, io) {
|
|
215
|
+
const pkgRaw = io.readFile(`${dir}/${PACKAGE_JSON}`);
|
|
216
|
+
if (pkgRaw === null)
|
|
217
|
+
return false;
|
|
218
|
+
const configs = [...VITE_CONFIG_CANDIDATES, ...NEXT_CONFIG_CANDIDATES];
|
|
219
|
+
if (configs.some((c) => io.exists(`${dir}/${c}`)))
|
|
220
|
+
return true;
|
|
221
|
+
// `next.config` is optional in Next, so the dependency list is the other half of the signal.
|
|
222
|
+
return APP_DEPS.some((d) => pkgRaw.includes(`"${d}"`));
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* App directories under a workspace root.
|
|
226
|
+
*
|
|
227
|
+
* Running `reticle init` at the repo root is what people actually do, and in a monorepo the app is a
|
|
228
|
+
* directory down — so init detected "no framework", printed a wall of manual HTML instructions, and
|
|
229
|
+
* would have installed the SDK into the ROOT package.json. It already walks UP for the lockfile, so
|
|
230
|
+
* it knows it is in a workspace; this is the matching walk DOWN.
|
|
231
|
+
*/
|
|
232
|
+
export function findWorkspaceApps(io) {
|
|
233
|
+
const found = [];
|
|
234
|
+
for (const parent of WORKSPACE_PARENTS) {
|
|
235
|
+
for (const name of io.listDirs(parent)) {
|
|
236
|
+
const dir = `${parent}/${name}`;
|
|
237
|
+
if (looksLikeApp(dir, io))
|
|
238
|
+
found.push(dir);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return found;
|
|
242
|
+
}
|
|
115
243
|
function restartHint(framework) {
|
|
116
244
|
if (framework === Framework.NEXT)
|
|
117
245
|
return 'Restart `next dev`, then ask your agent: "List Reticle sessions".';
|
|
118
246
|
if (framework === Framework.VITE)
|
|
119
247
|
return 'Restart `vite`, then ask your agent: "List Reticle sessions".';
|
|
248
|
+
if (framework === Framework.ASTRO)
|
|
249
|
+
return 'Restart `astro dev`, then ask your agent: "List Reticle sessions".';
|
|
120
250
|
if (framework === Framework.SVELTEKIT)
|
|
121
251
|
return 'Restart your dev server (`npm run dev`), then ask your agent: "List Reticle sessions".';
|
|
122
252
|
return 'Reload your app on localhost, then ask your agent: "List Reticle sessions".';
|
|
123
253
|
}
|
|
124
|
-
|
|
254
|
+
const SKIPPED_DETAIL = 'skipped — the dependency install above failed, and wiring the app to a package that is not ' +
|
|
255
|
+
'installed stops it booting. Run that install, then re-run `reticle init`.';
|
|
256
|
+
function report(plan, dryRun, failed, skipped, io) {
|
|
125
257
|
io.print(dryRun ? 'reticle init (dry run — no files written)' : 'reticle init');
|
|
126
258
|
io.print('');
|
|
127
259
|
let applied = 0;
|
|
128
260
|
let manual = 0;
|
|
129
261
|
for (const s of plan.steps) {
|
|
130
262
|
// A side effect that failed to apply is reported as a manual step with its fallback command.
|
|
131
|
-
const downgraded = failed.has(s.target);
|
|
263
|
+
const downgraded = failed.has(s.target) || skipped.has(s.target);
|
|
132
264
|
const status = downgraded ? StepStatus.MANUAL : s.status;
|
|
133
|
-
const detail =
|
|
134
|
-
?
|
|
135
|
-
: s.
|
|
265
|
+
const detail = skipped.has(s.target)
|
|
266
|
+
? SKIPPED_DETAIL
|
|
267
|
+
: downgraded && s.exec !== undefined
|
|
268
|
+
? `step failed — run manually: ${s.exec.fallback}`
|
|
269
|
+
: s.detail;
|
|
136
270
|
io.print(` [${STATUS_SYMBOL[status]}] ${s.title} → ${s.target}`);
|
|
137
271
|
if (status === StepStatus.APPLY)
|
|
138
272
|
applied++;
|
|
139
|
-
if (status === StepStatus.MANUAL) {
|
|
140
|
-
manual
|
|
273
|
+
if (status === StepStatus.MANUAL || status === StepStatus.NOTICE) {
|
|
274
|
+
// A notice prints in full like a manual step — it is worth reading — but is NOT counted as work.
|
|
275
|
+
if (status === StepStatus.MANUAL)
|
|
276
|
+
manual++;
|
|
141
277
|
for (const line of detail.split('\n'))
|
|
142
278
|
io.print(` ${line}`);
|
|
143
279
|
}
|
|
@@ -149,27 +285,110 @@ function report(plan, dryRun, failed, io) {
|
|
|
149
285
|
io.print(restartHint(plan.framework));
|
|
150
286
|
return { ok: true, applied, manual };
|
|
151
287
|
}
|
|
152
|
-
/**
|
|
288
|
+
/**
|
|
289
|
+
* Perform the apply-step side effects; return the targets whose side effect failed.
|
|
290
|
+
*
|
|
291
|
+
* Steps run in plan order, which puts the dependency install BEFORE everything that imports what it
|
|
292
|
+
* installs. If it fails, the wiring is skipped rather than applied: patching `next.config.ts` to
|
|
293
|
+
* import a `@reticlehq/next` that was never installed takes the dev server down with
|
|
294
|
+
* MODULE_NOT_FOUND, so the app stops booting *because* Reticle was installed. A skipped step is a
|
|
295
|
+
* message; a half-wired app is a broken project.
|
|
296
|
+
*/
|
|
153
297
|
function applyEffects(plan, io) {
|
|
154
298
|
const failed = new Set();
|
|
299
|
+
const skipped = new Set();
|
|
300
|
+
let installFailed = false;
|
|
155
301
|
for (const s of plan.steps) {
|
|
156
302
|
if (s.status !== StepStatus.APPLY)
|
|
157
303
|
continue;
|
|
304
|
+
if (installFailed && s.dependsOnInstall === true) {
|
|
305
|
+
skipped.add(s.target);
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
158
308
|
if (s.write !== undefined)
|
|
159
309
|
io.writeFile(s.write.path, s.write.content);
|
|
160
|
-
if (s.exec !== undefined && !io.exec(s.exec.command, s.exec.args))
|
|
310
|
+
if (s.exec !== undefined && !io.exec(s.exec.command, s.exec.args)) {
|
|
161
311
|
failed.add(s.target);
|
|
312
|
+
if (s.target === DEPS_TARGET)
|
|
313
|
+
installFailed = true;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return { failed, skipped };
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Which STEP failed, from the step targets — not from an error string, which would carry paths.
|
|
320
|
+
*
|
|
321
|
+
* The distinction that matters: a dependency install failing is a machine/network problem (offline,
|
|
322
|
+
* a locked registry, a broken package manager), while MCP registration failing means the `claude` CLI
|
|
323
|
+
* is missing or refused. Two completely different fixes, and until now both were simply "init didn't
|
|
324
|
+
* work" with nothing to tell them apart.
|
|
325
|
+
*/
|
|
326
|
+
function classifyInitFailure(failed) {
|
|
327
|
+
if (failed.has(DEPS_TARGET))
|
|
328
|
+
return InitFailure.DEPENDENCY_INSTALL;
|
|
329
|
+
if (failed.has(MCP_TARGET))
|
|
330
|
+
return InitFailure.MCP_REGISTRATION;
|
|
331
|
+
return InitFailure.OTHER;
|
|
332
|
+
}
|
|
333
|
+
const AMBIGUOUS_HEADER = 'Several apps found in this workspace. Re-run `reticle init` inside the one you want:';
|
|
334
|
+
/**
|
|
335
|
+
* When the current directory is a workspace root with no app of its own, wire the app instead of the
|
|
336
|
+
* root. One candidate is wired silently (there is nothing to ask about); several are listed, because
|
|
337
|
+
* guessing which app someone meant is worse than one line of output.
|
|
338
|
+
* Returns null when there is nothing to redirect to — the caller then proceeds here as before.
|
|
339
|
+
*/
|
|
340
|
+
function redirectToWorkspaceApp(options, io, pkgRaw) {
|
|
341
|
+
if (options.redirected === true)
|
|
342
|
+
return null;
|
|
343
|
+
const pkg = JSON.parse(pkgRaw);
|
|
344
|
+
const rootFiles = new Set(io.rootFiles());
|
|
345
|
+
const here = detect({
|
|
346
|
+
pkg: typeof pkg === 'object' && pkg !== null ? pkg : {},
|
|
347
|
+
configFiles: rootFiles,
|
|
348
|
+
lockfiles: new Set(),
|
|
349
|
+
});
|
|
350
|
+
if (here.framework !== Framework.HTML)
|
|
351
|
+
return null; // this directory IS the app
|
|
352
|
+
const apps = findWorkspaceApps(io);
|
|
353
|
+
const target = apps.length === 1 ? apps[0] : undefined;
|
|
354
|
+
if (target === undefined) {
|
|
355
|
+
if (apps.length === 0)
|
|
356
|
+
return null; // not a workspace — fall through to the normal HTML plan
|
|
357
|
+
io.print(AMBIGUOUS_HEADER);
|
|
358
|
+
for (const a of apps)
|
|
359
|
+
io.print(` ${a}`);
|
|
360
|
+
return { ok: false, applied: 0, manual: apps.length };
|
|
162
361
|
}
|
|
163
|
-
|
|
362
|
+
io.print(`No app in this directory — wiring ${target} instead.`);
|
|
363
|
+
io.print('');
|
|
364
|
+
return runInit({ ...options, cwd: join(options.cwd, target), redirected: true }, io.scoped(target));
|
|
164
365
|
}
|
|
165
366
|
export function runInit(options, io) {
|
|
166
367
|
const pkgRaw = io.readFile(PACKAGE_JSON);
|
|
167
368
|
if (pkgRaw === null) {
|
|
168
369
|
io.print('No package.json found. Run `reticle init` from your project root.');
|
|
370
|
+
// The onboarding funnel had NO instrumentation, so a setup that died here was indistinguishable
|
|
371
|
+
// from someone who never ran the command — the two failure modes with the most different fixes.
|
|
372
|
+
reportInitOutcome({ ok: false, reason: InitFailure.NO_PACKAGE_JSON });
|
|
169
373
|
return { ok: false, applied: 0, manual: 0 };
|
|
170
374
|
}
|
|
375
|
+
const redirected = redirectToWorkspaceApp(options, io, pkgRaw);
|
|
376
|
+
if (redirected !== null)
|
|
377
|
+
return redirected;
|
|
171
378
|
const plan = buildPlan(gatherPlanInput(options, io, pkgRaw));
|
|
172
|
-
const
|
|
173
|
-
|
|
379
|
+
const effects = options.dryRun
|
|
380
|
+
? { failed: new Set(), skipped: new Set() }
|
|
381
|
+
: applyEffects(plan, io);
|
|
382
|
+
const { failed, skipped } = effects;
|
|
383
|
+
const result = report(plan, options.dryRun, failed, skipped, io);
|
|
384
|
+
// A dry run is a preview, not an outcome — reporting it would inflate both success and failure.
|
|
385
|
+
if (!options.dryRun) {
|
|
386
|
+
reportInitOutcome({
|
|
387
|
+
ok: result.ok,
|
|
388
|
+
...(result.ok ? {} : { reason: classifyInitFailure(failed) }),
|
|
389
|
+
stack: plan.framework,
|
|
390
|
+
mcpRegistered: !failed.has(MCP_TARGET),
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
return result;
|
|
174
394
|
}
|
|
175
|
-
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/reticle` slash command — the entry point the docs have been promising and nothing created.
|
|
3
|
+
*
|
|
4
|
+
* SKILL.md tells the user "Type `/reticle` anytime to verify the app" in three places, and `init`
|
|
5
|
+
* never wrote the file that makes it exist. So the one obvious way in was a command that silently did
|
|
6
|
+
* nothing in every tool. Claude Code and Cursor both read custom commands from a markdown file per
|
|
7
|
+
* command; the body is the prompt the agent receives.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately SCOPED to one flow. A user installing Reticle has an existing app with many flows, and
|
|
10
|
+
* an agent told to "verify the app" will try to instrument all of them — slow, noisy, and nothing to
|
|
11
|
+
* see for minutes. One flow, driven where the human can watch it, is the whole difference between a
|
|
12
|
+
* two-minute first impression and an afternoon.
|
|
13
|
+
*/
|
|
14
|
+
/** Claude Code reads project commands from `.claude/commands/<name>.md`. */
|
|
15
|
+
export declare const CLAUDE_COMMAND_PATH = ".claude/commands/reticle.md";
|
|
16
|
+
/** Cursor reads them from `.cursor/commands/<name>.md`. */
|
|
17
|
+
export declare const CURSOR_COMMAND_PATH = ".cursor/commands/reticle.md";
|
|
18
|
+
export declare const SLASH_COMMAND_BODY = "---\ndescription: Verify this app in the browser with Reticle \u2014 drive one real flow and report what happened.\n---\n\nVerify this running app with Reticle. Drive it; do not read the code and guess.\n\n## Pick ONE flow\n\nNot the whole app. Pick the single most important flow you can complete in a handful of steps \u2014 the\none a user would do first (sign in, search, add to cart, submit the form). If the user named a flow or\njust changed some code, use that one instead.\n\nState which flow you picked in one line before you start.\n\n## Drive it where the human can see\n\n1. `reticle_sessions` \u2014 find the connected tab. None? Tell the user to run their dev server and open\n the app, then stop. Reticle never starts a dev server.\n2. `reticle_snapshot` \u2014 read the accessibility tree and locate the elements the flow needs. Elements\n are addressable by role and name; you do **not** need `data-testid` to drive them.\n3. Walk the flow with `reticle_act_and_wait`, one step at a time. Narrate each step first \u2014 the human\n is watching the page, and the HUD shows what you say.\n4. After each step, check the effect with `reticle_assert` \u2014 not just that the click dispatched, but\n that the thing it was supposed to do actually happened.\n5. Finish with `reticle_console` and `reticle_network` to catch errors the DOM does not show.\n\n## Report\n\n- What you drove, step by step, and what each step actually produced.\n- Anything broken, with the `file:line` Reticle gave you.\n- If a step could not be verified, say so plainly. \"Unknown\" is a real answer; a green verdict you\n cannot back is not.\n\nDo not weaken or skip an assertion to make the run pass \u2014 that is a finding, not a fix.\n";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/reticle` slash command — the entry point the docs have been promising and nothing created.
|
|
3
|
+
*
|
|
4
|
+
* SKILL.md tells the user "Type `/reticle` anytime to verify the app" in three places, and `init`
|
|
5
|
+
* never wrote the file that makes it exist. So the one obvious way in was a command that silently did
|
|
6
|
+
* nothing in every tool. Claude Code and Cursor both read custom commands from a markdown file per
|
|
7
|
+
* command; the body is the prompt the agent receives.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately SCOPED to one flow. A user installing Reticle has an existing app with many flows, and
|
|
10
|
+
* an agent told to "verify the app" will try to instrument all of them — slow, noisy, and nothing to
|
|
11
|
+
* see for minutes. One flow, driven where the human can watch it, is the whole difference between a
|
|
12
|
+
* two-minute first impression and an afternoon.
|
|
13
|
+
*/
|
|
14
|
+
/** Claude Code reads project commands from `.claude/commands/<name>.md`. */
|
|
15
|
+
export const CLAUDE_COMMAND_PATH = '.claude/commands/reticle.md';
|
|
16
|
+
/** Cursor reads them from `.cursor/commands/<name>.md`. */
|
|
17
|
+
export const CURSOR_COMMAND_PATH = '.cursor/commands/reticle.md';
|
|
18
|
+
export const SLASH_COMMAND_BODY = `---
|
|
19
|
+
description: Verify this app in the browser with Reticle — drive one real flow and report what happened.
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Verify this running app with Reticle. Drive it; do not read the code and guess.
|
|
23
|
+
|
|
24
|
+
## Pick ONE flow
|
|
25
|
+
|
|
26
|
+
Not the whole app. Pick the single most important flow you can complete in a handful of steps — the
|
|
27
|
+
one a user would do first (sign in, search, add to cart, submit the form). If the user named a flow or
|
|
28
|
+
just changed some code, use that one instead.
|
|
29
|
+
|
|
30
|
+
State which flow you picked in one line before you start.
|
|
31
|
+
|
|
32
|
+
## Drive it where the human can see
|
|
33
|
+
|
|
34
|
+
1. \`reticle_sessions\` — find the connected tab. None? Tell the user to run their dev server and open
|
|
35
|
+
the app, then stop. Reticle never starts a dev server.
|
|
36
|
+
2. \`reticle_snapshot\` — read the accessibility tree and locate the elements the flow needs. Elements
|
|
37
|
+
are addressable by role and name; you do **not** need \`data-testid\` to drive them.
|
|
38
|
+
3. Walk the flow with \`reticle_act_and_wait\`, one step at a time. Narrate each step first — the human
|
|
39
|
+
is watching the page, and the HUD shows what you say.
|
|
40
|
+
4. After each step, check the effect with \`reticle_assert\` — not just that the click dispatched, but
|
|
41
|
+
that the thing it was supposed to do actually happened.
|
|
42
|
+
5. Finish with \`reticle_console\` and \`reticle_network\` to catch errors the DOM does not show.
|
|
43
|
+
|
|
44
|
+
## Report
|
|
45
|
+
|
|
46
|
+
- What you drove, step by step, and what each step actually produced.
|
|
47
|
+
- Anything broken, with the \`file:line\` Reticle gave you.
|
|
48
|
+
- If a step could not be verified, say so plainly. "Unknown" is a real answer; a green verdict you
|
|
49
|
+
cannot back is not.
|
|
50
|
+
|
|
51
|
+
Do not weaken or skip an assertion to make the run pass — that is a finding, not a fix.
|
|
52
|
+
`;
|
package/dist/init/snippets.d.ts
CHANGED
|
@@ -6,8 +6,42 @@
|
|
|
6
6
|
export declare function viteManual(port: number | undefined): string;
|
|
7
7
|
/** Next.js config wrap — always printed (we never auto-rewrite next.config). */
|
|
8
8
|
export declare function nextConfigManual(configFile: string): string;
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The dev-only client component that connects Reticle after hydration.
|
|
11
|
+
*
|
|
12
|
+
* The token is not optional. The bridge requires a pairing token even on localhost, and unlike Vite
|
|
13
|
+
* (where the plugin injects it) a Next app has to carry it through `withReticle`, which publishes it
|
|
14
|
+
* as `NEXT_PUBLIC_RETICLE_TOKEN`. This file used to connect with only a projectId, so every Next
|
|
15
|
+
* setup ended at `bridge refused the connection: authentication failed` and no session ever appeared.
|
|
16
|
+
*/
|
|
17
|
+
export declare function nextReticleDevFile(port: number | undefined, projectId?: string, testids?: readonly string[], stores?: readonly string[]): string;
|
|
18
|
+
/**
|
|
19
|
+
* Astro connect instructions.
|
|
20
|
+
*
|
|
21
|
+
* Astro is Vite-based but SSRs its own HTML, so the plugin's index.html injection never fires, and
|
|
22
|
+
* `vite` is not a direct dependency — so this used to fall through to the generic HTML advice, which
|
|
23
|
+
* tells you to add a connect to an "entry module" Astro does not have, or to bundle the SDK with
|
|
24
|
+
* esbuild. Both are wrong for Astro, and following either gets you nothing.
|
|
25
|
+
*
|
|
26
|
+
* Astro bundles a page `<script>`, so the bare import resolves there. The token has to be inlined by
|
|
27
|
+
* the config because there is no plugin in the page's path to inject it, and `build.target` has to be
|
|
28
|
+
* raised or Astro down-levels the modern SDK bundle and dies on a destructuring transform.
|
|
29
|
+
*/
|
|
30
|
+
export declare function astroManual(port: number | undefined, projectId?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* The app-side dev module the Vite plugin imports by convention.
|
|
33
|
+
*
|
|
34
|
+
* `registerCapabilities` tells the agent what it can drive without guessing; `registerStore` is the
|
|
35
|
+
* one that matters most and the one we cannot write for you — detecting that an app depends on
|
|
36
|
+
* zustand is easy, knowing which module exports the store instance is not, and a wrong import here
|
|
37
|
+
* breaks the module everything else hangs off. So the store lines are generated COMMENTED, naming
|
|
38
|
+
* the libraries actually found in package.json, with the exact call to uncomment.
|
|
39
|
+
*/
|
|
40
|
+
export declare function viteDevModuleFile(testids: readonly string[], stores: readonly string[]): string;
|
|
41
|
+
/** Where that module goes. Matches @reticlehq/vite-plugin's convention list. */
|
|
42
|
+
export declare const VITE_DEV_MODULE_PATH = "src/reticle-dev.ts";
|
|
43
|
+
/** Default root-layout path, used when no layout was found on disk (reporting only). */
|
|
44
|
+
export declare const NEXT_LAYOUT_PATH = "app/layout.tsx";
|
|
11
45
|
/** Mount instruction for the root layout. */
|
|
12
46
|
export declare const NEXT_LAYOUT_MANUAL = "Mount <ReticleDev /> in your root layout (app/layout.tsx), dev-only:\n\n import { ReticleDev } from './reticle-dev';\n // inside <body>:\n {process.env.NODE_ENV === 'development' ? <ReticleDev /> : null}";
|
|
13
47
|
/**
|
|
@@ -19,6 +53,18 @@ export declare const NEXT_LAYOUT_MANUAL = "Mount <ReticleDev /> in your root lay
|
|
|
19
53
|
export declare function htmlManual(port: number | undefined, projectId?: string): string;
|
|
20
54
|
export declare const NEXT_RETICLE_DEV_PATH = "app/reticle-dev.tsx";
|
|
21
55
|
export declare const SVELTEKIT_HOOKS_PATH = "src/hooks.client.ts";
|
|
56
|
+
/**
|
|
57
|
+
* Said to the user's face rather than discovered later. React, Next, Remix and Astro each have an
|
|
58
|
+
* app and a CI gate; SvelteKit has neither, so "it generated some wiring" is not evidence it works.
|
|
59
|
+
*/
|
|
60
|
+
/**
|
|
61
|
+
* Said out loud when the app does not render through React. The SDK is framework-agnostic — DOM,
|
|
62
|
+
* network, console and routing all still work — but `@reticlehq/react` is a React adapter, so
|
|
63
|
+
* component names and source mapping do not, and no CI gate covers this stack. Reporting all-green
|
|
64
|
+
* here is the one thing this project exists not to do.
|
|
65
|
+
*/
|
|
66
|
+
export declare function unverifiedUiLibraryNote(library: string): string;
|
|
67
|
+
export declare const UNVERIFIED_FRAMEWORK_NOTE = "Reticle has no SvelteKit app and no CI gate for one, so this wiring is untested \u2014 it may work, but nothing proves it and nothing will tell us if it breaks. Supported and gated today: Vite + React, Next.js, Remix and Astro. If the hook does not register a session, please open an issue.";
|
|
22
68
|
/**
|
|
23
69
|
* Dev-only client hook that connects Reticle in a SvelteKit app. SvelteKit renders through app.html and
|
|
24
70
|
* never triggers Vite's index.html injection (verified), so the standard plugin can't auto-connect —
|
|
@@ -30,4 +76,3 @@ export declare function svelteKitHooksFile(port: number | undefined, projectId?:
|
|
|
30
76
|
* and by tooling for the stable projectId (the app's identity across port changes).
|
|
31
77
|
*/
|
|
32
78
|
export declare function reticleConfigContent(framework: string, port: number | undefined, projectId?: string): string;
|
|
33
|
-
//# sourceMappingURL=snippets.d.ts.map
|