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.
Files changed (407) hide show
  1. package/README.md +197 -239
  2. package/dist/cli.js +3163 -2040
  3. package/package.json +10 -11
  4. package/template/.agents/AGENTS.md +0 -26
  5. package/template/.agents/commands/cp.md +0 -108
  6. package/template/.agents/commands/next-setup.md +0 -1064
  7. package/template/.agents/commands/review.md +0 -68
  8. package/template/.agents/commands/terraform-readme.md +0 -38
  9. package/template/.agents/config.json +0 -80
  10. package/template/.agents/plugins/opencode/rtk.ts +0 -34
  11. package/template/.agents/skills/agent-browser/SKILL.md +0 -52
  12. package/template/.agents/skills/apps/skybridge/SKILL.md +0 -52
  13. package/template/.agents/skills/code/cleanup/SKILL.md +0 -26
  14. package/template/.agents/skills/code/improve/SKILL.md +0 -122
  15. package/template/.agents/skills/code/improve/references/audit-playbook.md +0 -130
  16. package/template/.agents/skills/code/improve/references/closing-the-loop.md +0 -96
  17. package/template/.agents/skills/code/improve/references/plan-template.md +0 -197
  18. package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +0 -3810
  19. package/template/.agents/skills/code/vercel-react-best-practices/README.md +0 -123
  20. package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +0 -149
  21. package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +0 -15
  22. package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +0 -46
  23. package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +0 -28
  24. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
  25. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  26. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  27. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  28. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  29. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
  30. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +0 -82
  31. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  32. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +0 -28
  33. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  34. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
  35. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
  36. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  37. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  38. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  39. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  40. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  41. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  42. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  43. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  44. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  45. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  46. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  47. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  48. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  49. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  50. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  51. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  52. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  53. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  54. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  55. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
  56. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  57. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  58. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  59. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  60. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  61. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  62. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  63. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  64. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  65. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  66. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  67. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  68. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  69. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  70. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  71. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  72. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  73. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  74. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  75. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  76. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  77. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  78. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  79. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  80. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  81. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  82. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  83. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  84. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  85. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  86. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  87. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  88. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  89. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
  90. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
  91. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  92. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
  93. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +0 -38
  94. package/template/.agents/skills/data/prisma-cli/SKILL.md +0 -265
  95. package/template/.agents/skills/data/prisma-cli/references/agent-safety.md +0 -27
  96. package/template/.agents/skills/data/prisma-cli/references/complete.md +0 -22
  97. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
  98. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
  99. package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -150
  100. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
  101. package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
  102. package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
  103. package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
  104. package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
  105. package/template/.agents/skills/data/prisma-cli/references/init.md +0 -139
  106. package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -39
  107. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
  108. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
  109. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
  110. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -80
  111. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
  112. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
  113. package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
  114. package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
  115. package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
  116. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
  117. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -221
  118. package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
  119. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
  120. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
  121. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -198
  122. package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
  123. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
  124. package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
  125. package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
  126. package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
  127. package/template/.agents/skills/design/impeccable/reference/android.md +0 -46
  128. package/template/.agents/skills/design/impeccable/reference/animate.md +0 -89
  129. package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
  130. package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
  131. package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -33
  132. package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
  133. package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
  134. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -44
  135. package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
  136. package/template/.agents/skills/design/impeccable/reference/critique.md +0 -806
  137. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -37
  138. package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
  139. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -38
  140. package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  141. package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
  142. package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
  143. package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -54
  144. package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
  145. package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
  146. package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
  147. package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -111
  148. package/template/.agents/skills/design/impeccable/reference/init.md +0 -131
  149. package/template/.agents/skills/design/impeccable/reference/ios.md +0 -51
  150. package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
  151. package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
  152. package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
  153. package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -145
  154. package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
  155. package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
  156. package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
  157. package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
  158. package/template/.agents/skills/design/impeccable/reference/polish.md +0 -105
  159. package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
  160. package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
  161. package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
  162. package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
  163. package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -46
  164. package/template/.agents/skills/design/impeccable/scripts/build-phase.mjs +0 -1022
  165. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
  166. package/template/.agents/skills/design/impeccable/scripts/comp-diff.mjs +0 -391
  167. package/template/.agents/skills/design/impeccable/scripts/comp-spec.mjs +0 -513
  168. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -814
  169. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -325
  170. package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1565
  171. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -473
  172. package/template/.agents/skills/design/impeccable/scripts/data/font-index-failures.json +0 -121
  173. package/template/.agents/skills/design/impeccable/scripts/data/font-index.json +0 -1
  174. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
  175. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -30
  176. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2204
  177. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -432
  178. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -1311
  179. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -9043
  180. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -51
  181. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -434
  182. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -1319
  183. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1241
  184. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -288
  185. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
  186. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
  187. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -213
  188. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
  189. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -635
  190. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5681
  191. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -596
  192. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -127
  193. package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
  194. package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
  195. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
  196. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -329
  197. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -166
  198. package/template/.agents/skills/design/impeccable/scripts/font-match.mjs +0 -457
  199. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -447
  200. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -819
  201. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -538
  202. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2490
  203. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -79
  204. package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
  205. package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
  206. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -396
  207. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -880
  208. package/template/.agents/skills/design/impeccable/scripts/lib/font-fingerprint.mjs +0 -564
  209. package/template/.agents/skills/design/impeccable/scripts/lib/font-index.mjs +0 -130
  210. package/template/.agents/skills/design/impeccable/scripts/lib/hero-checks.mjs +0 -246
  211. package/template/.agents/skills/design/impeccable/scripts/lib/image-metrics.mjs +0 -306
  212. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -640
  213. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
  214. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -72
  215. package/template/.agents/skills/design/impeccable/scripts/lib/live-path-globs.mjs +0 -37
  216. package/template/.agents/skills/design/impeccable/scripts/lib/open-system-browser.mjs +0 -26
  217. package/template/.agents/skills/design/impeccable/scripts/lib/png.mjs +0 -281
  218. package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
  219. package/template/.agents/skills/design/impeccable/scripts/lib/raster.mjs +0 -194
  220. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -369
  221. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -485
  222. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
  223. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -533
  224. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -149
  225. package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
  226. package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
  227. package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
  228. package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
  229. package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
  230. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -84
  231. package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
  232. package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
  233. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
  234. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
  235. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
  236. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
  237. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
  238. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
  239. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
  240. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
  241. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
  242. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
  243. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
  244. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
  245. package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
  246. package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
  247. package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
  248. package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
  249. package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
  250. package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
  251. package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
  252. package/template/.agents/skills/design/impeccable/scripts/live/project-ignores.mjs +0 -139
  253. package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
  254. package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
  255. package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
  256. package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
  257. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -969
  258. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1366
  259. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -304
  260. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -259
  261. package/template/.agents/skills/design/impeccable/scripts/live/ui-surfaces.mjs +0 -75
  262. package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
  263. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -938
  264. package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
  265. package/template/.agents/skills/design/impeccable/scripts/live-browser-ignores.js +0 -242
  266. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
  267. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12551
  268. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1200
  269. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
  270. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -800
  271. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
  272. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -463
  273. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
  274. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
  275. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -430
  276. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
  277. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1698
  278. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
  279. package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
  280. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
  281. package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -334
  282. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
  283. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
  284. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -224
  285. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -1783
  286. package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
  287. package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
  288. package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
  289. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  290. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  291. package/template/.agents/skills/design/shadcn/cli.md +0 -290
  292. package/template/.agents/skills/design/shadcn/customization.md +0 -209
  293. package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
  294. package/template/.agents/skills/design/shadcn/mcp.md +0 -105
  295. package/template/.agents/skills/design/shadcn/registry.md +0 -277
  296. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
  297. package/template/.agents/skills/design/shadcn/rules/chat.md +0 -250
  298. package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
  299. package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
  300. package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
  301. package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
  302. package/template/.agents/skills/find-skills/SKILL.md +0 -141
  303. package/template/.agents/skills/hono/SKILL.md +0 -593
  304. package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -150
  305. package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
  306. package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
  307. package/template/.agents/skills/integrations/langfuse/references/create-dataset.md +0 -35
  308. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -87
  309. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
  310. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -293
  311. package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
  312. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
  313. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +0 -34
  314. package/template/.agents/skills/integrations/langfuse/references/setting-up-evals.md +0 -65
  315. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -35
  316. package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
  317. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -66
  318. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -75
  319. package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
  320. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
  321. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
  322. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
  323. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
  324. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
  325. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
  326. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
  327. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
  328. package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
  329. package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
  330. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
  331. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
  332. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
  333. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
  334. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
  335. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
  336. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
  337. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
  338. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
  339. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
  340. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
  341. package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
  342. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
  343. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
  344. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
  345. package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
  346. package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
  347. package/template/.agents/skills/skill-creator/SKILL.md +0 -485
  348. package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
  349. package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
  350. package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
  351. package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
  352. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  353. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  354. package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
  355. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  356. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  357. package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
  358. package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
  359. package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
  360. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
  361. package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
  362. package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
  363. package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
  364. package/template/.agents/skills/supabase/CHANGELOG.md +0 -78
  365. package/template/.agents/skills/supabase/SKILL.md +0 -149
  366. package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
  367. package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
  368. package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  369. package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  370. package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  371. package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  372. package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  373. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  374. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  375. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  376. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  377. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  378. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  379. package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  380. package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  381. package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  382. package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  383. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  384. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  385. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  386. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  387. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  388. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  389. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  390. package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  391. package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  392. package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  393. package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  394. package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  395. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  396. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  397. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  398. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  399. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  400. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  401. package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  402. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  403. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  404. package/template/.agents/skills/writing/humanizer/LICENSE +0 -21
  405. package/template/.agents/skills/writing/humanizer/README.md +0 -209
  406. package/template/.agents/skills/writing/humanizer/SKILL.md +0 -456
  407. 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);