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,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser-side DOM helpers for Impeccable live mode.
|
|
3
|
-
*
|
|
4
|
-
* Kept separate from live-browser.js so future browser script parts can share
|
|
5
|
-
* chrome mounting, lookup, focus, and picker helpers without depending on the
|
|
6
|
-
* full overlay UI bundle.
|
|
7
|
-
*/
|
|
8
|
-
(function (root) {
|
|
9
|
-
'use strict';
|
|
10
|
-
if (!root) return;
|
|
11
|
-
|
|
12
|
-
function createLiveBrowserDomHelpers({
|
|
13
|
-
prefix,
|
|
14
|
-
skipTags,
|
|
15
|
-
document: doc = root.document,
|
|
16
|
-
css = root.CSS,
|
|
17
|
-
crypto = root.crypto,
|
|
18
|
-
} = {}) {
|
|
19
|
-
if (!prefix) throw new Error('prefix required');
|
|
20
|
-
if (!doc) throw new Error('document required');
|
|
21
|
-
const tagsToSkip = skipTags || new Set();
|
|
22
|
-
|
|
23
|
-
function own(el) {
|
|
24
|
-
return el && (el.id?.startsWith(prefix) || el.closest?.('[id^="' + prefix + '"]'));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function pickable(el) {
|
|
28
|
-
if (!el || el.nodeType !== 1) return false;
|
|
29
|
-
if (tagsToSkip.has(String(el.tagName || '').toLowerCase())) return false;
|
|
30
|
-
if (own(el)) return false;
|
|
31
|
-
const r = el.getBoundingClientRect();
|
|
32
|
-
return r.width >= 20 && r.height >= 20;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function desc(el) {
|
|
36
|
-
if (!el) return '';
|
|
37
|
-
let s = el.tagName.toLowerCase();
|
|
38
|
-
if (el.id) s += '#' + el.id;
|
|
39
|
-
else if (el.classList.length) s += '.' + [...el.classList].slice(0, 2).join('.');
|
|
40
|
-
return s;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function rectIsUsableAnchor(rect) {
|
|
44
|
-
return !!rect && rect.width > 0.5 && rect.height > 0.5;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function makeFrozenAnchor(el) {
|
|
48
|
-
if (!el || !el.getBoundingClientRect) return null;
|
|
49
|
-
const r = el.getBoundingClientRect();
|
|
50
|
-
if (!rectIsUsableAnchor(r)) return null;
|
|
51
|
-
const rect = {
|
|
52
|
-
x: r.x, y: r.y,
|
|
53
|
-
top: r.top, left: r.left,
|
|
54
|
-
right: r.right, bottom: r.bottom,
|
|
55
|
-
width: r.width, height: r.height,
|
|
56
|
-
};
|
|
57
|
-
return {
|
|
58
|
-
__impeccableFrozenAnchor: true,
|
|
59
|
-
tagName: el.tagName || 'DIV',
|
|
60
|
-
id: el.id || '',
|
|
61
|
-
classList: el.classList ? [...el.classList] : [],
|
|
62
|
-
hasAttribute: () => false,
|
|
63
|
-
getBoundingClientRect: () => rect,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function id8() {
|
|
68
|
-
if (crypto?.randomUUID) return crypto.randomUUID().replace(/-/g, '').slice(0, 8);
|
|
69
|
-
return (Math.random().toString(16).slice(2) + Date.now().toString(16)).slice(0, 8);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function cssId(id) {
|
|
73
|
-
if (css?.escape) return css.escape(id);
|
|
74
|
-
return String(id).replace(/([ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, '\\$1');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function liveUiRoot() {
|
|
78
|
-
const uiRoot = root.__IMPECCABLE_LIVE_UI_ROOT__;
|
|
79
|
-
if (uiRoot && typeof uiRoot.appendChild === 'function') return uiRoot;
|
|
80
|
-
return doc.body;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function uiAppend(el) {
|
|
84
|
-
liveUiRoot().appendChild(el);
|
|
85
|
-
return el;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function uiAppendStyle(styleEl) {
|
|
89
|
-
const uiRoot = liveUiRoot();
|
|
90
|
-
if (uiRoot && uiRoot !== doc.body) uiRoot.appendChild(styleEl);
|
|
91
|
-
else doc.head.appendChild(styleEl);
|
|
92
|
-
return styleEl;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function uiGetById(id) {
|
|
96
|
-
const uiRoot = liveUiRoot();
|
|
97
|
-
if (uiRoot?.getElementById) {
|
|
98
|
-
const found = uiRoot.getElementById(id);
|
|
99
|
-
if (found) return found;
|
|
100
|
-
}
|
|
101
|
-
if (uiRoot?.querySelector) {
|
|
102
|
-
const found = uiRoot.querySelector('#' + cssId(id));
|
|
103
|
-
if (found) return found;
|
|
104
|
-
}
|
|
105
|
-
return doc.getElementById(id);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function activeElementDeep() {
|
|
109
|
-
let active = doc.activeElement;
|
|
110
|
-
while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
|
|
111
|
-
return active;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function defangOutsideHandlers(rootEl, { setPointerEvents = true } = {}) {
|
|
115
|
-
if (!rootEl) return;
|
|
116
|
-
if (setPointerEvents) {
|
|
117
|
-
rootEl.style.setProperty('pointer-events', 'auto', 'important');
|
|
118
|
-
}
|
|
119
|
-
const stop = (e) => e.stopPropagation();
|
|
120
|
-
rootEl.addEventListener('pointerdown', stop);
|
|
121
|
-
rootEl.addEventListener('mousedown', stop);
|
|
122
|
-
rootEl.addEventListener('focusin', stop);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
own,
|
|
127
|
-
pickable,
|
|
128
|
-
desc,
|
|
129
|
-
rectIsUsableAnchor,
|
|
130
|
-
makeFrozenAnchor,
|
|
131
|
-
id8,
|
|
132
|
-
cssId,
|
|
133
|
-
liveUiRoot,
|
|
134
|
-
uiAppend,
|
|
135
|
-
uiAppendStyle,
|
|
136
|
-
uiGetById,
|
|
137
|
-
activeElementDeep,
|
|
138
|
-
defangOutsideHandlers,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
root.__IMPECCABLE_LIVE_DOM__ = {
|
|
143
|
-
version: 1,
|
|
144
|
-
createLiveBrowserDomHelpers,
|
|
145
|
-
};
|
|
146
|
-
})(typeof window !== 'undefined' ? window : globalThis);
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser-side resolution of project detector waivers for Impeccable live mode.
|
|
3
|
-
*
|
|
4
|
-
* The live server serializes `.impeccable/config.json` + `config.local.json`
|
|
5
|
-
* detector ignores (plus the served-root prefixes from the inject config's
|
|
6
|
-
* `files` globs) into `window.__IMPECCABLE_PROJECT_IGNORES__`. This part
|
|
7
|
-
* resolves that config against the current page's URL path when a detect scan
|
|
8
|
-
* starts, so the overlay suppresses the same findings the CLI and the edit
|
|
9
|
-
* hook do (issue #639).
|
|
10
|
-
*
|
|
11
|
-
* Mirrors filterDetectionFindings in cli/lib/impeccable-config.mjs:
|
|
12
|
-
* 1. `ignoreRules` suppress a rule project-wide.
|
|
13
|
-
* 2. `ignoreValues` entries with `value: "*"` suppress their rule in the
|
|
14
|
-
* files their globs name. The CLI never applies an unscoped wildcard
|
|
15
|
-
* (isIgnoredFindingValue returns false for it), so neither does this.
|
|
16
|
-
* 3. Remaining `ignoreValues` entries match on the finding's own value;
|
|
17
|
-
* those are forwarded as `disabledValues` for the detector bundle to
|
|
18
|
-
* apply where the findings are assembled.
|
|
19
|
-
* 4. `ignoreFiles` globs that name the page waive it wholesale: the
|
|
20
|
-
* resolver reports `skipScan: true` and the detector answers the scan
|
|
21
|
-
* with zero findings, mirroring shouldIgnoreDetectionFile in the CLI
|
|
22
|
-
* and the edit hook's own ignoreFiles gate.
|
|
23
|
-
*
|
|
24
|
-
* `pageFiles`, when the server could resolve it, lists the real project
|
|
25
|
-
* files the inject config serves. A URL that suffix-matches exactly one of
|
|
26
|
-
* them takes that file as its only project identity; an ambiguous or absent
|
|
27
|
-
* match falls back to the served-root common ancestor below.
|
|
28
|
-
*
|
|
29
|
-
* Known gap, unchanged from PR #645: framework apps inject into source files
|
|
30
|
-
* (src/routes/about/+page.svelte) while scans see route URLs (/about), so
|
|
31
|
-
* entries scoped to source or asset paths never match a page candidate and
|
|
32
|
-
* are dropped. That shows the finding, which is the conservative direction.
|
|
33
|
-
*
|
|
34
|
-
* Kept separate from live-browser.js so the glob and page-scope logic can be
|
|
35
|
-
* unit tested in Node (tests/live-browser-ignores.test.mjs) without the full
|
|
36
|
-
* overlay UI bundle.
|
|
37
|
-
*/
|
|
38
|
-
(function (root) {
|
|
39
|
-
'use strict';
|
|
40
|
-
if (!root) return;
|
|
41
|
-
|
|
42
|
-
// Keep in step with normalizeIgnoreRule / normalizeIgnoreValue in
|
|
43
|
-
// cli/lib/impeccable-config.mjs.
|
|
44
|
-
function normalizeIgnoreRule(rule) {
|
|
45
|
-
return String(rule || '').trim().toLowerCase();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function normalizeIgnoreValue(value) {
|
|
49
|
-
return String(value || '')
|
|
50
|
-
.trim()
|
|
51
|
-
.replace(/^["']|["']$/g, '')
|
|
52
|
-
.replace(/\+/g, ' ')
|
|
53
|
-
.replace(/\s+/g, ' ')
|
|
54
|
-
.toLowerCase();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Glob -> RegExp. Supports `**`, `*`, `?`, and `{a,b}` alternation.
|
|
58
|
-
// Keep in step with globToRegex in cli/lib/impeccable-config.mjs.
|
|
59
|
-
function globToRegex(glob) {
|
|
60
|
-
let re = '^';
|
|
61
|
-
let i = 0;
|
|
62
|
-
while (i < glob.length) {
|
|
63
|
-
const c = glob[i];
|
|
64
|
-
if (c === '*') {
|
|
65
|
-
if (glob[i + 1] === '*') {
|
|
66
|
-
re += '.*';
|
|
67
|
-
i += 2;
|
|
68
|
-
if (glob[i] === '/') i += 1;
|
|
69
|
-
} else {
|
|
70
|
-
re += '[^/]*';
|
|
71
|
-
i += 1;
|
|
72
|
-
}
|
|
73
|
-
} else if (c === '?') {
|
|
74
|
-
re += '[^/]';
|
|
75
|
-
i += 1;
|
|
76
|
-
} else if (c === '{') {
|
|
77
|
-
const end = glob.indexOf('}', i);
|
|
78
|
-
if (end === -1) { re += '\\{'; i += 1; continue; }
|
|
79
|
-
const parts = glob.slice(i + 1, end).split(',').map((p) => p.replace(/[.+^$()|[\]\\]/g, '\\$&'));
|
|
80
|
-
re += `(?:${parts.join('|')})`;
|
|
81
|
-
i = end + 1;
|
|
82
|
-
} else if (/[.+^$()|[\]\\]/.test(c)) {
|
|
83
|
-
re += `\\${c}`;
|
|
84
|
-
i += 1;
|
|
85
|
-
} else {
|
|
86
|
-
re += c;
|
|
87
|
-
i += 1;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
re += '$';
|
|
91
|
-
return new RegExp(re);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// The project-relative paths this page could be known as. Ignore globs are
|
|
95
|
-
// project-relative (prototype/foo.html) and the URL is site-relative
|
|
96
|
-
// (/foo.html), because a static server's root usually sits inside the
|
|
97
|
-
// project; `roots` carries that prefix. The server reads it from the inject
|
|
98
|
-
// config's own `files` globs, which already state where the served pages
|
|
99
|
-
// are. Do not derive it from the ignore globs: a single entry scoped to
|
|
100
|
-
// prototype/library/** would then lend prototype/library/ as a candidate
|
|
101
|
-
// prefix to every page, and that rule would suppress site-wide.
|
|
102
|
-
//
|
|
103
|
-
// Each prefixed path also contributes its slash suffixes, mirroring
|
|
104
|
-
// findingMatchesScopedIgnoreFile in cli/lib/impeccable-config.mjs (which
|
|
105
|
-
// matches globs against every path suffix of the finding's file).
|
|
106
|
-
//
|
|
107
|
-
// One live session is served by one server, so a single document root must
|
|
108
|
-
// sit at or above every configured page. The only prefix that can safely
|
|
109
|
-
// be asserted is therefore the deepest common ancestor of the glob roots.
|
|
110
|
-
// Treating each glob's own prefix as an identity goes wrong in both
|
|
111
|
-
// directions: disjoint roots (src/ and public/) invent simultaneous
|
|
112
|
-
// identities for one URL, so a waiver scoped to src/foo.html hides a
|
|
113
|
-
// finding on a page served from public/foo.html; nested roots (prototype/
|
|
114
|
-
// and prototype/library/, from globs at two depths in one tree) are not
|
|
115
|
-
// alternatives at all, and demanding a waiver match under both stops
|
|
116
|
-
// prototype/index.html from applying anywhere. When the globs share no
|
|
117
|
-
// common root, no prefix is asserted and only the URL path itself matches.
|
|
118
|
-
function pageCandidates(pathname, roots, pageFiles) {
|
|
119
|
-
let pagePath = String(pathname || '');
|
|
120
|
-
try {
|
|
121
|
-
pagePath = decodeURIComponent(pagePath);
|
|
122
|
-
} catch {
|
|
123
|
-
// Malformed percent-escape: match on the raw path rather than throwing.
|
|
124
|
-
}
|
|
125
|
-
pagePath = pagePath.replace(/^\/+/, '');
|
|
126
|
-
// A directory URL serves that directory's index, and the ignore globs
|
|
127
|
-
// name files. Without this, /news/ never matches prototype/news/index.html.
|
|
128
|
-
if (pagePath === '' || pagePath.endsWith('/')) pagePath += 'index.html';
|
|
129
|
-
|
|
130
|
-
const candidates = new Set();
|
|
131
|
-
const addSuffixes = (fullPath) => {
|
|
132
|
-
const parts = fullPath.split('/').filter(Boolean);
|
|
133
|
-
for (let i = 0; i < parts.length; i++) {
|
|
134
|
-
candidates.add(parts.slice(i).join('/'));
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
addSuffixes(pagePath);
|
|
138
|
-
|
|
139
|
-
// The served page list names the real files the inject config serves.
|
|
140
|
-
// A URL that suffix-matches exactly one of them has an unambiguous
|
|
141
|
-
// project identity; assert that identity and stop guessing from roots
|
|
142
|
-
// (PR #645 review: with src/ and public/ both served, /foo.html must not
|
|
143
|
-
// borrow src/foo.html's waivers while actually serving public/foo.html).
|
|
144
|
-
// Zero matches or several fall through to the common-ancestor fallback:
|
|
145
|
-
// ambiguity resolves toward showing the finding.
|
|
146
|
-
const knownPages = [];
|
|
147
|
-
for (const entry of Array.isArray(pageFiles) ? pageFiles : []) {
|
|
148
|
-
if (typeof entry !== 'string' || !entry) continue;
|
|
149
|
-
if (entry === pagePath || entry.endsWith('/' + pagePath)) knownPages.push(entry);
|
|
150
|
-
}
|
|
151
|
-
if (knownPages.length === 1) {
|
|
152
|
-
addSuffixes(knownPages[0]);
|
|
153
|
-
return [...candidates];
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const prefixes = [];
|
|
157
|
-
for (const entry of Array.isArray(roots) ? roots : []) {
|
|
158
|
-
if (typeof entry !== 'string') continue;
|
|
159
|
-
prefixes.push(entry.split('/').filter(Boolean));
|
|
160
|
-
}
|
|
161
|
-
let common = prefixes.length > 0 ? prefixes[0] : [];
|
|
162
|
-
for (const segments of prefixes.slice(1)) {
|
|
163
|
-
let i = 0;
|
|
164
|
-
while (i < common.length && i < segments.length && common[i] === segments[i]) i += 1;
|
|
165
|
-
common = common.slice(0, i);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (common.length > 0) addSuffixes(common.join('/') + '/' + pagePath);
|
|
169
|
-
return [...candidates];
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function matchesScope(globs, candidates) {
|
|
173
|
-
return globs.some((glob) => {
|
|
174
|
-
let re;
|
|
175
|
-
try {
|
|
176
|
-
re = globToRegex(String(glob));
|
|
177
|
-
} catch {
|
|
178
|
-
// Malformed glob: skip it, as matchesAnyGlob does in the CLI.
|
|
179
|
-
return false;
|
|
180
|
-
}
|
|
181
|
-
return candidates.some((candidate) => re.test(candidate));
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Resolve the serialized project ignores for one page.
|
|
187
|
-
*
|
|
188
|
-
* @param {object} options
|
|
189
|
-
* @param {object} options.ignores window.__IMPECCABLE_PROJECT_IGNORES__,
|
|
190
|
-
* in whatever state it arrived: absent, null, or hand-edited into the
|
|
191
|
-
* wrong shape. Every read tolerates that and degrades to no filtering.
|
|
192
|
-
* @param {string} options.pathname location.pathname of the scanned page.
|
|
193
|
-
* @returns {{ disabledRules: string[], disabledValues: Array<{rule: string, value: string}>, skipScan: boolean }}
|
|
194
|
-
*/
|
|
195
|
-
function resolveDetectIgnores({ ignores, pathname } = {}) {
|
|
196
|
-
const config = ignores && typeof ignores === 'object' ? ignores : {};
|
|
197
|
-
const asArray = (value) => (Array.isArray(value) ? value : []);
|
|
198
|
-
const candidates = pageCandidates(pathname, config.roots, config.pageFiles);
|
|
199
|
-
|
|
200
|
-
// detector.ignoreFiles waives whole files. When any glob names this
|
|
201
|
-
// page, the scan itself is skipped; rule and value lists are returned
|
|
202
|
-
// empty because nothing will run.
|
|
203
|
-
const ignoreFileGlobs = asArray(config.ignoreFiles)
|
|
204
|
-
.filter((glob) => typeof glob === 'string' && glob.trim());
|
|
205
|
-
if (ignoreFileGlobs.length > 0 && matchesScope(ignoreFileGlobs, candidates)) {
|
|
206
|
-
return { disabledRules: [], disabledValues: [], skipScan: true };
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const disabledRules = new Set(
|
|
210
|
-
asArray(config.ignoreRules)
|
|
211
|
-
.filter((rule) => typeof rule === 'string')
|
|
212
|
-
.map(normalizeIgnoreRule)
|
|
213
|
-
.filter(Boolean),
|
|
214
|
-
);
|
|
215
|
-
const disabledValues = [];
|
|
216
|
-
|
|
217
|
-
for (const entry of asArray(config.ignoreValues)) {
|
|
218
|
-
if (!entry || typeof entry !== 'object') continue;
|
|
219
|
-
const rule = normalizeIgnoreRule(entry.rule);
|
|
220
|
-
const value = normalizeIgnoreValue(entry.value);
|
|
221
|
-
if (!rule || !value) continue;
|
|
222
|
-
const files = [
|
|
223
|
-
...(typeof entry.file === 'string' && entry.file.trim() ? [entry.file.trim()] : []),
|
|
224
|
-
...asArray(entry.files).filter((glob) => typeof glob === 'string' && glob.trim()),
|
|
225
|
-
];
|
|
226
|
-
if (value === '*') {
|
|
227
|
-
// Wildcards suppress their rule only inside the files they name.
|
|
228
|
-
if (files.length > 0 && matchesScope(files, candidates)) disabledRules.add(rule);
|
|
229
|
-
continue;
|
|
230
|
-
}
|
|
231
|
-
if (files.length > 0 && !matchesScope(files, candidates)) continue;
|
|
232
|
-
disabledValues.push({ rule, value });
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
return { disabledRules: [...disabledRules], disabledValues, skipScan: false };
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
root.__IMPECCABLE_LIVE_IGNORES__ = {
|
|
239
|
-
version: 1,
|
|
240
|
-
resolveDetectIgnores,
|
|
241
|
-
};
|
|
242
|
-
})(typeof window !== 'undefined' ? window : globalThis);
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser-side durable session helpers for Impeccable live mode.
|
|
3
|
-
*
|
|
4
|
-
* Kept separate from live-browser.js so recovery state can be tested without
|
|
5
|
-
* booting the full overlay UI. Served before live-browser.js and attached to
|
|
6
|
-
* window.__IMPECCABLE_LIVE_SESSION__.
|
|
7
|
-
*/
|
|
8
|
-
(function (root) {
|
|
9
|
-
'use strict';
|
|
10
|
-
|
|
11
|
-
function createLiveBrowserSessionState({ prefix, storage, idFactory }) {
|
|
12
|
-
if (!prefix) throw new Error('prefix required');
|
|
13
|
-
const store = storage || root.localStorage;
|
|
14
|
-
const makeId = idFactory || function () { return Math.random().toString(16).slice(2, 10); };
|
|
15
|
-
const sessionKey = prefix + '-session';
|
|
16
|
-
const handledKey = sessionKey + '-handled';
|
|
17
|
-
const scrollKey = sessionKey + '-scroll';
|
|
18
|
-
let checkpointRevision = 0;
|
|
19
|
-
const owner = makeId();
|
|
20
|
-
|
|
21
|
-
function safeRead(key) {
|
|
22
|
-
try { return store.getItem(key); } catch { return null; }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function safeWrite(key, value) {
|
|
26
|
-
try { store.setItem(key, value); } catch { /* quota exceeded or private mode */ }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function safeRemove(key) {
|
|
30
|
-
try { store.removeItem(key); } catch { /* unavailable storage */ }
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function loadSession() {
|
|
34
|
-
try {
|
|
35
|
-
const raw = safeRead(sessionKey);
|
|
36
|
-
if (!raw) return null;
|
|
37
|
-
const parsed = JSON.parse(raw);
|
|
38
|
-
if (Number.isInteger(parsed.checkpointRevision)) {
|
|
39
|
-
checkpointRevision = Math.max(checkpointRevision, parsed.checkpointRevision);
|
|
40
|
-
}
|
|
41
|
-
return parsed;
|
|
42
|
-
} catch { return null; }
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function saveSession(session) {
|
|
46
|
-
if (!session || !session.id) return;
|
|
47
|
-
const payload = {
|
|
48
|
-
...session,
|
|
49
|
-
checkpointRevision,
|
|
50
|
-
};
|
|
51
|
-
safeWrite(sessionKey, JSON.stringify(payload));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function clearSession() {
|
|
55
|
-
safeRemove(sessionKey);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function nextCheckpointRevision() {
|
|
59
|
-
checkpointRevision += 1;
|
|
60
|
-
const existing = loadSession();
|
|
61
|
-
if (existing?.id) saveSession(existing);
|
|
62
|
-
return checkpointRevision;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function seedCheckpointRevision(value) {
|
|
66
|
-
if (Number.isInteger(value)) checkpointRevision = Math.max(checkpointRevision, value);
|
|
67
|
-
return checkpointRevision;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function currentCheckpointRevision() {
|
|
71
|
-
return checkpointRevision;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function markHandled(id) {
|
|
75
|
-
if (!id) return;
|
|
76
|
-
safeWrite(handledKey, id);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function isHandled(id) {
|
|
80
|
-
return !!id && safeRead(handledKey) === id;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function clearHandled() {
|
|
84
|
-
safeRemove(handledKey);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function writeScrollY(y) {
|
|
88
|
-
safeWrite(scrollKey, String(y));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function readScrollY() {
|
|
92
|
-
const raw = safeRead(scrollKey);
|
|
93
|
-
if (raw == null) return null;
|
|
94
|
-
const n = parseFloat(raw);
|
|
95
|
-
return isFinite(n) ? n : null;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function clearScrollY() {
|
|
99
|
-
safeRemove(scrollKey);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return {
|
|
103
|
-
owner,
|
|
104
|
-
sessionKey,
|
|
105
|
-
handledKey,
|
|
106
|
-
scrollKey,
|
|
107
|
-
saveSession,
|
|
108
|
-
loadSession,
|
|
109
|
-
clearSession,
|
|
110
|
-
nextCheckpointRevision,
|
|
111
|
-
seedCheckpointRevision,
|
|
112
|
-
currentCheckpointRevision,
|
|
113
|
-
markHandled,
|
|
114
|
-
isHandled,
|
|
115
|
-
clearHandled,
|
|
116
|
-
writeScrollY,
|
|
117
|
-
readScrollY,
|
|
118
|
-
clearScrollY,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
root.__IMPECCABLE_LIVE_SESSION__ = { createLiveBrowserSessionState };
|
|
123
|
-
})(typeof window !== 'undefined' ? window : globalThis);
|