quiver-cli 1.3.1 → 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 -52
- package/template/.agents/skills/apps/skybridge/SKILL.md +0 -52
- 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 -265
- package/template/.agents/skills/data/prisma-cli/references/agent-safety.md +0 -27
- package/template/.agents/skills/data/prisma-cli/references/complete.md +0 -22
- 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 -150
- 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 -139
- package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -39
- 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 -80
- 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 -221
- 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 -198
- 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 -46
- package/template/.agents/skills/design/impeccable/reference/animate.md +0 -89
- 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 -33
- 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 -44
- package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
- package/template/.agents/skills/design/impeccable/reference/critique.md +0 -806
- package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -37
- package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
- package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -38
- 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 -54
- 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 -111
- package/template/.agents/skills/design/impeccable/reference/init.md +0 -131
- package/template/.agents/skills/design/impeccable/reference/ios.md +0 -51
- 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 -145
- 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 -105
- 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 -46
- package/template/.agents/skills/design/impeccable/scripts/build-phase.mjs +0 -1022
- package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
- package/template/.agents/skills/design/impeccable/scripts/comp-diff.mjs +0 -391
- package/template/.agents/skills/design/impeccable/scripts/comp-spec.mjs +0 -513
- package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -814
- package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -325
- package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1565
- package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -473
- package/template/.agents/skills/design/impeccable/scripts/data/font-index-failures.json +0 -121
- package/template/.agents/skills/design/impeccable/scripts/data/font-index.json +0 -1
- package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
- package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -30
- package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2204
- package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -432
- package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -1311
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -9043
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -51
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -434
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -1319
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1241
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -288
- 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 -213
- 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 -635
- package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5681
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -596
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -127
- 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 -329
- package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -166
- package/template/.agents/skills/design/impeccable/scripts/font-match.mjs +0 -457
- package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -447
- package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -819
- package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -538
- package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2490
- package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -79
- 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 -396
- package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -880
- package/template/.agents/skills/design/impeccable/scripts/lib/font-fingerprint.mjs +0 -564
- package/template/.agents/skills/design/impeccable/scripts/lib/font-index.mjs +0 -130
- package/template/.agents/skills/design/impeccable/scripts/lib/hero-checks.mjs +0 -246
- package/template/.agents/skills/design/impeccable/scripts/lib/image-metrics.mjs +0 -306
- package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -640
- 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 -72
- package/template/.agents/skills/design/impeccable/scripts/lib/live-path-globs.mjs +0 -37
- package/template/.agents/skills/design/impeccable/scripts/lib/open-system-browser.mjs +0 -26
- package/template/.agents/skills/design/impeccable/scripts/lib/png.mjs +0 -281
- package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
- package/template/.agents/skills/design/impeccable/scripts/lib/raster.mjs +0 -194
- package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -369
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -485
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
- package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -533
- package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -149
- 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 -84
- 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/project-ignores.mjs +0 -139
- 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 -969
- package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1366
- package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -304
- package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -259
- package/template/.agents/skills/design/impeccable/scripts/live/ui-surfaces.mjs +0 -75
- package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
- package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -938
- package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
- package/template/.agents/skills/design/impeccable/scripts/live-browser-ignores.js +0 -242
- package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12551
- package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1200
- 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 -800
- 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 -463
- 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 -430
- package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
- package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1698
- 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 -334
- 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 -224
- package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -1783
- 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 -250
- 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 -593
- package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -150
- 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/create-dataset.md +0 -35
- package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -87
- package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
- package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -293
- 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/sdk-upgrade.md +0 -34
- package/template/.agents/skills/integrations/langfuse/references/setting-up-evals.md +0 -65
- package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -35
- package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
- package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -66
- package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -75
- 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 -78
- package/template/.agents/skills/supabase/SKILL.md +0 -149
- 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/LICENSE +0 -21
- package/template/.agents/skills/writing/humanizer/README.md +0 -209
- package/template/.agents/skills/writing/humanizer/SKILL.md +0 -456
- package/template/.agents/upstreams.json +0 -115
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
|
|
4
|
-
import { LIVE_CHROME_MOUNT_CONTRACT, LIVE_UI_SURFACES } from './ui-surfaces.mjs';
|
|
5
|
-
|
|
6
|
-
export const LIVE_BROWSER_SCRIPT_PARTS = Object.freeze([
|
|
7
|
-
Object.freeze({ name: 'session-state', file: 'live-browser-session.js' }),
|
|
8
|
-
Object.freeze({ name: 'dom-helpers', file: 'live-browser-dom.js' }),
|
|
9
|
-
Object.freeze({ name: 'project-ignores', file: 'live-browser-ignores.js' }),
|
|
10
|
-
Object.freeze({ name: 'browser-ui', file: 'live-browser.js' }),
|
|
11
|
-
]);
|
|
12
|
-
|
|
13
|
-
export function resolveLiveBrowserScriptParts(scriptsDir, parts = LIVE_BROWSER_SCRIPT_PARTS) {
|
|
14
|
-
if (!scriptsDir) throw new Error('scriptsDir is required');
|
|
15
|
-
return parts.map((part, index) => ({
|
|
16
|
-
...part,
|
|
17
|
-
index,
|
|
18
|
-
path: path.join(scriptsDir, part.file),
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function assertLiveBrowserScriptParts(parts, exists = fs.existsSync) {
|
|
23
|
-
for (const part of parts) {
|
|
24
|
-
if (!exists(part.path)) {
|
|
25
|
-
throw new Error(`Live browser script part missing: ${part.name} (${part.path})`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return parts;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function readLiveBrowserScriptParts(parts, readFile = (filePath) => fs.readFileSync(filePath, 'utf-8')) {
|
|
32
|
-
return parts.map((part) => ({
|
|
33
|
-
...part,
|
|
34
|
-
source: readFile(part.path),
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function assembleLiveBrowserScript({
|
|
39
|
-
token,
|
|
40
|
-
port,
|
|
41
|
-
vocabulary,
|
|
42
|
-
commandPrefix = '/',
|
|
43
|
-
appRoot = null,
|
|
44
|
-
parts,
|
|
45
|
-
// Defaulted rather than threaded through live-server.mjs: the browser bundle
|
|
46
|
-
// must always carry the canonical inventory, and a default makes that true by
|
|
47
|
-
// construction instead of by every caller remembering to pass it. Overridable
|
|
48
|
-
// so tests can assemble with a stand-in.
|
|
49
|
-
uiSurfaces = LIVE_UI_SURFACES,
|
|
50
|
-
mountContract = LIVE_CHROME_MOUNT_CONTRACT,
|
|
51
|
-
// Project detector waivers ({ ignoreRules, ignoreValues, roots }), read from
|
|
52
|
-
// .impeccable config by live-server.mjs. live-browser-ignores.js resolves
|
|
53
|
-
// them against the page when a detect scan starts, so the overlay filters
|
|
54
|
-
// the same findings the CLI and the edit hook do (issue #639).
|
|
55
|
-
projectIgnores = null,
|
|
56
|
-
}) {
|
|
57
|
-
const prelude =
|
|
58
|
-
`window.__IMPECCABLE_TOKEN__ = '${token}';\n` +
|
|
59
|
-
`window.__IMPECCABLE_PORT__ = ${port};\n` +
|
|
60
|
-
// Project identity for browser-side session storage. localStorage is
|
|
61
|
-
// keyed by ORIGIN, and two projects routinely share a localhost port
|
|
62
|
-
// across time; saved sessions carry this value so a resume can tell a
|
|
63
|
-
// foreign project's leftovers from its own.
|
|
64
|
-
`window.__IMPECCABLE_APP_ROOT__ = ${JSON.stringify(appRoot)};\n` +
|
|
65
|
-
`window.__IMPECCABLE_COMMAND_PREFIX__ = ${JSON.stringify(commandPrefix)};\n` +
|
|
66
|
-
// Canonical command vocabulary (values + labels + icons). live-browser.js
|
|
67
|
-
// builds its action picker from this instead of an inline copy.
|
|
68
|
-
`window.__IMPECCABLE_VOCAB__ = ${JSON.stringify(vocabulary)};\n` +
|
|
69
|
-
// Canonical Live chrome inventory from live/ui-surfaces.mjs. live-browser.js
|
|
70
|
-
// is a classic script and cannot import an ES module at runtime, so the list
|
|
71
|
-
// is serialized here and read off the global there. Node consumers (this
|
|
72
|
-
// repo's tests, the impeccable-site Live UI lab) import the module directly,
|
|
73
|
-
// which is what keeps the two from drifting.
|
|
74
|
-
`window.__IMPECCABLE_LIVE_UI_SURFACES__ = ${JSON.stringify(uiSurfaces)};\n` +
|
|
75
|
-
`window.__IMPECCABLE_LIVE_MOUNT_CONTRACT__ = ${JSON.stringify(mountContract)};\n` +
|
|
76
|
-
`window.__IMPECCABLE_PROJECT_IGNORES__ = ${JSON.stringify(projectIgnores)};\n`;
|
|
77
|
-
|
|
78
|
-
const body = parts.map((part) => {
|
|
79
|
-
const file = part.file || path.basename(part.path || '');
|
|
80
|
-
return `// --- impeccable live script part: ${part.name} (${file}) ---\n${part.source}`;
|
|
81
|
-
}).join('\n');
|
|
82
|
-
|
|
83
|
-
return prelude + body;
|
|
84
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// A preview whose variants live in component modules rather than in the user's
|
|
2
|
-
// source. These leave no markers in the real file, so a failed accept gives the
|
|
3
|
-
// agent nothing to hand-edit and must be reported as a failure rather than
|
|
4
|
-
// reference/live.md's manual-cleanup handoff. Kept as a set: any future
|
|
5
|
-
// component-module preview mode belongs here the day it lands.
|
|
6
|
-
const PREVIEW_MODES_WITHOUT_SOURCE_MARKERS = new Set([
|
|
7
|
-
'svelte-component',
|
|
8
|
-
]);
|
|
9
|
-
|
|
10
|
-
export function completionTypeForAcceptResult(eventType, acceptResult) {
|
|
11
|
-
if (eventType === 'discard') return acceptResult?.handled === true ? 'discarded' : 'error';
|
|
12
|
-
if (acceptResult?.handled === true && acceptResult?.carbonize === true) return 'agent_done';
|
|
13
|
-
if (acceptResult?.handled === true) return 'complete';
|
|
14
|
-
if (acceptResult?.mode === 'error') return 'error';
|
|
15
|
-
if (eventType === 'accept' && PREVIEW_MODES_WITHOUT_SOURCE_MARKERS.has(acceptResult?.previewMode)) return 'error';
|
|
16
|
-
return 'agent_done';
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function completionAckForAcceptResult(eventId, completionType, acceptResult) {
|
|
20
|
-
const ack = { ok: true, type: completionType };
|
|
21
|
-
if (acceptResult?.handled === true && acceptResult?.carbonize === true) {
|
|
22
|
-
ack.final = false;
|
|
23
|
-
ack.requiresComplete = true;
|
|
24
|
-
ack.nextCommand = `live-complete.mjs --id ${eventId}`;
|
|
25
|
-
ack.message = 'Carbonize cleanup must be verified, then the session must be completed explicitly before polling again.';
|
|
26
|
-
}
|
|
27
|
-
return ack;
|
|
28
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared event validation for the live helper server.
|
|
3
|
-
* Extracted for unit testing (insert mode rules).
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { canCreateInsert } from './insert-ui.mjs';
|
|
7
|
-
|
|
8
|
-
// The accepted protocol values come from the canonical vocabulary so the
|
|
9
|
-
// validator, the store, the server, and the picker UI never drift. Imported
|
|
10
|
-
// (not just re-exported) so they are also in scope for the validators below.
|
|
11
|
-
import { AGENT_PHASES, CLIENT_EVENT_TYPES, VISUAL_ACTIONS } from './vocabulary.mjs';
|
|
12
|
-
export { AGENT_PHASES, CLIENT_EVENT_TYPES, VISUAL_ACTIONS };
|
|
13
|
-
|
|
14
|
-
const AGENT_PHASE_SET = new Set(AGENT_PHASES);
|
|
15
|
-
|
|
16
|
-
const ID_PATTERN = /^[0-9a-f]{8}$/;
|
|
17
|
-
const VARIANT_ID_PATTERN = /^[0-9]{1,3}$/;
|
|
18
|
-
const INSERT_POSITIONS = new Set(['before', 'after']);
|
|
19
|
-
const FORBIDDEN_MANUAL_EDIT_TEXT_CHARS = ['<', '{', '}', '`'];
|
|
20
|
-
|
|
21
|
-
// Mount acknowledgements carry a module URL and a raw exception message from
|
|
22
|
-
// the page. Both are attacker-adjacent (any script on the page can POST them
|
|
23
|
-
// with the token it can already read), so they are length-capped before they
|
|
24
|
-
// reach the journal.
|
|
25
|
-
export const MOUNT_URL_MAX_LENGTH = 2000;
|
|
26
|
-
export const MOUNT_ERROR_MAX_LENGTH = 1000;
|
|
27
|
-
|
|
28
|
-
function isValidId(v) { return typeof v === 'string' && ID_PATTERN.test(v); }
|
|
29
|
-
function isValidVariantId(v) { return typeof v === 'string' && VARIANT_ID_PATTERN.test(v); }
|
|
30
|
-
|
|
31
|
-
function validateManualEditText(newText) {
|
|
32
|
-
if (typeof newText !== 'string') return null;
|
|
33
|
-
const hits = FORBIDDEN_MANUAL_EDIT_TEXT_CHARS.filter((char) => newText.includes(char));
|
|
34
|
-
return hits.length > 0 ? hits : null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function validateAnnotationFields(msg) {
|
|
38
|
-
if (msg.screenshotPath !== undefined && typeof msg.screenshotPath !== 'string') {
|
|
39
|
-
return 'generate: screenshotPath must be string';
|
|
40
|
-
}
|
|
41
|
-
if (msg.comments !== undefined && !Array.isArray(msg.comments)) {
|
|
42
|
-
return 'generate: comments must be array';
|
|
43
|
-
}
|
|
44
|
-
if (msg.strokes !== undefined && !Array.isArray(msg.strokes)) {
|
|
45
|
-
return 'generate: strokes must be array';
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function validateInsertGenerate(msg) {
|
|
51
|
-
if (!msg.insert || typeof msg.insert !== 'object') return 'generate: insert mode requires insert object';
|
|
52
|
-
if (!INSERT_POSITIONS.has(msg.insert.position)) return 'generate: insert.position must be before or after';
|
|
53
|
-
const anchor = msg.insert.anchor;
|
|
54
|
-
if (!anchor || typeof anchor !== 'object') return 'generate: insert.anchor required';
|
|
55
|
-
if (!anchor.tagName && !anchor.outerHTML && !(Array.isArray(anchor.classes) && anchor.classes.length)) {
|
|
56
|
-
return 'generate: insert.anchor needs tagName, classes, or outerHTML';
|
|
57
|
-
}
|
|
58
|
-
if (!msg.placeholder || typeof msg.placeholder !== 'object') return 'generate: insert mode requires placeholder dimensions';
|
|
59
|
-
if (!Number.isFinite(msg.placeholder.width) || !Number.isFinite(msg.placeholder.height)) {
|
|
60
|
-
return 'generate: placeholder width and height must be numbers';
|
|
61
|
-
}
|
|
62
|
-
if (!canCreateInsert({
|
|
63
|
-
prompt: msg.freeformPrompt,
|
|
64
|
-
comments: msg.comments,
|
|
65
|
-
strokes: msg.strokes,
|
|
66
|
-
})) {
|
|
67
|
-
return 'generate: insert requires freeformPrompt or annotations';
|
|
68
|
-
}
|
|
69
|
-
return validateAnnotationFields(msg);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function validateReplaceGenerate(msg) {
|
|
73
|
-
if (!msg.action || !VISUAL_ACTIONS.includes(msg.action)) return 'generate: invalid action';
|
|
74
|
-
if (!msg.element || !msg.element.outerHTML) return 'generate: missing element context';
|
|
75
|
-
return validateAnnotationFields(msg);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function validateManualEditEvent(msg, label) {
|
|
79
|
-
if (!isValidId(msg.id)) return label + ': missing or malformed id';
|
|
80
|
-
if (!msg.pageUrl || typeof msg.pageUrl !== 'string') return label + ': missing pageUrl';
|
|
81
|
-
if (!msg.element || typeof msg.element !== 'object') return label + ': missing element';
|
|
82
|
-
if (!Array.isArray(msg.ops) || msg.ops.length === 0) return label + ': ops must be non-empty array';
|
|
83
|
-
if (msg.ops.length > 100) return label + ': too many ops (max 100)';
|
|
84
|
-
for (const op of msg.ops) {
|
|
85
|
-
if (typeof op.ref !== 'string') return label + ': op.ref required';
|
|
86
|
-
if (typeof op.tag !== 'string') return label + ': op.tag required';
|
|
87
|
-
if (typeof op.originalText !== 'string') return label + ': op.originalText required';
|
|
88
|
-
if (op.deleted !== true && typeof op.newText !== 'string') {
|
|
89
|
-
return label + ': text op requires newText';
|
|
90
|
-
}
|
|
91
|
-
if (typeof op.newText === 'string') {
|
|
92
|
-
if (op.deleted !== true && op.newText.trim().length === 0) {
|
|
93
|
-
return label + ': newText cannot be empty';
|
|
94
|
-
}
|
|
95
|
-
const forbidden = validateManualEditText(op.newText);
|
|
96
|
-
if (forbidden) {
|
|
97
|
-
return label + ': newText cannot contain ' + forbidden.join(' ') + ' (plain text only; ask the AI to insert markup)';
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function isValidMountVariant(value) {
|
|
105
|
-
return Number.isInteger(value) && value >= 1 && value <= 999;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Mount acknowledgements are the browser's answer to "did the thing you
|
|
110
|
-
* published actually render". They are validated strictly because the render
|
|
111
|
-
* truth in the session snapshot is built from them: a malformed ack that slid
|
|
112
|
-
* through would report a variant as mounted that never was.
|
|
113
|
-
*/
|
|
114
|
-
function validateMountAck(msg) {
|
|
115
|
-
if (!isValidId(msg.id)) return 'variant_mounted: missing or malformed id';
|
|
116
|
-
if (!isValidMountVariant(msg.variant)) return 'variant_mounted: variant must be an integer 1-999';
|
|
117
|
-
if (msg.url !== undefined) {
|
|
118
|
-
if (typeof msg.url !== 'string') return 'variant_mounted: url must be string';
|
|
119
|
-
if (msg.url.length > MOUNT_URL_MAX_LENGTH) return 'variant_mounted: url too long';
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function validateMountFailure(msg) {
|
|
125
|
-
if (!isValidId(msg.id)) return 'variant_mount_failed: missing or malformed id';
|
|
126
|
-
if (!isValidMountVariant(msg.variant)) return 'variant_mount_failed: variant must be an integer 1-999';
|
|
127
|
-
if (typeof msg.url !== 'string' || !msg.url.trim()) return 'variant_mount_failed: url required';
|
|
128
|
-
if (msg.url.length > MOUNT_URL_MAX_LENGTH) return 'variant_mount_failed: url too long';
|
|
129
|
-
if (typeof msg.error !== 'string' || !msg.error.trim()) return 'variant_mount_failed: error required';
|
|
130
|
-
if (msg.error.length > MOUNT_ERROR_MAX_LENGTH) return 'variant_mount_failed: error too long';
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export function validateEvent(msg) {
|
|
135
|
-
if (!msg || typeof msg !== 'object' || !msg.type) return 'Missing or invalid message';
|
|
136
|
-
switch (msg.type) {
|
|
137
|
-
case 'generate':
|
|
138
|
-
if (!isValidId(msg.id)) return 'generate: missing or malformed id';
|
|
139
|
-
if (!Number.isInteger(msg.count) || msg.count < 1 || msg.count > 8) return 'generate: count must be 1-8';
|
|
140
|
-
if (msg.mode === 'insert') return validateInsertGenerate(msg);
|
|
141
|
-
return validateReplaceGenerate(msg);
|
|
142
|
-
case 'accept':
|
|
143
|
-
if (!isValidId(msg.id)) return 'accept: missing or malformed id';
|
|
144
|
-
if (!isValidVariantId(msg.variantId)) return 'accept: missing or malformed variantId';
|
|
145
|
-
if (msg.paramValues !== undefined) {
|
|
146
|
-
if (typeof msg.paramValues !== 'object' || msg.paramValues === null || Array.isArray(msg.paramValues)) {
|
|
147
|
-
return 'accept: paramValues must be an object';
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return null;
|
|
151
|
-
case 'discard':
|
|
152
|
-
return isValidId(msg.id) ? null : 'discard: missing or malformed id';
|
|
153
|
-
case 'checkpoint':
|
|
154
|
-
if (!isValidId(msg.id)) return 'checkpoint: missing or malformed id';
|
|
155
|
-
if (!Number.isInteger(msg.revision) || msg.revision < 0) return 'checkpoint: revision must be a non-negative integer';
|
|
156
|
-
if (msg.paramValues !== undefined && (typeof msg.paramValues !== 'object' || msg.paramValues === null || Array.isArray(msg.paramValues))) {
|
|
157
|
-
return 'checkpoint: paramValues must be an object';
|
|
158
|
-
}
|
|
159
|
-
return null;
|
|
160
|
-
case 'agent_phase':
|
|
161
|
-
if (!isValidId(msg.id)) return 'agent_phase: missing or malformed id';
|
|
162
|
-
if (typeof msg.phase !== 'string' || !msg.phase) return 'agent_phase: missing phase';
|
|
163
|
-
// The enum, not a shape pattern. A phase the browser cannot rank is a
|
|
164
|
-
// phase the progress bar cannot show, so accepting an arbitrary
|
|
165
|
-
// lowercase word only defers the failure to the UI.
|
|
166
|
-
if (!AGENT_PHASE_SET.has(msg.phase)) {
|
|
167
|
-
return 'agent_phase: unknown phase ' + msg.phase + ' (expected one of ' + AGENT_PHASES.join(', ') + ')';
|
|
168
|
-
}
|
|
169
|
-
if (msg.durationMs !== undefined && (!Number.isFinite(msg.durationMs) || msg.durationMs < 0)) {
|
|
170
|
-
return 'agent_phase: durationMs must be a non-negative number';
|
|
171
|
-
}
|
|
172
|
-
return null;
|
|
173
|
-
case 'variant_mounted':
|
|
174
|
-
return validateMountAck(msg);
|
|
175
|
-
case 'variant_mount_failed':
|
|
176
|
-
return validateMountFailure(msg);
|
|
177
|
-
case 'exit':
|
|
178
|
-
return null;
|
|
179
|
-
case 'prefetch':
|
|
180
|
-
if (!msg.pageUrl || typeof msg.pageUrl !== 'string') return 'prefetch: missing pageUrl';
|
|
181
|
-
return null;
|
|
182
|
-
case 'manual_edits':
|
|
183
|
-
return validateManualEditEvent(msg, 'manual_edits');
|
|
184
|
-
case 'steer':
|
|
185
|
-
if (!isValidId(msg.id)) return 'steer: missing or malformed id';
|
|
186
|
-
if (typeof msg.message !== 'string' || !msg.message.trim()) return 'steer: message required';
|
|
187
|
-
if (msg.message.length > 4000) return 'steer: message too long';
|
|
188
|
-
if (msg.pageUrl !== undefined && typeof msg.pageUrl !== 'string') return 'steer: pageUrl must be string';
|
|
189
|
-
return null;
|
|
190
|
-
case 'carbonize_cleanup':
|
|
191
|
-
if (!isValidId(msg.id)) return 'carbonize_cleanup: missing or malformed id';
|
|
192
|
-
if (!isValidId(msg.sessionId)) return 'carbonize_cleanup: missing or malformed sessionId';
|
|
193
|
-
if (!msg.file || typeof msg.file !== 'string') return 'carbonize_cleanup: missing file';
|
|
194
|
-
if (!isValidVariantId(String(msg.variantId))) return 'carbonize_cleanup: missing or malformed variantId';
|
|
195
|
-
return null;
|
|
196
|
-
default:
|
|
197
|
-
return 'Unknown event type: ' + msg.type;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Astro registry entry.
|
|
3
|
-
*
|
|
4
|
-
* Astro takes the generic tag strategy, with two Astro-specific values that
|
|
5
|
-
* used to sit as inline `endsWith('.astro')` branches in live-inject.mjs and
|
|
6
|
-
* live-wrap.mjs:
|
|
7
|
-
*
|
|
8
|
-
* injectScriptAttrs Astro processes <script> tags by default and rewrites
|
|
9
|
-
* src to its own bundled URL; is:inline opts out.
|
|
10
|
-
* styleMode Astro scopes component styles, which strips preview CSS
|
|
11
|
-
* off the generated variant wrappers, so preview rules are
|
|
12
|
-
* authored global and prefixed instead of @scope'd.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { findConfigFile, hasAnyDependency, literalConfigFiles } from './detect-utils.mjs';
|
|
16
|
-
|
|
17
|
-
const ASTRO_CONFIG_RE = /^astro\.config\.(?:js|mjs|cjs|ts|mts|cts)$/;
|
|
18
|
-
|
|
19
|
-
export function detectAstroProject(cwd = process.cwd(), config = null) {
|
|
20
|
-
const configFile = findConfigFile(cwd, ASTRO_CONFIG_RE);
|
|
21
|
-
if (configFile) return { configFile, via: 'config' };
|
|
22
|
-
if (hasAnyDependency(cwd, ['astro'])) return { configFile: null, via: 'package' };
|
|
23
|
-
// A tree of .astro entry templates with no astro.config still belongs to
|
|
24
|
-
// Astro; the configured injection target names it.
|
|
25
|
-
const entry = literalConfigFiles(cwd, config).find((rel) => rel.endsWith('.astro'));
|
|
26
|
-
if (entry) return { configFile: null, via: 'config-files', entry };
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export const astro = {
|
|
31
|
-
name: 'astro',
|
|
32
|
-
|
|
33
|
-
detect(cwd, config) {
|
|
34
|
-
return detectAstroProject(cwd, config);
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
inject: { kind: 'tag' },
|
|
38
|
-
|
|
39
|
-
source: {
|
|
40
|
-
extensions: ['.astro'],
|
|
41
|
-
preview: 'source',
|
|
42
|
-
styleMode: 'astro-global-prefixed',
|
|
43
|
-
styleTag: '<style is:inline data-impeccable-css="SESSION_ID">',
|
|
44
|
-
commentSyntax: 'html',
|
|
45
|
-
injectScriptAttrs: 'is:inline ',
|
|
46
|
-
},
|
|
47
|
-
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Small read-only probes the framework entries share.
|
|
3
|
-
*
|
|
4
|
-
* Every helper here is cheap and failure-tolerant: detection runs on every
|
|
5
|
-
* inject, against project trees that may be half-installed, so a missing or
|
|
6
|
-
* malformed file means "not this framework", never a throw.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import fs from 'node:fs';
|
|
10
|
-
import path from 'node:path';
|
|
11
|
-
|
|
12
|
-
/** Merged dependency names from package.json, or an empty object. */
|
|
13
|
-
export function readPackageDeps(cwd) {
|
|
14
|
-
const file = path.join(cwd, 'package.json');
|
|
15
|
-
try {
|
|
16
|
-
const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
17
|
-
return {
|
|
18
|
-
...(pkg.dependencies || {}),
|
|
19
|
-
...(pkg.devDependencies || {}),
|
|
20
|
-
...(pkg.peerDependencies || {}),
|
|
21
|
-
};
|
|
22
|
-
} catch {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function hasAnyDependency(cwd, names) {
|
|
28
|
-
const deps = readPackageDeps(cwd);
|
|
29
|
-
return names.some((name) => Boolean(deps[name]));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** First top-level file name matching `re`, or null. */
|
|
33
|
-
export function findConfigFile(cwd, re) {
|
|
34
|
-
try {
|
|
35
|
-
return fs.readdirSync(cwd, { withFileTypes: true })
|
|
36
|
-
.find((entry) => entry.isFile() && re.test(entry.name))
|
|
37
|
-
?.name ?? null;
|
|
38
|
-
} catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function fileExists(cwd, rel) {
|
|
44
|
-
try {
|
|
45
|
-
return fs.existsSync(path.join(cwd, rel));
|
|
46
|
-
} catch {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function firstExistingFile(cwd, candidates) {
|
|
52
|
-
for (const rel of candidates) {
|
|
53
|
-
if (fileExists(cwd, rel)) return rel;
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Literal (non-glob) entries of `config.files` that exist on disk. Several
|
|
60
|
-
* detectors read the configured injection target as a signal, which is how the
|
|
61
|
-
* bare fixtures — a tree of `.astro` files with no astro.config — still resolve
|
|
62
|
-
* to the framework that authored them.
|
|
63
|
-
*/
|
|
64
|
-
export function literalConfigFiles(cwd, config) {
|
|
65
|
-
const files = Array.isArray(config?.files) ? config.files : [];
|
|
66
|
-
const out = [];
|
|
67
|
-
for (const rel of files) {
|
|
68
|
-
if (typeof rel !== 'string' || rel.includes('*') || rel.includes('?')) continue;
|
|
69
|
-
const normalized = rel.split(path.sep).join('/');
|
|
70
|
-
if (fileExists(cwd, normalized)) out.push(normalized);
|
|
71
|
-
}
|
|
72
|
-
return out;
|
|
73
|
-
}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The live-mode framework registry.
|
|
3
|
-
*
|
|
4
|
-
* Before this existed, framework knowledge was smeared across live-inject.mjs
|
|
5
|
-
* (detection order, the Nuxt adapter, the Astro `is:inline` branch), the two
|
|
6
|
-
* adapter modules, and live-wrap.mjs (which extension gets component preview,
|
|
7
|
-
* which gets Astro's global-prefixed CSS, which gets JSX comments). Adding or
|
|
8
|
-
* fixing a framework meant reading all of them.
|
|
9
|
-
*
|
|
10
|
-
* One entry per framework now declares everything the live scripts need:
|
|
11
|
-
*
|
|
12
|
-
* name stable identifier; also the `adapter` value in inject JSON.
|
|
13
|
-
* detect (cwd, config) → falsy when this is not the project, otherwise
|
|
14
|
-
* a truthy project descriptor that apply/remove/artifacts read.
|
|
15
|
-
* Order in FRAMEWORKS is priority order; first truthy wins.
|
|
16
|
-
* inject { kind: 'adapter', apply, remove, ignorePatterns, artifacts,
|
|
17
|
-
* unpatch } for frameworks that server-render their document
|
|
18
|
-
* shell, or { kind: 'tag' } for the generic marker-wrapped
|
|
19
|
-
* <script src> block.
|
|
20
|
-
* source how live-wrap treats files this framework authors:
|
|
21
|
-
* extensions, preview ('source' | 'component'), styleMode,
|
|
22
|
-
* styleTag, commentSyntax, injectScriptAttrs. Anything omitted
|
|
23
|
-
* falls back to SOURCE_TRAIT_DEFAULTS.
|
|
24
|
-
*
|
|
25
|
-
* Two rules hold the thing together:
|
|
26
|
-
*
|
|
27
|
-
* 1. **Detection order is injection priority.** SvelteKit → Nuxt → TanStack
|
|
28
|
-
* Start → Astro → Next → Vite → static HTML, exactly the order
|
|
29
|
-
* live-inject.mjs used to hard-code. static-html always matches, so
|
|
30
|
-
* resolveFramework never returns null.
|
|
31
|
-
* 2. **Source traits resolve by file extension, not by project.** A SvelteKit
|
|
32
|
-
* project's injection target is `src/app.html`; a Vite app can contain
|
|
33
|
-
* `.astro` partials. live-wrap has always keyed these off the target file,
|
|
34
|
-
* and resolveSourceTraits keeps it that way. Several entries may claim the
|
|
35
|
-
* same extension (`.tsx` belongs to three); when they do, the values must
|
|
36
|
-
* agree, which tests/live-frameworks.test.mjs asserts.
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
|
-
import path from 'node:path';
|
|
40
|
-
|
|
41
|
-
import { sveltekit } from './sveltekit.mjs';
|
|
42
|
-
import { nuxt } from './nuxt.mjs';
|
|
43
|
-
import { tanstackStart } from './tanstack-start.mjs';
|
|
44
|
-
import { astro } from './astro.mjs';
|
|
45
|
-
import { nextjs } from './nextjs.mjs';
|
|
46
|
-
import { viteGeneric } from './vite-generic.mjs';
|
|
47
|
-
import { staticHtml } from './static-html.mjs';
|
|
48
|
-
import { TAG_PATCH_MARKERS, unpatchTagFile } from './tag-strategy.mjs';
|
|
49
|
-
|
|
50
|
-
/** Priority order. Do not reorder without re-reading rule 1 above. */
|
|
51
|
-
export const FRAMEWORKS = Object.freeze([
|
|
52
|
-
sveltekit,
|
|
53
|
-
nuxt,
|
|
54
|
-
tanstackStart,
|
|
55
|
-
astro,
|
|
56
|
-
nextjs,
|
|
57
|
-
viteGeneric,
|
|
58
|
-
staticHtml,
|
|
59
|
-
]);
|
|
60
|
-
|
|
61
|
-
export const PREVIEW_MODES = Object.freeze(['source', 'component']);
|
|
62
|
-
export const STYLE_MODES = Object.freeze(['scoped', 'astro-global-prefixed']);
|
|
63
|
-
export const COMMENT_SYNTAXES = Object.freeze(['html', 'jsx']);
|
|
64
|
-
export const INJECT_KINDS = Object.freeze(['adapter', 'tag']);
|
|
65
|
-
|
|
66
|
-
export const SOURCE_TRAIT_DEFAULTS = Object.freeze({
|
|
67
|
-
preview: 'source',
|
|
68
|
-
styleMode: 'scoped',
|
|
69
|
-
styleTag: '<style data-impeccable-css="SESSION_ID">',
|
|
70
|
-
commentSyntax: 'html',
|
|
71
|
-
injectScriptAttrs: '',
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
/** The patch kind the generic tag strategy records in the journal. */
|
|
75
|
-
export const TAG_PATCH_KIND = 'live-tag';
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Undo functions keyed by the `patch` value an artifact carries. Built from
|
|
79
|
-
* the entries so a new adapter registers its own undo alongside its apply.
|
|
80
|
-
*/
|
|
81
|
-
export const PATCH_UNDOERS = Object.freeze(Object.assign(
|
|
82
|
-
{ [TAG_PATCH_KIND]: unpatchTagFile },
|
|
83
|
-
...FRAMEWORKS.map((framework) => framework.inject.unpatch || {}),
|
|
84
|
-
));
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* First entry whose detect() matches. Returns { framework, project } where
|
|
88
|
-
* project is the detector's descriptor (adapters read it; tag frameworks
|
|
89
|
-
* mostly ignore it).
|
|
90
|
-
*/
|
|
91
|
-
export function resolveFramework(cwd = process.cwd(), config = null) {
|
|
92
|
-
for (const framework of FRAMEWORKS) {
|
|
93
|
-
const project = framework.detect(cwd, config);
|
|
94
|
-
if (project) return { framework, project };
|
|
95
|
-
}
|
|
96
|
-
// Unreachable while static-html stays terminal, but a caller that reorders
|
|
97
|
-
// the array should get a diagnosable null rather than a silent tag inject.
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Source-authoring traits for one file, merged over SOURCE_TRAIT_DEFAULTS.
|
|
103
|
-
* `framework` names the entry that claimed the extension, or null.
|
|
104
|
-
*/
|
|
105
|
-
export function resolveSourceTraits(filePath) {
|
|
106
|
-
const ext = path.extname(String(filePath || '')).toLowerCase();
|
|
107
|
-
for (const framework of FRAMEWORKS) {
|
|
108
|
-
const source = framework.source;
|
|
109
|
-
if (!source || !source.extensions.includes(ext)) continue;
|
|
110
|
-
const { extensions, ...traits } = source;
|
|
111
|
-
return { framework: framework.name, ...SOURCE_TRAIT_DEFAULTS, ...traits };
|
|
112
|
-
}
|
|
113
|
-
return { framework: null, ...SOURCE_TRAIT_DEFAULTS };
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Extra gitignore patterns the resolved framework needs beyond the static
|
|
118
|
-
* LIVE_IGNORE_PATTERNS list (paths that depend on a detected srcDir or file
|
|
119
|
-
* extension and so cannot be written down ahead of time).
|
|
120
|
-
*/
|
|
121
|
-
export function frameworkIgnorePatterns(resolved) {
|
|
122
|
-
const fn = resolved?.framework?.inject?.ignorePatterns;
|
|
123
|
-
return typeof fn === 'function' ? (fn(resolved.project) || []) : [];
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* The files this injection will create or patch, in journal-artifact form.
|
|
128
|
-
* Adapters declare their own; the tag strategy patches exactly the resolved
|
|
129
|
-
* config files.
|
|
130
|
-
*/
|
|
131
|
-
export function describeInjectArtifacts(resolved, { cwd = process.cwd(), files = [] } = {}) {
|
|
132
|
-
if (!resolved) return [];
|
|
133
|
-
const { framework, project } = resolved;
|
|
134
|
-
if (framework.inject.kind === 'adapter') {
|
|
135
|
-
return (framework.inject.artifacts?.({ cwd, project }) || []).filter((a) => a && a.path);
|
|
136
|
-
}
|
|
137
|
-
return files.map((file) => ({
|
|
138
|
-
kind: 'patched',
|
|
139
|
-
path: file,
|
|
140
|
-
patch: TAG_PATCH_KIND,
|
|
141
|
-
markers: [...TAG_PATCH_MARKERS],
|
|
142
|
-
}));
|
|
143
|
-
}
|