@reticlehq/server 2.3.0 → 2.5.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 +702 -0
- package/dist/bridge/auth-failure-reason.d.ts +19 -0
- package/dist/bridge/auth-failure-reason.js +29 -0
- package/dist/{bridge-security.d.ts → bridge/bridge-security.d.ts} +1 -1
- package/dist/{bridge-security.js → bridge/bridge-security.js} +1 -1
- package/dist/{bridge.d.ts → bridge/bridge.d.ts} +1 -1
- package/dist/{bridge.js → bridge/bridge.js} +105 -15
- package/dist/{bridge.test-harness.d.ts → bridge/bridge.test-harness.d.ts} +6 -11
- package/dist/{bridge.test-harness.js → bridge/bridge.test-harness.js} +21 -9
- package/dist/{pairing-token.js → bridge/pairing-token.js} +1 -1
- package/dist/capsule/capsule-store.d.ts +8 -3
- package/dist/capsule/capsule-store.js +7 -2
- package/dist/capsule/capsule.js +3 -3
- package/dist/capsule/causal-summary.d.ts +8 -0
- package/dist/capsule/causal-summary.js +22 -12
- package/dist/capsule/divergence.d.ts +9 -4
- package/dist/capsule/divergence.js +8 -8
- package/dist/capsule/predicate-to-links.js +11 -8
- package/dist/{cli-doctor.js → cli/cli-doctor.js} +9 -2
- package/dist/{cli-flow-commands.d.ts → cli/cli-flow-commands.d.ts} +2 -2
- package/dist/{cli-flow-commands.js → cli/cli-flow-commands.js} +15 -15
- package/dist/{cli-launch.d.ts → cli/cli-launch.d.ts} +32 -3
- package/dist/cli/cli-launch.js +171 -0
- package/dist/cli/cli-parse.d.ts +143 -0
- package/dist/{cli-parse.js → cli/cli-parse.js} +146 -65
- package/dist/{cli-port.d.ts → cli/cli-port.d.ts} +15 -0
- package/dist/{cli-port.js → cli/cli-port.js} +29 -8
- package/dist/cli/cli-update-commands.d.ts +4 -0
- package/dist/cli/cli-update-commands.js +93 -0
- package/dist/{cli-verify.js → cli/cli-verify.js} +14 -14
- package/dist/{cloud-cli.js → cli/cloud-cli.js} +29 -24
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +182 -93
- package/dist/cloud/cloud-config.d.ts +0 -1
- package/dist/cloud/cloud-config.js +9 -9
- package/dist/cloud/cloud-sync.d.ts +1 -7
- package/dist/cloud/cloud-sync.js +12 -12
- package/dist/crawl/crawl-empty.d.ts +16 -0
- package/dist/crawl/crawl-empty.js +24 -0
- package/dist/crawl/crawl-tools.js +4 -1
- package/dist/crawl/crawl.js +26 -7
- package/dist/daemon/daemon-resilience.d.ts +49 -0
- package/dist/daemon/daemon-resilience.js +191 -0
- package/dist/daemon/daemon-usefulness.d.ts +61 -0
- package/dist/daemon/daemon-usefulness.js +62 -0
- package/dist/{daemon.d.ts → daemon/daemon.d.ts} +33 -8
- package/dist/{daemon.js → daemon/daemon.js} +80 -48
- package/dist/daemon/idle-grace.d.ts +32 -0
- package/dist/daemon/idle-grace.js +41 -0
- package/dist/{idle-shutdown.d.ts → daemon/idle-shutdown.d.ts} +13 -0
- package/dist/{idle-shutdown.js → daemon/idle-shutdown.js} +27 -4
- package/dist/domain/domain-model.js +2 -2
- package/dist/events/body-failures.js +8 -8
- package/dist/events/contradictions.d.ts +1 -1
- package/dist/events/contradictions.js +60 -10
- package/dist/events/echo-mismatch.js +10 -10
- package/dist/events/event-filters.js +6 -6
- package/dist/events/json-salvage.d.ts +2 -1
- package/dist/events/json-salvage.js +6 -6
- package/dist/events/observed-in-window.d.ts +12 -0
- package/dist/events/observed-in-window.js +21 -0
- package/dist/events/predicate-eval.d.ts +43 -20
- package/dist/events/predicate-eval.js +159 -55
- package/dist/events/predicate.d.ts +2 -2
- package/dist/events/predicate.js +112 -35
- package/dist/events/reconcile.js +5 -5
- package/dist/events/ring-buffer.js +1 -1
- package/dist/events/stale-response.js +6 -6
- package/dist/events/testid-near-miss.d.ts +22 -0
- package/dist/events/testid-near-miss.js +33 -0
- package/dist/events/unit-mismatch.js +8 -8
- package/dist/flows/affected-tools.js +19 -4
- package/dist/flows/affected.js +1 -1
- package/dist/flows/annotate-target.d.ts +1 -0
- package/dist/flows/annotate-target.js +20 -0
- package/dist/flows/annotate-tools.js +25 -3
- package/dist/flows/annotate.js +17 -4
- package/dist/flows/assertion-integrity.d.ts +2 -1
- package/dist/flows/assertion-tiers-store.d.ts +3 -66
- package/dist/flows/assertion-tiers-store.js +2 -2
- package/dist/flows/attributed-failure.d.ts +17 -0
- package/dist/flows/attributed-failure.js +20 -0
- package/dist/flows/buddy-status.d.ts +2 -1
- package/dist/flows/buddy-status.js +2 -2
- package/dist/flows/coverage.d.ts +3 -2
- package/dist/flows/coverage.js +2 -2
- package/dist/flows/decision.d.ts +0 -6
- package/dist/flows/decision.js +64 -8
- package/dist/flows/empty-flow.d.ts +6 -0
- package/dist/flows/empty-flow.js +24 -0
- package/dist/flows/flake-store.d.ts +0 -1
- package/dist/flows/flake-store.js +1 -1
- package/dist/flows/flake.d.ts +2 -1
- package/dist/flows/flake.js +2 -2
- package/dist/flows/flow-classify.js +12 -0
- package/dist/flows/flow-replay-run.js +4 -4
- package/dist/flows/flow-replay.d.ts +5 -7
- package/dist/flows/flow-replay.js +114 -47
- package/dist/flows/flow-report.js +1 -1
- package/dist/flows/flow-scope.d.ts +1 -6
- package/dist/flows/flow-step-runners.d.ts +26 -6
- package/dist/flows/flow-step-runners.js +157 -6
- package/dist/flows/flow-success.js +20 -15
- package/dist/flows/flow-tools.js +67 -13
- package/dist/flows/flows.js +15 -11
- package/dist/flows/gate.d.ts +4 -3
- package/dist/flows/gate.js +1 -1
- package/dist/flows/heal-run.d.ts +0 -8
- package/dist/flows/heal-run.js +5 -5
- package/dist/flows/heal.js +3 -3
- package/dist/flows/predicate-to-expect.d.ts +38 -0
- package/dist/flows/predicate-to-expect.js +95 -0
- package/dist/flows/replay.d.ts +16 -1
- package/dist/flows/replay.js +58 -22
- package/dist/flows/role-anchor-nearest.d.ts +6 -0
- package/dist/flows/role-anchor-nearest.js +45 -0
- package/dist/flows/server-verify.d.ts +1 -1
- package/dist/flows/server-verify.js +5 -5
- package/dist/flows/verify-change-tools.js +32 -10
- package/dist/flows/verify-change-verdict.d.ts +15 -0
- package/dist/flows/verify-change-verdict.js +25 -0
- package/dist/flows/watch-batcher.d.ts +3 -2
- package/dist/honesty/already-true.d.ts +2 -0
- package/dist/honesty/already-true.js +31 -0
- package/dist/honesty/blind-spots.d.ts +16 -3
- package/dist/honesty/blind-spots.js +24 -12
- package/dist/honesty/honesty.d.ts +3 -2
- package/dist/honesty/honesty.js +4 -4
- package/dist/honesty/uncaptured-bodies.js +1 -1
- package/dist/honesty/unread-outcome.js +2 -2
- package/dist/honesty/verified.d.ts +22 -3
- package/dist/honesty/verified.js +48 -8
- package/dist/http-server.js +14 -7
- package/dist/hunt/hunt-report.d.ts +2 -1
- package/dist/hunt/hunt-report.js +2 -2
- package/dist/index.d.ts +8 -6
- package/dist/index.js +32 -25
- package/dist/init/agent-rules.d.ts +2 -1
- package/dist/init/agent-rules.js +45 -7
- package/dist/init/app-choice.d.ts +20 -0
- package/dist/init/app-choice.js +25 -0
- package/dist/init/astro-host.d.ts +21 -0
- package/dist/init/astro-host.js +27 -0
- package/dist/init/astro-patch.d.ts +16 -0
- package/dist/init/astro-patch.js +240 -0
- package/dist/init/capabilities.d.ts +17 -0
- package/dist/init/capabilities.js +54 -0
- package/dist/init/cra.d.ts +37 -0
- package/dist/init/cra.js +90 -0
- package/dist/init/cursor.js +39 -4
- package/dist/init/desktop-doctor.d.ts +3 -2
- package/dist/init/desktop-doctor.js +4 -4
- package/dist/init/detect.d.ts +26 -0
- package/dist/init/detect.js +78 -5
- package/dist/init/mcp-registered.d.ts +12 -0
- package/dist/init/mcp-registered.js +14 -0
- package/dist/init/mcp.d.ts +27 -2
- package/dist/init/mcp.js +40 -4
- package/dist/init/next-patch.d.ts +39 -0
- package/dist/init/next-patch.js +196 -0
- package/dist/init/node-io.js +48 -6
- package/dist/init/patch-kind.d.ts +20 -0
- package/dist/init/patch-kind.js +10 -0
- package/dist/init/plan-framework.d.ts +50 -0
- package/dist/init/plan-framework.js +341 -0
- package/dist/init/plan.d.ts +119 -6
- package/dist/init/plan.js +230 -131
- package/dist/init/project-id.d.ts +5 -9
- package/dist/init/project-id.js +10 -22
- package/dist/init/run.d.ts +22 -0
- package/dist/init/run.js +393 -28
- package/dist/init/slash-command.d.ts +27 -0
- package/dist/init/slash-command.js +61 -0
- package/dist/init/snippets.d.ts +41 -3
- package/dist/init/snippets.js +185 -10
- package/dist/init/vite-config.d.ts +4 -10
- package/dist/init/vite-config.js +15 -7
- package/dist/init/workspace-apps.d.ts +23 -0
- package/dist/init/workspace-apps.js +68 -0
- 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 -3
- package/dist/input/network-detail.js +43 -23
- package/dist/input/network-mock-tools.js +2 -2
- package/dist/input/network-mock.js +4 -4
- package/dist/input/real-input.js +8 -3
- package/dist/input/scroll-find.js +2 -2
- package/dist/input/scroll-tools.d.ts +0 -5
- package/dist/input/scroll-tools.js +11 -4
- package/dist/input/viewport-tools.js +2 -2
- package/dist/journal/ambient-store.d.ts +0 -2
- package/dist/journal/ambient-store.js +1 -1
- package/dist/journal/ambient.js +1 -1
- package/dist/journal/attach-journal.d.ts +2 -1
- package/dist/journal/deviation-report.js +6 -6
- package/dist/journal/deviation-service.js +1 -1
- package/dist/journal/envelope-store.d.ts +0 -2
- package/dist/journal/envelope-store.js +1 -1
- package/dist/journal/envelope.d.ts +2 -3
- package/dist/journal/envelope.js +3 -3
- package/dist/journal/journal-query.js +1 -1
- package/dist/journal/journal-recorder.d.ts +2 -1
- package/dist/journal/journal-recorder.js +2 -2
- package/dist/journal/rollups.js +9 -9
- package/dist/journal/session-end.d.ts +2 -1
- package/dist/journal/session-journal.js +4 -4
- package/dist/license/license.d.ts +0 -14
- package/dist/license/license.js +8 -8
- package/dist/log.d.ts +10 -0
- package/dist/log.js +11 -1
- package/dist/mcp/mcp-is-error.d.ts +13 -0
- package/dist/mcp/mcp-is-error.js +18 -0
- package/dist/mcp/mcp-outage.d.ts +31 -0
- package/dist/mcp/mcp-outage.js +48 -0
- package/dist/mcp/mcp-proxy.d.ts +124 -0
- package/dist/mcp/mcp-proxy.js +697 -0
- package/dist/{mcp.d.ts → mcp/mcp.d.ts} +13 -10
- package/dist/{mcp.js → mcp/mcp.js} +110 -35
- package/dist/mcp/proxy-handshake.d.ts +3 -0
- package/dist/mcp/proxy-handshake.js +54 -0
- package/dist/mcp/proxy-lifecycle.d.ts +64 -0
- package/dist/mcp/proxy-lifecycle.js +70 -0
- package/dist/mcp/tool-catalog-cache.d.ts +29 -0
- package/dist/mcp/tool-catalog-cache.js +55 -0
- package/dist/oracles/propose-consequences.d.ts +2 -1
- package/dist/oracles/propose-consequences.js +16 -11
- package/dist/oracles/self-instrument.d.ts +2 -1
- package/dist/oracles/self-instrument.js +1 -1
- package/dist/phenomena/phenomena.js +3 -3
- package/dist/platform.d.ts +16 -0
- package/dist/platform.js +16 -0
- package/dist/pool/playwright-launcher.d.ts +15 -2
- package/dist/pool/playwright-launcher.js +21 -2
- package/dist/project/fs-port.js +1 -1
- package/dist/project/project-tools.js +2 -2
- package/dist/runs/build-verification-run.js +1 -1
- package/dist/runs/repair-prompt.d.ts +0 -6
- package/dist/runs/repair-prompt.js +3 -3
- package/dist/runs/risk-classify.js +1 -1
- package/dist/runs/run-diff.d.ts +0 -2
- package/dist/runs/run-diff.js +3 -3
- package/dist/runs/run-tools.js +2 -2
- package/dist/runs/verification-sync.js +2 -2
- package/dist/runs/verify-http.js +1 -1
- package/dist/runs/verify-server.js +1 -1
- package/dist/session/command-timeout.d.ts +11 -3
- package/dist/session/command-timeout.js +2 -2
- package/dist/session/control-envelope.d.ts +6 -0
- package/dist/session/control-envelope.js +7 -1
- package/dist/session/dev-server-probe.d.ts +13 -0
- package/dist/session/dev-server-probe.js +52 -0
- package/dist/session/last-act.d.ts +17 -3
- package/dist/session/last-act.js +16 -4
- package/dist/session/live-control-tools.js +7 -2
- package/dist/session/live-control.js +1 -1
- package/dist/session/looks-like-dev-server.d.ts +14 -0
- package/dist/session/looks-like-dev-server.js +25 -0
- package/dist/session/no-session-diagnosis.d.ts +38 -0
- package/dist/session/no-session-diagnosis.js +70 -0
- package/dist/session/no-session-watch.d.ts +19 -0
- package/dist/session/no-session-watch.js +61 -0
- package/dist/session/observed-state.d.ts +4 -0
- package/dist/session/observed-state.js +19 -1
- package/dist/session/output-budget.js +1 -1
- package/dist/session/session-health.d.ts +8 -1
- package/dist/session/session-health.js +8 -7
- package/dist/session/session-info.d.ts +26 -7
- package/dist/session/session-info.js +42 -1
- package/dist/session/session-lease.d.ts +0 -11
- package/dist/session/session-lease.js +1 -1
- package/dist/session/session-manager.d.ts +3 -0
- package/dist/session/session-manager.js +58 -9
- package/dist/session/session-readiness.d.ts +1 -1
- package/dist/session/session-readiness.js +6 -1
- package/dist/session/session-reaper.js +1 -1
- package/dist/session/session-reconnect.d.ts +32 -0
- package/dist/session/session-reconnect.js +42 -0
- package/dist/session/session.d.ts +20 -2
- package/dist/session/session.js +76 -26
- package/dist/session/state-select.d.ts +1 -1
- package/dist/session/state-select.js +1 -1
- package/dist/status-payload.d.ts +19 -0
- package/dist/status-payload.js +11 -0
- package/dist/telemetry/argument-shape.js +10 -1
- package/dist/telemetry/browser-mode.d.ts +27 -0
- package/dist/telemetry/browser-mode.js +33 -0
- package/dist/telemetry/bug-found.d.ts +17 -21
- package/dist/telemetry/bug-found.js +120 -8
- package/dist/telemetry/cli-telemetry.d.ts +2 -12
- package/dist/telemetry/cli-telemetry.js +27 -4
- package/dist/telemetry/daemon-telemetry.d.ts +19 -0
- package/dist/telemetry/daemon-telemetry.js +12 -2
- package/dist/telemetry/dev-repo.js +4 -4
- package/dist/telemetry/error-fingerprint.js +21 -2
- package/dist/telemetry/feedback-cli.d.ts +1 -1
- package/dist/telemetry/feedback-cli.js +4 -4
- package/dist/telemetry/feedback-context.d.ts +22 -0
- package/dist/telemetry/feedback-context.js +41 -1
- package/dist/telemetry/feedback-delivery.d.ts +20 -0
- package/dist/telemetry/feedback-delivery.js +30 -0
- package/dist/telemetry/feedback-outbox.d.ts +22 -0
- package/dist/telemetry/feedback-outbox.js +87 -0
- package/dist/telemetry/feedback.d.ts +22 -1
- package/dist/telemetry/feedback.js +67 -8
- package/dist/telemetry/git-facts.js +1 -1
- package/dist/telemetry/session-metrics.d.ts +2 -0
- package/dist/telemetry/session-metrics.js +68 -6
- package/dist/telemetry/telemetry.d.ts +27 -2
- package/dist/telemetry/telemetry.js +119 -29
- package/dist/telemetry/verification-of.d.ts +22 -0
- package/dist/telemetry/verification-of.js +84 -0
- package/dist/tools/act-capsule.js +2 -2
- package/dist/tools/act-danger.d.ts +12 -0
- package/dist/tools/act-danger.js +20 -3
- package/dist/tools/act-helpers.js +4 -4
- package/dist/tools/act-tools.d.ts +0 -8
- package/dist/tools/act-tools.js +84 -115
- package/dist/tools/act-view.js +7 -7
- package/dist/tools/alias-args.d.ts +17 -0
- package/dist/tools/alias-args.js +25 -0
- package/dist/tools/assert-grade.js +9 -9
- package/dist/tools/assert-verdict.d.ts +3 -1
- package/dist/tools/assert-verdict.js +8 -5
- package/dist/tools/browser-tools.js +30 -11
- package/dist/tools/contract-tools.js +1 -1
- package/dist/tools/coverage-identity.d.ts +34 -0
- package/dist/tools/coverage-identity.js +46 -0
- package/dist/tools/coverage-tools.js +10 -14
- package/dist/tools/dynamic-tools.d.ts +2 -1
- package/dist/tools/dynamic-tools.js +90 -18
- package/dist/tools/error-recovery.d.ts +20 -2
- package/dist/tools/error-recovery.js +179 -4
- package/dist/tools/feedback-tools.d.ts +12 -1
- package/dist/tools/feedback-tools.js +28 -5
- package/dist/tools/invoke-tool.d.ts +0 -6
- package/dist/tools/invoke-tool.js +57 -32
- package/dist/tools/lease-hint.d.ts +17 -0
- package/dist/tools/lease-hint.js +24 -0
- package/dist/tools/lease-tools.js +6 -5
- package/dist/tools/merge-tools.d.ts +10 -1
- package/dist/tools/merge-tools.js +9 -3
- package/dist/tools/merged-name-redirect.d.ts +13 -0
- package/dist/tools/merged-name-redirect.js +55 -0
- package/dist/tools/navigate-result.d.ts +17 -0
- package/dist/tools/navigate-result.js +31 -0
- package/dist/tools/observe-tools.js +54 -20
- package/dist/tools/observed-nothing.d.ts +25 -0
- package/dist/tools/observed-nothing.js +33 -0
- package/dist/tools/query-paginate.js +2 -2
- package/dist/tools/query-shape.d.ts +18 -0
- package/dist/tools/query-shape.js +39 -0
- package/dist/tools/read-tools.js +85 -20
- package/dist/tools/real-input-attempt.d.ts +28 -0
- package/dist/tools/real-input-attempt.js +88 -0
- package/dist/tools/reconcile-tools.js +7 -7
- package/dist/tools/reload-result.d.ts +14 -0
- package/dist/tools/reload-result.js +29 -0
- package/dist/tools/snapshot-delta.d.ts +4 -5
- package/dist/tools/snapshot-delta.js +0 -0
- package/dist/tools/tool-kit.d.ts +8 -0
- package/dist/tools/tool-surface.d.ts +83 -0
- package/dist/tools/tool-surface.js +204 -0
- package/dist/tools/tools-helpers.js +6 -6
- package/dist/tools/tools.d.ts +15 -0
- package/dist/tools/tools.js +53 -17
- package/dist/tools/unadvertised-help.d.ts +5 -0
- package/dist/tools/unadvertised-help.js +39 -0
- package/dist/trace.d.ts +69 -0
- package/dist/trace.js +150 -0
- package/dist/update/nudge-credit.d.ts +4 -0
- package/dist/update/nudge-credit.js +53 -0
- package/dist/update/sdk-sync.d.ts +21 -0
- package/dist/update/sdk-sync.js +42 -0
- package/dist/update/update-checker.js +3 -3
- package/dist/update/update-nudge.d.ts +63 -6
- package/dist/update/update-nudge.js +128 -15
- package/dist/update/updater.d.ts +1 -9
- package/dist/update/updater.js +13 -8
- package/dist/version/peer-announce.d.ts +4 -0
- package/dist/version/peer-announce.js +30 -0
- package/dist/{server-version.js → version/server-version.js} +5 -1
- package/dist/version/version-nudge.d.ts +28 -0
- package/dist/version/version-nudge.js +40 -0
- package/dist/version/version-skew.d.ts +66 -0
- package/dist/version/version-skew.js +71 -0
- package/dist/visual/visual-diff.js +2 -2
- package/dist/visual/visual-tools.js +4 -4
- package/docs/agent-cheatsheet.md +85 -0
- package/docs/architecture.md +113 -0
- package/docs/benchmarks.md +255 -0
- package/docs/debugging.md +102 -0
- package/docs/deploy-checks.md +69 -0
- package/docs/desktop-apps.md +256 -0
- package/docs/enterprise.md +62 -0
- package/docs/fixtures.md +28 -0
- package/docs/flows.md +166 -0
- package/docs/getting-started.md +469 -0
- package/docs/human-control.md +63 -0
- package/docs/integration-patterns.md +171 -0
- package/docs/local-registry.md +126 -0
- package/docs/mint.json +61 -0
- package/docs/multi-agent-testing.md +55 -0
- package/docs/platform-integration.md +122 -0
- package/docs/telemetry-contract.md +214 -0
- package/docs/telemetry.md +184 -0
- package/docs/testing.md +82 -0
- package/docs/token-efficiency.md +80 -0
- package/docs/usage.md +1046 -0
- package/package.json +8 -5
- package/dist/cli-launch.js +0 -112
- package/dist/cli-parse.d.ts +0 -140
- package/dist/daemon-resilience.d.ts +0 -22
- package/dist/daemon-resilience.js +0 -85
- package/dist/mcp-proxy.d.ts +0 -35
- package/dist/mcp-proxy.js +0 -190
- package/dist/tools/profiles.d.ts +0 -37
- package/dist/tools/profiles.js +0 -139
- /package/dist/{pairing-token.d.ts → bridge/pairing-token.d.ts} +0 -0
- /package/dist/{token-auth.d.ts → bridge/token-auth.d.ts} +0 -0
- /package/dist/{token-auth.js → bridge/token-auth.js} +0 -0
- /package/dist/{cli-doctor.d.ts → cli/cli-doctor.d.ts} +0 -0
- /package/dist/{cli-verify.d.ts → cli/cli-verify.d.ts} +0 -0
- /package/dist/{cloud-cli.d.ts → cli/cloud-cli.d.ts} +0 -0
- /package/dist/{server-version.d.ts → version/server-version.d.ts} +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, conservative patchers for the two files a Next app needed edited BY HAND: `next.config.*`
|
|
3
|
+
* (wrap the export in `withReticle`) and `app/layout.tsx` (mount `<ReticleDev />`). Same contract as
|
|
4
|
+
* the Vite patcher — recognise the obvious shape, bail to `manual` on anything ambiguous, never
|
|
5
|
+
* half-edit. Leaving these manual is why Next connected 0% of the time: both edits are silent when
|
|
6
|
+
* skipped, and one of them is JSX.
|
|
7
|
+
*/
|
|
8
|
+
import { type SourcePatch } from './patch-kind.js';
|
|
9
|
+
/** Where the generated connect component goes, and how the mount file should import it. */
|
|
10
|
+
interface ReticleDevLocation {
|
|
11
|
+
/** Project-relative path to write. */
|
|
12
|
+
path: string;
|
|
13
|
+
/** What the mount file (`app/layout.*` or `pages/_app.*`) should import. */
|
|
14
|
+
importSpecifier: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Decide where the connect component lives, from the file that will mount it.
|
|
18
|
+
*
|
|
19
|
+
* Two things this gets wrong if hardcoded, both of which broke real apps:
|
|
20
|
+
*
|
|
21
|
+
* - **Pages Router routes on presence.** EVERY file under `pages/` is a route, so a component
|
|
22
|
+
* dropped there has no default export: `/reticle-dev` 500s and `next build` fails. It has to go
|
|
23
|
+
* somewhere that is not a route directory. App Router routes on FILENAME (`page`/`layout`/
|
|
24
|
+
* `route`), so an extra file beside the layout is inert and can stay there.
|
|
25
|
+
* - **The extension is not cosmetic.** A `.tsx` file in a JavaScript project makes Next auto-install
|
|
26
|
+
* TypeScript on the next `next dev` — and on Next 13 that takes its require-hook down with it, so
|
|
27
|
+
* the dev server never starts. The install then looks like it broke the app, because it did.
|
|
28
|
+
*/
|
|
29
|
+
export declare function reticleDevLocation(mountPath: string, typescript: boolean): ReticleDevLocation;
|
|
30
|
+
export declare function patchNextConfig(source: string): SourcePatch;
|
|
31
|
+
/**
|
|
32
|
+
* Pages Router has no root layout to mount into — `app/layout.tsx` does not exist — so the connect
|
|
33
|
+
* rides in `pages/_app` instead, wrapped in a fragment alongside the page. Without this, `init`
|
|
34
|
+
* wrote `app/reticle-dev.tsx` into a directory the app does not have and nothing ever connected,
|
|
35
|
+
* with no error to say so.
|
|
36
|
+
*/
|
|
37
|
+
export declare function patchPagesApp(source: string, importSpecifier?: string): SourcePatch;
|
|
38
|
+
export declare function patchRootLayout(source: string): SourcePatch;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, conservative patchers for the two files a Next app needed edited BY HAND: `next.config.*`
|
|
3
|
+
* (wrap the export in `withReticle`) and `app/layout.tsx` (mount `<ReticleDev />`). Same contract as
|
|
4
|
+
* the Vite patcher — recognise the obvious shape, bail to `manual` on anything ambiguous, never
|
|
5
|
+
* half-edit. Leaving these manual is why Next connected 0% of the time: both edits are silent when
|
|
6
|
+
* skipped, and one of them is JSX.
|
|
7
|
+
*/
|
|
8
|
+
import { PatchKind } from './patch-kind.js';
|
|
9
|
+
const RETICLE_NEXT_PACKAGE = '@reticlehq/next';
|
|
10
|
+
const NEXT_CONFIG_IMPORT = `import { withReticle } from '${RETICLE_NEXT_PACKAGE}';`;
|
|
11
|
+
const NEXT_CONFIG_REQUIRE = `const { withReticle } = require('${RETICLE_NEXT_PACKAGE}');`;
|
|
12
|
+
const RETICLE_DEV_COMPONENT = 'ReticleDev';
|
|
13
|
+
const RETICLE_DEV_BASENAME = 'reticle-dev';
|
|
14
|
+
/** Default import specifier: the component sits beside the file importing it (App Router). */
|
|
15
|
+
const RETICLE_DEV_SIBLING = `./${RETICLE_DEV_BASENAME}`;
|
|
16
|
+
const reticleDevImport = (specifier) => `import { ${RETICLE_DEV_COMPONENT} } from '${specifier}';`;
|
|
17
|
+
const RETICLE_DEV_IMPORT = reticleDevImport(RETICLE_DEV_SIBLING);
|
|
18
|
+
/**
|
|
19
|
+
* Decide where the connect component lives, from the file that will mount it.
|
|
20
|
+
*
|
|
21
|
+
* Two things this gets wrong if hardcoded, both of which broke real apps:
|
|
22
|
+
*
|
|
23
|
+
* - **Pages Router routes on presence.** EVERY file under `pages/` is a route, so a component
|
|
24
|
+
* dropped there has no default export: `/reticle-dev` 500s and `next build` fails. It has to go
|
|
25
|
+
* somewhere that is not a route directory. App Router routes on FILENAME (`page`/`layout`/
|
|
26
|
+
* `route`), so an extra file beside the layout is inert and can stay there.
|
|
27
|
+
* - **The extension is not cosmetic.** A `.tsx` file in a JavaScript project makes Next auto-install
|
|
28
|
+
* TypeScript on the next `next dev` — and on Next 13 that takes its require-hook down with it, so
|
|
29
|
+
* the dev server never starts. The install then looks like it broke the app, because it did.
|
|
30
|
+
*/
|
|
31
|
+
export function reticleDevLocation(mountPath, typescript) {
|
|
32
|
+
const ext = typescript ? '.tsx' : '.jsx';
|
|
33
|
+
const slash = mountPath.lastIndexOf('/');
|
|
34
|
+
const dir = -1 === slash ? '' : mountPath.slice(0, slash);
|
|
35
|
+
const isPagesRouter = /(^|\/)pages$/.test(dir);
|
|
36
|
+
if (!isPagesRouter) {
|
|
37
|
+
return {
|
|
38
|
+
path: `${'' === dir ? '' : `${dir}/`}${RETICLE_DEV_BASENAME}${ext}`,
|
|
39
|
+
importSpecifier: RETICLE_DEV_SIBLING,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Siblings of `pages/`, so `src/pages/_app.js` → `src/components/…` and `pages/_app.js` → `components/…`.
|
|
43
|
+
const parent = dir.slice(0, Math.max(0, dir.length - 'pages'.length));
|
|
44
|
+
return {
|
|
45
|
+
path: `${parent}components/${RETICLE_DEV_BASENAME}${ext}`,
|
|
46
|
+
importSpecifier: `../components/${RETICLE_DEV_BASENAME}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** The dev-guarded mount. Production strips it — `process.env.NODE_ENV` is inlined at build time. */
|
|
50
|
+
const RETICLE_DEV_MOUNT = `{process.env.NODE_ENV === 'development' ? <${RETICLE_DEV_COMPONENT} /> : null}`;
|
|
51
|
+
/**
|
|
52
|
+
* `export default ` / `module.exports = ` at the START of a line — the head of the assignment, not
|
|
53
|
+
* the whole statement. Where the exported expression ENDS is decided by `expressionEnd` below.
|
|
54
|
+
*
|
|
55
|
+
* These used to be `/…([\s\S]+?);?\s*$/`, which reads as "the expression, lazily". It is not: with
|
|
56
|
+
* no `m` flag the `$` is end-of-FILE and the trailing `;?\s*` is satisfiable only there, so the
|
|
57
|
+
* capture always ran to the last non-blank character of the file. Every config whose export was not
|
|
58
|
+
* the final statement got everything after it swallowed into the wrap. On a config exporting
|
|
59
|
+
* conditionally that produced an unbalanced paren — a syntax error, so `next dev` exited 1 while
|
|
60
|
+
* `init` reported the step as ✓ and the only symptom was "dev server never served".
|
|
61
|
+
*/
|
|
62
|
+
const ESM_DEFAULT_HEAD = /^[ \t]*export[ \t]+default[ \t]+/gm;
|
|
63
|
+
const CJS_EXPORT_HEAD = /^[ \t]*module\.exports[ \t]*=[ \t]*/gm;
|
|
64
|
+
/** The opening `<body ...>` tag, whose first child is where the mount goes. */
|
|
65
|
+
const BODY_OPEN_TAG = /<body(\s[^>]*)?>/g;
|
|
66
|
+
const NO_EXPORT_REASON = "couldn't find an `export default` or `module.exports` to wrap";
|
|
67
|
+
const NO_BODY_REASON = "couldn't find a single <body> tag to mount <ReticleDev /> inside";
|
|
68
|
+
/** Bracket pairs that keep an expression open. A `;` at depth 0 is what ends it. */
|
|
69
|
+
const OPENERS = '([{';
|
|
70
|
+
const CLOSERS = ')]}';
|
|
71
|
+
const LINE_COMMENT = '//';
|
|
72
|
+
const BLOCK_COMMENT_OPEN = '/*';
|
|
73
|
+
const BLOCK_COMMENT_CLOSE = '*/';
|
|
74
|
+
const QUOTES = '\'"`';
|
|
75
|
+
/**
|
|
76
|
+
* Index just past the exported expression that starts at `from` — the `;` that closes it, or end of
|
|
77
|
+
* file. Tracks bracket depth so a multi-line object or a nested call ends in the right place, and
|
|
78
|
+
* skips strings and comments so a `;` or a brace inside one cannot end it early.
|
|
79
|
+
*
|
|
80
|
+
* Deliberately a scanner and not a parser: `next.config.*` is arbitrary JS and this file's contract
|
|
81
|
+
* is to recognise the obvious shape or bail. It only has to be right about where ONE expression
|
|
82
|
+
* stops, and wrong is caught by the caller bailing to manual, never by a half-edit.
|
|
83
|
+
*/
|
|
84
|
+
function expressionEnd(source, from) {
|
|
85
|
+
let depth = 0;
|
|
86
|
+
for (let i = from; i < source.length; i++) {
|
|
87
|
+
const ch = source[i] ?? '';
|
|
88
|
+
const pair = source.slice(i, i + 2);
|
|
89
|
+
if (pair === LINE_COMMENT) {
|
|
90
|
+
const nl = source.indexOf('\n', i);
|
|
91
|
+
if (-1 === nl)
|
|
92
|
+
return source.length;
|
|
93
|
+
i = nl;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (pair === BLOCK_COMMENT_OPEN) {
|
|
97
|
+
const close = source.indexOf(BLOCK_COMMENT_CLOSE, i + 2);
|
|
98
|
+
i = -1 === close ? source.length : close + 1;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (QUOTES.includes(ch)) {
|
|
102
|
+
for (i++; i < source.length; i++) {
|
|
103
|
+
if ('\\' === source[i])
|
|
104
|
+
i++;
|
|
105
|
+
else if (source[i] === ch)
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (OPENERS.includes(ch))
|
|
111
|
+
depth++;
|
|
112
|
+
else if (CLOSERS.includes(ch)) {
|
|
113
|
+
// A closer at depth 0 belongs to an enclosing block, so the expression ended before it.
|
|
114
|
+
if (0 === depth)
|
|
115
|
+
return i;
|
|
116
|
+
depth--;
|
|
117
|
+
}
|
|
118
|
+
else if (';' === ch && 0 === depth)
|
|
119
|
+
return i;
|
|
120
|
+
}
|
|
121
|
+
return source.length;
|
|
122
|
+
}
|
|
123
|
+
/** Every top-level export assignment in the file, in source order. */
|
|
124
|
+
function exportSites(source, head) {
|
|
125
|
+
const sites = [];
|
|
126
|
+
for (const match of source.matchAll(head)) {
|
|
127
|
+
if (match.index === undefined)
|
|
128
|
+
continue;
|
|
129
|
+
const start = match.index + match[0].length;
|
|
130
|
+
sites.push({ start, end: expressionEnd(source, start) });
|
|
131
|
+
}
|
|
132
|
+
return sites;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Wrap every listed expression in `withReticle(...)`, leaving every other byte of the file alone.
|
|
136
|
+
*
|
|
137
|
+
* All of them, not just the first: a config can export CONDITIONALLY — Sentry-wrapped in one branch,
|
|
138
|
+
* plain in the other — and which branch runs is an environment variable's business, not ours.
|
|
139
|
+
* Wrapping each assignment is correct whichever one executes, and it is what turns that shape from a
|
|
140
|
+
* manual step (an app that boots and never connects) into a working install.
|
|
141
|
+
*
|
|
142
|
+
* Applied back-to-front so each splice leaves the earlier offsets valid.
|
|
143
|
+
*/
|
|
144
|
+
function wrapAll(source, sites) {
|
|
145
|
+
let out = source;
|
|
146
|
+
for (const site of [...sites].sort((a, b) => b.start - a.start)) {
|
|
147
|
+
out = `${out.slice(0, site.start)}withReticle(${out.slice(site.start, site.end)})${out.slice(site.end)}`;
|
|
148
|
+
}
|
|
149
|
+
return out;
|
|
150
|
+
}
|
|
151
|
+
export function patchNextConfig(source) {
|
|
152
|
+
if (source.includes(RETICLE_NEXT_PACKAGE))
|
|
153
|
+
return { kind: PatchKind.ALREADY };
|
|
154
|
+
const esm = exportSites(source, ESM_DEFAULT_HEAD);
|
|
155
|
+
if (esm.length > 0) {
|
|
156
|
+
return { kind: PatchKind.APPLY, code: `${NEXT_CONFIG_IMPORT}\n${wrapAll(source, esm)}` };
|
|
157
|
+
}
|
|
158
|
+
const cjs = exportSites(source, CJS_EXPORT_HEAD);
|
|
159
|
+
if (cjs.length > 0) {
|
|
160
|
+
return { kind: PatchKind.APPLY, code: `${NEXT_CONFIG_REQUIRE}\n${wrapAll(source, cjs)}` };
|
|
161
|
+
}
|
|
162
|
+
return { kind: PatchKind.MANUAL, reason: NO_EXPORT_REASON };
|
|
163
|
+
}
|
|
164
|
+
/** `<Component {...pageProps} />` — the one element every `pages/_app` renders. */
|
|
165
|
+
const PAGES_APP_COMPONENT = /<Component\b[^>]*\/>/g;
|
|
166
|
+
const NO_PAGES_COMPONENT_REASON = "couldn't find a single <Component {...pageProps} /> to wrap in pages/_app";
|
|
167
|
+
/**
|
|
168
|
+
* Pages Router has no root layout to mount into — `app/layout.tsx` does not exist — so the connect
|
|
169
|
+
* rides in `pages/_app` instead, wrapped in a fragment alongside the page. Without this, `init`
|
|
170
|
+
* wrote `app/reticle-dev.tsx` into a directory the app does not have and nothing ever connected,
|
|
171
|
+
* with no error to say so.
|
|
172
|
+
*/
|
|
173
|
+
export function patchPagesApp(source, importSpecifier = RETICLE_DEV_SIBLING) {
|
|
174
|
+
if (source.includes(RETICLE_DEV_COMPONENT))
|
|
175
|
+
return { kind: PatchKind.ALREADY };
|
|
176
|
+
const matches = [...source.matchAll(PAGES_APP_COMPONENT)];
|
|
177
|
+
const match = 1 === matches.length ? matches[0] : undefined;
|
|
178
|
+
if (match?.index === undefined)
|
|
179
|
+
return { kind: PatchKind.MANUAL, reason: NO_PAGES_COMPONENT_REASON };
|
|
180
|
+
const wrapped = `<>${RETICLE_DEV_MOUNT}${match[0]}</>`;
|
|
181
|
+
const code = source.slice(0, match.index) + wrapped + source.slice(match.index + match[0].length);
|
|
182
|
+
return { kind: PatchKind.APPLY, code: `${reticleDevImport(importSpecifier)}\n${code}` };
|
|
183
|
+
}
|
|
184
|
+
export function patchRootLayout(source) {
|
|
185
|
+
if (source.includes(RETICLE_DEV_COMPONENT))
|
|
186
|
+
return { kind: PatchKind.ALREADY };
|
|
187
|
+
const tags = [...source.matchAll(BODY_OPEN_TAG)];
|
|
188
|
+
// Exactly one <body> or we cannot tell which one actually renders — and mounting into the wrong
|
|
189
|
+
// one is the same silent no-connect as not mounting at all.
|
|
190
|
+
const tag = 1 === tags.length ? tags[0] : undefined;
|
|
191
|
+
if (tag?.index === undefined)
|
|
192
|
+
return { kind: PatchKind.MANUAL, reason: NO_BODY_REASON };
|
|
193
|
+
const insertAt = tag.index + tag[0].length;
|
|
194
|
+
const mounted = `${source.slice(0, insertAt)}${RETICLE_DEV_MOUNT}${source.slice(insertAt)}`;
|
|
195
|
+
return { kind: PatchKind.APPLY, code: `${RETICLE_DEV_IMPORT}\n${mounted}` };
|
|
196
|
+
}
|
package/dist/init/node-io.js
CHANGED
|
@@ -4,9 +4,27 @@
|
|
|
4
4
|
* command, not the MCP stdio transport.
|
|
5
5
|
*/
|
|
6
6
|
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';
|
|
7
|
+
import { NodePlatform } from '../platform.js';
|
|
7
8
|
import { join, dirname, isAbsolute } from 'node:path';
|
|
8
9
|
import { homedir } from 'node:os';
|
|
9
10
|
import { spawnSync } from 'node:child_process';
|
|
11
|
+
/**
|
|
12
|
+
* `shell: true` ONLY where it earns its keep.
|
|
13
|
+
*
|
|
14
|
+
* It exists so package-manager shims (`pnpm.cmd`, `npx.cmd`) resolve on Windows. On POSIX it buys
|
|
15
|
+
* nothing and costs correctness: under a shell, arguments are re-parsed, so a path containing a
|
|
16
|
+
* space — `/Users/ada/My Projects/app` — silently becomes two arguments and registration fails with
|
|
17
|
+
* no error anyone can read.
|
|
18
|
+
*/
|
|
19
|
+
function shellOpt() {
|
|
20
|
+
return NodePlatform.WINDOWS === process.platform ? { shell: true } : {};
|
|
21
|
+
}
|
|
22
|
+
/** Under a shell, quote what the shell would otherwise split. Windows only, where shell is required. */
|
|
23
|
+
function shellSafe(args) {
|
|
24
|
+
if (process.platform !== NodePlatform.WINDOWS)
|
|
25
|
+
return [...args];
|
|
26
|
+
return args.map((arg) => (/[\s"]/.test(arg) ? `"${arg.replace(/"/g, '\\"')}"` : arg));
|
|
27
|
+
}
|
|
10
28
|
export function buildNodeIo(cwd) {
|
|
11
29
|
// Project-relative by default; absolute paths (e.g. ~/.cursor/mcp.json) pass through unchanged.
|
|
12
30
|
const abs = (rel) => (isAbsolute(rel) ? rel : join(cwd, rel));
|
|
@@ -38,16 +56,40 @@ export function buildNodeIo(cwd) {
|
|
|
38
56
|
}
|
|
39
57
|
});
|
|
40
58
|
},
|
|
59
|
+
listDirs(rel) {
|
|
60
|
+
const path = abs(rel);
|
|
61
|
+
if (!existsSync(path))
|
|
62
|
+
return [];
|
|
63
|
+
try {
|
|
64
|
+
return readdirSync(path).filter((name) => statSync(join(path, name)).isDirectory());
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
listFiles(rel) {
|
|
71
|
+
const path = abs(rel);
|
|
72
|
+
if (!existsSync(path))
|
|
73
|
+
return [];
|
|
74
|
+
try {
|
|
75
|
+
return readdirSync(path).filter((name) => !statSync(join(path, name)).isDirectory());
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
scoped(rel) {
|
|
82
|
+
return buildNodeIo(abs(rel));
|
|
83
|
+
},
|
|
41
84
|
exec(command, args) {
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return result.status === 0;
|
|
85
|
+
// Inherit stdio so the install's own progress is visible to the user.
|
|
86
|
+
const result = spawnSync(command, shellSafe(args), { cwd, stdio: 'inherit', ...shellOpt() });
|
|
87
|
+
return 0 === result.status;
|
|
46
88
|
},
|
|
47
89
|
probe(command, args) {
|
|
48
90
|
// Quiet yes/no check (CLI availability, existing registration). Never throws.
|
|
49
|
-
const result = spawnSync(command,
|
|
50
|
-
return result.status
|
|
91
|
+
const result = spawnSync(command, shellSafe(args), { cwd, stdio: 'ignore', ...shellOpt() });
|
|
92
|
+
return 0 === result.status;
|
|
51
93
|
},
|
|
52
94
|
print(line) {
|
|
53
95
|
process.stdout.write(`${line}\n`);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The outcome vocabulary shared by every conservative source patcher in `init` (Vite config, Next
|
|
3
|
+
* config, Next root layout). One enum so a new patcher cannot invent a fourth status the reporter
|
|
4
|
+
* has no symbol for.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PatchKind: {
|
|
7
|
+
readonly APPLY: "apply";
|
|
8
|
+
readonly ALREADY: "already";
|
|
9
|
+
readonly MANUAL: "manual";
|
|
10
|
+
};
|
|
11
|
+
export type PatchKind = (typeof PatchKind)[keyof typeof PatchKind];
|
|
12
|
+
export type SourcePatch = {
|
|
13
|
+
kind: typeof PatchKind.APPLY;
|
|
14
|
+
code: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: typeof PatchKind.ALREADY;
|
|
17
|
+
} | {
|
|
18
|
+
kind: typeof PatchKind.MANUAL;
|
|
19
|
+
reason: string;
|
|
20
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The outcome vocabulary shared by every conservative source patcher in `init` (Vite config, Next
|
|
3
|
+
* config, Next root layout). One enum so a new patcher cannot invent a fourth status the reporter
|
|
4
|
+
* has no symbol for.
|
|
5
|
+
*/
|
|
6
|
+
export const PatchKind = {
|
|
7
|
+
APPLY: 'apply',
|
|
8
|
+
ALREADY: 'already',
|
|
9
|
+
MANUAL: 'manual',
|
|
10
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How each framework gets wired: the Vite plugin, the three Next files, the SvelteKit client hook.
|
|
3
|
+
* Split out of `plan.ts` — that file is the plan's SHAPE (statuses, ordering, the agent/MCP steps),
|
|
4
|
+
* this one is the per-framework detail, and they grow for different reasons.
|
|
5
|
+
*/
|
|
6
|
+
import { type PlanInput, type Step } from './plan.js';
|
|
7
|
+
/** What adding `reticle()` to a Vite config buys, which differs by framework. */
|
|
8
|
+
export declare const VITE_PLUGIN_DETAIL: {
|
|
9
|
+
/** A plain Vite app gets both halves from the plugin. */
|
|
10
|
+
readonly VITE: "add reticle() to plugins (also injects connect())";
|
|
11
|
+
/**
|
|
12
|
+
* SvelteKit renders through app.html, so the plugin's HTML injection never fires and connect()
|
|
13
|
+
* comes from the client hook instead. The plugin is still required: it is what stamps
|
|
14
|
+
* data-reticle-source into .svelte components, and without it every verdict on a SvelteKit app
|
|
15
|
+
* comes back with no file:line at all.
|
|
16
|
+
*/
|
|
17
|
+
readonly SVELTEKIT: "add reticle() to plugins (stamps data-reticle-source in .svelte components)";
|
|
18
|
+
};
|
|
19
|
+
export declare function viteSteps(input: PlanInput, detail?: string): Step[];
|
|
20
|
+
/**
|
|
21
|
+
* Next used to be the ONLY stack with hand edits left over — and both of them fail silently when
|
|
22
|
+
* skipped, so a Next user's app booted, connected to nothing, and said nothing about why. Both are
|
|
23
|
+
* now patched by the same conservative rules the Vite config gets.
|
|
24
|
+
*/
|
|
25
|
+
export declare function nextSteps(input: PlanInput): Step[];
|
|
26
|
+
/**
|
|
27
|
+
* SvelteKit is WIRED but not SUPPORTED, and the plan says so out loud.
|
|
28
|
+
*
|
|
29
|
+
* There is no SvelteKit app in `apps/` and no CI gate for one, so nothing proves this hook still
|
|
30
|
+
* registers a session — every other framework init offers (React, Next, Remix, Astro) has both. The
|
|
31
|
+
* wiring is real and may well work; what is missing is anything that would tell us when it stops.
|
|
32
|
+
* Silently emitting it reads as a support claim, which is the thing this project exists to not do.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Create React App: the connect goes in `src/index.tsx`, the token in `.env.development.local`.
|
|
36
|
+
*
|
|
37
|
+
* The previous plan pointed at `index.html`, which cannot work — CRA's is a static template the
|
|
38
|
+
* bundler never processes for modules. Reported from a real cra-redux-saga app.
|
|
39
|
+
*/
|
|
40
|
+
export declare function craSteps(input: PlanInput): Step[];
|
|
41
|
+
export declare function svelteKitSteps(input: PlanInput): Step[];
|
|
42
|
+
/**
|
|
43
|
+
* Astro: the config define + build target, and the connect script in ONE layout.
|
|
44
|
+
*
|
|
45
|
+
* Astro was the last gated stack left printing a recipe it did not apply. It still falls back to the
|
|
46
|
+
* printed one whenever the choice is not obvious — no config, no single layout, or a shape the
|
|
47
|
+
* patchers do not fully recognise — because which page or layout to instrument is a real decision
|
|
48
|
+
* and a half-edited build config is worse than a documented manual step.
|
|
49
|
+
*/
|
|
50
|
+
export declare function astroSteps(input: PlanInput): Step[];
|