quiver-cli 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -239
- package/dist/cli.js +3163 -2040
- package/package.json +10 -11
- package/template/.agents/AGENTS.md +0 -26
- package/template/.agents/commands/cp.md +0 -108
- package/template/.agents/commands/next-setup.md +0 -1064
- package/template/.agents/commands/review.md +0 -68
- package/template/.agents/commands/terraform-readme.md +0 -38
- package/template/.agents/config.json +0 -80
- package/template/.agents/plugins/opencode/rtk.ts +0 -34
- package/template/.agents/skills/agent-browser/SKILL.md +0 -51
- package/template/.agents/skills/apps/skybridge/SKILL.md +0 -50
- package/template/.agents/skills/code/cleanup/SKILL.md +0 -26
- package/template/.agents/skills/code/improve/SKILL.md +0 -122
- package/template/.agents/skills/code/improve/references/audit-playbook.md +0 -130
- package/template/.agents/skills/code/improve/references/closing-the-loop.md +0 -96
- package/template/.agents/skills/code/improve/references/plan-template.md +0 -197
- package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +0 -3810
- package/template/.agents/skills/code/vercel-react-best-practices/README.md +0 -123
- package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +0 -149
- package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +0 -15
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +0 -46
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/template/.agents/skills/data/prisma-cli/SKILL.md +0 -247
- package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
- package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
- package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -148
- package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
- package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
- package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
- package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
- package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
- package/template/.agents/skills/data/prisma-cli/references/init.md +0 -136
- package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -38
- package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
- package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
- package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
- package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -78
- package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
- package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
- package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
- package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
- package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
- package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
- package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -208
- package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
- package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
- package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
- package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -194
- package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
- package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
- package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
- package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
- package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
- package/template/.agents/skills/design/impeccable/reference/android.md +0 -40
- package/template/.agents/skills/design/impeccable/reference/animate.md +0 -86
- package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
- package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
- package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -31
- package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
- package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
- package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -42
- package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
- package/template/.agents/skills/design/impeccable/reference/critique.md +0 -788
- package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -90
- package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
- package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -37
- package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
- package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
- package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
- package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -53
- package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
- package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
- package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
- package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -105
- package/template/.agents/skills/design/impeccable/reference/init.md +0 -125
- package/template/.agents/skills/design/impeccable/reference/ios.md +0 -45
- package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
- package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
- package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
- package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -105
- package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
- package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
- package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
- package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
- package/template/.agents/skills/design/impeccable/reference/polish.md +0 -97
- package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
- package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
- package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
- package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
- package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -47
- package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
- package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -558
- package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -334
- package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1450
- package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -213
- package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
- package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -21
- package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2023
- package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -438
- package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -983
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -8283
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -50
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -372
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -768
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1186
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -264
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
- package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
- package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -212
- package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
- package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -617
- package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5580
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -124
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -112
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
- package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -336
- package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -133
- package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -240
- package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -741
- package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -516
- package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2100
- package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -78
- package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
- package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
- package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -357
- package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -842
- package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -658
- package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
- package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -69
- package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
- package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -362
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -457
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -457
- package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -151
- package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
- package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
- package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
- package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
- package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
- package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -55
- package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
- package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
- package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
- package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
- package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
- package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
- package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
- package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
- package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
- package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
- package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
- package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
- package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
- package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
- package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -961
- package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1342
- package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -316
- package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -280
- package/template/.agents/skills/design/impeccable/scripts/live/ui-core.mjs +0 -180
- package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
- package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -954
- package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
- package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12512
- package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1244
- package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
- package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -683
- package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
- package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -503
- package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
- package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -429
- package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1661
- package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
- package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
- package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
- package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -359
- package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
- package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
- package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -221
- package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -932
- package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
- package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
- package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
- package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/design/shadcn/cli.md +0 -290
- package/template/.agents/skills/design/shadcn/customization.md +0 -209
- package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
- package/template/.agents/skills/design/shadcn/mcp.md +0 -105
- package/template/.agents/skills/design/shadcn/registry.md +0 -277
- package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
- package/template/.agents/skills/design/shadcn/rules/chat.md +0 -224
- package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
- package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
- package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
- package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
- package/template/.agents/skills/find-skills/SKILL.md +0 -141
- package/template/.agents/skills/hono/SKILL.md +0 -579
- package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -146
- package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
- package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
- package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -88
- package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
- package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -291
- package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
- package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
- package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -55
- package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
- package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -92
- package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -73
- package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
- package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
- package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
- package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
- package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
- package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
- package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
- package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
- package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
- package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
- package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
- package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
- package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
- package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
- package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
- package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
- package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
- package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
- package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
- package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
- package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
- package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
- package/template/.agents/skills/skill-creator/SKILL.md +0 -485
- package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
- package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
- package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
- package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
- package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
- package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
- package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
- package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
- package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
- package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
- package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
- package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
- package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
- package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
- package/template/.agents/skills/supabase/CHANGELOG.md +0 -71
- package/template/.agents/skills/supabase/SKILL.md +0 -145
- package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
- package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
- package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
- package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
- package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
- package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
- package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
- package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
- package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
- package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
- package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
- package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
- package/template/.agents/skills/writing/humanizer/SKILL.md +0 -621
- package/template/.agents/upstreams.json +0 -116
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crash-safe injection journal.
|
|
3
|
-
*
|
|
4
|
-
* Injection writes into the user's source tree: generated components, a Nuxt
|
|
5
|
-
* client plugin, marker blocks inside a layout, a patched CSP meta tag. The
|
|
6
|
-
* clean path removes all of it on stop. The unclean paths do not:
|
|
7
|
-
*
|
|
8
|
-
* - the dev server is SIGKILLed, so `--remove` never runs;
|
|
9
|
-
* - the project changes shape between start and stop (a nuxt.config appears,
|
|
10
|
-
* a package.json is edited), so detection resolves a different framework
|
|
11
|
-
* and the old framework's artifacts are nobody's business;
|
|
12
|
-
* - stop runs from a different directory than start did.
|
|
13
|
-
*
|
|
14
|
-
* So every inject records what it wrote to `.impeccable/live/inject-journal.json`
|
|
15
|
-
* before the next one runs, and both inject and `--remove` reconcile that
|
|
16
|
-
* record against the tree.
|
|
17
|
-
*
|
|
18
|
-
* **The journal is a claim of ownership, not a to-do list.** Healing an
|
|
19
|
-
* artifact only ever removes what still carries our marker; a generated file
|
|
20
|
-
* the user has since replaced, or a layout they have since un-patched by hand,
|
|
21
|
-
* is dropped from the journal untouched.
|
|
22
|
-
*
|
|
23
|
-
* **Path resolution is appRoot-relative.** Live entry scripts chdir onto the
|
|
24
|
-
* roots manifest (`enterLiveRoot`) before doing anything, so a journal written
|
|
25
|
-
* by a session started in the app root is found by a stop issued from any
|
|
26
|
-
* directory inside the repo.
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
import fs from 'node:fs';
|
|
30
|
-
import path from 'node:path';
|
|
31
|
-
import { PATCH_UNDOERS } from './index.mjs';
|
|
32
|
-
|
|
33
|
-
export const INJECT_JOURNAL_VERSION = 1;
|
|
34
|
-
export const INJECT_JOURNAL_RELPATH = '.impeccable/live/inject-journal.json';
|
|
35
|
-
|
|
36
|
-
export function injectJournalPath(cwd = process.cwd()) {
|
|
37
|
-
return path.join(cwd, ...INJECT_JOURNAL_RELPATH.split('/'));
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function readInjectJournal(cwd = process.cwd()) {
|
|
41
|
-
const file = injectJournalPath(cwd);
|
|
42
|
-
let raw;
|
|
43
|
-
try {
|
|
44
|
-
raw = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
45
|
-
} catch {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
if (!raw || typeof raw !== 'object' || !Array.isArray(raw.artifacts)) return null;
|
|
49
|
-
return raw;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export function clearInjectJournal(cwd = process.cwd()) {
|
|
53
|
-
try { fs.unlinkSync(injectJournalPath(cwd)); } catch { /* already gone */ }
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function writeInjectJournal(cwd, journal) {
|
|
57
|
-
const file = injectJournalPath(cwd);
|
|
58
|
-
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
59
|
-
fs.writeFileSync(file, JSON.stringify(journal, null, 2) + '\n', 'utf-8');
|
|
60
|
-
return file;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Record the artifacts an injection just wrote. Replaces any previous record:
|
|
65
|
-
* callers heal first (see healInjectJournal), so nothing survivable is lost.
|
|
66
|
-
*/
|
|
67
|
-
export function recordInjection(cwd = process.cwd(), { framework, port, artifacts = [] } = {}) {
|
|
68
|
-
if (!artifacts.length) {
|
|
69
|
-
clearInjectJournal(cwd);
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return writeInjectJournal(cwd, {
|
|
73
|
-
version: INJECT_JOURNAL_VERSION,
|
|
74
|
-
appRoot: path.resolve(cwd),
|
|
75
|
-
framework: framework || null,
|
|
76
|
-
port: Number.isFinite(Number(port)) ? Number(port) : null,
|
|
77
|
-
pid: process.pid,
|
|
78
|
-
recordedAt: new Date().toISOString(),
|
|
79
|
-
artifacts,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function normalizeRel(cwd, rel) {
|
|
84
|
-
return path.resolve(cwd, String(rel || '')).split(path.sep).join('/');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function readIfPresent(abs) {
|
|
88
|
-
try {
|
|
89
|
-
return fs.readFileSync(abs, 'utf-8');
|
|
90
|
-
} catch {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function pruneEmptyDirs(dir, stopDir) {
|
|
96
|
-
let current = path.resolve(dir);
|
|
97
|
-
const stop = path.resolve(stopDir);
|
|
98
|
-
while (current !== stop && current.startsWith(stop + path.sep)) {
|
|
99
|
-
try {
|
|
100
|
-
if (fs.readdirSync(current).length > 0) return;
|
|
101
|
-
fs.rmdirSync(current);
|
|
102
|
-
} catch {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
current = path.dirname(current);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function insideProject(cwd, abs) {
|
|
110
|
-
const rel = path.relative(path.resolve(cwd), path.resolve(abs));
|
|
111
|
-
return rel !== '' && !rel.startsWith('..') && !path.isAbsolute(rel);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function healArtifact(cwd, artifact, undoers) {
|
|
115
|
-
const abs = path.resolve(cwd, artifact.path);
|
|
116
|
-
// The journal is a project-local file, i.e. attacker-writable input in a
|
|
117
|
-
// cloned repo. Never touch anything outside the project tree, whatever the
|
|
118
|
-
// journal claims to own.
|
|
119
|
-
if (!insideProject(cwd, abs)) return { path: artifact.path, action: 'refused_outside_project' };
|
|
120
|
-
const content = readIfPresent(abs);
|
|
121
|
-
if (content === null) return { path: artifact.path, action: 'absent' };
|
|
122
|
-
|
|
123
|
-
if (artifact.kind === 'created') {
|
|
124
|
-
// Only reclaim a generated file that still carries our marker; a created
|
|
125
|
-
// artifact with no marker at all is unverifiable and stays untouched.
|
|
126
|
-
if (!artifact.marker || !content.includes(artifact.marker)) {
|
|
127
|
-
return { path: artifact.path, action: 'disowned' };
|
|
128
|
-
}
|
|
129
|
-
try { fs.rmSync(abs, { force: true }); } catch { return null; }
|
|
130
|
-
if (artifact.pruneTo !== undefined) {
|
|
131
|
-
const pruneRoot = path.resolve(cwd, artifact.pruneTo || '.');
|
|
132
|
-
if (insideProject(cwd, pruneRoot) || pruneRoot === path.resolve(cwd)) {
|
|
133
|
-
pruneEmptyDirs(path.dirname(abs), pruneRoot);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return { path: artifact.path, action: 'removed' };
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
if (artifact.kind === 'patched') {
|
|
140
|
-
const markers = Array.isArray(artifact.markers) ? artifact.markers : [];
|
|
141
|
-
// No marker left means the patch is already gone; never run an undo over
|
|
142
|
-
// a file we no longer recognize (the undoers normalize whitespace).
|
|
143
|
-
if (markers.length && !markers.some((marker) => content.includes(marker))) {
|
|
144
|
-
return { path: artifact.path, action: 'disowned' };
|
|
145
|
-
}
|
|
146
|
-
const undo = undoers[artifact.patch];
|
|
147
|
-
if (typeof undo !== 'function') return null;
|
|
148
|
-
const next = undo(content);
|
|
149
|
-
if (next === content) return { path: artifact.path, action: 'disowned' };
|
|
150
|
-
try { fs.writeFileSync(abs, next, 'utf-8'); } catch { return null; }
|
|
151
|
-
return { path: artifact.path, action: 'unpatched' };
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Reconcile the journal against the tree.
|
|
159
|
-
*
|
|
160
|
-
* `keep` is the set of paths the current operation legitimately owns — the
|
|
161
|
-
* artifacts an inject is about to (re)write. Everything else in the journal is
|
|
162
|
-
* an orphan of a session that is gone, and gets healed. This keeps a repeat
|
|
163
|
-
* inject byte-idempotent: the artifacts it is about to rewrite are kept, not
|
|
164
|
-
* torn down and rebuilt.
|
|
165
|
-
*
|
|
166
|
-
* Returns `{ healed, kept }`. `healed` lists only artifacts whose file was
|
|
167
|
-
* actually changed or removed, so callers can stay silent when nothing was
|
|
168
|
-
* orphaned. Idempotent: a second call finds an empty journal.
|
|
169
|
-
*/
|
|
170
|
-
export function healInjectJournal(cwd = process.cwd(), { keep = [], undoers = PATCH_UNDOERS } = {}) {
|
|
171
|
-
const journal = readInjectJournal(cwd);
|
|
172
|
-
if (!journal) return { healed: [], kept: [] };
|
|
173
|
-
|
|
174
|
-
const keepSet = new Set(keep.map((rel) => normalizeRel(cwd, rel)));
|
|
175
|
-
const healed = [];
|
|
176
|
-
const kept = [];
|
|
177
|
-
|
|
178
|
-
for (const artifact of journal.artifacts) {
|
|
179
|
-
if (!artifact || typeof artifact.path !== 'string') continue;
|
|
180
|
-
if (keepSet.has(normalizeRel(cwd, artifact.path))) {
|
|
181
|
-
kept.push(artifact);
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
const outcome = healArtifact(cwd, artifact, undoers);
|
|
185
|
-
if (outcome && (outcome.action === 'removed' || outcome.action === 'unpatched')) {
|
|
186
|
-
healed.push(outcome);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (kept.length) {
|
|
191
|
-
writeInjectJournal(cwd, { ...journal, artifacts: kept });
|
|
192
|
-
} else {
|
|
193
|
-
clearInjectJournal(cwd);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return { healed, kept };
|
|
197
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Next.js registry entry.
|
|
3
|
-
*
|
|
4
|
-
* Next takes the generic tag strategy: the App Router's root layout renders
|
|
5
|
-
* `<html>…<body>` in JSX, so the marker-wrapped script block goes in there
|
|
6
|
-
* verbatim. Nothing about injection differs from a plain Vite app, which is
|
|
7
|
-
* why live-inject.mjs never had a Next branch. The entry exists so the
|
|
8
|
-
* registry can name what it is looking at.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { fileExists, findConfigFile, hasAnyDependency } from './detect-utils.mjs';
|
|
12
|
-
|
|
13
|
-
const NEXT_CONFIG_RE = /^next\.config\.(?:js|mjs|cjs|ts|mts|cts)$/;
|
|
14
|
-
|
|
15
|
-
const ROUTER_ENTRY_CANDIDATES = [
|
|
16
|
-
'app/layout.tsx', 'app/layout.jsx', 'app/layout.ts', 'app/layout.js',
|
|
17
|
-
'src/app/layout.tsx', 'src/app/layout.jsx', 'src/app/layout.ts', 'src/app/layout.js',
|
|
18
|
-
'pages/_app.tsx', 'pages/_app.jsx', 'pages/_app.ts', 'pages/_app.js',
|
|
19
|
-
'pages/_document.tsx', 'pages/_document.jsx',
|
|
20
|
-
'src/pages/_app.tsx', 'src/pages/_app.jsx',
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
export function detectNextProject(cwd = process.cwd()) {
|
|
24
|
-
const configFile = findConfigFile(cwd, NEXT_CONFIG_RE);
|
|
25
|
-
if (configFile) return { configFile, via: 'config' };
|
|
26
|
-
if (hasAnyDependency(cwd, ['next'])) return { configFile: null, via: 'package' };
|
|
27
|
-
// Next's file conventions are distinctive enough to stand alone: a root
|
|
28
|
-
// `app/layout.*` or `pages/_app.*` is not a shape other bundlers produce.
|
|
29
|
-
const entry = ROUTER_ENTRY_CANDIDATES.find((rel) => fileExists(cwd, rel));
|
|
30
|
-
if (entry) return { configFile: null, via: 'router-entry', entry };
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export const nextjs = {
|
|
35
|
-
name: 'nextjs',
|
|
36
|
-
|
|
37
|
-
detect(cwd) {
|
|
38
|
-
return detectNextProject(cwd);
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
inject: { kind: 'tag' },
|
|
42
|
-
|
|
43
|
-
source: {
|
|
44
|
-
extensions: ['.tsx', '.jsx'],
|
|
45
|
-
preview: 'source',
|
|
46
|
-
styleMode: 'scoped',
|
|
47
|
-
commentSyntax: 'jsx',
|
|
48
|
-
},
|
|
49
|
-
};
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nuxt registry entry, and the Nuxt adapter itself.
|
|
3
|
-
*
|
|
4
|
-
* A script element placed in app.vue is compiled as Vue-rendered DOM and is
|
|
5
|
-
* not executed. Nuxt instead auto-discovers client plugins. Keep the adapter
|
|
6
|
-
* generated, dev-only, and outside user-authored source: Live creates one
|
|
7
|
-
* marked .client.ts plugin on start and removes it on stop.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import fs from 'node:fs';
|
|
11
|
-
import path from 'node:path';
|
|
12
|
-
import { buildLiveScriptSrc } from './script-src.mjs';
|
|
13
|
-
import { findConfigFile } from './detect-utils.mjs';
|
|
14
|
-
|
|
15
|
-
export const NUXT_PLUGIN_MARKER = 'impeccable-live-nuxt-plugin';
|
|
16
|
-
export const NUXT_PLUGIN_NAME = 'impeccable-live.client.ts';
|
|
17
|
-
|
|
18
|
-
const NUXT_CONFIG_RE = /^nuxt\.config\.(?:js|mjs|cjs|ts|mts|cts)$/;
|
|
19
|
-
|
|
20
|
-
export function detectNuxtProject(cwd = process.cwd()) {
|
|
21
|
-
const configFile = findConfigFile(cwd, NUXT_CONFIG_RE);
|
|
22
|
-
if (!configFile) return null;
|
|
23
|
-
|
|
24
|
-
const config = fs.readFileSync(path.join(cwd, configFile), 'utf-8');
|
|
25
|
-
const literalSrcDir = config.match(/\bsrcDir\s*:\s*(['"])([^'"]+)\1/);
|
|
26
|
-
let appDir = '';
|
|
27
|
-
if (literalSrcDir) {
|
|
28
|
-
const candidate = literalSrcDir[2]
|
|
29
|
-
.replace(/\\/g, '/')
|
|
30
|
-
.replace(/^\.\//, '')
|
|
31
|
-
.replace(/\/+$/, '');
|
|
32
|
-
const normalized = path.posix.normalize(candidate);
|
|
33
|
-
if (normalized !== '..' && !normalized.startsWith('../') && !path.isAbsolute(normalized)) {
|
|
34
|
-
appDir = normalized === '.' ? '' : normalized;
|
|
35
|
-
}
|
|
36
|
-
} else if (
|
|
37
|
-
fs.existsSync(path.join(cwd, 'app', 'app.vue'))
|
|
38
|
-
|| fs.existsSync(path.join(cwd, 'app', 'pages'))
|
|
39
|
-
) {
|
|
40
|
-
appDir = 'app';
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const pluginFile = [appDir, 'plugins', NUXT_PLUGIN_NAME].filter(Boolean).join('/');
|
|
44
|
-
return { configFile, appDir, pluginFile };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function buildNuxtPlugin(port, token) {
|
|
48
|
-
return `/* ${NUXT_PLUGIN_MARKER} */
|
|
49
|
-
const liveSrc = '${buildLiveScriptSrc(port, token)}';
|
|
50
|
-
const liveSelector = 'script[data-impeccable-live-nuxt]';
|
|
51
|
-
|
|
52
|
-
export default defineNuxtPlugin(() => {
|
|
53
|
-
if (!import.meta.dev || typeof document === 'undefined') return;
|
|
54
|
-
|
|
55
|
-
const expectedSrc = new URL(liveSrc, window.location.href).href;
|
|
56
|
-
let script = document.querySelector(liveSelector);
|
|
57
|
-
if (script?.src === expectedSrc) return;
|
|
58
|
-
script?.remove();
|
|
59
|
-
|
|
60
|
-
script = document.createElement('script');
|
|
61
|
-
script.src = liveSrc;
|
|
62
|
-
script.async = true;
|
|
63
|
-
script.dataset.impeccableLiveNuxt = '';
|
|
64
|
-
document.head.appendChild(script);
|
|
65
|
-
|
|
66
|
-
import.meta.hot?.dispose(() => {
|
|
67
|
-
if (script?.isConnected) script.remove();
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
/* /${NUXT_PLUGIN_MARKER} */
|
|
71
|
-
`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function applyNuxtLiveAdapter({ cwd = process.cwd(), port, token, project = detectNuxtProject(cwd) }) {
|
|
75
|
-
if (!project) return { error: 'nuxt_not_detected' };
|
|
76
|
-
const absFile = path.join(cwd, project.pluginFile);
|
|
77
|
-
const existing = fs.existsSync(absFile) ? fs.readFileSync(absFile, 'utf-8') : null;
|
|
78
|
-
if (existing !== null && !existing.includes(NUXT_PLUGIN_MARKER)) {
|
|
79
|
-
return {
|
|
80
|
-
file: project.pluginFile,
|
|
81
|
-
error: 'nuxt_plugin_conflict',
|
|
82
|
-
hint: `${project.pluginFile} already exists and is not managed by Impeccable Live`,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const content = buildNuxtPlugin(port, token);
|
|
87
|
-
fs.mkdirSync(path.dirname(absFile), { recursive: true });
|
|
88
|
-
if (content !== existing) fs.writeFileSync(absFile, content, 'utf-8');
|
|
89
|
-
return {
|
|
90
|
-
file: project.pluginFile,
|
|
91
|
-
inserted: true,
|
|
92
|
-
changed: content !== existing,
|
|
93
|
-
devOnly: true,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function removeNuxtLiveAdapter({ cwd = process.cwd(), project = detectNuxtProject(cwd) }) {
|
|
98
|
-
if (!project) return { error: 'nuxt_not_detected' };
|
|
99
|
-
const absFile = path.join(cwd, project.pluginFile);
|
|
100
|
-
if (!fs.existsSync(absFile)) {
|
|
101
|
-
return { file: project.pluginFile, removed: false, note: 'no adapter present' };
|
|
102
|
-
}
|
|
103
|
-
const content = fs.readFileSync(absFile, 'utf-8');
|
|
104
|
-
if (!content.includes(NUXT_PLUGIN_MARKER)) {
|
|
105
|
-
return {
|
|
106
|
-
file: project.pluginFile,
|
|
107
|
-
removed: false,
|
|
108
|
-
error: 'nuxt_plugin_conflict',
|
|
109
|
-
hint: `${project.pluginFile} is not managed by Impeccable Live`,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
fs.unlinkSync(absFile);
|
|
113
|
-
const pluginDir = path.dirname(absFile);
|
|
114
|
-
if (fs.readdirSync(pluginDir).length === 0) fs.rmdirSync(pluginDir);
|
|
115
|
-
return { file: project.pluginFile, removed: true };
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export const nuxt = {
|
|
119
|
-
name: 'nuxt',
|
|
120
|
-
|
|
121
|
-
detect(cwd) {
|
|
122
|
-
return detectNuxtProject(cwd);
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
inject: {
|
|
126
|
-
kind: 'adapter',
|
|
127
|
-
|
|
128
|
-
apply({ cwd, port, token, project }) {
|
|
129
|
-
return applyNuxtLiveAdapter({ cwd, port, token, project });
|
|
130
|
-
},
|
|
131
|
-
|
|
132
|
-
remove({ cwd, project }) {
|
|
133
|
-
return removeNuxtLiveAdapter({ cwd, project });
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
// The plugin path depends on the resolved srcDir, so it cannot live in the
|
|
137
|
-
// static ignore list the way the SvelteKit paths do.
|
|
138
|
-
ignorePatterns(project) {
|
|
139
|
-
return project?.pluginFile ? [project.pluginFile] : [];
|
|
140
|
-
},
|
|
141
|
-
|
|
142
|
-
artifacts({ project }) {
|
|
143
|
-
if (!project?.pluginFile) return [];
|
|
144
|
-
return [{
|
|
145
|
-
kind: 'created',
|
|
146
|
-
path: project.pluginFile,
|
|
147
|
-
marker: NUXT_PLUGIN_MARKER,
|
|
148
|
-
// Mirrors removeNuxtLiveAdapter: the generated `plugins/` directory
|
|
149
|
-
// goes when it empties, its parent stays.
|
|
150
|
-
pruneTo: path.posix.dirname(path.posix.dirname(project.pluginFile)),
|
|
151
|
-
}];
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
source: {
|
|
156
|
-
extensions: ['.vue'],
|
|
157
|
-
preview: 'source',
|
|
158
|
-
styleMode: 'scoped',
|
|
159
|
-
commentSyntax: 'html',
|
|
160
|
-
},
|
|
161
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The one place that builds the `/live.js` URL the browser loads.
|
|
3
|
-
*
|
|
4
|
-
* Every injection path needs it (the generic script tag, the Nuxt client
|
|
5
|
-
* plugin, the SvelteKit root component, the TanStack mount component), and a
|
|
6
|
-
* separate module keeps that shared leaf free of import cycles: the framework
|
|
7
|
-
* entries import it, and nothing here imports a framework entry.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* When a token is supplied it rides as a `?token=...` query param so the
|
|
12
|
-
* server's token-gated /live.js handler authorizes the fetch.
|
|
13
|
-
*/
|
|
14
|
-
export function buildLiveScriptSrc(port, token) {
|
|
15
|
-
const base = 'http://localhost:' + port + '/live.js';
|
|
16
|
-
return token ? base + '?token=' + encodeURIComponent(token) : base;
|
|
17
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Static HTML registry entry: the terminal fallback.
|
|
3
|
-
*
|
|
4
|
-
* Hand-written pages, a multi-page site emitted by a generator, anything with
|
|
5
|
-
* no bundler config at the app root. `detect` always matches, so this entry
|
|
6
|
-
* must stay last in FRAMEWORKS. Its behavior is the plain tag strategy, which
|
|
7
|
-
* is what live-inject.mjs did for every unrecognized project before the
|
|
8
|
-
* registry existed.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export const staticHtml = {
|
|
12
|
-
name: 'static-html',
|
|
13
|
-
|
|
14
|
-
detect() {
|
|
15
|
-
return { via: 'fallback' };
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
inject: { kind: 'tag' },
|
|
19
|
-
|
|
20
|
-
source: {
|
|
21
|
-
extensions: ['.html', '.htm'],
|
|
22
|
-
preview: 'source',
|
|
23
|
-
styleMode: 'scoped',
|
|
24
|
-
commentSyntax: 'html',
|
|
25
|
-
},
|
|
26
|
-
};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SvelteKit registry entry.
|
|
3
|
-
*
|
|
4
|
-
* Detection and the apply/remove pair are the existing adapter's
|
|
5
|
-
* (`../sveltekit-adapter.mjs`); this file only declares them to the registry
|
|
6
|
-
* and names the artifacts the journal has to be able to heal.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
SVELTE_LAYOUT_MARKER_OPEN,
|
|
11
|
-
SVELTE_LIVE_ROOT_COMPONENT,
|
|
12
|
-
applySvelteKitLiveAdapter,
|
|
13
|
-
detectSvelteKitProject,
|
|
14
|
-
removeSvelteKitLiveAdapter,
|
|
15
|
-
unpatchSvelteLayout,
|
|
16
|
-
} from '../sveltekit-adapter.mjs';
|
|
17
|
-
|
|
18
|
-
export const sveltekit = {
|
|
19
|
-
name: 'sveltekit',
|
|
20
|
-
|
|
21
|
-
detect(cwd, config) {
|
|
22
|
-
return detectSvelteKitProject(cwd, config);
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
inject: {
|
|
26
|
-
kind: 'adapter',
|
|
27
|
-
|
|
28
|
-
apply({ cwd, port, token, config }) {
|
|
29
|
-
return applySvelteKitLiveAdapter({ cwd, port, token, config });
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
remove({ cwd, config }) {
|
|
33
|
-
return removeSvelteKitLiveAdapter({ cwd, config });
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
// The generated root component and the `src/lib/impeccable/` runtime paths
|
|
37
|
-
// are already in the static LIVE_IGNORE_PATTERNS list, so nothing extra.
|
|
38
|
-
ignorePatterns() {
|
|
39
|
-
return [];
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
artifacts({ project }) {
|
|
43
|
-
return [
|
|
44
|
-
{
|
|
45
|
-
kind: 'created',
|
|
46
|
-
path: SVELTE_LIVE_ROOT_COMPONENT,
|
|
47
|
-
marker: 'impeccable-live-root',
|
|
48
|
-
pruneTo: 'src',
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
kind: 'patched',
|
|
52
|
-
path: project?.layoutFile || 'src/routes/+layout.svelte',
|
|
53
|
-
patch: 'sveltekit-layout',
|
|
54
|
-
markers: [SVELTE_LAYOUT_MARKER_OPEN],
|
|
55
|
-
},
|
|
56
|
-
];
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
unpatch: {
|
|
60
|
-
'sveltekit-layout': unpatchSvelteLayout,
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
source: {
|
|
65
|
-
extensions: ['.svelte'],
|
|
66
|
-
// Svelte resets component-local state on markup HMR updates, so variants
|
|
67
|
-
// are mounted from generated components rather than written into the route.
|
|
68
|
-
preview: 'component',
|
|
69
|
-
commentSyntax: 'html',
|
|
70
|
-
},
|
|
71
|
-
};
|