quiver-cli 0.1.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 (281) hide show
  1. package/README.md +188 -0
  2. package/bin/quiver-cli.mjs +2 -0
  3. package/dist/cli.js +3074 -0
  4. package/package.json +55 -0
  5. package/template/.agents/AGENTS.md +25 -0
  6. package/template/.agents/commands/cp.md +116 -0
  7. package/template/.agents/commands/next-setup.md +1064 -0
  8. package/template/.agents/commands/tf-readme.md +38 -0
  9. package/template/.agents/config.json +60 -0
  10. package/template/.agents/skills/agent-browser/SKILL.md +55 -0
  11. package/template/.agents/skills/apps/skybridge/SKILL.md +46 -0
  12. package/template/.agents/skills/apps/skybridge/references/architecture.md +175 -0
  13. package/template/.agents/skills/apps/skybridge/references/copy-template.md +24 -0
  14. package/template/.agents/skills/apps/skybridge/references/csp.md +33 -0
  15. package/template/.agents/skills/apps/skybridge/references/deploy.md +33 -0
  16. package/template/.agents/skills/apps/skybridge/references/discover.md +84 -0
  17. package/template/.agents/skills/apps/skybridge/references/download-file.md +77 -0
  18. package/template/.agents/skills/apps/skybridge/references/fetch-and-render-data.md +151 -0
  19. package/template/.agents/skills/apps/skybridge/references/oauth.md +115 -0
  20. package/template/.agents/skills/apps/skybridge/references/open-external-links.md +71 -0
  21. package/template/.agents/skills/apps/skybridge/references/prompt-llm.md +20 -0
  22. package/template/.agents/skills/apps/skybridge/references/publish.md +19 -0
  23. package/template/.agents/skills/apps/skybridge/references/run-locally.md +51 -0
  24. package/template/.agents/skills/apps/skybridge/references/state-and-context.md +151 -0
  25. package/template/.agents/skills/apps/skybridge/references/ui-guidelines.md +205 -0
  26. package/template/.agents/skills/code/cleanup/SKILL.md +26 -0
  27. package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +3810 -0
  28. package/template/.agents/skills/code/vercel-react-best-practices/README.md +123 -0
  29. package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +149 -0
  30. package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +15 -0
  31. package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +46 -0
  32. package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +28 -0
  33. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  34. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  35. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  36. package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  37. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  38. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  39. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  40. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  41. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +28 -0
  42. package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  43. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  44. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  45. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  46. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  47. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  48. package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  49. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  50. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  51. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  52. package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  53. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  54. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  55. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  56. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  57. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  58. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  59. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  60. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  61. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  62. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  63. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  64. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  65. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  66. package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  67. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  68. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  69. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  70. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  71. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  72. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  73. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  74. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  75. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  76. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  77. package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  78. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  79. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  80. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  81. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  82. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  83. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  84. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  85. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  86. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  87. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  88. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  89. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  90. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  91. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  92. package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  93. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  94. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  95. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  96. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  97. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  98. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  99. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  100. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  101. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  102. package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +38 -0
  103. package/template/.agents/skills/data/prisma-cli/SKILL.md +247 -0
  104. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +78 -0
  105. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +185 -0
  106. package/template/.agents/skills/data/prisma-cli/references/db-push.md +148 -0
  107. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +188 -0
  108. package/template/.agents/skills/data/prisma-cli/references/debug.md +46 -0
  109. package/template/.agents/skills/data/prisma-cli/references/dev.md +157 -0
  110. package/template/.agents/skills/data/prisma-cli/references/format.md +48 -0
  111. package/template/.agents/skills/data/prisma-cli/references/generate.md +173 -0
  112. package/template/.agents/skills/data/prisma-cli/references/init.md +136 -0
  113. package/template/.agents/skills/data/prisma-cli/references/mcp.md +38 -0
  114. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +127 -0
  115. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +145 -0
  116. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +89 -0
  117. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +78 -0
  118. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +57 -0
  119. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +65 -0
  120. package/template/.agents/skills/data/prisma-cli/references/studio.md +137 -0
  121. package/template/.agents/skills/data/prisma-cli/references/validate.md +53 -0
  122. package/template/.agents/skills/data/prisma-client-api/SKILL.md +216 -0
  123. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +223 -0
  124. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +208 -0
  125. package/template/.agents/skills/data/prisma-client-api/references/filters.md +256 -0
  126. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +281 -0
  127. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +276 -0
  128. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +194 -0
  129. package/template/.agents/skills/data/prisma-client-api/references/relations.md +308 -0
  130. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +184 -0
  131. package/template/.agents/skills/design/impeccable/SKILL.md +176 -0
  132. package/template/.agents/skills/design/impeccable/reference/adapt.md +311 -0
  133. package/template/.agents/skills/design/impeccable/reference/animate.md +201 -0
  134. package/template/.agents/skills/design/impeccable/reference/audit.md +133 -0
  135. package/template/.agents/skills/design/impeccable/reference/bolder.md +113 -0
  136. package/template/.agents/skills/design/impeccable/reference/brand.md +108 -0
  137. package/template/.agents/skills/design/impeccable/reference/clarify.md +288 -0
  138. package/template/.agents/skills/design/impeccable/reference/codex.md +105 -0
  139. package/template/.agents/skills/design/impeccable/reference/colorize.md +257 -0
  140. package/template/.agents/skills/design/impeccable/reference/craft.md +123 -0
  141. package/template/.agents/skills/design/impeccable/reference/critique.md +767 -0
  142. package/template/.agents/skills/design/impeccable/reference/delight.md +302 -0
  143. package/template/.agents/skills/design/impeccable/reference/distill.md +111 -0
  144. package/template/.agents/skills/design/impeccable/reference/document.md +429 -0
  145. package/template/.agents/skills/design/impeccable/reference/extract.md +69 -0
  146. package/template/.agents/skills/design/impeccable/reference/harden.md +347 -0
  147. package/template/.agents/skills/design/impeccable/reference/init.md +172 -0
  148. package/template/.agents/skills/design/impeccable/reference/interaction-design.md +189 -0
  149. package/template/.agents/skills/design/impeccable/reference/layout.md +161 -0
  150. package/template/.agents/skills/design/impeccable/reference/live.md +718 -0
  151. package/template/.agents/skills/design/impeccable/reference/onboard.md +234 -0
  152. package/template/.agents/skills/design/impeccable/reference/optimize.md +258 -0
  153. package/template/.agents/skills/design/impeccable/reference/overdrive.md +130 -0
  154. package/template/.agents/skills/design/impeccable/reference/polish.md +241 -0
  155. package/template/.agents/skills/design/impeccable/reference/product.md +60 -0
  156. package/template/.agents/skills/design/impeccable/reference/quieter.md +99 -0
  157. package/template/.agents/skills/design/impeccable/reference/shape.md +165 -0
  158. package/template/.agents/skills/design/impeccable/reference/typeset.md +279 -0
  159. package/template/.agents/skills/design/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  160. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +94 -0
  161. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +225 -0
  162. package/template/.agents/skills/design/impeccable/scripts/context.mjs +270 -0
  163. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +242 -0
  164. package/template/.agents/skills/design/impeccable/scripts/design-parser.mjs +835 -0
  165. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +198 -0
  166. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +21 -0
  167. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +1733 -0
  168. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +244 -0
  169. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +4551 -0
  170. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
  171. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
  172. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
  173. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
  174. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
  175. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  176. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +12 -0
  177. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +198 -0
  178. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  179. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
  180. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +2316 -0
  181. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +124 -0
  182. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +101 -0
  183. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +7 -0
  184. package/template/.agents/skills/design/impeccable/scripts/impeccable-paths.mjs +126 -0
  185. package/template/.agents/skills/design/impeccable/scripts/is-generated.mjs +69 -0
  186. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +812 -0
  187. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +123 -0
  188. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +10316 -0
  189. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
  190. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +75 -0
  191. package/template/.agents/skills/design/impeccable/scripts/live-completion.mjs +19 -0
  192. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  193. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  194. package/template/.agents/skills/design/impeccable/scripts/live-event-validation.mjs +136 -0
  195. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +557 -0
  196. package/template/.agents/skills/design/impeccable/scripts/live-insert-ui.mjs +458 -0
  197. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +272 -0
  198. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
  199. package/template/.agents/skills/design/impeccable/scripts/live-manual-edits-buffer.mjs +152 -0
  200. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +379 -0
  201. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +94 -0
  202. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +2322 -0
  203. package/template/.agents/skills/design/impeccable/scripts/live-session-store.mjs +289 -0
  204. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +61 -0
  205. package/template/.agents/skills/design/impeccable/scripts/live-svelte-component.mjs +826 -0
  206. package/template/.agents/skills/design/impeccable/scripts/live-sveltekit-adapter.mjs +274 -0
  207. package/template/.agents/skills/design/impeccable/scripts/live-ui-core.mjs +179 -0
  208. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +894 -0
  209. package/template/.agents/skills/design/impeccable/scripts/live.mjs +246 -0
  210. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +14 -0
  211. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +633 -0
  212. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +214 -0
  213. package/template/.agents/skills/design/shadcn/SKILL.md +242 -0
  214. package/template/.agents/skills/design/shadcn/agents/openai.yml +5 -0
  215. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  216. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  217. package/template/.agents/skills/design/shadcn/cli.md +257 -0
  218. package/template/.agents/skills/design/shadcn/customization.md +202 -0
  219. package/template/.agents/skills/design/shadcn/evals/evals.json +47 -0
  220. package/template/.agents/skills/design/shadcn/mcp.md +94 -0
  221. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +306 -0
  222. package/template/.agents/skills/design/shadcn/rules/composition.md +195 -0
  223. package/template/.agents/skills/design/shadcn/rules/forms.md +192 -0
  224. package/template/.agents/skills/design/shadcn/rules/icons.md +101 -0
  225. package/template/.agents/skills/design/shadcn/rules/styling.md +162 -0
  226. package/template/.agents/skills/find-skills/SKILL.md +142 -0
  227. package/template/.agents/skills/integrations/langfuse/SKILL.md +142 -0
  228. package/template/.agents/skills/integrations/langfuse/references/cli.md +52 -0
  229. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +100 -0
  230. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +134 -0
  231. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +288 -0
  232. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +234 -0
  233. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +175 -0
  234. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +52 -0
  235. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +88 -0
  236. package/template/.agents/skills/integrations/posthog/SKILL.md +102 -0
  237. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +63 -0
  238. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +77 -0
  239. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +57 -0
  240. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +140 -0
  241. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +490 -0
  242. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +45 -0
  243. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +139 -0
  244. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +302 -0
  245. package/template/.agents/skills/integrations/posthog/references/identify-users.md +202 -0
  246. package/template/.agents/skills/integrations/posthog/references/integration-example.md +706 -0
  247. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +385 -0
  248. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +43 -0
  249. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +37 -0
  250. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +22 -0
  251. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +38 -0
  252. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +200 -0
  253. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +62 -0
  254. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +197 -0
  255. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +397 -0
  256. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +98 -0
  257. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +120 -0
  258. package/template/.agents/skills/repo/repo-ci/SKILL.md +265 -0
  259. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +129 -0
  260. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +800 -0
  261. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +47 -0
  262. package/template/.agents/skills/repo/repo-init-node/SKILL.md +196 -0
  263. package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
  264. package/template/.agents/skills/skill-creator/SKILL.md +485 -0
  265. package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  266. package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
  267. package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
  268. package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  269. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  270. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  271. package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
  272. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  273. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  274. package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  275. package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  276. package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  277. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  278. package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  279. package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  280. package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
  281. package/template/.agents/upstreams.json +80 -0
