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,137 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { resolveProjectRoot } from '../context.mjs';
4
- import { designSidecarCandidatesFor } from './staleness.mjs';
5
- export { IMPECCABLE_COMMAND_PREFIX } from './provider.mjs';
6
-
7
- export const IMPECCABLE_DIR = '.impeccable';
8
- export const LIVE_DIR = 'live';
9
- export const CRITIQUE_DIR = 'critique';
10
-
11
- export function getImpeccableDir(cwd = process.cwd(), options = {}) {
12
- return path.join(resolveProjectRoot(cwd, options), IMPECCABLE_DIR);
13
- }
14
-
15
- export function getDesignSidecarPath(cwd = process.cwd(), options = {}) {
16
- return path.join(getImpeccableDir(cwd, options), 'design.json');
17
- }
18
-
19
- export function getDesignSidecarCandidates(cwd = process.cwd(), contextDir = cwd, options = {}) {
20
- return designSidecarCandidatesFor(resolveProjectRoot(cwd, options), contextDir);
21
- }
22
-
23
- export function resolveDesignSidecarPath(cwd = process.cwd(), contextDir = cwd, options = {}) {
24
- return firstExisting(getDesignSidecarCandidates(cwd, contextDir, options));
25
- }
26
-
27
- export function getLiveDir(cwd = process.cwd(), options = {}) {
28
- return path.join(getImpeccableDir(cwd, options), LIVE_DIR);
29
- }
30
-
31
- export function getLiveConfigPath(cwd = process.cwd(), options = {}) {
32
- return path.join(getLiveDir(cwd, options), 'config.json');
33
- }
34
-
35
- export function getLegacyLiveConfigPath(scriptsDir) {
36
- return path.join(scriptsDir, 'config.json');
37
- }
38
-
39
- export function resolveLiveConfigPath({ cwd = process.cwd(), scriptsDir, env = process.env, targetPath } = {}) {
40
- if (env.IMPECCABLE_LIVE_CONFIG && env.IMPECCABLE_LIVE_CONFIG.trim()) {
41
- const configured = env.IMPECCABLE_LIVE_CONFIG.trim();
42
- return path.isAbsolute(configured) ? configured : path.resolve(cwd, configured);
43
- }
44
- const primary = getLiveConfigPath(cwd, { targetPath });
45
- if (fs.existsSync(primary)) return primary;
46
- if (scriptsDir) {
47
- const legacy = getLegacyLiveConfigPath(scriptsDir);
48
- if (fs.existsSync(legacy)) return legacy;
49
- }
50
- return primary;
51
- }
52
-
53
- export function getLiveServerPath(cwd = process.cwd(), options = {}) {
54
- return path.join(getLiveDir(cwd, options), 'server.json');
55
- }
56
-
57
- export function getLegacyLiveServerPath(cwd = process.cwd(), options = {}) {
58
- return path.join(resolveProjectRoot(cwd, options), '.impeccable-live.json');
59
- }
60
-
61
- export function readLiveServerInfo(cwd = process.cwd(), options = {}) {
62
- for (const filePath of [getLiveServerPath(cwd, options), getLegacyLiveServerPath(cwd, options)]) {
63
- try {
64
- const info = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
65
- if (info && typeof info.pid === 'number' && !isLiveServerPidReachable(info.pid)) {
66
- try { fs.unlinkSync(filePath); } catch {}
67
- continue;
68
- }
69
- return { info, path: filePath };
70
- } catch {
71
- /* try next */
72
- }
73
- }
74
- return null;
75
- }
76
-
77
- export function isLiveServerPidReachable(pid) {
78
- try {
79
- process.kill(pid, 0);
80
- return true;
81
- } catch (err) {
82
- // ESRCH means "no such process". EPERM means the process exists but this
83
- // user cannot signal it, so the live server info is still valid.
84
- return err?.code !== 'ESRCH';
85
- }
86
- }
87
-
88
- export function writeLiveServerInfo(cwd = process.cwd(), info, options = {}) {
89
- const filePath = getLiveServerPath(cwd, options);
90
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
91
- fs.writeFileSync(filePath, JSON.stringify(info));
92
- return filePath;
93
- }
94
-
95
- export function removeLiveServerInfo(cwd = process.cwd(), options = {}) {
96
- for (const filePath of [getLiveServerPath(cwd, options), getLegacyLiveServerPath(cwd, options)]) {
97
- try { fs.unlinkSync(filePath); } catch {}
98
- }
99
- }
100
-
101
- /**
102
- * Session IDs become path segments (journals, snapshots, accept receipts,
103
- * preview manifests, generated component dirs). They arrive from CLI `--id`
104
- * arguments and HTTP payloads, so anything containing a separator or `..` must
105
- * be rejected before it reaches path.join, which would happily escape
106
- * `.impeccable/live/`. Real IDs are 8 hex chars; the tests use short slugs.
107
- */
108
- export function safeSessionId(id) {
109
- if (typeof id !== 'string' || !/^[A-Za-z0-9_-]{1,128}$/.test(id)) {
110
- throw new Error('invalid session id: ' + id);
111
- }
112
- return id;
113
- }
114
-
115
- export function getLiveSessionsDir(cwd = process.cwd(), options = {}) {
116
- return path.join(getLiveDir(cwd, options), 'sessions');
117
- }
118
-
119
- export function getLegacyLiveSessionsDir(cwd = process.cwd(), options = {}) {
120
- return path.join(resolveProjectRoot(cwd, options), '.impeccable-live', 'sessions');
121
- }
122
-
123
- export function getLiveAnnotationsDir(cwd = process.cwd(), options = {}) {
124
- return path.join(getLiveDir(cwd, options), 'annotations');
125
- }
126
-
127
- export function getCritiqueDir(cwd = process.cwd(), options = {}) {
128
- return path.join(getImpeccableDir(cwd, options), CRITIQUE_DIR);
129
- }
130
-
131
- export function getLegacyLiveAnnotationsDir(cwd = process.cwd(), options = {}) {
132
- return path.join(resolveProjectRoot(cwd, options), '.impeccable-live', 'annotations');
133
- }
134
-
135
- function firstExisting(paths) {
136
- return paths.find((filePath) => fs.existsSync(filePath)) || null;
137
- }
@@ -1,72 +0,0 @@
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 { execFileSync } 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
- // argv form, never a shell: this runs on every file the live-mode source
45
- // walk reaches, so a hostile filename embedding $(...) or backticks must
46
- // not be interpretable (issue #476). JSON.stringify is not shell quoting.
47
- execFileSync('git', ['check-ignore', '--quiet', absPath], {
48
- cwd,
49
- stdio: 'ignore',
50
- });
51
- return true; // exit 0 = ignored
52
- } catch (err) {
53
- // Exit code 1 = not ignored. Exit code 128 = not a git repo or other error.
54
- // In both cases, treat as "not known to be ignored."
55
- return false;
56
- }
57
- }
58
-
59
- function hasGeneratedHeader(absPath) {
60
- let fd;
61
- try {
62
- fd = fs.openSync(absPath, 'r');
63
- const buf = Buffer.alloc(HEADER_SCAN_BYTES);
64
- const bytesRead = fs.readSync(fd, buf, 0, HEADER_SCAN_BYTES, 0);
65
- const head = buf.slice(0, bytesRead).toString('utf-8');
66
- return HEADER_MARKERS.some((re) => re.test(head));
67
- } catch {
68
- return false;
69
- } finally {
70
- if (fd !== undefined) { try { fs.closeSync(fd); } catch {} }
71
- }
72
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * Convert a live-config glob pattern to a RegExp.
3
- *
4
- * Supports `**` across path segments, `*` within one segment, and `?` for one
5
- * character. Callers normalize project-relative paths to forward slashes.
6
- */
7
- export function livePathGlobToRegex(pattern) {
8
- let re = '';
9
- let i = 0;
10
- while (i < pattern.length) {
11
- const c = pattern[i];
12
- if (c === '*') {
13
- if (pattern[i + 1] === '*') {
14
- if (pattern[i + 2] === '/') {
15
- re += '(?:.*/)?';
16
- i += 3;
17
- } else {
18
- re += '.*';
19
- i += 2;
20
- }
21
- } else {
22
- re += '[^/]*';
23
- i += 1;
24
- }
25
- } else if (c === '?') {
26
- re += '[^/]';
27
- i += 1;
28
- } else if (/[.+^${}()|[\]\\]/.test(c)) {
29
- re += `\\${c}`;
30
- i += 1;
31
- } else {
32
- re += c;
33
- i += 1;
34
- }
35
- }
36
- return new RegExp(`^${re}$`);
37
- }
@@ -1,26 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
-
3
- export function browserOpenCommand(url, {
4
- platform = process.platform,
5
- comspec = process.env.ComSpec || process.env.COMSPEC || 'cmd.exe',
6
- } = {}) {
7
- if (platform === 'darwin') return { command: 'open', args: [url] };
8
- if (platform === 'win32') return { command: comspec, args: ['/c', 'start', '', url] };
9
- return { command: 'xdg-open', args: [url] };
10
- }
11
-
12
- export function openSystemBrowser(url, {
13
- platform = process.platform,
14
- comspec = process.env.ComSpec || process.env.COMSPEC || 'cmd.exe',
15
- spawnImpl = spawn,
16
- } = {}) {
17
- const { command, args } = browserOpenCommand(url, { platform, comspec });
18
- try {
19
- const child = spawnImpl(command, args, { stdio: 'ignore', detached: true });
20
- child.on('error', () => {});
21
- child.unref();
22
- return true;
23
- } catch {
24
- return false;
25
- }
26
- }
@@ -1,281 +0,0 @@
1
- /**
2
- * Dependency-free PNG decode/encode for the skill scripts.
3
- *
4
- * decodePng(buffer) -> { width, height, data } where data is RGBA8 (Uint8Array,
5
- * width*height*4). Handles every color type (0, 2, 3, 4, 6), bit depths 1-16
6
- * (16-bit is reduced to 8), all five filters, and Adam7 interlacing.
7
- *
8
- * encodePng({ width, height, data }) -> Buffer, RGBA8 in, 8-bit RGBA PNG out.
9
- *
10
- * Kept small on purpose: the skill scripts ship without npm dependencies, and
11
- * comps (gpt-image PNGs) and screenshots (Playwright / harness PNGs) are the
12
- * only formats the comp-fidelity tooling has to read.
13
- */
14
- import zlib from 'node:zlib';
15
- import fs from 'node:fs';
16
- import { execFileSync } from 'node:child_process';
17
-
18
- const SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
19
-
20
- const crcTable = (() => {
21
- const t = new Uint32Array(256);
22
- for (let n = 0; n < 256; n++) {
23
- let c = n;
24
- for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
25
- t[n] = c >>> 0;
26
- }
27
- return t;
28
- })();
29
-
30
- function crc32(data) {
31
- let c = 0xffffffff;
32
- for (let i = 0; i < data.length; i++) c = crcTable[(c ^ data[i]) & 0xff] ^ (c >>> 8);
33
- return (c ^ 0xffffffff) >>> 0;
34
- }
35
-
36
- export function isPng(buf) {
37
- return buf && buf.length > 8 && buf.subarray(0, 8).equals(SIGNATURE);
38
- }
39
-
40
- function readChunks(buf) {
41
- const chunks = [];
42
- let pos = 8;
43
- while (pos + 8 <= buf.length) {
44
- const length = buf.readUInt32BE(pos);
45
- const type = buf.toString('latin1', pos + 4, pos + 8);
46
- const data = buf.subarray(pos + 8, pos + 8 + length);
47
- chunks.push({ type, data });
48
- pos += 12 + length;
49
- if (type === 'IEND') break;
50
- }
51
- return chunks;
52
- }
53
-
54
- const CHANNELS = { 0: 1, 2: 3, 3: 1, 4: 2, 6: 4 };
55
-
56
- function paeth(a, b, c) {
57
- const p = a + b - c;
58
- const pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c);
59
- if (pa <= pb && pa <= pc) return a;
60
- if (pb <= pc) return b;
61
- return c;
62
- }
63
-
64
- /** Unfilter one pass of scanlines in place; returns the raw (unfiltered) bytes. */
65
- function unfilter(raw, width, height, bpp, bitDepth, channels) {
66
- const stride = Math.ceil((width * channels * bitDepth) / 8);
67
- const out = new Uint8Array(stride * height);
68
- let inPos = 0;
69
- let prev = null;
70
- for (let y = 0; y < height; y++) {
71
- const filter = raw[inPos++];
72
- const line = out.subarray(y * stride, (y + 1) * stride);
73
- line.set(raw.subarray(inPos, inPos + stride));
74
- inPos += stride;
75
- switch (filter) {
76
- case 0: break;
77
- case 1: for (let i = bpp; i < stride; i++) line[i] = (line[i] + line[i - bpp]) & 0xff; break;
78
- case 2: if (prev) for (let i = 0; i < stride; i++) line[i] = (line[i] + prev[i]) & 0xff; break;
79
- case 3:
80
- for (let i = 0; i < stride; i++) {
81
- const left = i >= bpp ? line[i - bpp] : 0;
82
- const up = prev ? prev[i] : 0;
83
- line[i] = (line[i] + ((left + up) >> 1)) & 0xff;
84
- }
85
- break;
86
- case 4:
87
- for (let i = 0; i < stride; i++) {
88
- const left = i >= bpp ? line[i - bpp] : 0;
89
- const up = prev ? prev[i] : 0;
90
- const ul = prev && i >= bpp ? prev[i - bpp] : 0;
91
- line[i] = (line[i] + paeth(left, up, ul)) & 0xff;
92
- }
93
- break;
94
- default: throw new Error(`png: unknown filter ${filter} on row ${y}`);
95
- }
96
- prev = line;
97
- }
98
- return { bytes: out, stride, consumed: inPos };
99
- }
100
-
101
- /** Read sample `index` (0-based across the row) from a packed scanline. */
102
- function sampleReader(bitDepth) {
103
- if (bitDepth === 8) return (line, i) => line[i];
104
- if (bitDepth === 16) return (line, i) => line[i * 2]; // high byte
105
- const perByte = 8 / bitDepth;
106
- const mask = (1 << bitDepth) - 1;
107
- const scale = 255 / mask;
108
- return (line, i) => {
109
- const byte = line[(i / perByte) | 0];
110
- const shift = 8 - bitDepth * ((i % perByte) + 1);
111
- return Math.round(((byte >> shift) & mask) * scale);
112
- };
113
- }
114
-
115
- function writePixels(dst, dstWidth, bytes, stride, passWidth, passHeight, colorType, bitDepth, palette, trns, mapX, mapY) {
116
- const channels = CHANNELS[colorType];
117
- const read = sampleReader(bitDepth);
118
- const rawIndex = bitDepth < 8 ? (line, i) => {
119
- const perByte = 8 / bitDepth;
120
- const mask = (1 << bitDepth) - 1;
121
- const byte = line[(i / perByte) | 0];
122
- const shift = 8 - bitDepth * ((i % perByte) + 1);
123
- return (byte >> shift) & mask;
124
- } : read;
125
- for (let y = 0; y < passHeight; y++) {
126
- const line = bytes.subarray(y * stride, (y + 1) * stride);
127
- const dy = mapY(y);
128
- for (let x = 0; x < passWidth; x++) {
129
- const dx = mapX(x);
130
- const o = (dy * dstWidth + dx) * 4;
131
- let r, g, b, a = 255;
132
- switch (colorType) {
133
- case 0: {
134
- r = g = b = read(line, x);
135
- if (trns && trns.gray === rawIndex(line, x)) a = 0;
136
- break;
137
- }
138
- case 2: {
139
- r = read(line, x * 3); g = read(line, x * 3 + 1); b = read(line, x * 3 + 2);
140
- break;
141
- }
142
- case 3: {
143
- const idx = rawIndex(line, x);
144
- r = palette[idx * 3]; g = palette[idx * 3 + 1]; b = palette[idx * 3 + 2];
145
- if (trns && trns.alpha && idx < trns.alpha.length) a = trns.alpha[idx];
146
- break;
147
- }
148
- case 4: {
149
- r = g = b = read(line, x * 2); a = read(line, x * 2 + 1);
150
- break;
151
- }
152
- case 6: {
153
- r = read(line, x * 4); g = read(line, x * 4 + 1); b = read(line, x * 4 + 2); a = read(line, x * 4 + 3);
154
- break;
155
- }
156
- default: throw new Error(`png: unsupported color type ${colorType}`);
157
- }
158
- dst[o] = r; dst[o + 1] = g; dst[o + 2] = b; dst[o + 3] = a;
159
- }
160
- }
161
- return channels;
162
- }
163
-
164
- export function decodePng(buf) {
165
- if (!isPng(buf)) throw new Error('png: not a PNG (bad signature)');
166
- const chunks = readChunks(buf);
167
- const ihdr = chunks.find((c) => c.type === 'IHDR');
168
- if (!ihdr) throw new Error('png: missing IHDR');
169
- const width = ihdr.data.readUInt32BE(0);
170
- const height = ihdr.data.readUInt32BE(4);
171
- const bitDepth = ihdr.data[8];
172
- const colorType = ihdr.data[9];
173
- const interlace = ihdr.data[12];
174
- const channels = CHANNELS[colorType];
175
- if (!channels) throw new Error(`png: unsupported color type ${colorType}`);
176
- const palChunk = chunks.find((c) => c.type === 'PLTE');
177
- const palette = palChunk ? palChunk.data : null;
178
- const trnsChunk = chunks.find((c) => c.type === 'tRNS');
179
- let trns = null;
180
- if (trnsChunk) {
181
- if (colorType === 3) trns = { alpha: trnsChunk.data };
182
- else if (colorType === 0) trns = { gray: trnsChunk.data.readUInt16BE(0) >> (bitDepth === 16 ? 8 : 0) };
183
- }
184
- const idat = Buffer.concat(chunks.filter((c) => c.type === 'IDAT').map((c) => c.data));
185
- const raw = zlib.inflateSync(idat);
186
- const bpp = Math.max(1, Math.ceil((channels * bitDepth) / 8));
187
- const data = new Uint8Array(width * height * 4);
188
- const text = {};
189
- for (const c of chunks) {
190
- if (c.type === 'tEXt') {
191
- const z = c.data.indexOf(0);
192
- if (z > 0) text[c.data.toString('latin1', 0, z)] = c.data.toString('utf8', z + 1);
193
- }
194
- }
195
-
196
- if (interlace === 0) {
197
- const { bytes, stride } = unfilter(raw, width, height, bpp, bitDepth, channels);
198
- writePixels(data, width, bytes, stride, width, height, colorType, bitDepth, palette, trns, (x) => x, (y) => y);
199
- } else {
200
- // Adam7
201
- const passes = [
202
- [0, 0, 8, 8], [4, 0, 8, 8], [0, 4, 4, 8], [2, 0, 4, 4], [0, 2, 2, 4], [1, 0, 2, 2], [0, 1, 1, 2],
203
- ];
204
- let offset = 0;
205
- for (const [sx, sy, dx, dy] of passes) {
206
- const pw = Math.ceil((width - sx) / dx);
207
- const ph = Math.ceil((height - sy) / dy);
208
- if (pw <= 0 || ph <= 0) continue;
209
- const { bytes, stride, consumed } = unfilter(raw.subarray(offset), pw, ph, bpp, bitDepth, channels);
210
- offset += consumed;
211
- writePixels(data, width, bytes, stride, pw, ph, colorType, bitDepth, palette, trns, (x) => sx + x * dx, (y) => sy + y * dy);
212
- }
213
- }
214
- return { width, height, data, text };
215
- }
216
-
217
- function chunk(type, data) {
218
- const len = Buffer.alloc(4);
219
- len.writeUInt32BE(data.length, 0);
220
- const typeBuf = Buffer.from(type, 'latin1');
221
- const crc = Buffer.alloc(4);
222
- crc.writeUInt32BE(crc32(Buffer.concat([typeBuf, data])), 0);
223
- return Buffer.concat([len, typeBuf, data, crc]);
224
- }
225
-
226
- /**
227
- * Encode RGBA8 to PNG. `text` (optional) is a map of tEXt keyword -> value.
228
- * Uses filter type 0 on every row: comps and screenshots compress fine and the
229
- * encoder stays trivial.
230
- */
231
- export function encodePng({ width, height, data }, { text = null, level = 6 } = {}) {
232
- if (data.length !== width * height * 4) throw new Error(`png: data length ${data.length} != ${width}x${height}x4`);
233
- const stride = width * 4;
234
- const raw = Buffer.alloc((stride + 1) * height);
235
- for (let y = 0; y < height; y++) {
236
- raw[y * (stride + 1)] = 0;
237
- raw.set(data.subarray(y * stride, (y + 1) * stride), y * (stride + 1) + 1);
238
- }
239
- const ihdr = Buffer.alloc(13);
240
- ihdr.writeUInt32BE(width, 0);
241
- ihdr.writeUInt32BE(height, 4);
242
- ihdr[8] = 8; ihdr[9] = 6; ihdr[10] = 0; ihdr[11] = 0; ihdr[12] = 0;
243
- const parts = [SIGNATURE, chunk('IHDR', ihdr)];
244
- if (text) {
245
- for (const [k, v] of Object.entries(text)) {
246
- parts.push(chunk('tEXt', Buffer.concat([Buffer.from(k, 'latin1'), Buffer.from([0]), Buffer.from(String(v), 'utf8')])));
247
- }
248
- }
249
- parts.push(chunk('IDAT', zlib.deflateSync(raw, { level })));
250
- parts.push(chunk('IEND', Buffer.alloc(0)));
251
- return Buffer.concat(parts);
252
- }
253
-
254
- /**
255
- * Read any raster the comp pipeline meets (PNG natively; WebP / JPEG / GIF /
256
- * AVIF through a converter on PATH) as RGBA. Non-PNG input is converted to a
257
- * sibling cache file `<name>.<ext>.png` next to the source, never in place:
258
- * a session that overwrites `comp.webp` with PNG bytes leaves a file the
259
- * next tool cannot trust and a transcript replay cannot reconstruct.
260
- * Returns { image, path } where path is the PNG actually decoded.
261
- */
262
- export function loadRaster(file) {
263
- const buf = fs.readFileSync(file);
264
- if (isPng(buf)) return { image: decodePng(buf), path: file };
265
- const cache = `${file}.png`;
266
- if (fs.existsSync(cache)) {
267
- try { const b = fs.readFileSync(cache); if (isPng(b)) return { image: decodePng(b), path: cache }; } catch { /* reconvert */ }
268
- }
269
- const attempts = [
270
- ['dwebp', [file, '-o', cache]],
271
- ['sips', ['-s', 'format', 'png', file, '--out', cache]],
272
- ['magick', [file, cache]],
273
- ['convert', [file, cache]],
274
- ];
275
- let lastErr = null;
276
- for (const [cmd, args] of attempts) {
277
- try { execFileSync(cmd, args, { stdio: 'ignore' }); const b = fs.readFileSync(cache); if (isPng(b)) return { image: decodePng(b), path: cache }; }
278
- catch (e) { lastErr = e; }
279
- }
280
- throw new Error(`png: ${file} is not a PNG and no converter (dwebp, sips, magick, convert) could produce ${cache}${lastErr ? `: ${lastErr.message}` : ''}`);
281
- }
@@ -1,5 +0,0 @@
1
- // Source scripts default to slash commands. The provider build replaces only
2
- // this exact declaration, avoiding heuristic rewrites across executable code.
3
- export const IMPECCABLE_COMMAND_PREFIX = "/";
4
- export const IMPECCABLE_PROVIDER_ID = "pi";
5
- export const IMPECCABLE_COMMAND = `${IMPECCABLE_COMMAND_PREFIX}impeccable`;