create-inox-app 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/README.md +110 -0
  2. package/dist/cli.js +22196 -0
  3. package/dist/prompt-Bp8saGVV.js +852 -0
  4. package/dist/templates/base/.gitignore.hbs +9 -0
  5. package/dist/templates/base/package.json.hbs +29 -0
  6. package/dist/templates/base/packages/typescript-config/base.json +17 -0
  7. package/dist/templates/base/packages/typescript-config/nextjs.json +8 -0
  8. package/dist/templates/base/packages/typescript-config/package.json +10 -0
  9. package/dist/templates/base/packages/typescript-config/react-library.json +7 -0
  10. package/dist/templates/base/turbo.json.hbs +32 -0
  11. package/dist/templates/ci/.gitlab-ci.yml.hbs +70 -0
  12. package/dist/templates/ci/scripts/build.sh.hbs +94 -0
  13. package/dist/templates/ci/scripts/prebuild.sh.hbs +11 -0
  14. package/dist/templates/claude-config/app/.agents/skills/agent-browser/SKILL.md +325 -0
  15. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/authentication.md +202 -0
  16. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/commands.md +259 -0
  17. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/proxy-support.md +188 -0
  18. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/session-management.md +193 -0
  19. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/snapshot-refs.md +194 -0
  20. package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/video-recording.md +173 -0
  21. package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/authenticated-session.sh +100 -0
  22. package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/capture-workflow.sh +69 -0
  23. package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/form-automation.sh +62 -0
  24. package/dist/templates/claude-config/app/.agents/skills/ai-elements/SKILL.md +150 -0
  25. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/agent.md +131 -0
  26. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/artifact.md +84 -0
  27. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/attachments.md +190 -0
  28. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/audio-player.md +134 -0
  29. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/canvas.md +32 -0
  30. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
  31. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/checkpoint.md +163 -0
  32. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/code-block.md +170 -0
  33. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/commit.md +177 -0
  34. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/confirmation.md +252 -0
  35. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/connection.md +32 -0
  36. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/context.md +126 -0
  37. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/controls.md +30 -0
  38. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/conversation.md +210 -0
  39. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/edge.md +50 -0
  40. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/environment-variables.md +102 -0
  41. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/file-tree.md +72 -0
  42. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/image.md +143 -0
  43. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/inline-citation.md +293 -0
  44. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/jsx-preview.md +101 -0
  45. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/message.md +256 -0
  46. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/mic-selector.md +186 -0
  47. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/model-selector.md +112 -0
  48. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/node.md +71 -0
  49. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
  50. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/package-info.md +95 -0
  51. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/panel.md +31 -0
  52. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/persona.md +158 -0
  53. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/plan.md +79 -0
  54. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/prompt-input.md +555 -0
  55. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/queue.md +172 -0
  56. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/reasoning.md +219 -0
  57. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/sandbox.md +126 -0
  58. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/schema-display.md +102 -0
  59. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/shimmer.md +48 -0
  60. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/snippet.md +64 -0
  61. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/sources.md +193 -0
  62. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/speech-input.md +160 -0
  63. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/stack-trace.md +218 -0
  64. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/suggestion.md +121 -0
  65. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/task.md +215 -0
  66. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/terminal.md +103 -0
  67. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/test-results.md +157 -0
  68. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/tool.md +275 -0
  69. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/toolbar.md +30 -0
  70. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/transcription.md +120 -0
  71. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/voice-selector.md +241 -0
  72. package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/web-preview.md +197 -0
  73. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
  74. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/artifact.tsx +111 -0
  75. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments-inline.tsx +117 -0
  76. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments-list.tsx +88 -0
  77. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments.tsx +78 -0
  78. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
  79. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/audio-player.tsx +69 -0
  80. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +74 -0
  81. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/checkpoint.tsx +90 -0
  82. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
  83. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/code-block.tsx +115 -0
  84. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
  85. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +35 -0
  86. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +35 -0
  87. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
  88. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation.tsx +53 -0
  89. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/context.tsx +45 -0
  90. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/conversation.tsx +176 -0
  91. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/environment-variables.tsx +55 -0
  92. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +14 -0
  93. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +17 -0
  94. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +20 -0
  95. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree.tsx +38 -0
  96. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/image.tsx +20 -0
  97. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/inline-citation.tsx +95 -0
  98. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/jsx-preview.tsx +99 -0
  99. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/message.tsx +324 -0
  100. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/mic-selector.tsx +46 -0
  101. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/model-selector.tsx +362 -0
  102. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
  103. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/package-info.tsx +46 -0
  104. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-command.tsx +96 -0
  105. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-glint.tsx +96 -0
  106. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-halo.tsx +96 -0
  107. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-mana.tsx +96 -0
  108. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +96 -0
  109. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-opal.tsx +96 -0
  110. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/plan.tsx +63 -0
  111. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +459 -0
  112. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +40 -0
  113. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input.tsx +247 -0
  114. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +367 -0
  115. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/queue.tsx +276 -0
  116. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/reasoning.tsx +67 -0
  117. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sandbox.tsx +166 -0
  118. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +7 -0
  119. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
  120. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
  121. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
  122. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
  123. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +29 -0
  124. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +39 -0
  125. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
  126. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
  127. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
  128. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sources-custom.tsx +34 -0
  129. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sources.tsx +27 -0
  130. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/speech-input.tsx +79 -0
  131. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
  132. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
  133. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace.tsx +54 -0
  134. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/suggestion-input.tsx +137 -0
  135. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/suggestion.tsx +28 -0
  136. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/task.tsx +60 -0
  137. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
  138. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
  139. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
  140. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal.tsx +77 -0
  141. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
  142. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
  143. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
  144. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results.tsx +78 -0
  145. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
  146. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
  147. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-output-available.tsx +76 -0
  148. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-output-error.tsx +45 -0
  149. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool.tsx +205 -0
  150. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/transcription.tsx +284 -0
  151. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/voice-selector.tsx +228 -0
  152. package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/web-preview.tsx +99 -0
  153. package/dist/templates/claude-config/app/.agents/skills/ai-sdk/SKILL.md +78 -0
  154. package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
  155. package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/common-errors.md +439 -0
  156. package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/devtools.md +52 -0
  157. package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/type-safe-agents.md +200 -0
  158. package/dist/templates/claude-config/app/.agents/skills/better-auth-best-practices/SKILL.md +166 -0
  159. package/dist/templates/claude-config/app/.agents/skills/building-components/SKILL.md +37 -0
  160. package/dist/templates/claude-config/app/.agents/skills/building-components/references/accessibility.mdx +819 -0
  161. package/dist/templates/claude-config/app/.agents/skills/building-components/references/as-child.mdx +324 -0
  162. package/dist/templates/claude-config/app/.agents/skills/building-components/references/composition.mdx +239 -0
  163. package/dist/templates/claude-config/app/.agents/skills/building-components/references/data-attributes.mdx +413 -0
  164. package/dist/templates/claude-config/app/.agents/skills/building-components/references/definitions.mdx +258 -0
  165. package/dist/templates/claude-config/app/.agents/skills/building-components/references/design-tokens.mdx +57 -0
  166. package/dist/templates/claude-config/app/.agents/skills/building-components/references/docs.mdx +155 -0
  167. package/dist/templates/claude-config/app/.agents/skills/building-components/references/marketplaces.mdx +144 -0
  168. package/dist/templates/claude-config/app/.agents/skills/building-components/references/npm.mdx +166 -0
  169. package/dist/templates/claude-config/app/.agents/skills/building-components/references/polymorphism.mdx +583 -0
  170. package/dist/templates/claude-config/app/.agents/skills/building-components/references/principles.mdx +61 -0
  171. package/dist/templates/claude-config/app/.agents/skills/building-components/references/registry.mdx +169 -0
  172. package/dist/templates/claude-config/app/.agents/skills/building-components/references/state.mdx +99 -0
  173. package/dist/templates/claude-config/app/.agents/skills/building-components/references/styling.mdx +286 -0
  174. package/dist/templates/claude-config/app/.agents/skills/building-components/references/types.mdx +191 -0
  175. package/dist/templates/claude-config/app/.agents/skills/docker-expert/SKILL.md +409 -0
  176. package/dist/templates/claude-config/app/.agents/skills/email-and-password-best-practices/SKILL.md +224 -0
  177. package/dist/templates/claude-config/app/.agents/skills/find-skills/SKILL.md +133 -0
  178. package/dist/templates/claude-config/app/.agents/skills/frontend-design/LICENSE.txt +177 -0
  179. package/dist/templates/claude-config/app/.agents/skills/frontend-design/SKILL.md +42 -0
  180. package/dist/templates/claude-config/app/.agents/skills/git-commit/SKILL.md +124 -0
  181. package/dist/templates/claude-config/app/.agents/skills/gitlab-ci-patterns/SKILL.md +271 -0
  182. package/dist/templates/claude-config/app/.agents/skills/hono/SKILL.md +90 -0
  183. package/dist/templates/claude-config/app/.agents/skills/langfuse-observability/SKILL.md +139 -0
  184. package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/SKILL.md +127 -0
  185. package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/context.md +157 -0
  186. package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/pitfalls.md +118 -0
  187. package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/structure.md +193 -0
  188. package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/wide-events.md +113 -0
  189. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/SKILL.md +153 -0
  190. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/async-patterns.md +87 -0
  191. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/bundling.md +180 -0
  192. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/data-patterns.md +297 -0
  193. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/debug-tricks.md +105 -0
  194. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/directives.md +73 -0
  195. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/error-handling.md +227 -0
  196. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/file-conventions.md +140 -0
  197. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/font.md +245 -0
  198. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/functions.md +108 -0
  199. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/hydration-error.md +91 -0
  200. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/image.md +173 -0
  201. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/metadata.md +301 -0
  202. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/parallel-routes.md +287 -0
  203. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/route-handlers.md +146 -0
  204. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
  205. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/runtime-selection.md +39 -0
  206. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/scripts.md +141 -0
  207. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/self-hosting.md +371 -0
  208. package/dist/templates/claude-config/app/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
  209. package/dist/templates/claude-config/app/.agents/skills/next-cache-components/SKILL.md +411 -0
  210. package/dist/templates/claude-config/app/.agents/skills/next-upgrade/SKILL.md +50 -0
  211. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/SKILL.md +179 -0
  212. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/CHEATSHEET.md +418 -0
  213. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/MIGRATIONS.md +536 -0
  214. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/PERFORMANCE.md +559 -0
  215. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/POSTGRES.md +588 -0
  216. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/QUERIES.md +764 -0
  217. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/RELATIONS.md +624 -0
  218. package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/SCHEMA.md +554 -0
  219. package/dist/templates/claude-config/app/.agents/skills/skill-creator/LICENSE.txt +202 -0
  220. package/dist/templates/claude-config/app/.agents/skills/skill-creator/SKILL.md +356 -0
  221. package/dist/templates/claude-config/app/.agents/skills/skill-creator/references/output-patterns.md +82 -0
  222. package/dist/templates/claude-config/app/.agents/skills/skill-creator/references/workflows.md +28 -0
  223. package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/init_skill.py +303 -0
  224. package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/package_skill.py +113 -0
  225. package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/quick_validate.py +95 -0
  226. package/dist/templates/claude-config/app/.agents/skills/streamdown/SKILL.md +164 -0
  227. package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/basic-streaming.tsx +34 -0
  228. package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/custom-security.tsx +38 -0
  229. package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/full-featured.tsx +60 -0
  230. package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/static-mode.tsx +17 -0
  231. package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/with-caret.tsx +39 -0
  232. package/dist/templates/claude-config/app/.agents/skills/streamdown/references/api.md +278 -0
  233. package/dist/templates/claude-config/app/.agents/skills/streamdown/references/features.md +201 -0
  234. package/dist/templates/claude-config/app/.agents/skills/streamdown/references/plugins.md +239 -0
  235. package/dist/templates/claude-config/app/.agents/skills/streamdown/references/security.md +192 -0
  236. package/dist/templates/claude-config/app/.agents/skills/streamdown/references/styling.md +166 -0
  237. package/dist/templates/claude-config/app/.agents/skills/tdd/SKILL.md +107 -0
  238. package/dist/templates/claude-config/app/.agents/skills/tdd/deep-modules.md +33 -0
  239. package/dist/templates/claude-config/app/.agents/skills/tdd/interface-design.md +31 -0
  240. package/dist/templates/claude-config/app/.agents/skills/tdd/mocking.md +60 -0
  241. package/dist/templates/claude-config/app/.agents/skills/tdd/refactoring.md +10 -0
  242. package/dist/templates/claude-config/app/.agents/skills/tdd/tests.md +61 -0
  243. package/dist/templates/claude-config/app/.agents/skills/turborepo/SKILL.md +914 -0
  244. package/dist/templates/claude-config/app/.agents/skills/turborepo/command/turborepo.md +70 -0
  245. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/RULE.md +241 -0
  246. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/dependencies.md +246 -0
  247. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/packages.md +335 -0
  248. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/structure.md +270 -0
  249. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/boundaries/RULE.md +126 -0
  250. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/RULE.md +107 -0
  251. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/gotchas.md +169 -0
  252. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/remote-cache.md +127 -0
  253. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/RULE.md +79 -0
  254. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/github-actions.md +162 -0
  255. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/patterns.md +145 -0
  256. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/vercel.md +103 -0
  257. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/cli/RULE.md +100 -0
  258. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/cli/commands.md +297 -0
  259. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/RULE.md +211 -0
  260. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/global-options.md +191 -0
  261. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/gotchas.md +348 -0
  262. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/tasks.md +281 -0
  263. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/RULE.md +96 -0
  264. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/gotchas.md +141 -0
  265. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/modes.md +101 -0
  266. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/filtering/RULE.md +148 -0
  267. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/filtering/patterns.md +152 -0
  268. package/dist/templates/claude-config/app/.agents/skills/turborepo/references/watch/RULE.md +99 -0
  269. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/AGENTS.md +917 -0
  270. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/SKILL.md +88 -0
  271. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +94 -0
  272. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/architecture-compound-components.md +108 -0
  273. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +84 -0
  274. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +94 -0
  275. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  276. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  277. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +103 -0
  278. package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  279. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/AGENTS.md +2883 -0
  280. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/SKILL.md +138 -0
  281. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  282. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  283. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  284. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +35 -0
  285. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  286. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +48 -0
  287. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +24 -0
  288. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  289. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  290. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +37 -0
  291. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +48 -0
  292. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +34 -0
  293. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +44 -0
  294. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +78 -0
  295. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +74 -0
  296. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  297. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  298. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +110 -0
  299. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  300. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  301. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +68 -0
  302. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  303. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  304. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  305. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  306. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +50 -0
  307. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  308. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  309. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  310. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  311. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +38 -0
  312. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +32 -0
  313. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  314. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +36 -0
  315. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +72 -0
  316. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +26 -0
  317. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  318. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  319. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  320. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  321. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  322. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  323. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +77 -0
  324. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +56 -0
  325. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +36 -0
  326. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  327. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  328. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  329. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  330. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  331. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  332. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  333. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  334. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  335. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  336. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  337. package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  338. package/dist/templates/claude-config/app/.agents/skills/web-design-guidelines/SKILL.md +40 -0
  339. package/dist/templates/claude-config/app/.agents/skills/workflow/SKILL.md +181 -0
  340. package/dist/templates/claude-config/app/.claude/commands/council.md +7 -0
  341. package/dist/templates/claude-config/app/.claude/commands/deslop.md +25 -0
  342. package/dist/templates/claude-config/app/.claude/commands/diagram.md +101 -0
  343. package/dist/templates/claude-config/app/.claude/commands/fix-merge.md +47 -0
  344. package/dist/templates/claude-config/app/.claude/commands/you-might-not-need-an-effect.md +10 -0
  345. package/dist/templates/claude-config/app/.claude/hooks/post-tool-use-tracker.sh +187 -0
  346. package/dist/templates/claude-config/app/.claude/hooks/skill-activation-prompt.sh +5 -0
  347. package/dist/templates/claude-config/app/.claude/hooks/skill-activation-prompt.ts +134 -0
  348. package/dist/templates/claude-config/app/.claude/rules/comments.md +12 -0
  349. package/dist/templates/claude-config/app/.claude/rules/typescript.md +31 -0
  350. package/dist/templates/claude-config/app/.claude/settings.json.hbs +74 -0
  351. package/dist/templates/claude-config/app/.claude/skills/skill-rules.json.hbs +309 -0
  352. package/dist/templates/claude-config/app/AGENTS.md.hbs +185 -0
  353. package/dist/templates/claude-config/app/CLAUDE.md.hbs +5 -0
  354. package/dist/templates/claude-config/kustomize/.agents/skills/git-commit/SKILL.md +124 -0
  355. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/SKILL.md +534 -0
  356. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  357. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  358. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  359. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/references/deployment-spec.md +780 -0
  360. package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/references/service-spec.md +748 -0
  361. package/dist/templates/claude-config/kustomize/.claude/settings.json +42 -0
  362. package/dist/templates/claude-config/kustomize/.claude/skills/git-commit/SKILL.md +124 -0
  363. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/SKILL.md +534 -0
  364. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  365. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  366. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  367. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/references/deployment-spec.md +780 -0
  368. package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/references/service-spec.md +748 -0
  369. package/dist/templates/docker/.dockerignore.hbs +8 -0
  370. package/dist/templates/docker/Dockerfile.hbs +81 -0
  371. package/dist/templates/docker/docker-compose.yml.hbs +55 -0
  372. package/dist/templates/kustomize/base/deployments/app.yaml.hbs +44 -0
  373. package/dist/templates/kustomize/base/ingress/app.yaml.hbs +20 -0
  374. package/dist/templates/kustomize/base/jobs/app-jobs.yaml.hbs +43 -0
  375. package/dist/templates/kustomize/base/kustomization.yaml.hbs +13 -0
  376. package/dist/templates/kustomize/base/secrets/regcred.yaml.hbs +7 -0
  377. package/dist/templates/kustomize/base/services/app.yaml.hbs +12 -0
  378. package/dist/templates/kustomize/overlays/{{env}}/configs/app.config.env.hbs +21 -0
  379. package/dist/templates/kustomize/overlays/{{env}}/configs/paradedb.config.env.hbs +3 -0
  380. package/dist/templates/kustomize/overlays/{{env}}/deployments/paradedb.yaml.hbs +28 -0
  381. package/dist/templates/kustomize/overlays/{{env}}/deployments/redis.yaml.hbs +18 -0
  382. package/dist/templates/kustomize/overlays/{{env}}/kustomization.yaml.hbs +36 -0
  383. package/dist/templates/kustomize/overlays/{{env}}/patch-operation/ingress-host.yaml.hbs +15 -0
  384. package/dist/templates/kustomize/overlays/{{env}}/services/paradedb.yaml.hbs +11 -0
  385. package/dist/templates/kustomize/overlays/{{env}}/services/redis.yaml.hbs +11 -0
  386. package/dist/templates/kustomize/overlays/{{env}}/storage/paradedb-pvc.yaml.hbs +10 -0
  387. package/dist/templates/presets/ai-chat-app/apps/web/.env.example +11 -0
  388. package/dist/templates/presets/ai-chat-app/apps/web/app/api/auth/[...all]/route.ts +5 -0
  389. package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/input-guardrail.ts +47 -0
  390. package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/route.ts +266 -0
  391. package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/[id]/messages/route.ts +38 -0
  392. package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/[id]/route.ts +59 -0
  393. package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/route.ts +24 -0
  394. package/dist/templates/presets/ai-chat-app/apps/web/app/api/health/route.ts +21 -0
  395. package/dist/templates/presets/ai-chat-app/apps/web/app/chat/[id]/page.tsx +54 -0
  396. package/dist/templates/presets/ai-chat-app/apps/web/app/chat/layout.tsx +23 -0
  397. package/dist/templates/presets/ai-chat-app/apps/web/app/chat/page.tsx +9 -0
  398. package/dist/templates/presets/ai-chat-app/apps/web/app/error.tsx +20 -0
  399. package/dist/templates/presets/ai-chat-app/apps/web/app/global-error.tsx +42 -0
  400. package/dist/templates/presets/ai-chat-app/apps/web/app/globals.css +187 -0
  401. package/dist/templates/presets/ai-chat-app/apps/web/app/layout.tsx.hbs +30 -0
  402. package/dist/templates/presets/ai-chat-app/apps/web/app/login/login-form.tsx +96 -0
  403. package/dist/templates/presets/ai-chat-app/apps/web/app/login/page.tsx +14 -0
  404. package/dist/templates/presets/ai-chat-app/apps/web/app/not-found.tsx +15 -0
  405. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/code-block.tsx +518 -0
  406. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/context.tsx +356 -0
  407. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/conversation.tsx +150 -0
  408. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/environment-variables.tsx +303 -0
  409. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/message.tsx +295 -0
  410. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/prompt-input.tsx +1179 -0
  411. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/sources.tsx +54 -0
  412. package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/tool.tsx +157 -0
  413. package/dist/templates/presets/ai-chat-app/apps/web/components/app-sidebar.tsx +110 -0
  414. package/dist/templates/presets/ai-chat-app/apps/web/components/chat-sessions-provider.tsx +89 -0
  415. package/dist/templates/presets/ai-chat-app/apps/web/components/chat-sidebar-list.tsx +174 -0
  416. package/dist/templates/presets/ai-chat-app/apps/web/components/chat-view.tsx +156 -0
  417. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/accordion.tsx +72 -0
  418. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/alert-dialog.tsx +162 -0
  419. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/alert.tsx +73 -0
  420. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/aspect-ratio.tsx +22 -0
  421. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/avatar.tsx +93 -0
  422. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/badge.tsx +49 -0
  423. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/breadcrumb.tsx +103 -0
  424. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/button-group.tsx +78 -0
  425. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/button.tsx +60 -0
  426. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/calendar.tsx +185 -0
  427. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/card.tsx +92 -0
  428. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/carousel.tsx +231 -0
  429. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/chart.tsx +325 -0
  430. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/checkbox.tsx +28 -0
  431. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/collapsible.tsx +17 -0
  432. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/combobox.tsx +273 -0
  433. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/command.tsx +181 -0
  434. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/context-menu.tsx +245 -0
  435. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/dialog.tsx +135 -0
  436. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/direction.tsx +3 -0
  437. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/drawer.tsx +120 -0
  438. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/dropdown-menu.tsx +258 -0
  439. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/empty.tsx +94 -0
  440. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/field.tsx +224 -0
  441. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/hover-card.tsx +46 -0
  442. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input-group.tsx +146 -0
  443. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input-otp.tsx +86 -0
  444. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input.tsx +20 -0
  445. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/item.tsx +188 -0
  446. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/kbd.tsx +26 -0
  447. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/label.tsx +20 -0
  448. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/menubar.tsx +270 -0
  449. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/native-select.tsx +43 -0
  450. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/navigation-menu.tsx +161 -0
  451. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/pagination.tsx +118 -0
  452. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/popover.tsx +77 -0
  453. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/progress.tsx +66 -0
  454. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/radio-group.tsx +39 -0
  455. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/resizable.tsx +42 -0
  456. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/scroll-area.tsx +51 -0
  457. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/select.tsx +190 -0
  458. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/separator.tsx +21 -0
  459. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sheet.tsx +125 -0
  460. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sidebar.tsx +689 -0
  461. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/skeleton.tsx +13 -0
  462. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/slider.tsx +54 -0
  463. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sonner.tsx +45 -0
  464. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/spinner.tsx +15 -0
  465. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/switch.tsx +32 -0
  466. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/table.tsx +89 -0
  467. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/tabs.tsx +75 -0
  468. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/textarea.tsx +18 -0
  469. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/toggle-group.tsx +87 -0
  470. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/toggle.tsx +44 -0
  471. package/dist/templates/presets/ai-chat-app/apps/web/components/ui/tooltip.tsx +54 -0
  472. package/dist/templates/presets/ai-chat-app/apps/web/components.json +20 -0
  473. package/dist/templates/presets/ai-chat-app/apps/web/drizzle.config.ts +10 -0
  474. package/dist/templates/presets/ai-chat-app/apps/web/env.ts +30 -0
  475. package/dist/templates/presets/ai-chat-app/apps/web/hooks/use-mobile.ts +19 -0
  476. package/dist/templates/presets/ai-chat-app/apps/web/instrumentation.ts +21 -0
  477. package/dist/templates/presets/ai-chat-app/apps/web/lib/auth-client.ts +3 -0
  478. package/dist/templates/presets/ai-chat-app/apps/web/lib/auth-session.ts +9 -0
  479. package/dist/templates/presets/ai-chat-app/apps/web/lib/auth.ts +16 -0
  480. package/dist/templates/presets/ai-chat-app/apps/web/lib/db/index.ts +11 -0
  481. package/dist/templates/presets/ai-chat-app/apps/web/lib/db/migrate.ts +53 -0
  482. package/dist/templates/presets/ai-chat-app/apps/web/lib/db/schema.ts +94 -0
  483. package/dist/templates/presets/ai-chat-app/apps/web/lib/db/seed.ts +123 -0
  484. package/dist/templates/presets/ai-chat-app/apps/web/lib/group-by-date.ts +34 -0
  485. package/dist/templates/presets/ai-chat-app/apps/web/lib/logger.ts +21 -0
  486. package/dist/templates/presets/ai-chat-app/apps/web/lib/openrouter.ts +7 -0
  487. package/dist/templates/presets/ai-chat-app/apps/web/lib/schemas/auth.ts +8 -0
  488. package/dist/templates/presets/ai-chat-app/apps/web/lib/utils.ts +4 -0
  489. package/dist/templates/presets/ai-chat-app/apps/web/next-env.d.ts +6 -0
  490. package/dist/templates/presets/ai-chat-app/apps/web/next.config.ts +14 -0
  491. package/dist/templates/presets/ai-chat-app/apps/web/package.json +70 -0
  492. package/dist/templates/presets/ai-chat-app/apps/web/postcss.config.mjs +7 -0
  493. package/dist/templates/presets/ai-chat-app/apps/web/proxy.ts +13 -0
  494. package/dist/templates/presets/ai-chat-app/apps/web/tsconfig.json +14 -0
  495. package/dist/templates/presets/blank/apps/web/.env.example +1 -0
  496. package/dist/templates/presets/blank/apps/web/app/api/health/route.ts +11 -0
  497. package/dist/templates/presets/blank/apps/web/app/globals.css +49 -0
  498. package/dist/templates/presets/blank/apps/web/app/layout.tsx.hbs +30 -0
  499. package/dist/templates/presets/blank/apps/web/app/page.tsx.hbs +10 -0
  500. package/dist/templates/presets/blank/apps/web/env.ts +10 -0
  501. package/dist/templates/presets/blank/apps/web/next-env.d.ts +2 -0
  502. package/dist/templates/presets/blank/apps/web/next.config.ts +9 -0
  503. package/dist/templates/presets/blank/apps/web/package.json.hbs +27 -0
  504. package/dist/templates/presets/blank/apps/web/postcss.config.mjs +7 -0
  505. package/dist/templates/presets/blank/apps/web/tsconfig.json +14 -0
  506. package/dist/templates/tooling/.oxfmtrc.json +6 -0
  507. package/dist/templates/tooling/.oxlintrc.json +20 -0
  508. package/dist/templates/tooling/commitlint.config.ts.hbs +3 -0
  509. package/dist/templates/tooling/lefthook.yml.hbs +25 -0
  510. package/package.json +47 -0
