quiver-cli 1.3.0 → 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 (384) 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 -51
  12. package/template/.agents/skills/apps/skybridge/SKILL.md +0 -50
  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 -247
  95. package/template/.agents/skills/data/prisma-cli/references/db-execute.md +0 -78
  96. package/template/.agents/skills/data/prisma-cli/references/db-pull.md +0 -185
  97. package/template/.agents/skills/data/prisma-cli/references/db-push.md +0 -148
  98. package/template/.agents/skills/data/prisma-cli/references/db-seed.md +0 -188
  99. package/template/.agents/skills/data/prisma-cli/references/debug.md +0 -46
  100. package/template/.agents/skills/data/prisma-cli/references/dev.md +0 -157
  101. package/template/.agents/skills/data/prisma-cli/references/format.md +0 -48
  102. package/template/.agents/skills/data/prisma-cli/references/generate.md +0 -173
  103. package/template/.agents/skills/data/prisma-cli/references/init.md +0 -136
  104. package/template/.agents/skills/data/prisma-cli/references/mcp.md +0 -38
  105. package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +0 -127
  106. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +0 -145
  107. package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +0 -89
  108. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +0 -78
  109. package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +0 -57
  110. package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +0 -65
  111. package/template/.agents/skills/data/prisma-cli/references/studio.md +0 -137
  112. package/template/.agents/skills/data/prisma-cli/references/validate.md +0 -53
  113. package/template/.agents/skills/data/prisma-client-api/SKILL.md +0 -216
  114. package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +0 -223
  115. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +0 -208
  116. package/template/.agents/skills/data/prisma-client-api/references/filters.md +0 -256
  117. package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +0 -281
  118. package/template/.agents/skills/data/prisma-client-api/references/query-options.md +0 -276
  119. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +0 -194
  120. package/template/.agents/skills/data/prisma-client-api/references/relations.md +0 -308
  121. package/template/.agents/skills/data/prisma-client-api/references/transactions.md +0 -184
  122. package/template/.agents/skills/design/impeccable/SKILL.md +0 -84
  123. package/template/.agents/skills/design/impeccable/reference/adapt.md +0 -312
  124. package/template/.agents/skills/design/impeccable/reference/adapt.native.md +0 -58
  125. package/template/.agents/skills/design/impeccable/reference/android.md +0 -40
  126. package/template/.agents/skills/design/impeccable/reference/animate.md +0 -86
  127. package/template/.agents/skills/design/impeccable/reference/audit.md +0 -136
  128. package/template/.agents/skills/design/impeccable/reference/audit.native.md +0 -139
  129. package/template/.agents/skills/design/impeccable/reference/bolder.md +0 -31
  130. package/template/.agents/skills/design/impeccable/reference/clarify.md +0 -94
  131. package/template/.agents/skills/design/impeccable/reference/colorize.md +0 -86
  132. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +0 -42
  133. package/template/.agents/skills/design/impeccable/reference/craft.md +0 -5
  134. package/template/.agents/skills/design/impeccable/reference/critique.md +0 -788
  135. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +0 -90
  136. package/template/.agents/skills/design/impeccable/reference/degraded/documenter.md +0 -24
  137. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +0 -37
  138. package/template/.agents/skills/design/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  139. package/template/.agents/skills/design/impeccable/reference/delight.md +0 -70
  140. package/template/.agents/skills/design/impeccable/reference/distill.md +0 -111
  141. package/template/.agents/skills/design/impeccable/reference/doctor.md +0 -53
  142. package/template/.agents/skills/design/impeccable/reference/document.md +0 -416
  143. package/template/.agents/skills/design/impeccable/reference/extract.md +0 -69
  144. package/template/.agents/skills/design/impeccable/reference/harden.md +0 -336
  145. package/template/.agents/skills/design/impeccable/reference/hooks.md +0 -105
  146. package/template/.agents/skills/design/impeccable/reference/init.md +0 -125
  147. package/template/.agents/skills/design/impeccable/reference/ios.md +0 -45
  148. package/template/.agents/skills/design/impeccable/reference/layout.md +0 -84
  149. package/template/.agents/skills/design/impeccable/reference/live-setup.md +0 -102
  150. package/template/.agents/skills/design/impeccable/reference/live.md +0 -323
  151. package/template/.agents/skills/design/impeccable/reference/new-work.md +0 -105
  152. package/template/.agents/skills/design/impeccable/reference/onboard.md +0 -234
  153. package/template/.agents/skills/design/impeccable/reference/operate.md +0 -61
  154. package/template/.agents/skills/design/impeccable/reference/optimize.md +0 -258
  155. package/template/.agents/skills/design/impeccable/reference/overdrive.md +0 -127
  156. package/template/.agents/skills/design/impeccable/reference/polish.md +0 -97
  157. package/template/.agents/skills/design/impeccable/reference/quieter.md +0 -99
  158. package/template/.agents/skills/design/impeccable/reference/routing.md +0 -18
  159. package/template/.agents/skills/design/impeccable/reference/shape.md +0 -59
  160. package/template/.agents/skills/design/impeccable/reference/typeset.md +0 -80
  161. package/template/.agents/skills/design/impeccable/reference/visualize.md +0 -47
  162. package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +0 -94
  163. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +0 -558
  164. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +0 -334
  165. package/template/.agents/skills/design/impeccable/scripts/context.mjs +0 -1450
  166. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +0 -213
  167. package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +0 -198
  168. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +0 -21
  169. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +0 -2023
  170. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +0 -438
  171. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +0 -983
  172. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +0 -8283
  173. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +0 -50
  174. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +0 -372
  175. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +0 -768
  176. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +0 -1186
  177. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +0 -264
  178. package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -189
  179. package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +0 -18
  180. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +0 -212
  181. package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +0 -166
  182. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +0 -617
  183. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +0 -5580
  184. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +0 -124
  185. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +0 -112
  186. package/template/.agents/skills/design/impeccable/scripts/detector/shared/fonts.mjs +0 -30
  187. package/template/.agents/skills/design/impeccable/scripts/detector/shared/inline-ignores.mjs +0 -148
  188. package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +0 -7
  189. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +0 -336
  190. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +0 -133
  191. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +0 -240
  192. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +0 -741
  193. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +0 -516
  194. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +0 -2100
  195. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +0 -78
  196. package/template/.agents/skills/design/impeccable/scripts/lib/artifact-schema.mjs +0 -93
  197. package/template/.agents/skills/design/impeccable/scripts/lib/composition-catalog.mjs +0 -200
  198. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +0 -357
  199. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +0 -842
  200. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +0 -658
  201. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-paths.mjs +0 -137
  202. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +0 -69
  203. package/template/.agents/skills/design/impeccable/scripts/lib/provider.mjs +0 -5
  204. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +0 -362
  205. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +0 -457
  206. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-notice.mjs +0 -169
  207. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +0 -457
  208. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +0 -151
  209. package/template/.agents/skills/design/impeccable/scripts/lib/target-args.mjs +0 -42
  210. package/template/.agents/skills/design/impeccable/scripts/lib/target-slug.mjs +0 -33
  211. package/template/.agents/skills/design/impeccable/scripts/lib/template-extensions.mjs +0 -146
  212. package/template/.agents/skills/design/impeccable/scripts/live/accept-css.mjs +0 -617
  213. package/template/.agents/skills/design/impeccable/scripts/live/accept-verify.mjs +0 -60
  214. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +0 -55
  215. package/template/.agents/skills/design/impeccable/scripts/live/completion.mjs +0 -28
  216. package/template/.agents/skills/design/impeccable/scripts/live/event-validation.mjs +0 -199
  217. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/astro.mjs +0 -47
  218. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/detect-utils.mjs +0 -73
  219. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/index.mjs +0 -143
  220. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/journal.mjs +0 -197
  221. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nextjs.mjs +0 -49
  222. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/nuxt.mjs +0 -161
  223. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/script-src.mjs +0 -17
  224. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/static-html.mjs +0 -26
  225. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/sveltekit.mjs +0 -71
  226. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tag-strategy.mjs +0 -247
  227. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/tanstack-start.mjs +0 -70
  228. package/template/.agents/skills/design/impeccable/scripts/live/frameworks/vite-generic.mjs +0 -42
  229. package/template/.agents/skills/design/impeccable/scripts/live/generation-preflight.mjs +0 -149
  230. package/template/.agents/skills/design/impeccable/scripts/live/insert-ui.mjs +0 -458
  231. package/template/.agents/skills/design/impeccable/scripts/live/instructions.mjs +0 -142
  232. package/template/.agents/skills/design/impeccable/scripts/live/manual-apply.mjs +0 -939
  233. package/template/.agents/skills/design/impeccable/scripts/live/manual-edit-routes.mjs +0 -357
  234. package/template/.agents/skills/design/impeccable/scripts/live/manual-edits-buffer.mjs +0 -152
  235. package/template/.agents/skills/design/impeccable/scripts/live/poll-lanes.mjs +0 -14
  236. package/template/.agents/skills/design/impeccable/scripts/live/roots.mjs +0 -508
  237. package/template/.agents/skills/design/impeccable/scripts/live/session-store.mjs +0 -563
  238. package/template/.agents/skills/design/impeccable/scripts/live/source-lock.mjs +0 -105
  239. package/template/.agents/skills/design/impeccable/scripts/live/source-search.mjs +0 -105
  240. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +0 -961
  241. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +0 -1342
  242. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +0 -316
  243. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +0 -280
  244. package/template/.agents/skills/design/impeccable/scripts/live/ui-core.mjs +0 -180
  245. package/template/.agents/skills/design/impeccable/scripts/live/vocabulary.mjs +0 -171
  246. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +0 -954
  247. package/template/.agents/skills/design/impeccable/scripts/live-browser-dom.js +0 -146
  248. package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +0 -123
  249. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +0 -12512
  250. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +0 -1244
  251. package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +0 -107
  252. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +0 -683
  253. package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +0 -51
  254. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +0 -503
  255. package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +0 -292
  256. package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +0 -368
  257. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +0 -429
  258. package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +0 -123
  259. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +0 -1661
  260. package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +0 -71
  261. package/template/.agents/skills/design/impeccable/scripts/live-target.mjs +0 -30
  262. package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +0 -927
  263. package/template/.agents/skills/design/impeccable/scripts/live.mjs +0 -359
  264. package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +0 -14
  265. package/template/.agents/skills/design/impeccable/scripts/palette.mjs +0 -628
  266. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +0 -221
  267. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +0 -932
  268. package/template/.agents/skills/design/impeccable/scripts/surface-brief.mjs +0 -74
  269. package/template/.agents/skills/design/shadcn/SKILL.md +0 -277
  270. package/template/.agents/skills/design/shadcn/agents/openai.yml +0 -5
  271. package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
  272. package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
  273. package/template/.agents/skills/design/shadcn/cli.md +0 -290
  274. package/template/.agents/skills/design/shadcn/customization.md +0 -209
  275. package/template/.agents/skills/design/shadcn/evals/evals.json +0 -77
  276. package/template/.agents/skills/design/shadcn/mcp.md +0 -105
  277. package/template/.agents/skills/design/shadcn/registry.md +0 -277
  278. package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +0 -306
  279. package/template/.agents/skills/design/shadcn/rules/chat.md +0 -224
  280. package/template/.agents/skills/design/shadcn/rules/composition.md +0 -213
  281. package/template/.agents/skills/design/shadcn/rules/forms.md +0 -192
  282. package/template/.agents/skills/design/shadcn/rules/icons.md +0 -101
  283. package/template/.agents/skills/design/shadcn/rules/styling.md +0 -185
  284. package/template/.agents/skills/find-skills/SKILL.md +0 -141
  285. package/template/.agents/skills/hono/SKILL.md +0 -579
  286. package/template/.agents/skills/integrations/langfuse/SKILL.md +0 -146
  287. package/template/.agents/skills/integrations/langfuse/references/ci-cd.md +0 -41
  288. package/template/.agents/skills/integrations/langfuse/references/cli.md +0 -60
  289. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +0 -88
  290. package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +0 -121
  291. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +0 -291
  292. package/template/.agents/skills/integrations/langfuse/references/prompt-engineering.md +0 -35
  293. package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +0 -79
  294. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +0 -55
  295. package/template/.agents/skills/integrations/langfuse/references/trace-evaluator-upgrade.md +0 -76
  296. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +0 -92
  297. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +0 -73
  298. package/template/.agents/skills/integrations/posthog/SKILL.md +0 -102
  299. package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +0 -63
  300. package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +0 -77
  301. package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +0 -57
  302. package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +0 -140
  303. package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +0 -490
  304. package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +0 -45
  305. package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +0 -139
  306. package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +0 -302
  307. package/template/.agents/skills/integrations/posthog/references/identify-users.md +0 -202
  308. package/template/.agents/skills/integrations/posthog/references/integration-example.md +0 -706
  309. package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +0 -385
  310. package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +0 -43
  311. package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +0 -37
  312. package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +0 -22
  313. package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +0 -38
  314. package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +0 -200
  315. package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +0 -62
  316. package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +0 -197
  317. package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +0 -397
  318. package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +0 -98
  319. package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +0 -120
  320. package/template/.agents/skills/repo/repo-ci/SKILL.md +0 -265
  321. package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +0 -129
  322. package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +0 -800
  323. package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +0 -47
  324. package/template/.agents/skills/repo/repo-init-node/SKILL.md +0 -196
  325. package/template/.agents/skills/skill-creator/LICENSE.txt +0 -202
  326. package/template/.agents/skills/skill-creator/SKILL.md +0 -485
  327. package/template/.agents/skills/skill-creator/agents/analyzer.md +0 -274
  328. package/template/.agents/skills/skill-creator/agents/comparator.md +0 -202
  329. package/template/.agents/skills/skill-creator/agents/grader.md +0 -223
  330. package/template/.agents/skills/skill-creator/assets/eval_review.html +0 -146
  331. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +0 -471
  332. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +0 -1325
  333. package/template/.agents/skills/skill-creator/references/schemas.md +0 -430
  334. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  335. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  336. package/template/.agents/skills/skill-creator/scripts/generate_report.py +0 -326
  337. package/template/.agents/skills/skill-creator/scripts/improve_description.py +0 -247
  338. package/template/.agents/skills/skill-creator/scripts/package_skill.py +0 -136
  339. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +0 -103
  340. package/template/.agents/skills/skill-creator/scripts/run_eval.py +0 -310
  341. package/template/.agents/skills/skill-creator/scripts/run_loop.py +0 -328
  342. package/template/.agents/skills/skill-creator/scripts/utils.py +0 -47
  343. package/template/.agents/skills/supabase/CHANGELOG.md +0 -71
  344. package/template/.agents/skills/supabase/SKILL.md +0 -145
  345. package/template/.agents/skills/supabase/assets/feedback-issue-template.md +0 -17
  346. package/template/.agents/skills/supabase/references/skill-feedback.md +0 -17
  347. package/template/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  348. package/template/.agents/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  349. package/template/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  350. package/template/.agents/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  351. package/template/.agents/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  352. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  353. package/template/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  354. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  355. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  356. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  357. package/template/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  358. package/template/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  359. package/template/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  360. package/template/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  361. package/template/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  362. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  363. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  364. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  365. package/template/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  366. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  367. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  368. package/template/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  369. package/template/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  370. package/template/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  371. package/template/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  372. package/template/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  373. package/template/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  374. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  375. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  376. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  377. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  378. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  379. package/template/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  380. package/template/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  381. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  382. package/template/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  383. package/template/.agents/skills/writing/humanizer/SKILL.md +0 -621
  384. package/template/.agents/upstreams.json +0 -116
