create-xani-agentic-app 1.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 (563) hide show
  1. package/README.md +237 -0
  2. package/index.js +219 -0
  3. package/package.json +46 -0
  4. package/template/.agents/skills/ai-sdk/SKILL.md +78 -0
  5. package/template/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
  6. package/template/.agents/skills/ai-sdk/references/common-errors.md +443 -0
  7. package/template/.agents/skills/ai-sdk/references/devtools.md +52 -0
  8. package/template/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
  9. package/template/.agents/skills/better-auth-best-practices/SKILL.md +175 -0
  10. package/template/.agents/skills/checkpoint/SKILL.md +82 -0
  11. package/template/.agents/skills/create-spec/SKILL.md +132 -0
  12. package/template/.agents/skills/create-spec/references/action-required-template.md +53 -0
  13. package/template/.agents/skills/create-spec/references/readme-template.md +53 -0
  14. package/template/.agents/skills/create-spec/references/requirements-template.md +54 -0
  15. package/template/.agents/skills/create-spec/references/task-template.md +79 -0
  16. package/template/.agents/skills/find-skills/SKILL.md +142 -0
  17. package/template/.agents/skills/frontend-design/LICENSE.txt +177 -0
  18. package/template/.agents/skills/frontend-design/SKILL.md +42 -0
  19. package/template/.agents/skills/implement-feature/SKILL.md +189 -0
  20. package/template/.agents/skills/implement-feature/references/coder-prompt-template.md +46 -0
  21. package/template/.agents/skills/implement-feature/references/fix-prompt-template.md +38 -0
  22. package/template/.agents/skills/implement-feature/references/review-prompt-template.md +50 -0
  23. package/template/.agents/skills/mcp-builder/LICENSE.txt +202 -0
  24. package/template/.agents/skills/mcp-builder/SKILL.md +236 -0
  25. package/template/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
  26. package/template/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  27. package/template/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  28. package/template/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  29. package/template/.agents/skills/mcp-builder/scripts/connections.py +151 -0
  30. package/template/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
  31. package/template/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  32. package/template/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
  33. package/template/.agents/skills/nextjs/SKILL.md +434 -0
  34. package/template/.agents/skills/nextjs/overlay.yaml +284 -0
  35. package/template/.agents/skills/nextjs/references/app-router-files.md +94 -0
  36. package/template/.agents/skills/nextjs/references/async-patterns.md +87 -0
  37. package/template/.agents/skills/nextjs/references/bundling.md +180 -0
  38. package/template/.agents/skills/nextjs/references/data-patterns.md +297 -0
  39. package/template/.agents/skills/nextjs/references/debug-tricks.md +105 -0
  40. package/template/.agents/skills/nextjs/references/directives.md +73 -0
  41. package/template/.agents/skills/nextjs/references/error-handling.md +227 -0
  42. package/template/.agents/skills/nextjs/references/file-conventions.md +140 -0
  43. package/template/.agents/skills/nextjs/references/font.md +245 -0
  44. package/template/.agents/skills/nextjs/references/functions.md +108 -0
  45. package/template/.agents/skills/nextjs/references/hydration-error.md +91 -0
  46. package/template/.agents/skills/nextjs/references/image.md +173 -0
  47. package/template/.agents/skills/nextjs/references/metadata.md +301 -0
  48. package/template/.agents/skills/nextjs/references/parallel-routes.md +287 -0
  49. package/template/.agents/skills/nextjs/references/route-handlers.md +146 -0
  50. package/template/.agents/skills/nextjs/references/rsc-boundaries.md +159 -0
  51. package/template/.agents/skills/nextjs/references/runtime-selection.md +39 -0
  52. package/template/.agents/skills/nextjs/references/scripts.md +141 -0
  53. package/template/.agents/skills/nextjs/references/self-hosting.md +371 -0
  54. package/template/.agents/skills/nextjs/references/suspense-boundaries.md +67 -0
  55. package/template/.agents/skills/nextjs/upstream/SKILL.md +153 -0
  56. package/template/.agents/skills/nextjs/upstream/references/app-router-files.md +94 -0
  57. package/template/.agents/skills/nextjs/upstream/references/async-patterns.md +87 -0
  58. package/template/.agents/skills/nextjs/upstream/references/bundling.md +180 -0
  59. package/template/.agents/skills/nextjs/upstream/references/data-patterns.md +297 -0
  60. package/template/.agents/skills/nextjs/upstream/references/debug-tricks.md +105 -0
  61. package/template/.agents/skills/nextjs/upstream/references/directives.md +73 -0
  62. package/template/.agents/skills/nextjs/upstream/references/error-handling.md +227 -0
  63. package/template/.agents/skills/nextjs/upstream/references/file-conventions.md +140 -0
  64. package/template/.agents/skills/nextjs/upstream/references/font.md +245 -0
  65. package/template/.agents/skills/nextjs/upstream/references/functions.md +108 -0
  66. package/template/.agents/skills/nextjs/upstream/references/hydration-error.md +91 -0
  67. package/template/.agents/skills/nextjs/upstream/references/image.md +173 -0
  68. package/template/.agents/skills/nextjs/upstream/references/metadata.md +301 -0
  69. package/template/.agents/skills/nextjs/upstream/references/parallel-routes.md +287 -0
  70. package/template/.agents/skills/nextjs/upstream/references/route-handlers.md +146 -0
  71. package/template/.agents/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
  72. package/template/.agents/skills/nextjs/upstream/references/runtime-selection.md +39 -0
  73. package/template/.agents/skills/nextjs/upstream/references/scripts.md +141 -0
  74. package/template/.agents/skills/nextjs/upstream/references/self-hosting.md +371 -0
  75. package/template/.agents/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
  76. package/template/.agents/skills/playwright-cli/SKILL.md +344 -0
  77. package/template/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
  78. package/template/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
  79. package/template/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
  80. package/template/.agents/skills/playwright-cli/references/running-code.md +231 -0
  81. package/template/.agents/skills/playwright-cli/references/session-management.md +169 -0
  82. package/template/.agents/skills/playwright-cli/references/storage-state.md +275 -0
  83. package/template/.agents/skills/playwright-cli/references/test-generation.md +88 -0
  84. package/template/.agents/skills/playwright-cli/references/tracing.md +139 -0
  85. package/template/.agents/skills/playwright-cli/references/video-recording.md +143 -0
  86. package/template/.agents/skills/review-pr/SKILL.md +97 -0
  87. package/template/.agents/skills/security-scanner/SKILL.md +157 -0
  88. package/template/.agents/skills/security-scanner/references/A01-broken-access-control.md +136 -0
  89. package/template/.agents/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
  90. package/template/.agents/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
  91. package/template/.agents/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
  92. package/template/.agents/skills/security-scanner/references/A05-injection.md +155 -0
  93. package/template/.agents/skills/security-scanner/references/A06-insecure-design.md +145 -0
  94. package/template/.agents/skills/security-scanner/references/A07-authentication-failures.md +150 -0
  95. package/template/.agents/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
  96. package/template/.agents/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
  97. package/template/.agents/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
  98. package/template/.agents/skills/security-scanner/references/report-template.md +148 -0
  99. package/template/.agents/skills/shadcn/SKILL.md +246 -0
  100. package/template/.agents/skills/shadcn/agents/openai.yml +5 -0
  101. package/template/.agents/skills/shadcn/assets/shadcn-small.png +0 -0
  102. package/template/.agents/skills/shadcn/assets/shadcn.png +0 -0
  103. package/template/.agents/skills/shadcn/cli.md +276 -0
  104. package/template/.agents/skills/shadcn/customization.md +209 -0
  105. package/template/.agents/skills/shadcn/evals/evals.json +47 -0
  106. package/template/.agents/skills/shadcn/mcp.md +94 -0
  107. package/template/.agents/skills/shadcn/rules/base-vs-radix.md +306 -0
  108. package/template/.agents/skills/shadcn/rules/composition.md +195 -0
  109. package/template/.agents/skills/shadcn/rules/forms.md +192 -0
  110. package/template/.agents/skills/shadcn/rules/icons.md +101 -0
  111. package/template/.agents/skills/shadcn/rules/styling.md +162 -0
  112. package/template/.agents/skills/ship-it/SKILL.md +174 -0
  113. package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
  114. package/template/.agents/skills/skill-creator/SKILL.md +485 -0
  115. package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
  116. package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
  117. package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
  118. package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
  119. package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  120. package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  121. package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
  122. package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
  123. package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  124. package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
  125. package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
  126. package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
  127. package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
  128. package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
  129. package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
  130. package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
  131. package/template/.agents/skills/vercel-react-best-practices/AGENTS.md +3750 -0
  132. package/template/.agents/skills/vercel-react-best-practices/README.md +123 -0
  133. package/template/.agents/skills/vercel-react-best-practices/SKILL.md +148 -0
  134. package/template/.agents/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  135. package/template/.agents/skills/vercel-react-best-practices/rules/_template.md +28 -0
  136. package/template/.agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  137. package/template/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  138. package/template/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  139. package/template/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  140. package/template/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  141. package/template/.agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  142. package/template/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  143. package/template/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  144. package/template/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  145. package/template/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  146. package/template/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  147. package/template/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  148. package/template/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  149. package/template/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  150. package/template/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  151. package/template/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  152. package/template/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  153. package/template/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  154. package/template/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  155. package/template/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  156. package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  157. package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  158. package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  159. package/template/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  160. package/template/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  161. package/template/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  162. package/template/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  163. package/template/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  164. package/template/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  165. package/template/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  166. package/template/.agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  167. package/template/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  168. package/template/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  169. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  170. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  171. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  172. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  173. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  174. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  175. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  176. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  177. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  178. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  179. package/template/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  180. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  181. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  182. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  183. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  184. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  185. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  186. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  187. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  188. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  189. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  190. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  191. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  192. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  193. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  194. package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  195. package/template/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  196. package/template/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  197. package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  198. package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  199. package/template/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  200. package/template/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  201. package/template/.agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  202. package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  203. package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  204. package/template/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  205. package/template/.agents/skills/web-design-guidelines/SKILL.md +39 -0
  206. package/template/.claude/agents/better-auth-expert.md +189 -0
  207. package/template/.claude/agents/code-review.md +147 -0
  208. package/template/.claude/agents/coder.md +139 -0
  209. package/template/.claude/agents/deep-dive.md +133 -0
  210. package/template/.claude/agents/polar-payments-expert.md +140 -0
  211. package/template/.claude/agents/security-scanner.md +214 -0
  212. package/template/.claude/settings.local.json +15 -0
  213. package/template/.claude/skills/ai-sdk/SKILL.md +78 -0
  214. package/template/.claude/skills/ai-sdk/references/ai-gateway.md +66 -0
  215. package/template/.claude/skills/ai-sdk/references/common-errors.md +443 -0
  216. package/template/.claude/skills/ai-sdk/references/devtools.md +52 -0
  217. package/template/.claude/skills/ai-sdk/references/type-safe-agents.md +204 -0
  218. package/template/.claude/skills/better-auth-best-practices/SKILL.md +175 -0
  219. package/template/.claude/skills/caveman/SKILL.md +49 -0
  220. package/template/.claude/skills/checkpoint/SKILL.md +82 -0
  221. package/template/.claude/skills/create-spec/SKILL.md +132 -0
  222. package/template/.claude/skills/create-spec/references/action-required-template.md +53 -0
  223. package/template/.claude/skills/create-spec/references/readme-template.md +53 -0
  224. package/template/.claude/skills/create-spec/references/requirements-template.md +54 -0
  225. package/template/.claude/skills/create-spec/references/task-template.md +79 -0
  226. package/template/.claude/skills/d3-visualization/SKILL.md +62 -0
  227. package/template/.claude/skills/find-skills/SKILL.md +142 -0
  228. package/template/.claude/skills/frontend-design/LICENSE.txt +177 -0
  229. package/template/.claude/skills/frontend-design/SKILL.md +42 -0
  230. package/template/.claude/skills/grill-me/SKILL.md +10 -0
  231. package/template/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  232. package/template/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
  233. package/template/.claude/skills/grill-with-docs/SKILL.md +88 -0
  234. package/template/.claude/skills/gsap-core/SKILL.md +267 -0
  235. package/template/.claude/skills/implement-feature/SKILL.md +189 -0
  236. package/template/.claude/skills/implement-feature/references/coder-prompt-template.md +46 -0
  237. package/template/.claude/skills/implement-feature/references/fix-prompt-template.md +38 -0
  238. package/template/.claude/skills/implement-feature/references/review-prompt-template.md +50 -0
  239. package/template/.claude/skills/mcp-builder/LICENSE.txt +202 -0
  240. package/template/.claude/skills/mcp-builder/SKILL.md +236 -0
  241. package/template/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
  242. package/template/.claude/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  243. package/template/.claude/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  244. package/template/.claude/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  245. package/template/.claude/skills/mcp-builder/scripts/connections.py +151 -0
  246. package/template/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
  247. package/template/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  248. package/template/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  249. package/template/.claude/skills/nextjs/SKILL.md +434 -0
  250. package/template/.claude/skills/nextjs/overlay.yaml +284 -0
  251. package/template/.claude/skills/nextjs/references/app-router-files.md +94 -0
  252. package/template/.claude/skills/nextjs/references/async-patterns.md +87 -0
  253. package/template/.claude/skills/nextjs/references/bundling.md +180 -0
  254. package/template/.claude/skills/nextjs/references/data-patterns.md +297 -0
  255. package/template/.claude/skills/nextjs/references/debug-tricks.md +105 -0
  256. package/template/.claude/skills/nextjs/references/directives.md +73 -0
  257. package/template/.claude/skills/nextjs/references/error-handling.md +227 -0
  258. package/template/.claude/skills/nextjs/references/file-conventions.md +140 -0
  259. package/template/.claude/skills/nextjs/references/font.md +245 -0
  260. package/template/.claude/skills/nextjs/references/functions.md +108 -0
  261. package/template/.claude/skills/nextjs/references/hydration-error.md +91 -0
  262. package/template/.claude/skills/nextjs/references/image.md +173 -0
  263. package/template/.claude/skills/nextjs/references/metadata.md +301 -0
  264. package/template/.claude/skills/nextjs/references/parallel-routes.md +287 -0
  265. package/template/.claude/skills/nextjs/references/route-handlers.md +146 -0
  266. package/template/.claude/skills/nextjs/references/rsc-boundaries.md +159 -0
  267. package/template/.claude/skills/nextjs/references/runtime-selection.md +39 -0
  268. package/template/.claude/skills/nextjs/references/scripts.md +141 -0
  269. package/template/.claude/skills/nextjs/references/self-hosting.md +371 -0
  270. package/template/.claude/skills/nextjs/references/suspense-boundaries.md +67 -0
  271. package/template/.claude/skills/nextjs/upstream/SKILL.md +153 -0
  272. package/template/.claude/skills/nextjs/upstream/references/app-router-files.md +94 -0
  273. package/template/.claude/skills/nextjs/upstream/references/async-patterns.md +87 -0
  274. package/template/.claude/skills/nextjs/upstream/references/bundling.md +180 -0
  275. package/template/.claude/skills/nextjs/upstream/references/data-patterns.md +297 -0
  276. package/template/.claude/skills/nextjs/upstream/references/debug-tricks.md +105 -0
  277. package/template/.claude/skills/nextjs/upstream/references/directives.md +73 -0
  278. package/template/.claude/skills/nextjs/upstream/references/error-handling.md +227 -0
  279. package/template/.claude/skills/nextjs/upstream/references/file-conventions.md +140 -0
  280. package/template/.claude/skills/nextjs/upstream/references/font.md +245 -0
  281. package/template/.claude/skills/nextjs/upstream/references/functions.md +108 -0
  282. package/template/.claude/skills/nextjs/upstream/references/hydration-error.md +91 -0
  283. package/template/.claude/skills/nextjs/upstream/references/image.md +173 -0
  284. package/template/.claude/skills/nextjs/upstream/references/metadata.md +301 -0
  285. package/template/.claude/skills/nextjs/upstream/references/parallel-routes.md +287 -0
  286. package/template/.claude/skills/nextjs/upstream/references/route-handlers.md +146 -0
  287. package/template/.claude/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
  288. package/template/.claude/skills/nextjs/upstream/references/runtime-selection.md +39 -0
  289. package/template/.claude/skills/nextjs/upstream/references/scripts.md +141 -0
  290. package/template/.claude/skills/nextjs/upstream/references/self-hosting.md +371 -0
  291. package/template/.claude/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
  292. package/template/.claude/skills/playwright-cli/SKILL.md +344 -0
  293. package/template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  294. package/template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  295. package/template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  296. package/template/.claude/skills/playwright-cli/references/running-code.md +231 -0
  297. package/template/.claude/skills/playwright-cli/references/session-management.md +169 -0
  298. package/template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  299. package/template/.claude/skills/playwright-cli/references/test-generation.md +88 -0
  300. package/template/.claude/skills/playwright-cli/references/tracing.md +139 -0
  301. package/template/.claude/skills/playwright-cli/references/video-recording.md +143 -0
  302. package/template/.claude/skills/react-three-fiber/SKILL.md +180 -0
  303. package/template/.claude/skills/remotion/SKILL.md +43 -0
  304. package/template/.claude/skills/review-pr/SKILL.md +97 -0
  305. package/template/.claude/skills/security-scanner/SKILL.md +157 -0
  306. package/template/.claude/skills/security-scanner/references/A01-broken-access-control.md +136 -0
  307. package/template/.claude/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
  308. package/template/.claude/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
  309. package/template/.claude/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
  310. package/template/.claude/skills/security-scanner/references/A05-injection.md +155 -0
  311. package/template/.claude/skills/security-scanner/references/A06-insecure-design.md +145 -0
  312. package/template/.claude/skills/security-scanner/references/A07-authentication-failures.md +150 -0
  313. package/template/.claude/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
  314. package/template/.claude/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
  315. package/template/.claude/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
  316. package/template/.claude/skills/security-scanner/references/report-template.md +148 -0
  317. package/template/.claude/skills/shadcn/SKILL.md +246 -0
  318. package/template/.claude/skills/shadcn/agents/openai.yml +5 -0
  319. package/template/.claude/skills/shadcn/assets/shadcn-small.png +0 -0
  320. package/template/.claude/skills/shadcn/assets/shadcn.png +0 -0
  321. package/template/.claude/skills/shadcn/cli.md +276 -0
  322. package/template/.claude/skills/shadcn/customization.md +209 -0
  323. package/template/.claude/skills/shadcn/evals/evals.json +47 -0
  324. package/template/.claude/skills/shadcn/mcp.md +94 -0
  325. package/template/.claude/skills/shadcn/rules/base-vs-radix.md +306 -0
  326. package/template/.claude/skills/shadcn/rules/composition.md +195 -0
  327. package/template/.claude/skills/shadcn/rules/forms.md +192 -0
  328. package/template/.claude/skills/shadcn/rules/icons.md +101 -0
  329. package/template/.claude/skills/shadcn/rules/styling.md +162 -0
  330. package/template/.claude/skills/ship-it/SKILL.md +174 -0
  331. package/template/.claude/skills/skill-creator/LICENSE.txt +202 -0
  332. package/template/.claude/skills/skill-creator/SKILL.md +485 -0
  333. package/template/.claude/skills/skill-creator/agents/analyzer.md +274 -0
  334. package/template/.claude/skills/skill-creator/agents/comparator.md +202 -0
  335. package/template/.claude/skills/skill-creator/agents/grader.md +223 -0
  336. package/template/.claude/skills/skill-creator/assets/eval_review.html +146 -0
  337. package/template/.claude/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  338. package/template/.claude/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  339. package/template/.claude/skills/skill-creator/references/schemas.md +430 -0
  340. package/template/.claude/skills/skill-creator/scripts/__init__.py +0 -0
  341. package/template/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  342. package/template/.claude/skills/skill-creator/scripts/generate_report.py +326 -0
  343. package/template/.claude/skills/skill-creator/scripts/improve_description.py +247 -0
  344. package/template/.claude/skills/skill-creator/scripts/package_skill.py +136 -0
  345. package/template/.claude/skills/skill-creator/scripts/quick_validate.py +103 -0
  346. package/template/.claude/skills/skill-creator/scripts/run_eval.py +310 -0
  347. package/template/.claude/skills/skill-creator/scripts/run_loop.py +328 -0
  348. package/template/.claude/skills/skill-creator/scripts/utils.py +47 -0
  349. package/template/.claude/skills/svelte/SKILL.md +284 -0
  350. package/template/.claude/skills/tdd/SKILL.md +109 -0
  351. package/template/.claude/skills/tdd/deep-modules.md +33 -0
  352. package/template/.claude/skills/tdd/interface-design.md +31 -0
  353. package/template/.claude/skills/tdd/mocking.md +59 -0
  354. package/template/.claude/skills/tdd/refactoring.md +10 -0
  355. package/template/.claude/skills/tdd/tests.md +61 -0
  356. package/template/.claude/skills/threejs/SKILL.md +43 -0
  357. package/template/.claude/skills/to-issues/SKILL.md +83 -0
  358. package/template/.claude/skills/to-prd/SKILL.md +76 -0
  359. package/template/.claude/skills/vercel-react-best-practices/AGENTS.md +3750 -0
  360. package/template/.claude/skills/vercel-react-best-practices/README.md +123 -0
  361. package/template/.claude/skills/vercel-react-best-practices/SKILL.md +148 -0
  362. package/template/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  363. package/template/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
  364. package/template/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  365. package/template/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  366. package/template/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  367. package/template/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  368. package/template/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  369. package/template/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  370. package/template/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  371. package/template/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  372. package/template/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  373. package/template/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  374. package/template/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  375. package/template/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  376. package/template/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  377. package/template/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  378. package/template/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  379. package/template/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  380. package/template/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  381. package/template/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  382. package/template/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  383. package/template/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  384. package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  385. package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  386. package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  387. package/template/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  388. package/template/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  389. package/template/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  390. package/template/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  391. package/template/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  392. package/template/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  393. package/template/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  394. package/template/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  395. package/template/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  396. package/template/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  397. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  398. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  399. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  400. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  401. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  402. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  403. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  404. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  405. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  406. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  407. package/template/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  408. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  409. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  410. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  411. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  412. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  413. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  414. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  415. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  416. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  417. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  418. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  419. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  420. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  421. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  422. package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  423. package/template/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  424. package/template/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  425. package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  426. package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  427. package/template/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  428. package/template/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  429. package/template/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  430. package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  431. package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  432. package/template/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  433. package/template/.claude/skills/video-downloader/SKILL.md +42 -0
  434. package/template/.claude/skills/web-design-guidelines/SKILL.md +39 -0
  435. package/template/.claude/skills/webgpu-threejs-tsl/REFERENCE.md +371 -0
  436. package/template/.claude/skills/webgpu-threejs-tsl/SKILL.md +93 -0
  437. package/template/.claude/skills/webgpu-threejs-tsl/docs/compute-shaders.md +578 -0
  438. package/template/.claude/skills/webgpu-threejs-tsl/docs/core-concepts.md +497 -0
  439. package/template/.claude/skills/webgpu-threejs-tsl/docs/device-loss.md +359 -0
  440. package/template/.claude/skills/webgpu-threejs-tsl/docs/limits-and-features.md +133 -0
  441. package/template/.claude/skills/webgpu-threejs-tsl/docs/materials.md +353 -0
  442. package/template/.claude/skills/webgpu-threejs-tsl/docs/post-processing.md +515 -0
  443. package/template/.claude/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +324 -0
  444. package/template/.claude/skills/webgpu-threejs-tsl/examples/basic-setup.js +87 -0
  445. package/template/.claude/skills/webgpu-threejs-tsl/examples/custom-material.js +170 -0
  446. package/template/.claude/skills/webgpu-threejs-tsl/examples/earth-shader.js +292 -0
  447. package/template/.claude/skills/webgpu-threejs-tsl/examples/particle-system.js +259 -0
  448. package/template/.claude/skills/webgpu-threejs-tsl/examples/post-processing.js +199 -0
  449. package/template/.claude/skills/webgpu-threejs-tsl/templates/compute-shader.js +343 -0
  450. package/template/.claude/skills/webgpu-threejs-tsl/templates/webgpu-project.js +276 -0
  451. package/template/.claude/skills/zoom-out/SKILL.md +7 -0
  452. package/template/.mcp.json +5 -0
  453. package/template/.nvmrc +1 -0
  454. package/template/.prettierignore +25 -0
  455. package/template/.prettierrc +11 -0
  456. package/template/.vscode/settings.json +1 -0
  457. package/template/.vscode/tasks.json.example +85 -0
  458. package/template/AGENTS.md +37 -0
  459. package/template/CLAUDE.md +75 -0
  460. package/template/CONTEXT.md +29 -0
  461. package/template/DESIGN.md +451 -0
  462. package/template/README.md +394 -0
  463. package/template/_gitignore +48 -0
  464. package/template/components.json +21 -0
  465. package/template/docker-compose.yml +9 -0
  466. package/template/docs/business/starter-prompt.md +94 -0
  467. package/template/docs/technical/ai/streaming.md +520 -0
  468. package/template/docs/technical/ai/structured-data.md +409 -0
  469. package/template/docs/technical/betterauth/polar.md +476 -0
  470. package/template/docs/technical/react-markdown.md +123 -0
  471. package/template/drizzle/0000_chilly_the_phantom.sql +50 -0
  472. package/template/drizzle/0001_last_warpath.sql +5 -0
  473. package/template/drizzle/meta/0000_snapshot.json +326 -0
  474. package/template/drizzle/meta/0001_snapshot.json +410 -0
  475. package/template/drizzle/meta/_journal.json +20 -0
  476. package/template/drizzle.config.ts +10 -0
  477. package/template/env.example +26 -0
  478. package/template/eslint.config.mjs +75 -0
  479. package/template/next-env.d.ts +6 -0
  480. package/template/next.config.ts +57 -0
  481. package/template/package.json +79 -0
  482. package/template/postcss.config.mjs +5 -0
  483. package/template/public/file.svg +1 -0
  484. package/template/public/globe.svg +1 -0
  485. package/template/public/next.svg +1 -0
  486. package/template/public/vercel.svg +1 -0
  487. package/template/public/window.svg +1 -0
  488. package/template/scripts/setup.ts +277 -0
  489. package/template/skills-lock.json +61 -0
  490. package/template/specs/ui-polish-responsive/README.md +59 -0
  491. package/template/specs/ui-polish-responsive/action-required.md +3 -0
  492. package/template/specs/ui-polish-responsive/requirements.md +53 -0
  493. package/template/specs/ui-polish-responsive/tasks/task-01-globals-css.md +144 -0
  494. package/template/specs/ui-polish-responsive/tasks/task-02-layout.md +66 -0
  495. package/template/specs/ui-polish-responsive/tasks/task-03-site-header.md +79 -0
  496. package/template/specs/ui-polish-responsive/tasks/task-04-site-footer.md +63 -0
  497. package/template/specs/ui-polish-responsive/tasks/task-05-home-page.md +215 -0
  498. package/template/specs/ui-polish-responsive/tasks/task-06-dashboard.md +222 -0
  499. package/template/specs/ui-polish-responsive/tasks/task-07-chat-page.md +225 -0
  500. package/template/specs/ui-polish-responsive/tasks/task-08-profile-page.md +192 -0
  501. package/template/specs/ui-polish-responsive/tasks/task-09-auth-pages.md +97 -0
  502. package/template/specs/ui-polish-responsive/tasks/task-10-setup-checklist.md +120 -0
  503. package/template/specs/ui-polish-responsive/tasks/task-11-starter-prompt-modal.md +87 -0
  504. package/template/src/app/(auth)/forgot-password/page.tsx +35 -0
  505. package/template/src/app/(auth)/layout.tsx +7 -0
  506. package/template/src/app/(auth)/login/page.tsx +44 -0
  507. package/template/src/app/(auth)/register/page.tsx +33 -0
  508. package/template/src/app/(auth)/reset-password/page.tsx +36 -0
  509. package/template/src/app/api/auth/[...all]/route.ts +4 -0
  510. package/template/src/app/api/chat/route.ts +80 -0
  511. package/template/src/app/api/diagnostics/route.ts +162 -0
  512. package/template/src/app/chat/error.tsx +46 -0
  513. package/template/src/app/chat/loading.tsx +42 -0
  514. package/template/src/app/chat/page.tsx +348 -0
  515. package/template/src/app/dashboard/loading.tsx +63 -0
  516. package/template/src/app/dashboard/page.tsx +79 -0
  517. package/template/src/app/error.tsx +44 -0
  518. package/template/src/app/favicon.ico +0 -0
  519. package/template/src/app/globals.css +175 -0
  520. package/template/src/app/layout.tsx +108 -0
  521. package/template/src/app/manifest.ts +21 -0
  522. package/template/src/app/not-found.tsx +28 -0
  523. package/template/src/app/page.tsx +152 -0
  524. package/template/src/app/profile/page.tsx +416 -0
  525. package/template/src/app/robots.ts +16 -0
  526. package/template/src/app/sitemap.ts +26 -0
  527. package/template/src/components/auth/forgot-password-form.tsx +83 -0
  528. package/template/src/components/auth/reset-password-form.tsx +107 -0
  529. package/template/src/components/auth/sign-in-button.tsx +97 -0
  530. package/template/src/components/auth/sign-out-button.tsx +31 -0
  531. package/template/src/components/auth/sign-up-form.tsx +121 -0
  532. package/template/src/components/auth/user-profile.tsx +91 -0
  533. package/template/src/components/setup-checklist.tsx +180 -0
  534. package/template/src/components/site-footer.tsx +24 -0
  535. package/template/src/components/site-header.tsx +46 -0
  536. package/template/src/components/starter-prompt-modal.tsx +202 -0
  537. package/template/src/components/theme-provider.tsx +11 -0
  538. package/template/src/components/ui/avatar.tsx +52 -0
  539. package/template/src/components/ui/badge.tsx +35 -0
  540. package/template/src/components/ui/button.tsx +58 -0
  541. package/template/src/components/ui/card.tsx +78 -0
  542. package/template/src/components/ui/dialog.tsx +142 -0
  543. package/template/src/components/ui/dropdown-menu.tsx +256 -0
  544. package/template/src/components/ui/github-stars.tsx +53 -0
  545. package/template/src/components/ui/input.tsx +20 -0
  546. package/template/src/components/ui/label.tsx +23 -0
  547. package/template/src/components/ui/mode-toggle.tsx +38 -0
  548. package/template/src/components/ui/separator.tsx +23 -0
  549. package/template/src/components/ui/skeleton.tsx +13 -0
  550. package/template/src/components/ui/sonner.tsx +42 -0
  551. package/template/src/components/ui/spinner.tsx +21 -0
  552. package/template/src/components/ui/textarea.tsx +17 -0
  553. package/template/src/hooks/use-diagnostics.ts +86 -0
  554. package/template/src/lib/auth-client.ts +16 -0
  555. package/template/src/lib/auth.ts +25 -0
  556. package/template/src/lib/db.ts +12 -0
  557. package/template/src/lib/env.ts +117 -0
  558. package/template/src/lib/schema.ts +82 -0
  559. package/template/src/lib/session.ts +48 -0
  560. package/template/src/lib/storage.ts +225 -0
  561. package/template/src/lib/utils.ts +6 -0
  562. package/template/src/proxy.ts +25 -0
  563. package/template/tsconfig.json +48 -0
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: webgpu-threejs-tsl
3
+ description: Comprehensive guide for developing WebGPU-enabled Three.js applications using TSL (Three.js Shading Language). Covers WebGPU renderer setup, TSL syntax and node materials, compute shaders, post-processing effects, and WGSL integration. Use this skill when working with Three.js WebGPU, TSL shaders, node materials, or GPU compute in Three.js.
4
+ ---
5
+
6
+ # WebGPU Three.js with TSL
7
+
8
+ TSL (Three.js Shading Language) is a node-based shader abstraction that lets you write GPU shaders in JavaScript instead of GLSL/WGSL strings.
9
+
10
+ ## Quick Start
11
+
12
+ ```javascript
13
+ import * as THREE from 'three/webgpu';
14
+ import { color, time, oscSine } from 'three/tsl';
15
+
16
+ const renderer = new THREE.WebGPURenderer();
17
+ await renderer.init();
18
+
19
+ const material = new THREE.MeshStandardNodeMaterial();
20
+ material.colorNode = color(0xff0000).mul(oscSine(time));
21
+ ```
22
+
23
+ ## Skill Contents
24
+
25
+ ### Documentation
26
+ - `docs/core-concepts.md` - Types, operators, uniforms, control flow
27
+ - `docs/materials.md` - Node materials and all properties
28
+ - `docs/compute-shaders.md` - GPU compute with instanced arrays
29
+ - `docs/post-processing.md` - Built-in and custom effects
30
+ - `docs/wgsl-integration.md` - Custom WGSL functions
31
+ - `docs/device-loss.md` - Handling GPU device loss and recovery
32
+ - `docs/limits-and-features.md` - WebGPU device limits and optional features
33
+
34
+ ### Examples
35
+ - `examples/basic-setup.js` - Minimal WebGPU project
36
+ - `examples/custom-material.js` - Custom shader material
37
+ - `examples/particle-system.js` - GPU compute particles
38
+ - `examples/post-processing.js` - Effect pipeline
39
+ - `examples/earth-shader.js` - Complete Earth with atmosphere
40
+
41
+ ### Templates
42
+ - `templates/webgpu-project.js` - Starter project template
43
+ - `templates/compute-shader.js` - Compute shader template
44
+
45
+ ### Reference
46
+ - `REFERENCE.md` - Quick reference cheatsheet
47
+
48
+ ## Key Concepts
49
+
50
+ ### Import Pattern
51
+ ```javascript
52
+ // Always use the WebGPU entry point
53
+ import * as THREE from 'three/webgpu';
54
+ import { /* TSL functions */ } from 'three/tsl';
55
+ ```
56
+
57
+ ### Node Materials
58
+ Replace standard material properties with TSL nodes:
59
+ ```javascript
60
+ material.colorNode = texture(map); // instead of material.map
61
+ material.roughnessNode = float(0.5); // instead of material.roughness
62
+ material.positionNode = displaced; // vertex displacement
63
+ ```
64
+
65
+ ### Method Chaining
66
+ TSL uses method chaining for operations:
67
+ ```javascript
68
+ // Instead of: sin(time * 2.0 + offset) * 0.5 + 0.5
69
+ time.mul(2.0).add(offset).sin().mul(0.5).add(0.5)
70
+ ```
71
+
72
+ ### Custom Functions
73
+ Use `Fn()` for reusable shader logic:
74
+ ```javascript
75
+ const fresnel = Fn(([power = 2.0]) => {
76
+ const nDotV = normalWorld.dot(viewDir).saturate();
77
+ return float(1.0).sub(nDotV).pow(power);
78
+ });
79
+ ```
80
+
81
+ ## When to Use This Skill
82
+
83
+ - Setting up Three.js with WebGPU renderer
84
+ - Creating custom shader materials with TSL
85
+ - Writing GPU compute shaders
86
+ - Building post-processing pipelines
87
+ - Migrating from GLSL to TSL
88
+ - Implementing visual effects (particles, water, terrain, etc.)
89
+
90
+ ## Resources
91
+
92
+ - [Three.js TSL Wiki](https://github.com/mrdoob/three.js/wiki/Three.js-Shading-Language)
93
+ - [WebGPU Examples](https://github.com/mrdoob/three.js/tree/master/examples) (files prefixed with `webgpu_`)
@@ -0,0 +1,578 @@
1
+ # TSL Compute Shaders
2
+
3
+ Compute shaders run on the GPU for parallel processing of data. TSL makes them accessible through JavaScript.
4
+
5
+ ## CRITICAL: TSL Node Property Assignment vs JS Variable Reassignment
6
+
7
+ **TSL can intercept property assignments on nodes, but NOT JavaScript variable reassignment.**
8
+
9
+ ### What Works vs What Doesn't
10
+
11
+ | Pattern | Works? | Why |
12
+ |---------|--------|-----|
13
+ | `node.y = value` | ✅ | Property setter - TSL intercepts |
14
+ | `node.x.assign(value)` | ✅ | TSL method call |
15
+ | `buffer.element(i).assign(v)` | ✅ | TSL method call |
16
+ | `variable = variable.add(1)` | ❌ | JS variable reassignment - TSL can't see it |
17
+
18
+ ### This WORKS (property assignment on vec3):
19
+
20
+ ```javascript
21
+ // ✅ CORRECT - Property assignment on node object
22
+ const computeShader = Fn(() => {
23
+ const result = vec3(position);
24
+
25
+ If(result.y.greaterThan(limit), () => {
26
+ result.y = limit; // TSL intercepts property setters!
27
+ });
28
+
29
+ return result;
30
+ })();
31
+ ```
32
+
33
+ ### This does NOT work (JS variable reassignment):
34
+
35
+ ```javascript
36
+ // ❌ WRONG - JavaScript variable reassignment inside If()
37
+ const computeShader = Fn(() => {
38
+ let value = buffer.element(index).toFloat(); // Scalar float - no .x/.y properties
39
+
40
+ If(condition, () => {
41
+ value = value.add(1.0); // JS reassigns variable to NEW node - TSL can't track this!
42
+ });
43
+
44
+ buffer.element(index).assign(value); // Uses ORIGINAL node, not the add result!
45
+ })().compute(count);
46
+ ```
47
+
48
+ **Why it fails:** `value = value.add(1.0)` creates a new TSL node and reassigns the JavaScript variable to point to it. But TSL can't intercept JavaScript variable assignment - it can only intercept property setters and method calls on TSL node objects. Since `value` is a scalar float (no `.x`/`.y` properties), you can't use property assignment.
49
+
50
+ ### Solution 1: Use `select()` for Conditional Values
51
+
52
+ ```javascript
53
+ // ✅ CORRECT - Use select() for inline conditionals
54
+ import { select } from 'three/tsl';
55
+
56
+ const computeShader = Fn(() => {
57
+ const currentValue = buffer.element(index).toFloat();
58
+
59
+ // select(condition, valueIfTrue, valueIfFalse)
60
+ const newValue = select(
61
+ condition,
62
+ currentValue.add(1.0), // If true
63
+ currentValue // If false
64
+ );
65
+
66
+ buffer.element(index).assign(newValue);
67
+ })().compute(count);
68
+ ```
69
+
70
+ ### Solution 2: Use `.assign()` Directly on Buffer Elements Inside If()
71
+
72
+ ```javascript
73
+ // ✅ CORRECT - Direct buffer assignment inside If() works
74
+ const computeShader = Fn(() => {
75
+ const element = buffer.element(index);
76
+
77
+ If(condition, () => {
78
+ // Direct assignment to buffer element works!
79
+ element.assign(element.add(1.0));
80
+ });
81
+ })().compute(count);
82
+ ```
83
+
84
+ ### Solution 3: Use `.toVar()` for Mutable Variables
85
+
86
+ ```javascript
87
+ // ✅ CORRECT - Use .toVar() for variables that need mutation
88
+ const computeShader = Fn(() => {
89
+ // .toVar() creates a proper GPU variable that can be reassigned
90
+ const value = buffer.element(index).toFloat().toVar();
91
+
92
+ If(condition, () => {
93
+ value.assign(value.add(1.0)); // This works with .toVar()!
94
+ });
95
+
96
+ buffer.element(index).assign(value);
97
+ })().compute(count);
98
+ ```
99
+
100
+ ### Quick Reference: When to Use What
101
+
102
+ | Pattern | Use Case |
103
+ |---------|----------|
104
+ | `select(cond, a, b)` | Simple conditional value selection |
105
+ | `element.assign()` inside `If()` | Direct buffer writes |
106
+ | `.toVar()` + `assign()` | Complex logic with multiple conditionals |
107
+ | Regular `If()` with direct assigns | Multiple buffer element updates |
108
+
109
+ ### Example: Correct Stamp/Fade Pattern
110
+
111
+ ```javascript
112
+ // ✅ CORRECT implementation of conditional stamping
113
+ const computeShader = Fn(() => {
114
+ const currentFoam = foamBuffer.element(index).toFloat();
115
+
116
+ // Calculate distance
117
+ const dist = worldPos.distance(stampPos);
118
+ const radius = float(50.0);
119
+
120
+ // Calculate falloff (will be 0 outside radius due to select)
121
+ const falloff = float(1.0).sub(dist.div(radius));
122
+
123
+ // Use select() - returns falloff if inside radius, 0 if outside
124
+ const foamToAdd = select(dist.lessThan(radius), falloff, float(0.0));
125
+
126
+ // Combine and write
127
+ const newFoam = max(currentFoam, foamToAdd);
128
+ foamBuffer.element(index).assign(clamp(newFoam, 0.0, 1.0));
129
+ })().compute(bufferSize);
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Basic Setup
135
+
136
+ ```javascript
137
+ import * as THREE from 'three/webgpu';
138
+ import { Fn, instancedArray, instanceIndex, vec3 } from 'three/tsl';
139
+
140
+ // Create storage buffer
141
+ const count = 100000;
142
+ const positions = instancedArray(count, 'vec3');
143
+
144
+ // Create compute shader
145
+ const computeShader = Fn(() => {
146
+ const position = positions.element(instanceIndex);
147
+ position.x.addAssign(0.01);
148
+ })().compute(count);
149
+
150
+ // Initialize renderer first, then use synchronous compute
151
+ await renderer.init();
152
+ renderer.compute(computeShader);
153
+ ```
154
+
155
+ ### Read-Only Storage Buffers
156
+
157
+ ```javascript
158
+ import { attributeArray } from 'three/tsl';
159
+
160
+ // attributeArray() creates read-only storage buffers (vs instancedArray for read-write)
161
+ const lookupTable = attributeArray(data, 'float');
162
+
163
+ // Use in compute or materials - data is read-only on GPU
164
+ const value = lookupTable.element(index);
165
+ ```
166
+
167
+ ## Storage Buffers
168
+
169
+ ### Instanced Arrays
170
+
171
+ ```javascript
172
+ import { instancedArray } from 'three/tsl';
173
+
174
+ // Create typed storage buffers
175
+ const positions = instancedArray(count, 'vec3');
176
+ const velocities = instancedArray(count, 'vec3');
177
+ const colors = instancedArray(count, 'vec4');
178
+ const indices = instancedArray(count, 'uint');
179
+ const values = instancedArray(count, 'float');
180
+ ```
181
+
182
+ ### Accessing Elements
183
+
184
+ ```javascript
185
+ const computeShader = Fn(() => {
186
+ // Get element at current index
187
+ const position = positions.element(instanceIndex);
188
+ const velocity = velocities.element(instanceIndex);
189
+
190
+ // Read values
191
+ const x = position.x;
192
+ const speed = velocity.length();
193
+
194
+ // Write values
195
+ position.assign(vec3(0, 0, 0));
196
+ position.x.assign(1.0);
197
+ position.addAssign(velocity);
198
+ })().compute(count);
199
+ ```
200
+
201
+ ### Accessing Other Elements
202
+
203
+ ```javascript
204
+ const computeShader = Fn(() => {
205
+ const myIndex = instanceIndex;
206
+ const neighborIndex = myIndex.add(1).mod(count);
207
+
208
+ const myPos = positions.element(myIndex);
209
+ const neighborPos = positions.element(neighborIndex);
210
+
211
+ // Calculate distance to neighbor
212
+ const dist = myPos.distance(neighborPos);
213
+ })().compute(count);
214
+ ```
215
+
216
+ ## Compute Shader Patterns
217
+
218
+ ### Initialize Particles
219
+
220
+ ```javascript
221
+ const computeInit = Fn(() => {
222
+ const position = positions.element(instanceIndex);
223
+ const velocity = velocities.element(instanceIndex);
224
+
225
+ // Random positions using hash
226
+ position.x.assign(hash(instanceIndex).mul(10).sub(5));
227
+ position.y.assign(hash(instanceIndex.add(1)).mul(10).sub(5));
228
+ position.z.assign(hash(instanceIndex.add(2)).mul(10).sub(5));
229
+
230
+ // Zero velocity
231
+ velocity.assign(vec3(0));
232
+ })().compute(count);
233
+
234
+ // Run once at startup (after await renderer.init())
235
+ renderer.compute(computeInit);
236
+ ```
237
+
238
+ ### Physics Update
239
+
240
+ ```javascript
241
+ const gravity = uniform(-9.8);
242
+ const deltaTimeUniform = uniform(0);
243
+ const groundY = uniform(0);
244
+
245
+ const computeUpdate = Fn(() => {
246
+ const position = positions.element(instanceIndex);
247
+ const velocity = velocities.element(instanceIndex);
248
+ const dt = deltaTimeUniform;
249
+
250
+ // Apply gravity
251
+ velocity.y.addAssign(gravity.mul(dt));
252
+
253
+ // Update position
254
+ position.addAssign(velocity.mul(dt));
255
+
256
+ // Ground collision
257
+ If(position.y.lessThan(groundY), () => {
258
+ position.y.assign(groundY);
259
+ velocity.y.assign(velocity.y.negate().mul(0.8)); // Bounce
260
+ velocity.xz.mulAssign(0.95); // Friction
261
+ });
262
+ })().compute(count);
263
+
264
+ // In animation loop
265
+ function animate() {
266
+ deltaTimeUniform.value = clock.getDelta();
267
+ renderer.compute(computeUpdate);
268
+ renderer.render(scene, camera);
269
+ }
270
+ ```
271
+
272
+ ### Attraction to Point
273
+
274
+ ```javascript
275
+ const attractorPos = uniform(new THREE.Vector3(0, 0, 0));
276
+ const attractorStrength = uniform(1.0);
277
+
278
+ const computeAttract = Fn(() => {
279
+ const position = positions.element(instanceIndex);
280
+ const velocity = velocities.element(instanceIndex);
281
+
282
+ // Direction to attractor
283
+ const toAttractor = attractorPos.sub(position);
284
+ const distance = toAttractor.length();
285
+ const direction = toAttractor.normalize();
286
+
287
+ // Apply force (inverse square falloff)
288
+ const force = direction.mul(attractorStrength).div(distance.mul(distance).add(0.1));
289
+ velocity.addAssign(force.mul(deltaTimeUniform));
290
+ })().compute(count);
291
+ ```
292
+
293
+ ### Neighbor Interaction (Boids-like)
294
+
295
+ ```javascript
296
+ const computeBoids = Fn(() => {
297
+ const myPos = positions.element(instanceIndex);
298
+ const myVel = velocities.element(instanceIndex);
299
+
300
+ const separation = vec3(0).toVar();
301
+ const alignment = vec3(0).toVar();
302
+ const cohesion = vec3(0).toVar();
303
+ const neighborCount = int(0).toVar();
304
+
305
+ // Check nearby particles
306
+ Loop(count, ({ i }) => {
307
+ If(i.notEqual(instanceIndex), () => {
308
+ const otherPos = positions.element(i);
309
+ const otherVel = velocities.element(i);
310
+ const dist = myPos.distance(otherPos);
311
+
312
+ If(dist.lessThan(2.0), () => {
313
+ // Separation
314
+ const diff = myPos.sub(otherPos).normalize().div(dist);
315
+ separation.addAssign(diff);
316
+
317
+ // Alignment
318
+ alignment.addAssign(otherVel);
319
+
320
+ // Cohesion
321
+ cohesion.addAssign(otherPos);
322
+
323
+ neighborCount.addAssign(1);
324
+ });
325
+ });
326
+ });
327
+
328
+ If(neighborCount.greaterThan(0), () => {
329
+ const n = neighborCount.toFloat();
330
+ alignment.divAssign(n);
331
+ cohesion.divAssign(n);
332
+ cohesion.assign(cohesion.sub(myPos));
333
+
334
+ myVel.addAssign(separation.mul(0.05));
335
+ myVel.addAssign(alignment.sub(myVel).mul(0.05));
336
+ myVel.addAssign(cohesion.mul(0.05));
337
+ });
338
+
339
+ // Limit speed
340
+ const speed = myVel.length();
341
+ If(speed.greaterThan(2.0), () => {
342
+ myVel.assign(myVel.normalize().mul(2.0));
343
+ });
344
+
345
+ myPos.addAssign(myVel.mul(deltaTimeUniform));
346
+ })().compute(count);
347
+ ```
348
+
349
+ ## Workgroups and Synchronization
350
+
351
+ ### Workgroup Size
352
+
353
+ ```javascript
354
+ // Default workgroup size is typically 64 or 256
355
+ // Pass workgroup size as an array
356
+ const computeShader = Fn(() => {
357
+ // shader code
358
+ })().compute(count, [64]);
359
+
360
+ // 2D workgroup
361
+ const compute2D = Fn(() => {
362
+ // shader code
363
+ })().compute(width * height, [8, 8]);
364
+ ```
365
+
366
+ ### Compute Builtins
367
+
368
+ ```javascript
369
+ import {
370
+ globalId, localId, workgroupId, numWorkgroups, subgroupSize,
371
+ invocationLocalIndex, invocationSubgroupIndex, subgroupIndex
372
+ } from 'three/tsl';
373
+
374
+ const computeShader = Fn(() => {
375
+ // Global invocation ID across all workgroups
376
+ const gid = globalId;
377
+
378
+ // Local invocation ID within the workgroup
379
+ const lid = localId;
380
+
381
+ // Workgroup ID
382
+ const wid = workgroupId;
383
+
384
+ // Total number of workgroups
385
+ const nwg = numWorkgroups;
386
+ })().compute(count, [64]);
387
+ ```
388
+
389
+ ### Barriers
390
+
391
+ ```javascript
392
+ import { workgroupBarrier, storageBarrier, textureBarrier } from 'three/tsl';
393
+
394
+ const computeShader = Fn(() => {
395
+ // Write data
396
+ sharedData.element(localIndex).assign(value);
397
+
398
+ // Ensure all workgroup threads reach this point
399
+ workgroupBarrier();
400
+
401
+ // Now safe to read data written by other threads
402
+ const neighborValue = sharedData.element(localIndex.add(1));
403
+ })().compute(count);
404
+ ```
405
+
406
+ ## Atomic Operations
407
+
408
+ For thread-safe read-modify-write operations:
409
+
410
+ ```javascript
411
+ import { atomicAdd, atomicSub, atomicMax, atomicMin, atomicAnd, atomicOr, atomicXor } from 'three/tsl';
412
+
413
+ const counter = instancedArray(1, 'uint');
414
+
415
+ const computeShader = Fn(() => {
416
+ // Atomically increment counter
417
+ atomicAdd(counter.element(0), 1);
418
+
419
+ // Atomic max
420
+ atomicMax(maxValue.element(0), localValue);
421
+ })().compute(count);
422
+ ```
423
+
424
+ ## Using Compute Results in Materials
425
+
426
+ ### Instanced Mesh with Computed Positions
427
+
428
+ ```javascript
429
+ // Create instanced mesh
430
+ const geometry = new THREE.SphereGeometry(0.1, 16, 16);
431
+ const material = new THREE.MeshStandardNodeMaterial();
432
+
433
+ // Use computed positions
434
+ material.positionNode = positions.element(instanceIndex);
435
+
436
+ // Optionally use computed colors
437
+ material.colorNode = colors.element(instanceIndex);
438
+
439
+ const mesh = new THREE.InstancedMesh(geometry, material, count);
440
+ scene.add(mesh);
441
+ ```
442
+
443
+ ### Points with Computed Positions
444
+
445
+ ```javascript
446
+ const geometry = new THREE.BufferGeometry();
447
+ geometry.setAttribute('position', new THREE.Float32BufferAttribute(new Float32Array(count * 3), 3));
448
+
449
+ const material = new THREE.PointsNodeMaterial();
450
+ material.positionNode = positions.element(instanceIndex);
451
+ material.colorNode = colors.element(instanceIndex);
452
+ material.sizeNode = float(5.0);
453
+
454
+ const points = new THREE.Points(geometry, material);
455
+ scene.add(points);
456
+ ```
457
+
458
+ ## Execution Methods
459
+
460
+ ```javascript
461
+ // IMPORTANT: Always initialize the renderer first
462
+ await renderer.init();
463
+
464
+ // Synchronous compute (preferred since r181)
465
+ renderer.compute(computeShader);
466
+
467
+ // Multiple computes
468
+ renderer.compute(computeInit);
469
+ renderer.compute(computePhysics);
470
+ renderer.compute(computeCollisions);
471
+
472
+ // Note: computeAsync() is deprecated since r181.
473
+ // Use await renderer.init() at startup, then renderer.compute() synchronously.
474
+ ```
475
+
476
+ ## Reading Back Data (GPU to CPU)
477
+
478
+ ```javascript
479
+ // Create buffer for readback
480
+ const readBuffer = new Float32Array(count * 3);
481
+
482
+ // Read data back from GPU
483
+ await renderer.readRenderTargetPixelsAsync(
484
+ computeTexture,
485
+ 0, 0, width, height,
486
+ readBuffer
487
+ );
488
+ ```
489
+
490
+ ## Complete Example: Particle System
491
+
492
+ ```javascript
493
+ import * as THREE from 'three/webgpu';
494
+ import {
495
+ Fn, If, instancedArray, instanceIndex, uniform,
496
+ vec3, float, hash, time
497
+ } from 'three/tsl';
498
+
499
+ // Setup
500
+ const count = 50000;
501
+ const positions = instancedArray(count, 'vec3');
502
+ const velocities = instancedArray(count, 'vec3');
503
+ const lifetimes = instancedArray(count, 'float');
504
+
505
+ // Uniforms
506
+ const emitterPos = uniform(new THREE.Vector3(0, 0, 0));
507
+ const gravity = uniform(-2.0);
508
+ const dt = uniform(0);
509
+
510
+ // Initialize
511
+ const computeInit = Fn(() => {
512
+ const pos = positions.element(instanceIndex);
513
+ const vel = velocities.element(instanceIndex);
514
+ const life = lifetimes.element(instanceIndex);
515
+
516
+ pos.assign(emitterPos);
517
+
518
+ // Random velocity in cone
519
+ const angle = hash(instanceIndex).mul(Math.PI * 2);
520
+ const speed = hash(instanceIndex.add(1)).mul(2).add(1);
521
+ vel.x.assign(angle.cos().mul(speed).mul(0.3));
522
+ vel.y.assign(speed);
523
+ vel.z.assign(angle.sin().mul(speed).mul(0.3));
524
+
525
+ // Random lifetime
526
+ life.assign(hash(instanceIndex.add(2)).mul(2).add(1));
527
+ })().compute(count);
528
+
529
+ // Update
530
+ const computeUpdate = Fn(() => {
531
+ const pos = positions.element(instanceIndex);
532
+ const vel = velocities.element(instanceIndex);
533
+ const life = lifetimes.element(instanceIndex);
534
+
535
+ // Apply gravity
536
+ vel.y.addAssign(gravity.mul(dt));
537
+
538
+ // Update position
539
+ pos.addAssign(vel.mul(dt));
540
+
541
+ // Decrease lifetime
542
+ life.subAssign(dt);
543
+
544
+ // Respawn dead particles
545
+ If(life.lessThan(0), () => {
546
+ pos.assign(emitterPos);
547
+ const angle = hash(instanceIndex.add(time.mul(1000))).mul(Math.PI * 2);
548
+ const speed = hash(instanceIndex.add(time.mul(1000)).add(1)).mul(2).add(1);
549
+ vel.x.assign(angle.cos().mul(speed).mul(0.3));
550
+ vel.y.assign(speed);
551
+ vel.z.assign(angle.sin().mul(speed).mul(0.3));
552
+ life.assign(hash(instanceIndex.add(time.mul(1000)).add(2)).mul(2).add(1));
553
+ });
554
+ })().compute(count);
555
+
556
+ // Material
557
+ const material = new THREE.PointsNodeMaterial();
558
+ material.positionNode = positions.element(instanceIndex);
559
+ material.sizeNode = float(3.0);
560
+ material.colorNode = vec3(1, 0.5, 0.2);
561
+
562
+ // Geometry (dummy positions)
563
+ const geometry = new THREE.BufferGeometry();
564
+ geometry.setAttribute('position', new THREE.Float32BufferAttribute(new Float32Array(count * 3), 3));
565
+
566
+ const points = new THREE.Points(geometry, material);
567
+ scene.add(points);
568
+
569
+ // Init (after await renderer.init())
570
+ renderer.compute(computeInit);
571
+
572
+ // Animation loop
573
+ function animate() {
574
+ dt.value = Math.min(clock.getDelta(), 0.1);
575
+ renderer.compute(computeUpdate);
576
+ renderer.render(scene, camera);
577
+ }
578
+ ```