@@ -0,0 +1,124 @@
1
+ // ─── Section 2: Color Utilities ─────────────────────────────────────────────
2
+
3
+ function isNeutralColor(color) {
4
+ if (!color || color === 'transparent') return true;
5
+
6
+ // rgb/rgba — use channel spread. Threshold 30 ≈ 11.7% of the 0–255 range.
7
+ const rgb = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
8
+ if (rgb) {
9
+ return (Math.max(+rgb[1], +rgb[2], +rgb[3]) - Math.min(+rgb[1], +rgb[2], +rgb[3])) < 30;
10
+ }
11
+
12
+ // oklch()/lch() — chroma is the second numeric component.
13
+ // oklch chroma is ~0–0.4 in sRGB gamut; >= 0.02 reads as tinted, not gray.
14
+ // lch chroma is ~0–150; >= 3 reads as tinted. jsdom emits both formats
15
+ // literally (it does NOT convert them to rgb).
16
+ const oklch = color.match(/oklch\(\s*[\d.]+%?\s*([\d.-]+)/i);
17
+ if (oklch) return parseFloat(oklch[1]) < 0.02;
18
+ const lch = color.match(/lch\(\s*[\d.]+%?\s*([\d.-]+)/i);
19
+ if (lch) return parseFloat(lch[1]) < 3;
20
+
21
+ // oklab()/lab() — a and b are signed axes; chroma = sqrt(a² + b²).
22
+ // oklab a/b are ~-0.4..0.4, threshold 0.02. lab a/b are ~-128..127, threshold 3.
23
+ const oklab = color.match(/oklab\(\s*[\d.]+%?\s*([\d.-]+)\s+([\d.-]+)/i);
24
+ if (oklab) {
25
+ const a = parseFloat(oklab[1]), b = parseFloat(oklab[2]);
26
+ return Math.hypot(a, b) < 0.02;
27
+ }
28
+ const lab = color.match(/lab\(\s*[\d.]+%?\s*([\d.-]+)\s+([\d.-]+)/i);
29
+ if (lab) {
30
+ const a = parseFloat(lab[1]), b = parseFloat(lab[2]);
31
+ return Math.hypot(a, b) < 3;
32
+ }
33
+
34
+ // hsl/hsla — saturation is the second numeric component (percent).
35
+ // Modern jsdom usually converts hsl() to rgb, but handle it directly for
36
+ // safety across versions and for any engine that preserves the format.
37
+ const hsl = color.match(/hsla?\(\s*[\d.-]+\s*,?\s*([\d.]+)%/i);
38
+ if (hsl) return parseFloat(hsl[1]) < 10;
39
+
40
+ // hwb(hue whiteness% blackness%) — a pixel is fully gray when
41
+ // whiteness + blackness >= 100; chroma-like saturation = 1 - (w+b)/100.
42
+ const hwb = color.match(/hwb\(\s*[\d.-]+\s+([\d.]+)%\s+([\d.]+)%/i);
43
+ if (hwb) {
44
+ const w = parseFloat(hwb[1]), b = parseFloat(hwb[2]);
45
+ return (1 - Math.min(100, w + b) / 100) < 0.1;
46
+ }
47
+
48
+ // Unknown / unrecognized format — err on the side of DETECTING rather
49
+ // than silently skipping. This is the opposite of the previous default,
50
+ // which was the root cause of the oklch bug.
51
+ return false;
52
+ }
53
+
54
+ function parseRgb(color) {
55
+ if (!color || color === 'transparent') return null;
56
+ const m = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
57
+ if (!m) return null;
58
+ return { r: +m[1], g: +m[2], b: +m[3], a: m[4] !== undefined ? +m[4] : 1 };
59
+ }
60
+
61
+ function relativeLuminance({ r, g, b }) {
62
+ const [rs, gs, bs] = [r / 255, g / 255, b / 255].map(c =>
63
+ c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4
64
+ );
65
+ return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
66
+ }
67
+
68
+ function contrastRatio(c1, c2) {
69
+ const l1 = relativeLuminance(c1);
70
+ const l2 = relativeLuminance(c2);
71
+ return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
72
+ }
73
+
74
+ function parseGradientColors(bgImage) {
75
+ if (!bgImage || !bgImage.includes('gradient')) return [];
76
+ const colors = [];
77
+ for (const m of bgImage.matchAll(/rgba?\([^)]+\)/g)) {
78
+ const c = parseRgb(m[0]);
79
+ if (c) colors.push(c);
80
+ }
81
+ for (const m of bgImage.matchAll(/#([0-9a-f]{6}|[0-9a-f]{3})\b/gi)) {
82
+ const h = m[1];
83
+ if (h.length === 6) {
84
+ colors.push({ r: parseInt(h.slice(0,2),16), g: parseInt(h.slice(2,4),16), b: parseInt(h.slice(4,6),16), a: 1 });
85
+ } else {
86
+ colors.push({ r: parseInt(h[0]+h[0],16), g: parseInt(h[1]+h[1],16), b: parseInt(h[2]+h[2],16), a: 1 });
87
+ }
88
+ }
89
+ return colors;
90
+ }
91
+
92
+ function hasChroma(c, threshold = 30) {
93
+ if (!c) return false;
94
+ return (Math.max(c.r, c.g, c.b) - Math.min(c.r, c.g, c.b)) >= threshold;
95
+ }
96
+
97
+ function getHue(c) {
98
+ if (!c) return 0;
99
+ const r = c.r / 255, g = c.g / 255, b = c.b / 255;
100
+ const max = Math.max(r, g, b), min = Math.min(r, g, b);
101
+ if (max === min) return 0;
102
+ const d = max - min;
103
+ let h;
104
+ if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
105
+ else if (max === g) h = ((b - r) / d + 2) / 6;
106
+ else h = ((r - g) / d + 4) / 6;
107
+ return Math.round(h * 360);
108
+ }
109
+
110
+ function colorToHex(c) {
111
+ if (!c) return '?';
112
+ return '#' + [c.r, c.g, c.b].map(v => v.toString(16).padStart(2, '0')).join('');
113
+ }
114
+
115
+ export {
116
+ isNeutralColor,
117
+ parseRgb,
118
+ relativeLuminance,
119
+ contrastRatio,
120
+ parseGradientColors,
121
+ hasChroma,
122
+ getHue,
123
+ colorToHex,
124
+ };
@@ -0,0 +1,101 @@
1
+ // ─── Section 1: Constants ───────────────────────────────────────────────────
2
+
3
+ const SAFE_TAGS = new Set([
4
+ 'blockquote', 'nav', 'a', 'input', 'textarea', 'select',
5
+ 'pre', 'code', 'span', 'th', 'td', 'tr', 'li', 'label',
6
+ 'button', 'hr', 'html', 'head', 'body', 'script', 'style',
7
+ 'link', 'meta', 'title', 'br', 'img', 'svg', 'path', 'circle',
8
+ 'rect', 'line', 'polyline', 'polygon', 'g', 'defs', 'use',
9
+ ]);
10
+
11
+ // Per-check safe-tags override for the border (side-tab / border-accent)
12
+ // rule. We intentionally re-allow <label> here because card-shaped clickable
13
+ // labels (e.g. .checklist-item wrapping a checkbox + content) are one of the
14
+ // canonical side-tab anti-pattern shapes and must be detected. The rule's
15
+ // other preconditions (non-neutral color, width >= 2px on a single side,
16
+ // radius > 0 or width >= 3, element size >= 20x20 in the browser path)
17
+ // already filter out plain inline form labels so this does not introduce
18
+ // false positives. See modern-color-borders.html for the test matrix.
19
+ const BORDER_SAFE_TAGS = new Set(
20
+ [...SAFE_TAGS].filter(t => t !== 'label')
21
+ );
22
+
23
+ const OVERUSED_FONTS = new Set([
24
+ // Older monoculture (still ubiquitous):
25
+ 'inter', 'roboto', 'open sans', 'lato', 'montserrat', 'arial', 'helvetica',
26
+ // Newer monoculture (the Anthropic-skill / Vercel / GitHub default wave):
27
+ 'fraunces', 'instrument sans', 'instrument serif',
28
+ 'geist', 'geist sans', 'geist mono',
29
+ 'mona sans',
30
+ 'plus jakarta sans', 'space grotesk', 'recoleta',
31
+ ]);
32
+
33
+ // Brand-associated fonts: don't flag these as "overused" on the brand's own domains.
34
+ // Keys are font names, values are arrays of hostname suffixes where the font is allowed.
35
+ const GOOGLE_DOMAINS = [
36
+ 'google.com', 'youtube.com', 'android.com', 'chromium.org',
37
+ 'chrome.com', 'web.dev', 'gstatic.com', 'firebase.google.com',
38
+ ];
39
+ const VERCEL_DOMAINS = ['vercel.com', 'nextjs.org', 'v0.app'];
40
+ const GITHUB_DOMAINS = ['github.com', 'githubnext.com'];
41
+ const BRAND_FONT_DOMAINS = {
42
+ 'roboto': GOOGLE_DOMAINS,
43
+ 'google sans': GOOGLE_DOMAINS,
44
+ 'product sans': GOOGLE_DOMAINS,
45
+ 'geist': VERCEL_DOMAINS,
46
+ 'geist sans': VERCEL_DOMAINS,
47
+ 'geist mono': VERCEL_DOMAINS,
48
+ 'mona sans': GITHUB_DOMAINS,
49
+ };
50
+
51
+ function isBrandFontOnOwnDomain(font) {
52
+ if (typeof location === 'undefined') return false;
53
+ const allowed = BRAND_FONT_DOMAINS[font];
54
+ if (!allowed) return false;
55
+ const host = location.hostname.toLowerCase();
56
+ return allowed.some(suffix => host === suffix || host.endsWith('.' + suffix));
57
+ }
58
+
59
+ const GENERIC_FONTS = new Set([
60
+ 'serif', 'sans-serif', 'monospace', 'cursive', 'fantasy',
61
+ 'system-ui', 'ui-serif', 'ui-sans-serif', 'ui-monospace', 'ui-rounded',
62
+ '-apple-system', 'blinkmacsystemfont', 'segoe ui',
63
+ 'inherit', 'initial', 'unset', 'revert',
64
+ ]);
65
+
66
+ // WCAG large text thresholds are defined in points: 18pt normal text and
67
+ // 14pt bold text. Browsers expose font-size in CSS pixels at 96px per inch.
68
+ const WCAG_LARGE_TEXT_PX = 18 * (96 / 72);
69
+ const WCAG_LARGE_BOLD_TEXT_PX = 14 * (96 / 72);
70
+
71
+ // Serif faces that show up in italic-display heroes. The rule also fires when
72
+ // the primary face is unknown but the stack ends in the generic `serif` token,
73
+ // which catches custom/private faces with a serif fallback.
74
+ const KNOWN_SERIF_FONTS = new Set([
75
+ 'fraunces', 'recoleta', 'newsreader', 'playfair display', 'playfair',
76
+ 'cormorant', 'cormorant garamond', 'garamond', 'eb garamond',
77
+ 'tiempos', 'tiempos headline', 'tiempos text',
78
+ 'lora', 'vollkorn', 'spectral',
79
+ 'source serif pro', 'source serif 4', 'source serif',
80
+ 'ibm plex serif', 'merriweather',
81
+ 'libre caslon', 'libre baskerville', 'baskerville',
82
+ 'georgia', 'times new roman', 'times',
83
+ 'dm serif display', 'dm serif text',
84
+ 'instrument serif', 'gt sectra', 'ogg', 'canela',
85
+ 'freight display', 'freight text',
86
+ ]);
87
+
88
+ export {
89
+ SAFE_TAGS,
90
+ BORDER_SAFE_TAGS,
91
+ OVERUSED_FONTS,
92
+ GOOGLE_DOMAINS,
93
+ VERCEL_DOMAINS,
94
+ GITHUB_DOMAINS,
95
+ BRAND_FONT_DOMAINS,
96
+ isBrandFontOnOwnDomain,
97
+ GENERIC_FONTS,
98
+ WCAG_LARGE_TEXT_PX,
99
+ WCAG_LARGE_BOLD_TEXT_PX,
100
+ KNOWN_SERIF_FONTS,
101
+ };
@@ -0,0 +1,7 @@
1
+ /** Check if content looks like a full page (not a component/partial) */
2
+ function isFullPage(content) {
3
+ const stripped = content.replace(/<!--[\s\S]*?-->/g, '');
4
+ return /<!doctype\s|<html[\s>]|<head[\s>]/i.test(stripped);
5
+ }
6
+
7
+ export { isFullPage };
@@ -0,0 +1,126 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+
4
+ export const IMPECCABLE_DIR = '.impeccable';
5
+ export const LIVE_DIR = 'live';
6
+ export const CRITIQUE_DIR = 'critique';
7
+
8
+ export function getImpeccableDir(cwd = process.cwd()) {
9
+ return path.join(cwd, IMPECCABLE_DIR);
10
+ }
11
+
12
+ export function getDesignSidecarPath(cwd = process.cwd()) {
13
+ return path.join(getImpeccableDir(cwd), 'design.json');
14
+ }
15
+
16
+ export function getDesignSidecarCandidates(cwd = process.cwd(), contextDir = cwd) {
17
+ const candidates = [
18
+ getDesignSidecarPath(cwd),
19
+ path.join(cwd, 'DESIGN.json'),
20
+ ];
21
+ const contextLegacy = path.join(contextDir, 'DESIGN.json');
22
+ if (!candidates.includes(contextLegacy)) candidates.push(contextLegacy);
23
+ return candidates;
24
+ }
25
+
26
+ export function resolveDesignSidecarPath(cwd = process.cwd(), contextDir = cwd) {
27
+ return firstExisting(getDesignSidecarCandidates(cwd, contextDir));
28
+ }
29
+
30
+ export function getLiveDir(cwd = process.cwd()) {
31
+ return path.join(getImpeccableDir(cwd), LIVE_DIR);
32
+ }
33
+
34
+ export function getLiveConfigPath(cwd = process.cwd()) {
35
+ return path.join(getLiveDir(cwd), 'config.json');
36
+ }
37
+
38
+ export function getLegacyLiveConfigPath(scriptsDir) {
39
+ return path.join(scriptsDir, 'config.json');
40
+ }
41
+
42
+ export function resolveLiveConfigPath({ cwd = process.cwd(), scriptsDir, env = process.env } = {}) {
43
+ if (env.IMPECCABLE_LIVE_CONFIG && env.IMPECCABLE_LIVE_CONFIG.trim()) {
44
+ const configured = env.IMPECCABLE_LIVE_CONFIG.trim();
45
+ return path.isAbsolute(configured) ? configured : path.resolve(cwd, configured);
46
+ }
47
+ const primary = getLiveConfigPath(cwd);
48
+ if (fs.existsSync(primary)) return primary;
49
+ if (scriptsDir) {
50
+ const legacy = getLegacyLiveConfigPath(scriptsDir);
51
+ if (fs.existsSync(legacy)) return legacy;
52
+ }
53
+ return primary;
54
+ }
55
+
56
+ export function getLiveServerPath(cwd = process.cwd()) {
57
+ return path.join(getLiveDir(cwd), 'server.json');
58
+ }
59
+
60
+ export function getLegacyLiveServerPath(cwd = process.cwd()) {
61
+ return path.join(cwd, '.impeccable-live.json');
62
+ }
63
+
64
+ export function readLiveServerInfo(cwd = process.cwd()) {
65
+ for (const filePath of [getLiveServerPath(cwd), getLegacyLiveServerPath(cwd)]) {
66
+ try {
67
+ const info = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
68
+ if (info && typeof info.pid === 'number' && !isLiveServerPidReachable(info.pid)) {
69
+ try { fs.unlinkSync(filePath); } catch {}
70
+ continue;
71
+ }
72
+ return { info, path: filePath };
73
+ } catch {
74
+ /* try next */
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+
80
+ export function isLiveServerPidReachable(pid) {
81
+ try {
82
+ process.kill(pid, 0);
83
+ return true;
84
+ } catch (err) {
85
+ // ESRCH means "no such process". EPERM means the process exists but this
86
+ // user cannot signal it, so the live server info is still valid.
87
+ return err?.code !== 'ESRCH';
88
+ }
89
+ }
90
+
91
+ export function writeLiveServerInfo(cwd = process.cwd(), info) {
92
+ const filePath = getLiveServerPath(cwd);
93
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
94
+ fs.writeFileSync(filePath, JSON.stringify(info));
95
+ return filePath;
96
+ }
97
+
98
+ export function removeLiveServerInfo(cwd = process.cwd()) {
99
+ for (const filePath of [getLiveServerPath(cwd), getLegacyLiveServerPath(cwd)]) {
100
+ try { fs.unlinkSync(filePath); } catch {}
101
+ }
102
+ }
103
+
104
+ export function getLiveSessionsDir(cwd = process.cwd()) {
105
+ return path.join(getLiveDir(cwd), 'sessions');
106
+ }
107
+
108
+ export function getLegacyLiveSessionsDir(cwd = process.cwd()) {
109
+ return path.join(cwd, '.impeccable-live', 'sessions');
110
+ }
111
+
112
+ export function getLiveAnnotationsDir(cwd = process.cwd()) {
113
+ return path.join(getLiveDir(cwd), 'annotations');
114
+ }
115
+
116
+ export function getCritiqueDir(cwd = process.cwd()) {
117
+ return path.join(getImpeccableDir(cwd), CRITIQUE_DIR);
118
+ }
119
+
120
+ export function getLegacyLiveAnnotationsDir(cwd = process.cwd()) {
121
+ return path.join(cwd, '.impeccable-live', 'annotations');
122
+ }
123
+
124
+ function firstExisting(paths) {
125
+ return paths.find((filePath) => fs.existsSync(filePath)) || null;
126
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Decide whether a given file is "generated" (regenerated by a build step,
3
+ * unsafe to write variants into) or "source" (safe to edit, changes persist).
4
+ *
5
+ * Why this matters: when the user picks an element on a page whose underlying
6
+ * file is regenerated by a build step (e.g. `scripts/build-sub-pages.js`
7
+ * rewriting `public/docs/*.html`), writing variants or accepted changes into
8
+ * that file is silent data loss — the next build wipes them.
9
+ *
10
+ * Signals, in order of reliability:
11
+ * 1. Git check-ignore: gitignored files are assumed generated.
12
+ * 2. File-header markers ("GENERATED", "DO NOT EDIT", "AUTO-GENERATED")
13
+ * within the first ~300 characters — catches non-git projects.
14
+ */
15
+
16
+ import { execSync } from 'node:child_process';
17
+ import fs from 'node:fs';
18
+ import path from 'node:path';
19
+
20
+ const HEADER_SCAN_BYTES = 300;
21
+ const HEADER_MARKERS = [
22
+ /@generated\b/i,
23
+ /\bGENERATED\s+FILE\b/,
24
+ /\bAUTO-?GENERATED\b/i,
25
+ /\bDO\s+NOT\s+EDIT\b/i,
26
+ ];
27
+
28
+ /**
29
+ * @param {string} filePath - absolute or cwd-relative path
30
+ * @param {object} [options]
31
+ * @param {string} [options.cwd] - project root (defaults to process.cwd())
32
+ */
33
+ export function isGeneratedFile(filePath, options = {}) {
34
+ const cwd = options.cwd || process.cwd();
35
+ const absPath = path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath);
36
+
37
+ if (isGitIgnored(absPath, cwd)) return true;
38
+ if (hasGeneratedHeader(absPath)) return true;
39
+ return false;
40
+ }
41
+
42
+ function isGitIgnored(absPath, cwd) {
43
+ try {
44
+ execSync(`git check-ignore --quiet ${JSON.stringify(absPath)}`, {
45
+ cwd,
46
+ stdio: 'ignore',
47
+ });
48
+ return true; // exit 0 = ignored
49
+ } catch (err) {
50
+ // Exit code 1 = not ignored. Exit code 128 = not a git repo or other error.
51
+ // In both cases, treat as "not known to be ignored."
52
+ return false;
53
+ }
54
+ }
55
+
56
+ function hasGeneratedHeader(absPath) {
57
+ let fd;
58
+ try {
59
+ fd = fs.openSync(absPath, 'r');
60
+ const buf = Buffer.alloc(HEADER_SCAN_BYTES);
61
+ const bytesRead = fs.readSync(fd, buf, 0, HEADER_SCAN_BYTES, 0);
62
+ const head = buf.slice(0, bytesRead).toString('utf-8');
63
+ return HEADER_MARKERS.some((re) => re.test(head));
64
+ } catch {
65
+ return false;
66
+ } finally {
67
+ if (fd !== undefined) { try { fs.closeSync(fd); } catch {} }
68
+ }
69
+ }