@@ -1,55 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
-
4
- export const LIVE_BROWSER_SCRIPT_PARTS = Object.freeze([
5
- Object.freeze({ name: 'session-state', file: 'live-browser-session.js' }),
6
- Object.freeze({ name: 'dom-helpers', file: 'live-browser-dom.js' }),
7
- Object.freeze({ name: 'browser-ui', file: 'live-browser.js' }),
8
- ]);
9
-
10
- export function resolveLiveBrowserScriptParts(scriptsDir, parts = LIVE_BROWSER_SCRIPT_PARTS) {
11
- if (!scriptsDir) throw new Error('scriptsDir is required');
12
- return parts.map((part, index) => ({
13
- ...part,
14
- index,
15
- path: path.join(scriptsDir, part.file),
16
- }));
17
- }
18
-
19
- export function assertLiveBrowserScriptParts(parts, exists = fs.existsSync) {
20
- for (const part of parts) {
21
- if (!exists(part.path)) {
22
- throw new Error(`Live browser script part missing: ${part.name} (${part.path})`);
23
- }
24
- }
25
- return parts;
26
- }
27
-
28
- export function readLiveBrowserScriptParts(parts, readFile = (filePath) => fs.readFileSync(filePath, 'utf-8')) {
29
- return parts.map((part) => ({
30
- ...part,
31
- source: readFile(part.path),
32
- }));
33
- }
34
-
35
- export function assembleLiveBrowserScript({ token, port, vocabulary, commandPrefix = '/', appRoot = null, parts }) {
36
- const prelude =
37
- `window.__IMPECCABLE_TOKEN__ = '${token}';\n` +
38
- `window.__IMPECCABLE_PORT__ = ${port};\n` +
39
- // Project identity for browser-side session storage. localStorage is
40
- // keyed by ORIGIN, and two projects routinely share a localhost port
41
- // across time; saved sessions carry this value so a resume can tell a
42
- // foreign project's leftovers from its own.
43
- `window.__IMPECCABLE_APP_ROOT__ = ${JSON.stringify(appRoot)};\n` +
44
- `window.__IMPECCABLE_COMMAND_PREFIX__ = ${JSON.stringify(commandPrefix)};\n` +
45
- // Canonical command vocabulary (values + labels + icons). live-browser.js
46
- // builds its action picker from this instead of an inline copy.
47
- `window.__IMPECCABLE_VOCAB__ = ${JSON.stringify(vocabulary)};\n`;
48
-
49
- const body = parts.map((part) => {
50
- const file = part.file || path.basename(part.path || '');
51
- return `// --- impeccable live script part: ${part.name} (${file}) ---\n${part.source}`;
52
- }).join('\n');
53
-
54
- return prelude + body;
55
- }
@@ -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
- }