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