@@ -0,0 +1,239 @@
1
+ # Streamdown Plugins Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [Plugin Overview](#plugin-overview)
6
+ - [@streamdown/code](#streamdowncode)
7
+ - [@streamdown/mermaid](#streamdownmermaid)
8
+ - [@streamdown/math](#streamdownmath)
9
+ - [@streamdown/cjk](#streamdowncjk)
10
+ - [Built-in Remark Plugins](#built-in-remark-plugins)
11
+ - [Built-in Rehype Plugins](#built-in-rehype-plugins)
12
+ - [Customizing Built-in Plugins](#customizing-built-in-plugins)
13
+
14
+ ## Plugin Overview
15
+
16
+ Each plugin is a standalone package. Install only what's needed:
17
+
18
+ ```bash
19
+ npm install @streamdown/code @streamdown/mermaid @streamdown/math @streamdown/cjk
20
+ ```
21
+
22
+ ```tsx
23
+ import { code } from '@streamdown/code';
24
+ import { mermaid } from '@streamdown/mermaid';
25
+ import { math } from '@streamdown/math';
26
+ import { cjk } from '@streamdown/cjk';
27
+ import 'katex/dist/katex.min.css'; // Required for math
28
+
29
+ <Streamdown plugins={{ code, mermaid, math, cjk }}>
30
+ {markdown}
31
+ </Streamdown>
32
+ ```
33
+
34
+ ## @streamdown/code
35
+
36
+ Syntax highlighting via Shiki. Supports 200+ languages (lazy-loaded on demand).
37
+
38
+ **Install:**
39
+ ```bash
40
+ npm install @streamdown/code
41
+ ```
42
+
43
+ **Default usage:**
44
+ ```tsx
45
+ import { code } from '@streamdown/code';
46
+
47
+ <Streamdown plugins={{ code }}>{markdown}</Streamdown>
48
+ ```
49
+
50
+ **Custom themes:**
51
+ ```tsx
52
+ import { createCodePlugin } from '@streamdown/code';
53
+
54
+ const code = createCodePlugin({
55
+ themes: ['github-light', 'github-dark'], // [light, dark]
56
+ });
57
+ ```
58
+
59
+ Theme is also configurable via the `shikiTheme` prop on Streamdown:
60
+ ```tsx
61
+ <Streamdown plugins={{ code }} shikiTheme={['one-light', 'one-dark-pro']}>
62
+ {markdown}
63
+ </Streamdown>
64
+ ```
65
+
66
+ **Features:**
67
+ - Copy button on hover (disabled during streaming)
68
+ - Download button with correct file extension
69
+ - 200+ languages: js, ts, python, go, java, rust, c, cpp, ruby, php, swift, kotlin, etc.
70
+ - Token caching for performance
71
+ - Lazy language loading
72
+
73
+ **Streaming behavior:** Unterminated code blocks are gracefully handled by remend. Copy/download buttons disabled when `isAnimating={true}`.
74
+
75
+ **Common issue — Shiki external package warning:**
76
+ If using Next.js and seeing warnings, install shiki explicitly and add to `next.config.js`:
77
+ ```js
78
+ transpilePackages: ['shiki'],
79
+ ```
80
+
81
+ ## @streamdown/mermaid
82
+
83
+ Interactive Mermaid diagrams.
84
+
85
+ **Install:**
86
+ ```bash
87
+ npm install @streamdown/mermaid
88
+ ```
89
+
90
+ **Default usage:**
91
+ ```tsx
92
+ import { mermaid } from '@streamdown/mermaid';
93
+
94
+ <Streamdown plugins={{ mermaid }}>{markdown}</Streamdown>
95
+ ```
96
+
97
+ **Custom config:**
98
+ ```tsx
99
+ import { createMermaidPlugin } from '@streamdown/mermaid';
100
+
101
+ const mermaid = createMermaidPlugin({
102
+ config: {
103
+ theme: 'dark', // 'default' | 'dark' | 'forest' | 'neutral' | 'base'
104
+ fontFamily: 'monospace',
105
+ },
106
+ });
107
+ ```
108
+
109
+ **Mermaid options on Streamdown:**
110
+ ```tsx
111
+ <Streamdown
112
+ plugins={{ mermaid }}
113
+ mermaid={{
114
+ config: { theme: 'neutral' },
115
+ errorComponent: ({ error, chart, retry }) => (
116
+ <div>
117
+ <p>Failed to render: {error}</p>
118
+ <button onClick={retry}>Retry</button>
119
+ </div>
120
+ ),
121
+ }}
122
+ >
123
+ {markdown}
124
+ </Streamdown>
125
+ ```
126
+
127
+ **Supported diagram types:** Flowcharts, sequence, state, class, pie, Gantt, ER, git graphs.
128
+
129
+ **Interactive controls:** Fullscreen, download SVG, copy source, pan/zoom. Customize via `controls` prop:
130
+ ```tsx
131
+ <Streamdown
132
+ plugins={{ mermaid }}
133
+ controls={{
134
+ mermaid: { download: true, copy: true, fullscreen: true, panZoom: false },
135
+ }}
136
+ >
137
+ ```
138
+
139
+ **Streaming behavior:** Diagrams render as code blocks until the mermaid block is complete.
140
+
141
+ ## @streamdown/math
142
+
143
+ LaTeX math via KaTeX.
144
+
145
+ **Install:**
146
+ ```bash
147
+ npm install @streamdown/math
148
+ ```
149
+
150
+ **Usage (CSS import required):**
151
+ ```tsx
152
+ import { math } from '@streamdown/math';
153
+ import 'katex/dist/katex.min.css';
154
+
155
+ <Streamdown plugins={{ math }}>{markdown}</Streamdown>
156
+ ```
157
+
158
+ **Custom config:**
159
+ ```tsx
160
+ import { createMathPlugin } from '@streamdown/math';
161
+
162
+ const math = createMathPlugin({
163
+ singleDollarTextMath: true, // Enable $...$ syntax (default: false)
164
+ errorColor: '#ff0000',
165
+ });
166
+ ```
167
+
168
+ **Syntax:**
169
+ - Inline: `$$E = mc^2$$` (same line)
170
+ - Block: `$$\nE = mc^2\n$$` (separate lines)
171
+ - Default uses double `$$` only (not single `$`) to avoid conflicts with currency
172
+
173
+ **Streaming behavior:** Incomplete `$$` blocks are auto-closed by remend.
174
+
175
+ ## @streamdown/cjk
176
+
177
+ Chinese, Japanese, Korean text support.
178
+
179
+ **Install:**
180
+ ```bash
181
+ npm install @streamdown/cjk
182
+ ```
183
+
184
+ **Usage:**
185
+ ```tsx
186
+ import { cjk } from '@streamdown/cjk';
187
+
188
+ <Streamdown plugins={{ cjk }}>{markdown}</Streamdown>
189
+ ```
190
+
191
+ **What it fixes:**
192
+ - Emphasis markers adjacent to ideographic punctuation (bold, italic, strikethrough)
193
+ - Autolinks swallowing trailing CJK punctuation
194
+
195
+ **Supported punctuation:** `。.,、?!:;()【】「」『』〈〉《》`
196
+
197
+ ## Built-in Remark Plugins
198
+
199
+ **remark-gfm** — GitHub Flavored Markdown:
200
+ - Tables (with alignment)
201
+ - Task lists (`- [ ]`, `- [x]`)
202
+ - Strikethrough (`~~text~~`)
203
+ - Autolinks
204
+ - Footnotes (`[^1]`)
205
+
206
+ ## Built-in Rehype Plugins
207
+
208
+ 1. **rehype-raw** — Preserves raw HTML in Markdown
209
+ 2. **rehype-sanitize** — XSS protection
210
+ 3. **rehype-harden** — URL/protocol restrictions:
211
+ ```tsx
212
+ {
213
+ allowedImagePrefixes: ['*'],
214
+ allowedLinkPrefixes: ['*'],
215
+ allowedProtocols: ['*'],
216
+ defaultOrigin: undefined,
217
+ allowDataImages: true,
218
+ }
219
+ ```
220
+
221
+ ## Customizing Built-in Plugins
222
+
223
+ ```tsx
224
+ import { defaultRemarkPlugins, defaultRehypePlugins } from 'streamdown';
225
+
226
+ // Add custom plugins alongside defaults
227
+ <Streamdown
228
+ remarkPlugins={[...Object.values(defaultRemarkPlugins), myCustomPlugin]}
229
+ rehypePlugins={[...Object.values(defaultRehypePlugins), anotherPlugin]}
230
+ >
231
+ {markdown}
232
+ </Streamdown>
233
+ ```
234
+
235
+ **Disable HTML entirely** by omitting rehype-raw:
236
+ ```tsx
237
+ const { raw, ...rest } = defaultRehypePlugins;
238
+ <Streamdown rehypePlugins={Object.values(rest)}>{markdown}</Streamdown>
239
+ ```
@@ -0,0 +1,192 @@
1
+ # Streamdown Security Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [Default Security Posture](#default-security-posture)
6
+ - [Restricting Protocols](#restricting-protocols)
7
+ - [Restricting Links](#restricting-links)
8
+ - [Restricting Images](#restricting-images)
9
+ - [Link Safety Modal](#link-safety-modal)
10
+ - [Custom HTML Tags](#custom-html-tags)
11
+ - [Disabling HTML](#disabling-html)
12
+ - [Production Config Example](#production-config-example)
13
+
14
+ ## Default Security Posture
15
+
16
+ Streamdown is permissive by default (all prefixes, protocols, and data images allowed). Security is provided by:
17
+
18
+ 1. **rehype-sanitize** — XSS prevention
19
+ 2. **rehype-harden** — URL/protocol restriction (all allowed by default)
20
+ 3. **Link safety modal** — Confirmation before opening external links (enabled by default)
21
+
22
+ ## Restricting Protocols
23
+
24
+ ```tsx
25
+ <Streamdown
26
+ rehypePlugins={[
27
+ rehypeRaw,
28
+ [rehypeSanitize, {}],
29
+ [harden, {
30
+ allowedProtocols: ['https', 'mailto'],
31
+ allowedLinkPrefixes: ['*'],
32
+ allowedImagePrefixes: ['*'],
33
+ allowDataImages: true,
34
+ }],
35
+ ]}
36
+ >
37
+ ```
38
+
39
+ ## Restricting Links
40
+
41
+ Only allow specific domains:
42
+
43
+ ```tsx
44
+ [harden, {
45
+ allowedLinkPrefixes: [
46
+ 'https://example.com',
47
+ 'https://docs.example.com',
48
+ ],
49
+ allowedProtocols: ['https'],
50
+ }]
51
+ ```
52
+
53
+ ## Restricting Images
54
+
55
+ ```tsx
56
+ [harden, {
57
+ allowedImagePrefixes: [
58
+ 'https://images.example.com',
59
+ 'https://cdn.example.com',
60
+ ],
61
+ allowDataImages: false, // Disable data: URLs
62
+ }]
63
+ ```
64
+
65
+ ## Link Safety Modal
66
+
67
+ **Default:** Enabled. Shows confirmation before opening links.
68
+
69
+ **Disable:**
70
+ ```tsx
71
+ <Streamdown linkSafety={{ enabled: false }}>{markdown}</Streamdown>
72
+ ```
73
+
74
+ **Safelist trusted domains:**
75
+ ```tsx
76
+ <Streamdown
77
+ linkSafety={{
78
+ enabled: true,
79
+ onLinkCheck: async (url) => {
80
+ const trusted = ['example.com', 'docs.example.com'];
81
+ const hostname = new URL(url).hostname;
82
+ return trusted.some((d) => hostname.endsWith(d));
83
+ },
84
+ }}
85
+ >
86
+ ```
87
+
88
+ **Custom modal:**
89
+ ```tsx
90
+ <Streamdown
91
+ linkSafety={{
92
+ enabled: true,
93
+ renderModal: ({ url, isOpen, onClose, onConfirm }) => (
94
+ <Dialog open={isOpen} onOpenChange={onClose}>
95
+ <DialogContent>
96
+ <p>Open {url}?</p>
97
+ <Button onClick={onConfirm}>Continue</Button>
98
+ <Button onClick={onClose}>Cancel</Button>
99
+ </DialogContent>
100
+ </Dialog>
101
+ ),
102
+ }}
103
+ >
104
+ ```
105
+
106
+ ## Custom HTML Tags
107
+
108
+ Whitelist specific tags and attributes for AI-generated custom elements:
109
+
110
+ ```tsx
111
+ <Streamdown
112
+ allowedTags={{
113
+ source: ["id"],
114
+ mention: ["user_id", "type"],
115
+ widget: ["data*"], // Wildcard: all data-* attributes
116
+ }}
117
+ components={{
118
+ source: (props) => <Badge>{props.id}</Badge>,
119
+ mention: (props) => <UserMention userId={props.user_id} />,
120
+ }}
121
+ >
122
+ ```
123
+
124
+ **Important:** `allowedTags` only works with default rehype plugins. Custom `rehypePlugins` require custom sanitization.
125
+
126
+ ## URL Transform
127
+
128
+ Use the `urlTransform` prop for custom URL rewriting. The default `defaultUrlTransform` is a passthrough — URL security is handled by `rehype-sanitize` and `rehype-harden`.
129
+
130
+ ```tsx
131
+ import { Streamdown, defaultUrlTransform } from 'streamdown';
132
+
133
+ // Proxy images through your CDN
134
+ <Streamdown
135
+ urlTransform={(url, key, node) => {
136
+ if (key === 'src') {
137
+ return `https://your-cdn.com/proxy?url=${encodeURIComponent(url)}`;
138
+ }
139
+ return defaultUrlTransform(url, key, node);
140
+ }}
141
+ >
142
+ {markdown}
143
+ </Streamdown>
144
+ ```
145
+
146
+ ## Skipping HTML
147
+
148
+ Completely ignore raw HTML in Markdown with `skipHtml`:
149
+
150
+ ```tsx
151
+ <Streamdown skipHtml>{markdown}</Streamdown>
152
+ ```
153
+
154
+ ## Disabling HTML
155
+
156
+ Remove `rehype-raw` to block all raw HTML:
157
+
158
+ ```tsx
159
+ import { defaultRehypePlugins } from 'streamdown';
160
+
161
+ const { raw, ...rest } = defaultRehypePlugins;
162
+
163
+ <Streamdown rehypePlugins={Object.values(rest)}>{markdown}</Streamdown>
164
+ ```
165
+
166
+ ## Production Config Example
167
+
168
+ Strict config for AI-generated content:
169
+
170
+ ```tsx
171
+ <Streamdown
172
+ rehypePlugins={[
173
+ rehypeRaw,
174
+ [rehypeSanitize, {}],
175
+ [harden, {
176
+ allowedProtocols: ['https', 'mailto'],
177
+ allowedLinkPrefixes: ['https://your-domain.com'],
178
+ allowedImagePrefixes: ['https://your-cdn.com'],
179
+ allowDataImages: false,
180
+ }],
181
+ ]}
182
+ linkSafety={{
183
+ enabled: true,
184
+ onLinkCheck: async (url) => {
185
+ const trusted = ['your-domain.com'];
186
+ return trusted.some((d) => new URL(url).hostname.endsWith(d));
187
+ },
188
+ }}
189
+ >
190
+ {aiContent}
191
+ </Streamdown>
192
+ ```
@@ -0,0 +1,166 @@
1
+ # Streamdown Styling Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [CSS Variables](#css-variables)
6
+ - [Data Attribute Selectors](#data-attribute-selectors)
7
+ - [Custom Components](#custom-components)
8
+ - [Scoped Styling](#scoped-styling)
9
+ - [Theme Examples](#theme-examples)
10
+ - [Styling Priority](#styling-priority)
11
+
12
+ ## CSS Variables
13
+
14
+ Streamdown uses shadcn/ui CSS variables. Override in `globals.css`:
15
+
16
+ ```css
17
+ @layer base {
18
+ :root {
19
+ --primary: 222.2 47.4% 11.2%; /* Links, accents */
20
+ --primary-foreground: 210 40% 98%; /* Text on primary */
21
+ --muted: 210 40% 96.1%; /* Code blocks, table headers */
22
+ --muted-foreground: 215.4 16.3% 46.9%; /* Blockquote text */
23
+ --border: 214.3 31.8% 91.4%; /* Tables, rules, code blocks */
24
+ --ring: 222.2 84% 4.9%; /* Focus rings */
25
+ --radius: 0.5rem; /* Border radius */
26
+ }
27
+
28
+ .dark {
29
+ --primary: 210 40% 98%;
30
+ --primary-foreground: 222.2 47.4% 11.2%;
31
+ --muted: 217.2 32.6% 17.5%;
32
+ --muted-foreground: 215 20.2% 65.1%;
33
+ --border: 217.2 32.6% 17.5%;
34
+ --ring: 212.7 26.8% 83.9%;
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## Data Attribute Selectors
40
+
41
+ Target specific elements via `[data-streamdown="..."]`:
42
+
43
+ ```css
44
+ /* Headings */
45
+ [data-streamdown="heading-1"] { }
46
+ [data-streamdown="heading-2"] { }
47
+ [data-streamdown="heading-3"] { }
48
+ [data-streamdown="heading-4"] { }
49
+ [data-streamdown="heading-5"] { }
50
+ [data-streamdown="heading-6"] { }
51
+
52
+ /* Text */
53
+ [data-streamdown="strong"] { }
54
+ [data-streamdown="link"] { }
55
+ [data-streamdown="inline-code"] { }
56
+
57
+ /* Lists */
58
+ [data-streamdown="ordered-list"] { }
59
+ [data-streamdown="unordered-list"] { }
60
+ [data-streamdown="list-item"] { }
61
+
62
+ /* Blocks */
63
+ [data-streamdown="blockquote"] { }
64
+ [data-streamdown="horizontal-rule"] { }
65
+
66
+ /* Code */
67
+ [data-streamdown="code-block"] { }
68
+ [data-streamdown="mermaid-block"] { }
69
+
70
+ /* Tables */
71
+ [data-streamdown="table-wrapper"] { }
72
+ [data-streamdown="table"] { }
73
+ [data-streamdown="table-header"] { }
74
+ [data-streamdown="table-body"] { }
75
+ [data-streamdown="table-row"] { }
76
+ [data-streamdown="table-header-cell"] { }
77
+ [data-streamdown="table-cell"] { }
78
+
79
+ /* Other */
80
+ [data-streamdown="superscript"] { }
81
+ [data-streamdown="subscript"] { }
82
+ ```
83
+
84
+ ## Custom Components
85
+
86
+ Override any Markdown element via the `components` prop:
87
+
88
+ ```tsx
89
+ <Streamdown
90
+ components={{
91
+ h1: ({ children, ...props }) => (
92
+ <h1 className="text-4xl font-bold" {...props}>{children}</h1>
93
+ ),
94
+ a: ({ children, href, ...props }) => (
95
+ <a href={href} className="text-blue-500 hover:underline" {...props}>
96
+ {children}
97
+ </a>
98
+ ),
99
+ code: ({ children, className, ...props }) => {
100
+ const isInline = !className;
101
+ if (isInline) {
102
+ return <code className="bg-gray-100 rounded px-1" {...props}>{children}</code>;
103
+ }
104
+ return <code className={className} {...props}>{children}</code>;
105
+ },
106
+ }}
107
+ >
108
+ {markdown}
109
+ </Streamdown>
110
+ ```
111
+
112
+ **Available elements:** h1-h6, p, strong, em, ul, ol, li, a, code, pre, blockquote, table, thead, tbody, tr, th, td, img, hr, sup, sub, section
113
+
114
+ ## Scoped Styling
115
+
116
+ Use `className` prop for instance-specific styles:
117
+
118
+ ```tsx
119
+ <Streamdown className="docs-content">{markdown}</Streamdown>
120
+ ```
121
+
122
+ ```css
123
+ .docs-content [data-streamdown="heading-1"] {
124
+ font-family: 'Inter', sans-serif;
125
+ }
126
+ .docs-content [data-streamdown="code-block"] {
127
+ font-family: 'Fira Code', monospace;
128
+ }
129
+ ```
130
+
131
+ ## Theme Examples
132
+
133
+ **Minimal Gray:**
134
+ ```css
135
+ :root {
136
+ --primary: 0 0% 20%;
137
+ --muted: 0 0% 96%;
138
+ --border: 0 0% 90%;
139
+ --radius: 0.25rem;
140
+ }
141
+ ```
142
+
143
+ **Vibrant Blue:**
144
+ ```css
145
+ :root {
146
+ --primary: 217 91% 60%;
147
+ --muted: 214 100% 97%;
148
+ --border: 214 32% 91%;
149
+ --radius: 0.75rem;
150
+ }
151
+ ```
152
+
153
+ **No Borders:**
154
+ ```css
155
+ :root {
156
+ --border: transparent;
157
+ --muted: 0 0% 98%;
158
+ --radius: 0rem;
159
+ }
160
+ ```
161
+
162
+ ## Styling Priority
163
+
164
+ 1. **Custom Components** — Complete control over rendering
165
+ 2. **CSS via `data-streamdown` selectors** — Element-specific styling
166
+ 3. **CSS Variables** — Global theme tokens
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: tdd
3
+ description: Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development.
4
+ ---
5
+
6
+ # Test-Driven Development
7
+
8
+ ## Philosophy
9
+
10
+ **Core principle**: Tests should verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't.
11
+
12
+ **Good tests** are integration-style: they exercise real code paths through public APIs. They describe _what_ the system does, not _how_ it does it. A good test reads like a specification - "user can checkout with valid cart" tells you exactly what capability exists. These tests survive refactors because they don't care about internal structure.
13
+
14
+ **Bad tests** are coupled to implementation. They mock internal collaborators, test private methods, or verify through external means (like querying a database directly instead of using the interface). The warning sign: your test breaks when you refactor, but behavior hasn't changed. If you rename an internal function and tests fail, those tests were testing implementation, not behavior.
15
+
16
+ See [tests.md](tests.md) for examples and [mocking.md](mocking.md) for mocking guidelines.
17
+
18
+ ## Anti-Pattern: Horizontal Slices
19
+
20
+ **DO NOT write all tests first, then all implementation.** This is "horizontal slicing" - treating RED as "write all tests" and GREEN as "write all code."
21
+
22
+ This produces **crap tests**:
23
+
24
+ - Tests written in bulk test _imagined_ behavior, not _actual_ behavior
25
+ - You end up testing the _shape_ of things (data structures, function signatures) rather than user-facing behavior
26
+ - Tests become insensitive to real changes - they pass when behavior breaks, fail when behavior is fine
27
+ - You outrun your headlights, committing to test structure before understanding the implementation
28
+
29
+ **Correct approach**: Vertical slices via tracer bullets. One test → one implementation → repeat. Each test responds to what you learned from the previous cycle. Because you just wrote the code, you know exactly what behavior matters and how to verify it.
30
+
31
+ ```
32
+ WRONG (horizontal):
33
+ RED: test1, test2, test3, test4, test5
34
+ GREEN: impl1, impl2, impl3, impl4, impl5
35
+
36
+ RIGHT (vertical):
37
+ RED→GREEN: test1→impl1
38
+ RED→GREEN: test2→impl2
39
+ RED→GREEN: test3→impl3
40
+ ...
41
+ ```
42
+
43
+ ## Workflow
44
+
45
+ ### 1. Planning
46
+
47
+ Before writing any code:
48
+
49
+ - [ ] Confirm with user what interface changes are needed
50
+ - [ ] Confirm with user which behaviors to test (prioritize)
51
+ - [ ] Identify opportunities for [deep modules](deep-modules.md) (small interface, deep implementation)
52
+ - [ ] Design interfaces for [testability](interface-design.md)
53
+ - [ ] List the behaviors to test (not implementation steps)
54
+ - [ ] Get user approval on the plan
55
+
56
+ Ask: "What should the public interface look like? Which behaviors are most important to test?"
57
+
58
+ **You can't test everything.** Confirm with the user exactly which behaviors matter most. Focus testing effort on critical paths and complex logic, not every possible edge case.
59
+
60
+ ### 2. Tracer Bullet
61
+
62
+ Write ONE test that confirms ONE thing about the system:
63
+
64
+ ```
65
+ RED: Write test for first behavior → test fails
66
+ GREEN: Write minimal code to pass → test passes
67
+ ```
68
+
69
+ This is your tracer bullet - proves the path works end-to-end.
70
+
71
+ ### 3. Incremental Loop
72
+
73
+ For each remaining behavior:
74
+
75
+ ```
76
+ RED: Write next test → fails
77
+ GREEN: Minimal code to pass → passes
78
+ ```
79
+
80
+ Rules:
81
+
82
+ - One test at a time
83
+ - Only enough code to pass current test
84
+ - Don't anticipate future tests
85
+ - Keep tests focused on observable behavior
86
+
87
+ ### 4. Refactor
88
+
89
+ After all tests pass, look for [refactor candidates](refactoring.md):
90
+
91
+ - [ ] Extract duplication
92
+ - [ ] Deepen modules (move complexity behind simple interfaces)
93
+ - [ ] Apply SOLID principles where natural
94
+ - [ ] Consider what new code reveals about existing code
95
+ - [ ] Run tests after each refactor step
96
+
97
+ **Never refactor while RED.** Get to GREEN first.
98
+
99
+ ## Checklist Per Cycle
100
+
101
+ ```
102
+ [ ] Test describes behavior, not implementation
103
+ [ ] Test uses public interface only
104
+ [ ] Test would survive internal refactor
105
+ [ ] Code is minimal for this test
106
+ [ ] No speculative features added
107
+ ```