exonous 0.0.0-stage → 2.10.4

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 (385) hide show
  1. package/README.md +100 -2
  2. package/assets/THIRD-PARTY-NOTICES.md +29 -0
  3. package/assets/adapters/opencode/exonous.js +54 -0
  4. package/assets/agents/exo-backend.md +22 -0
  5. package/assets/agents/exo-cto.md +22 -0
  6. package/assets/agents/exo-data-ai.md +22 -0
  7. package/assets/agents/exo-designer.md +22 -0
  8. package/assets/agents/exo-devops.md +22 -0
  9. package/assets/agents/exo-frontend.md +22 -0
  10. package/assets/agents/exo-infra.md +22 -0
  11. package/assets/agents/exo-mobile.md +22 -0
  12. package/assets/agents/exo-pm.md +22 -0
  13. package/assets/agents/exo-qa.md +22 -0
  14. package/assets/agents/exo-researcher.md +22 -0
  15. package/assets/agents/exo-security.md +22 -0
  16. package/assets/agents/roster.json +209 -0
  17. package/assets/agents/taxis.js +189 -0
  18. package/assets/editors/cursor/frontend-skills.mdc +27 -0
  19. package/assets/editors/hooks/cursor/hooks.json +11 -0
  20. package/assets/machine/PR-TEMPLATE.md +21 -0
  21. package/assets/machine/hooks/anamnesis.cjs +61 -0
  22. package/assets/machine/hooks/ethos.cjs +48 -0
  23. package/assets/machine/hooks/kairos.cjs +46 -0
  24. package/assets/machine/hooks/lib/cli-options.cjs +133 -0
  25. package/assets/machine/hooks/lib/memory.cjs +488 -0
  26. package/assets/machine/hooks/lib/metron.cjs +52 -0
  27. package/assets/machine/hooks/lib/paths.cjs +99 -0
  28. package/assets/machine/hooks/lib/payload.cjs +81 -0
  29. package/assets/machine/hooks/lib/pr-template-validate.cjs +103 -0
  30. package/assets/machine/hooks/lib/release.cjs +58 -0
  31. package/assets/machine/hooks/lib/repo.cjs +138 -0
  32. package/assets/machine/hooks/lib/sanitize.cjs +37 -0
  33. package/assets/machine/hooks/lib/selfupdate.cjs +354 -0
  34. package/assets/machine/hooks/lib/shell.cjs +722 -0
  35. package/assets/machine/hooks/lib/template.cjs +70 -0
  36. package/assets/machine/hooks/lib/token.cjs +110 -0
  37. package/assets/machine/hooks/lib/validate-pr-body.cjs +21 -0
  38. package/assets/machine/hooks/pyle.cjs +302 -0
  39. package/assets/rules/nomos.md +59 -0
  40. package/assets/rules/praxis.md +38 -0
  41. package/assets/skills/code-review/SKILL.md +124 -0
  42. package/assets/skills/commit-changes/SKILL.md +49 -0
  43. package/assets/skills/deliver/SKILL.md +114 -0
  44. package/assets/skills/deliver/references/parallel.md +37 -0
  45. package/assets/skills/doc/SKILL.md +140 -0
  46. package/assets/skills/doc/doc.mjs +277 -0
  47. package/assets/skills/issue-board/SKILL.md +84 -0
  48. package/assets/skills/issue-board/board.mjs +389 -0
  49. package/assets/skills/issue-board/config.example.json +9 -0
  50. package/assets/skills/issue-board/render.py +189 -0
  51. package/assets/skills/make-pr/SKILL.md +24 -0
  52. package/assets/skills/native-ui/SKILL.md +67 -0
  53. package/assets/skills/native-ui/reference/apple.md +180 -0
  54. package/assets/skills/native-ui/reference/mobile-feel.md +221 -0
  55. package/assets/skills/native-ui/reference/swift.md +289 -0
  56. package/assets/skills/project-memory/SKILL.md +59 -0
  57. package/assets/skills/project-memory/config.example.json +4 -0
  58. package/assets/skills/project-memory/project-memory.mjs +478 -0
  59. package/assets/skills/security-review/SKILL.md +102 -0
  60. package/assets/skills/session-handoff/SKILL.md +23 -0
  61. package/assets/skills/session-handoff/config.example.json +3 -0
  62. package/assets/skills/ui-design/SKILL.md +75 -0
  63. package/assets/skills/ui-design/reference/adapt.md +151 -0
  64. package/assets/skills/ui-design/reference/adapt.native.md +35 -0
  65. package/assets/skills/ui-design/reference/android.md +50 -0
  66. package/assets/skills/ui-design/reference/animate.md +87 -0
  67. package/assets/skills/ui-design/reference/audit.md +76 -0
  68. package/assets/skills/ui-design/reference/audit.native.md +126 -0
  69. package/assets/skills/ui-design/reference/bolder.md +33 -0
  70. package/assets/skills/ui-design/reference/clarify.md +84 -0
  71. package/assets/skills/ui-design/reference/colorize.md +86 -0
  72. package/assets/skills/ui-design/reference/craft-floor.md +25 -0
  73. package/assets/skills/ui-design/reference/critique.md +345 -0
  74. package/assets/skills/ui-design/reference/degraded/asset-producer.md +35 -0
  75. package/assets/skills/ui-design/reference/degraded/documenter.md +23 -0
  76. package/assets/skills/ui-design/reference/degraded/finish-reviewer.md +43 -0
  77. package/assets/skills/ui-design/reference/degraded/manual-edit-applier.md +56 -0
  78. package/assets/skills/ui-design/reference/delight.md +63 -0
  79. package/assets/skills/ui-design/reference/distill.md +98 -0
  80. package/assets/skills/ui-design/reference/doctor.md +49 -0
  81. package/assets/skills/ui-design/reference/document.md +273 -0
  82. package/assets/skills/ui-design/reference/extract.md +52 -0
  83. package/assets/skills/ui-design/reference/harden.md +122 -0
  84. package/assets/skills/ui-design/reference/hooks.md +114 -0
  85. package/assets/skills/ui-design/reference/init.md +47 -0
  86. package/assets/skills/ui-design/reference/ios.md +55 -0
  87. package/assets/skills/ui-design/reference/layout.md +81 -0
  88. package/assets/skills/ui-design/reference/live-setup.md +75 -0
  89. package/assets/skills/ui-design/reference/live.md +326 -0
  90. package/assets/skills/ui-design/reference/new-work.md +350 -0
  91. package/assets/skills/ui-design/reference/onboard.md +85 -0
  92. package/assets/skills/ui-design/reference/operate.md +29 -0
  93. package/assets/skills/ui-design/reference/optimize.md +101 -0
  94. package/assets/skills/ui-design/reference/overdrive.md +83 -0
  95. package/assets/skills/ui-design/reference/polish.md +77 -0
  96. package/assets/skills/ui-design/reference/quieter.md +95 -0
  97. package/assets/skills/ui-design/reference/routing.md +37 -0
  98. package/assets/skills/ui-design/reference/shape.md +43 -0
  99. package/assets/skills/ui-design/reference/styles/brutalist.md +45 -0
  100. package/assets/skills/ui-design/reference/styles/design-md.md +70 -0
  101. package/assets/skills/ui-design/reference/styles/direction.md +95 -0
  102. package/assets/skills/ui-design/reference/styles/full-output.md +42 -0
  103. package/assets/skills/ui-design/reference/styles/minimalist.md +64 -0
  104. package/assets/skills/ui-design/reference/styles/premium.md +65 -0
  105. package/assets/skills/ui-design/reference/styles/redesign.md +59 -0
  106. package/assets/skills/ui-design/reference/typeset.md +73 -0
  107. package/assets/skills/ui-design/reference/visualize.md +156 -0
  108. package/assets/skills/ui-design/scripts/ENGINE-LICENSE +191 -0
  109. package/assets/skills/ui-design/scripts/VERSION +1 -0
  110. package/assets/skills/ui-design/scripts/bin/darwin-arm64/impeccable +0 -0
  111. package/assets/skills/ui-design/scripts/command-metadata.json +94 -0
  112. package/assets/skills/ui-design/scripts/data/font-index-failures.json +121 -0
  113. package/assets/skills/ui-design/scripts/data/font-index.json +1 -0
  114. package/assets/skills/ui-design/scripts/impeccable +206 -0
  115. package/assets/skills/ui-design/scripts/impeccable.cmd +214 -0
  116. package/assets/skills/ui-design/scripts/live-browser-dom.js +167 -0
  117. package/assets/skills/ui-design/scripts/live-browser-ignores.js +242 -0
  118. package/assets/skills/ui-design/scripts/live-browser-session.js +144 -0
  119. package/assets/skills/ui-design/scripts/live-browser.js +12990 -0
  120. package/assets/skills/ui-design/scripts/modern-screenshot.umd.js +14 -0
  121. package/assets/skills/ui-design/scripts/ui-design +6 -0
  122. package/assets/skills/ui-design/scripts/ui-design.cmd +3 -0
  123. package/assets/skills/ui-design/scripts/ui-design.mjs +124 -0
  124. package/assets/skills/ui-mockup/SKILL.md +68 -0
  125. package/assets/skills/ui-mockup/reference/brandkit.md +101 -0
  126. package/assets/skills/ui-mockup/reference/image-to-code.md +83 -0
  127. package/assets/skills/ui-mockup/reference/mobile-comps.md +94 -0
  128. package/assets/skills/ui-mockup/reference/web-comps.md +83 -0
  129. package/assets/skills/ui-motion/SKILL.md +112 -0
  130. package/assets/skills/ui-motion/reference/expo.md +224 -0
  131. package/assets/skills/ui-motion/reference/opportunities.md +81 -0
  132. package/assets/skills/ui-motion/reference/prototype.md +238 -0
  133. package/assets/skills/ui-motion/reference/review.md +163 -0
  134. package/assets/skills/ui-motion/reference/toasts.md +144 -0
  135. package/assets/skills/ui-motion/reference/ui-libraries.md +71 -0
  136. package/assets/skills/ui-motion/reference/vocabulary.md +130 -0
  137. package/assets/skills/ui-motion/reference/web.md +294 -0
  138. package/assets/skills/ui-patterns/SKILL.md +105 -0
  139. package/assets/skills/ui-patterns/references/stacks/html-tailwind.md +40 -0
  140. package/assets/skills/ui-patterns/references/stacks/nextjs.md +52 -0
  141. package/assets/skills/ui-patterns/references/stacks/nuxt.md +100 -0
  142. package/assets/skills/ui-patterns/references/stacks/react-native.md +48 -0
  143. package/assets/skills/ui-patterns/references/stacks/react.md +49 -0
  144. package/assets/skills/ui-patterns/references/stacks/shadcn.md +57 -0
  145. package/assets/skills/ui-patterns/references/stacks/vue.md +37 -0
  146. package/assets/techne/.claude-plugin/marketplace.json +31 -0
  147. package/assets/techne/.claude-plugin/plugin.json +24 -0
  148. package/assets/techne/.mcp.json +8 -0
  149. package/assets/techne/commands/build-fix.md +48 -0
  150. package/assets/techne/commands/refactor-clean.md +46 -0
  151. package/assets/techne/commands/test-coverage.md +42 -0
  152. package/assets/techne/hooks/hooks.json +49 -0
  153. package/assets/techne/rules/angular/coding-style.md +49 -0
  154. package/assets/techne/rules/angular/hooks.md +23 -0
  155. package/assets/techne/rules/angular/patterns.md +48 -0
  156. package/assets/techne/rules/angular/security.md +26 -0
  157. package/assets/techne/rules/angular/testing.md +46 -0
  158. package/assets/techne/rules/arkts/coding-style.md +63 -0
  159. package/assets/techne/rules/arkts/hooks.md +38 -0
  160. package/assets/techne/rules/arkts/patterns.md +42 -0
  161. package/assets/techne/rules/arkts/security.md +35 -0
  162. package/assets/techne/rules/arkts/testing.md +39 -0
  163. package/assets/techne/rules/common/agents.md +6 -0
  164. package/assets/techne/rules/common/code-review.md +15 -0
  165. package/assets/techne/rules/common/coding-style.md +13 -0
  166. package/assets/techne/rules/common/development-workflow.md +5 -0
  167. package/assets/techne/rules/common/git-workflow.md +30 -0
  168. package/assets/techne/rules/common/hooks.md +7 -0
  169. package/assets/techne/rules/common/patterns.md +3 -0
  170. package/assets/techne/rules/common/performance.md +3 -0
  171. package/assets/techne/rules/common/security.md +5 -0
  172. package/assets/techne/rules/common/testing.md +3 -0
  173. package/assets/techne/rules/cpp/coding-style.md +31 -0
  174. package/assets/techne/rules/cpp/hooks.md +26 -0
  175. package/assets/techne/rules/cpp/patterns.md +31 -0
  176. package/assets/techne/rules/cpp/security.md +37 -0
  177. package/assets/techne/rules/cpp/testing.md +31 -0
  178. package/assets/techne/rules/csharp/coding-style.md +30 -0
  179. package/assets/techne/rules/csharp/hooks.md +24 -0
  180. package/assets/techne/rules/csharp/patterns.md +28 -0
  181. package/assets/techne/rules/csharp/security.md +32 -0
  182. package/assets/techne/rules/csharp/testing.md +27 -0
  183. package/assets/techne/rules/dart/coding-style.md +47 -0
  184. package/assets/techne/rules/dart/hooks.md +26 -0
  185. package/assets/techne/rules/dart/patterns.md +38 -0
  186. package/assets/techne/rules/dart/security.md +44 -0
  187. package/assets/techne/rules/dart/testing.md +39 -0
  188. package/assets/techne/rules/fsharp/coding-style.md +34 -0
  189. package/assets/techne/rules/fsharp/hooks.md +25 -0
  190. package/assets/techne/rules/fsharp/patterns.md +43 -0
  191. package/assets/techne/rules/fsharp/security.md +32 -0
  192. package/assets/techne/rules/fsharp/testing.md +27 -0
  193. package/assets/techne/rules/golang/coding-style.md +30 -0
  194. package/assets/techne/rules/golang/hooks.md +17 -0
  195. package/assets/techne/rules/golang/patterns.md +43 -0
  196. package/assets/techne/rules/golang/security.md +33 -0
  197. package/assets/techne/rules/golang/testing.md +20 -0
  198. package/assets/techne/rules/java/coding-style.md +51 -0
  199. package/assets/techne/rules/java/hooks.md +18 -0
  200. package/assets/techne/rules/java/patterns.md +55 -0
  201. package/assets/techne/rules/java/security.md +33 -0
  202. package/assets/techne/rules/java/testing.md +33 -0
  203. package/assets/techne/rules/kotlin/coding-style.md +50 -0
  204. package/assets/techne/rules/kotlin/hooks.md +17 -0
  205. package/assets/techne/rules/kotlin/patterns.md +44 -0
  206. package/assets/techne/rules/kotlin/security.md +34 -0
  207. package/assets/techne/rules/kotlin/testing.md +38 -0
  208. package/assets/techne/rules/nuxt/coding-style.md +20 -0
  209. package/assets/techne/rules/nuxt/hooks.md +16 -0
  210. package/assets/techne/rules/nuxt/patterns.md +46 -0
  211. package/assets/techne/rules/nuxt/security.md +19 -0
  212. package/assets/techne/rules/nuxt/testing.md +15 -0
  213. package/assets/techne/rules/perl/coding-style.md +33 -0
  214. package/assets/techne/rules/perl/hooks.md +22 -0
  215. package/assets/techne/rules/perl/patterns.md +43 -0
  216. package/assets/techne/rules/perl/security.md +39 -0
  217. package/assets/techne/rules/perl/testing.md +42 -0
  218. package/assets/techne/rules/php/coding-style.md +30 -0
  219. package/assets/techne/rules/php/hooks.md +24 -0
  220. package/assets/techne/rules/php/patterns.md +26 -0
  221. package/assets/techne/rules/php/security.md +27 -0
  222. package/assets/techne/rules/php/testing.md +28 -0
  223. package/assets/techne/rules/python/coding-style.md +38 -0
  224. package/assets/techne/rules/python/fastapi.md +57 -0
  225. package/assets/techne/rules/python/hooks.md +19 -0
  226. package/assets/techne/rules/python/patterns.md +37 -0
  227. package/assets/techne/rules/python/security.md +26 -0
  228. package/assets/techne/rules/python/testing.md +32 -0
  229. package/assets/techne/rules/react/coding-style.md +24 -0
  230. package/assets/techne/rules/react/hooks.md +62 -0
  231. package/assets/techne/rules/react/patterns.md +48 -0
  232. package/assets/techne/rules/react/security.md +45 -0
  233. package/assets/techne/rules/react/testing.md +42 -0
  234. package/assets/techne/rules/react-native/accessibility.md +14 -0
  235. package/assets/techne/rules/react-native/coding-style.md +16 -0
  236. package/assets/techne/rules/react-native/hooks.md +16 -0
  237. package/assets/techne/rules/react-native/patterns.md +18 -0
  238. package/assets/techne/rules/react-native/performance.md +14 -0
  239. package/assets/techne/rules/react-native/production-readiness.md +16 -0
  240. package/assets/techne/rules/react-native/security.md +16 -0
  241. package/assets/techne/rules/react-native/testing.md +14 -0
  242. package/assets/techne/rules/ruby/coding-style.md +40 -0
  243. package/assets/techne/rules/ruby/hooks.md +33 -0
  244. package/assets/techne/rules/ruby/patterns.md +33 -0
  245. package/assets/techne/rules/ruby/security.md +39 -0
  246. package/assets/techne/rules/ruby/testing.md +35 -0
  247. package/assets/techne/rules/rust/coding-style.md +41 -0
  248. package/assets/techne/rules/rust/hooks.md +16 -0
  249. package/assets/techne/rules/rust/patterns.md +42 -0
  250. package/assets/techne/rules/rust/security.md +33 -0
  251. package/assets/techne/rules/rust/testing.md +30 -0
  252. package/assets/techne/rules/swift/coding-style.md +30 -0
  253. package/assets/techne/rules/swift/hooks.md +20 -0
  254. package/assets/techne/rules/swift/patterns.md +30 -0
  255. package/assets/techne/rules/swift/security.md +22 -0
  256. package/assets/techne/rules/swift/testing.md +28 -0
  257. package/assets/techne/rules/typescript/coding-style.md +38 -0
  258. package/assets/techne/rules/typescript/hooks.md +14 -0
  259. package/assets/techne/rules/typescript/patterns.md +12 -0
  260. package/assets/techne/rules/typescript/security.md +14 -0
  261. package/assets/techne/rules/typescript/testing.md +12 -0
  262. package/assets/techne/rules/vue/coding-style.md +19 -0
  263. package/assets/techne/rules/vue/hooks.md +13 -0
  264. package/assets/techne/rules/vue/patterns.md +29 -0
  265. package/assets/techne/rules/vue/security.md +11 -0
  266. package/assets/techne/rules/vue/testing.md +11 -0
  267. package/assets/techne/rules/web/coding-style.md +25 -0
  268. package/assets/techne/rules/web/design-quality.md +21 -0
  269. package/assets/techne/rules/web/hooks.md +39 -0
  270. package/assets/techne/rules/web/patterns.md +23 -0
  271. package/assets/techne/rules/web/performance.md +25 -0
  272. package/assets/techne/rules/web/security.md +23 -0
  273. package/assets/techne/rules/web/testing.md +21 -0
  274. package/assets/techne/scripts/hooks/config-guard.js +50 -0
  275. package/assets/techne/scripts/hooks/edit-tracker.js +26 -0
  276. package/assets/techne/scripts/hooks/lib/shell.js +204 -0
  277. package/assets/techne/scripts/hooks/no-verify-guard.js +205 -0
  278. package/assets/techne/scripts/hooks/run.js +92 -0
  279. package/assets/techne/scripts/hooks/stop-checks.js +136 -0
  280. package/assets/techne/skills/angular/SKILL.md +34 -0
  281. package/assets/techne/skills/angular/reference/components-and-templates.md +63 -0
  282. package/assets/techne/skills/angular/reference/dependency-injection.md +44 -0
  283. package/assets/techne/skills/angular/reference/forms.md +97 -0
  284. package/assets/techne/skills/angular/reference/routing.md +50 -0
  285. package/assets/techne/skills/angular/reference/signals-and-state.md +59 -0
  286. package/assets/techne/skills/angular/reference/styling-motion-a11y.md +54 -0
  287. package/assets/techne/skills/angular/reference/testing.md +52 -0
  288. package/assets/techne/skills/angular/reference/tooling.md +31 -0
  289. package/assets/techne/skills/cpp/SKILL.md +27 -0
  290. package/assets/techne/skills/cpp/reference/coding-standards.md +160 -0
  291. package/assets/techne/skills/databases/SKILL.md +35 -0
  292. package/assets/techne/skills/databases/reference/clickhouse.md +102 -0
  293. package/assets/techne/skills/databases/reference/migrations.md +94 -0
  294. package/assets/techne/skills/databases/reference/mysql.md +101 -0
  295. package/assets/techne/skills/databases/reference/postgres.md +72 -0
  296. package/assets/techne/skills/databases/reference/prisma.md +105 -0
  297. package/assets/techne/skills/databases/reference/redis.md +108 -0
  298. package/assets/techne/skills/delivery/SKILL.md +35 -0
  299. package/assets/techne/skills/delivery/reference/deployment-patterns.md +58 -0
  300. package/assets/techne/skills/delivery/reference/docker-patterns.md +77 -0
  301. package/assets/techne/skills/delivery/reference/git-workflow.md +64 -0
  302. package/assets/techne/skills/delivery/reference/github-ops.md +67 -0
  303. package/assets/techne/skills/delivery/reference/jira-integration.md +53 -0
  304. package/assets/techne/skills/delivery/reference/kubernetes-patterns.md +67 -0
  305. package/assets/techne/skills/dotnet/SKILL.md +27 -0
  306. package/assets/techne/skills/dotnet/reference/dotnet-core.md +131 -0
  307. package/assets/techne/skills/flutter/SKILL.md +29 -0
  308. package/assets/techne/skills/flutter/reference/code-review.md +76 -0
  309. package/assets/techne/skills/flutter/reference/patterns.md +201 -0
  310. package/assets/techne/skills/go/SKILL.md +28 -0
  311. package/assets/techne/skills/go/reference/patterns.md +87 -0
  312. package/assets/techne/skills/go/reference/testing.md +142 -0
  313. package/assets/techne/skills/java/SKILL.md +29 -0
  314. package/assets/techne/skills/java/reference/java-standards.md +117 -0
  315. package/assets/techne/skills/java/reference/springboot.md +108 -0
  316. package/assets/techne/skills/kotlin/SKILL.md +35 -0
  317. package/assets/techne/skills/kotlin/reference/android-clean-architecture.md +115 -0
  318. package/assets/techne/skills/kotlin/reference/compose-multiplatform-patterns.md +113 -0
  319. package/assets/techne/skills/kotlin/reference/kotlin-coroutines-flows.md +93 -0
  320. package/assets/techne/skills/kotlin/reference/kotlin-patterns.md +74 -0
  321. package/assets/techne/skills/kotlin/reference/kotlin-testing.md +115 -0
  322. package/assets/techne/skills/ml/SKILL.md +34 -0
  323. package/assets/techne/skills/ml/reference/ai-regression-testing.md +99 -0
  324. package/assets/techne/skills/ml/reference/cost-aware-llm-pipeline.md +133 -0
  325. package/assets/techne/skills/ml/reference/eval-harness.md +94 -0
  326. package/assets/techne/skills/ml/reference/mle-workflow.md +177 -0
  327. package/assets/techne/skills/ml/reference/prompt-optimizer.md +107 -0
  328. package/assets/techne/skills/ml/reference/pytorch-patterns.md +164 -0
  329. package/assets/techne/skills/php/SKILL.md +27 -0
  330. package/assets/techne/skills/php/reference/laravel.md +142 -0
  331. package/assets/techne/skills/python/SKILL.md +33 -0
  332. package/assets/techne/skills/python/reference/django.md +104 -0
  333. package/assets/techne/skills/python/reference/fastapi.md +118 -0
  334. package/assets/techne/skills/python/reference/python-core.md +88 -0
  335. package/assets/techne/skills/python/reference/python-testing.md +105 -0
  336. package/assets/techne/skills/quality/SKILL.md +34 -0
  337. package/assets/techne/skills/quality/reference/benchmark.md +55 -0
  338. package/assets/techne/skills/quality/reference/browser-qa.md +60 -0
  339. package/assets/techne/skills/quality/reference/coding-standards.md +88 -0
  340. package/assets/techne/skills/quality/reference/e2e-testing.md +99 -0
  341. package/assets/techne/skills/quality/reference/tdd-workflow.md +89 -0
  342. package/assets/techne/skills/quality/reference/verification-loop.md +80 -0
  343. package/assets/techne/skills/react/SKILL.md +30 -0
  344. package/assets/techne/skills/react/reference/nextjs-turbopack.md +42 -0
  345. package/assets/techne/skills/react/reference/react-patterns.md +139 -0
  346. package/assets/techne/skills/react/reference/react-performance.md +101 -0
  347. package/assets/techne/skills/react/reference/react-testing.md +139 -0
  348. package/assets/techne/skills/react-native/SKILL.md +28 -0
  349. package/assets/techne/skills/react-native/reference/expo-patterns.md +196 -0
  350. package/assets/techne/skills/research/SKILL.md +35 -0
  351. package/assets/techne/skills/research/reference/architecture-decision-records.md +65 -0
  352. package/assets/techne/skills/research/reference/codebase-onboarding.md +44 -0
  353. package/assets/techne/skills/research/reference/deep-research.md +50 -0
  354. package/assets/techne/skills/research/reference/iterative-retrieval.md +62 -0
  355. package/assets/techne/skills/research/reference/product-lens.md +38 -0
  356. package/assets/techne/skills/research/reference/search-first.md +50 -0
  357. package/assets/techne/skills/rust/SKILL.md +28 -0
  358. package/assets/techne/skills/rust/reference/patterns.md +108 -0
  359. package/assets/techne/skills/rust/reference/testing.md +142 -0
  360. package/assets/techne/skills/services/SKILL.md +32 -0
  361. package/assets/techne/skills/services/reference/api-contracts.md +139 -0
  362. package/assets/techne/skills/services/reference/backend-layers.md +95 -0
  363. package/assets/techne/skills/services/reference/errors-and-resilience.md +146 -0
  364. package/assets/techne/skills/services/reference/hexagonal-boundaries.md +93 -0
  365. package/assets/techne/skills/services/reference/mcp-servers.md +50 -0
  366. package/assets/techne/skills/services/reference/nestjs.md +96 -0
  367. package/assets/techne/skills/swift/SKILL.md +29 -0
  368. package/assets/techne/skills/swift/reference/concurrency.md +83 -0
  369. package/assets/techne/skills/swift/reference/swiftui.md +139 -0
  370. package/assets/techne/skills/vue/SKILL.md +29 -0
  371. package/assets/techne/skills/vue/reference/nuxt4-patterns.md +90 -0
  372. package/assets/techne/skills/vue/reference/ui-to-vue.md +90 -0
  373. package/assets/techne/skills/vue/reference/vue-patterns.md +151 -0
  374. package/assets/techne/skills/web/SKILL.md +30 -0
  375. package/assets/techne/skills/web/reference/bun-runtime.md +55 -0
  376. package/assets/techne/skills/web/reference/frontend-patterns.md +54 -0
  377. package/assets/techne/skills/web/reference/seo.md +77 -0
  378. package/assets/techne/skills/web/reference/vite-patterns.md +96 -0
  379. package/bin/native.cjs +30 -0
  380. package/native/aarch64-apple-darwin/exonous +0 -0
  381. package/native/aarch64-unknown-linux-gnu/exonous +0 -0
  382. package/native/x86_64-apple-darwin/exonous +0 -0
  383. package/native/x86_64-pc-windows-msvc/exonous.exe +0 -0
  384. package/native/x86_64-unknown-linux-gnu/exonous +0 -0
  385. package/package.json +1 -6
@@ -0,0 +1,96 @@
1
+ # NestJS patterns
2
+
3
+ ## Layout
4
+
5
+ ```
6
+ src/
7
+ main.ts
8
+ app.module.ts
9
+ common/ # filters, guards, interceptors, pipes
10
+ config/
11
+ modules/<feature>/
12
+ *.module.ts
13
+ *.controller.ts
14
+ *.service.ts
15
+ dto/
16
+ entities/ or repositories/
17
+ ```
18
+
19
+ Feature modules own domain code; export only providers other modules need.
20
+
21
+ ## Bootstrap
22
+
23
+ ```ts
24
+ const app = await NestFactory.create(AppModule, { bufferLogs: true });
25
+ app.useGlobalPipes(new ValidationPipe({
26
+ whitelist: true,
27
+ forbidNonWhitelisted: true,
28
+ transform: true,
29
+ transformOptions: { enableImplicitConversion: true },
30
+ }));
31
+ app.useGlobalFilters(new HttpExceptionFilter());
32
+ await app.listen(process.env.PORT ?? 3000);
33
+ ```
34
+
35
+ Validate environment at startup via `ConfigModule` + schema (`validate` function).
36
+
37
+ ## Controllers and services
38
+
39
+ Controllers: parse params/body, delegate, return response DTOs. Services hold rules and coordinate repos. Use `ParseUUIDPipe` and similar built-ins at the edge.
40
+
41
+ ## DTOs
42
+
43
+ Request DTOs with `class-validator`; separate response DTOs / `@SerializeOptions` — never return entities with password hashes or internal columns.
44
+
45
+ ## Auth
46
+
47
+ Module-local strategies/guards unless shared. Guards for coarse roles; services for row-level checks (`order.ownerId === user.id`).
48
+
49
+ ## Errors
50
+
51
+ Global filter maps `HttpException` and unknown errors to one JSON shape; expected client faults use `BadRequestException`, `NotFoundException`, etc.
52
+
53
+ ## Persistence
54
+
55
+ Repository providers wrap Prisma/TypeORM; multi-step writes live in a service method with explicit transaction API.
56
+
57
+ ## Tests
58
+
59
+ ```ts
60
+ const moduleRef = await Test.createTestingModule({ imports: [UsersModule] }).compile();
61
+ app = moduleRef.createNestApplication();
62
+ app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true }));
63
+ await app.init();
64
+ ```
65
+
66
+ Mirror production pipes/filters in tests. Unit-test services with mocked ports; e2e-test HTTP with supertest or project pattern.
67
+
68
+ ## Production defaults
69
+
70
+ Structured logging + request id; fail boot on bad config; health checks for DB; rate limit and audit on public routes; background consumers in dedicated modules, not inside controllers.
71
+
72
+ ## Exception filter (consistent envelope)
73
+
74
+ ```ts
75
+ @Catch()
76
+ export class AllExceptionsFilter implements ExceptionFilter {
77
+ catch(err: unknown, host: ArgumentsHost) {
78
+ const ctx = host.switchToHttp();
79
+ const res = ctx.getResponse<Response>();
80
+ if (err instanceof HttpException) {
81
+ const payload = err.getResponse();
82
+ return res.status(err.getStatus()).json({
83
+ error: typeof payload === 'string' ? { code: 'http_error', message: payload } : payload,
84
+ });
85
+ }
86
+ this.logger.error(err);
87
+ return res.status(500).json({ error: { code: 'internal_error', message: 'Internal server error' } });
88
+ }
89
+ }
90
+ ```
91
+
92
+ Align `code` values with `reference/api-contracts.md` so web and mobile clients share one catalog.
93
+
94
+ ## Module boundaries vs hexagonal
95
+
96
+ Nest modules often mirror features (`UsersModule`). Treat `UsersService` as application layer only if it avoids importing `Request`/`Response`. When logic sprawls, extract plain use-case classes and keep Nest providers as adapters that delegate — see `reference/hexagonal-boundaries.md`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: swift
3
+ description: SwiftUI engineering on Apple platforms — Observation-based state, NavigationStack routing, render performance, and Swift 6.2 approachable concurrency (@MainActor, @concurrent, isolated conformances). Use for Swift/SwiftUI features, view models, navigation, concurrency migration, or data-race fixes.
4
+ ---
5
+
6
+ Engineering guidance for declarative Apple UI and modern Swift concurrency. Covers architecture and performance; platform visuals, HIG, and motion belong in the **native-ui** skill.
7
+
8
+ ## Non-negotiable rules
9
+
10
+ 1. **Observation first** — New code uses `@Observable` classes, not `ObservableObject` / `@Published` / `@StateObject` / `@EnvironmentObject`.
11
+ 2. **Minimal wrappers** — `@State` for view-owned values; `@Binding` for parent two-way links; `@Bindable` for observable two-way fields; `@Environment(Type.self)` for injected services.
12
+ 3. **Small view structs** — Extract subviews so invalidation stays local; avoid `AnyView`; prefer `@ViewBuilder` / `Group` for conditionals.
13
+ 4. **No work in `body`** — Network, disk, and heavy CPU stay out of `body` and `init`; load with `.task` (auto-cancel on disappear) or explicit async entry points.
14
+ 5. **Type-safe navigation** — `NavigationStack` + `NavigationPath` (or bound path) with `Hashable` destinations and `.navigationDestination(for:)`.
15
+ 6. **List performance** — `LazyVStack` / lazy stacks in scroll views; `ForEach` with stable IDs, never raw indices; limit shadows/blur/mask in scrolling content.
16
+ 7. **Swift 6.2 default** — `async` stays on the **calling actor** unless you explicitly offload; do not assume background execution.
17
+ 8. **`@concurrent` sparingly** — Only after Instruments shows CPU-bound hotspots; mark container `nonisolated`, function `@concurrent`, callers `await`.
18
+ 9. **MainActor for UI domain** — View models, shared singletons, and global mutable app state belong on `@MainActor` (or MainActor default inference for app targets).
19
+ 10. **Isolated conformances** — Prefer `@MainActor` protocol conformances over `nonisolated` hacks or unsafe type erasure when UI types implement shared protocols.
20
+ 11. **Sendable at boundaries** — Data crossing actors/tasks must satisfy isolation rules; treat compiler data-race diagnostics as real bugs.
21
+ 12. **Previews with fakes** — `#Preview` variants with injected mock repositories/services for empty, loading, and populated states.
22
+ 13. **Design vs engineering** — Layout polish, SF Symbols usage, platform chrome → **native-ui**; structural code → **atlas** MCP; API docs → **biblos** MCP.
23
+
24
+ ## References
25
+
26
+ | File | Load when |
27
+ |------|-----------|
28
+ | [reference/swiftui.md](reference/swiftui.md) | Composing views, state wiring, navigation router, list/chart performance, preview setup |
29
+ | [reference/concurrency.md](reference/concurrency.md) | Migrating to Swift 6.2, fixing isolation errors, `@concurrent` offload, globals and protocol conformances |
@@ -0,0 +1,83 @@
1
+ # Swift 6.2 concurrency
2
+
3
+ Approachable Concurrency keeps most code on one actor until you opt into parallelism. Enable features incrementally in Xcode build settings or SPM `SwiftSettings` (MainActor default inference, nonisolated-nonsending-by-default).
4
+
5
+ ## Calling actor stays put
6
+
7
+ Earlier runtimes could hop threads implicitly inside `async` work on `@MainActor` types, surfacing false-positive send errors. Swift 6.2 keeps continuation on the caller’s executor unless you mark otherwise:
8
+
9
+ ```swift
10
+ @MainActor
11
+ final class ImportModel {
12
+ let pipeline = ImagePipeline()
13
+
14
+ func buildSticker(from pickerItem: PhotosPickerItem) async throws -> Sticker? {
15
+ guard let payload = try await pickerItem.loadTransferable(type: Data.self) else { return nil }
16
+ return await pipeline.renderSticker(payload, id: pickerItem.itemIdentifier)
17
+ }
18
+ }
19
+ ```
20
+
21
+ ## Isolated protocol conformances
22
+
23
+ UI-bound types can conform without erasing isolation:
24
+
25
+ ```swift
26
+ protocol Exporting { func exportPNG() }
27
+
28
+ extension ImportModel: @MainActor Exporting {
29
+ func exportPNG() { pipeline.flushPNG() }
30
+ }
31
+ ```
32
+
33
+ Using that conformance from a nonisolated store fails at compile time — intentional.
34
+
35
+ ## Globals and shared caches
36
+
37
+ Annotate process-wide mutable singletons with `@MainActor`:
38
+
39
+ ```swift
40
+ @MainActor
41
+ final class AssetCache {
42
+ static let shared = AssetCache()
43
+ }
44
+ ```
45
+
46
+ With **MainActor default inference** (recommended for app executables), class members inherit main-actor isolation without repeating annotations.
47
+
48
+ ## Explicit background work
49
+
50
+ Requirements: approachable-concurrency flags enabled (otherwise the sample below races).
51
+
52
+ ```swift
53
+ nonisolated final class ImagePipeline {
54
+ private var memo: [String: Sticker] = [:]
55
+
56
+ func renderSticker(_ data: Data, id: String?) async -> Sticker {
57
+ if let id, let hit = memo[id] { return hit }
58
+ let sticker = await Self.segmentSubject(from: data)
59
+ if let id { memo[id] = sticker }
60
+ return sticker
61
+ }
62
+
63
+ @concurrent
64
+ static func segmentSubject(from data: Data) async -> Sticker { /* CPU work */ }
65
+ }
66
+ ```
67
+
68
+ Steps to offload: container `nonisolated`, hot function `@concurrent` + `async`, call sites `await`.
69
+
70
+ ## Migration checklist
71
+
72
+ 1. Turn on Swift 6 language mode concurrency checks.
73
+ 2. Enable MainActor inference for app targets first.
74
+ 3. Fix globals and protocol conformances with isolation, not suppression.
75
+ 4. Profile, then add `@concurrent` on proven CPU bottlenecks (decode, compression, layout solvers).
76
+ 5. Re-run tests — many races become build failures instead of heisenbugs.
77
+
78
+ ## Avoid
79
+
80
+ - Sprinkling `@concurrent` on every `async` function.
81
+ - `nonisolated` solely to silence diagnostics.
82
+ - Legacy `DispatchQueue` patterns where actors express the same contract more clearly.
83
+ - Assuming all `async` calls run off the main thread.
@@ -0,0 +1,139 @@
1
+ # SwiftUI structure and performance
2
+
3
+ ## State and view models
4
+
5
+ Track mutations at property granularity with `@Observable`:
6
+
7
+ ```swift
8
+ @Observable
9
+ final class CatalogModel {
10
+ private(set) var entries: [Entry] = []
11
+ private(set) var busy = false
12
+ var filter = ""
13
+ private let gateway: any CatalogGateway
14
+
15
+ init(gateway: any CatalogGateway = LiveCatalogGateway()) {
16
+ self.gateway = gateway
17
+ }
18
+
19
+ func refresh() async {
20
+ busy = true
21
+ defer { busy = false }
22
+ entries = (try? await gateway.load()) ?? []
23
+ }
24
+ }
25
+ ```
26
+
27
+ Host owned models with `@State` on the root screen:
28
+
29
+ ```swift
30
+ struct CatalogScreen: View {
31
+ @State private var model: CatalogModel
32
+
33
+ init(model: CatalogModel = CatalogModel()) {
34
+ _model = State(initialValue: model)
35
+ }
36
+
37
+ var body: some View {
38
+ List(model.entries) { row in EntryRow(entry: row) }
39
+ .searchable(text: $model.filter)
40
+ .overlay { if model.busy { ProgressView() } }
41
+ .task { await model.refresh() }
42
+ }
43
+ }
44
+ ```
45
+
46
+ Inject shared services via environment:
47
+
48
+ ```swift
49
+ RootTabs()
50
+ .environment(sessionCoordinator)
51
+
52
+ struct AccountPane: View {
53
+ @Environment(SessionCoordinator.self) private var session
54
+ var body: some View { Text(session.displayName ?? "Signed out") }
55
+ }
56
+ ```
57
+
58
+ ## Composition
59
+
60
+ Pass only the data each child reads:
61
+
62
+ ```swift
63
+ struct CheckoutScreen: View {
64
+ @State private var model = CheckoutModel()
65
+ var body: some View {
66
+ VStack {
67
+ CheckoutHeader(title: model.title)
68
+ LineItemStack(items: model.lines)
69
+ CheckoutFooter(total: model.grandTotal)
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ Reusable chrome via modifiers:
76
+
77
+ ```swift
78
+ struct PanelChrome: ViewModifier {
79
+ func body(content: Content) -> some View {
80
+ content.padding().background(.regularMaterial)
81
+ .clipShape(RoundedRectangle(cornerRadius: 12))
82
+ }
83
+ }
84
+ extension View { func panelChrome() -> some View { modifier(PanelChrome()) } }
85
+ ```
86
+
87
+ ## Navigation
88
+
89
+ Centralize path mutations:
90
+
91
+ ```swift
92
+ @Observable
93
+ final class AppRouter {
94
+ var stack = NavigationPath()
95
+ func open(_ target: Screen) { stack.append(target) }
96
+ func reset() { stack = NavigationPath() }
97
+ }
98
+
99
+ enum Screen: Hashable {
100
+ case detail(UUID)
101
+ case preferences
102
+ }
103
+
104
+ struct ShellView: View {
105
+ @State private var router = AppRouter()
106
+ var body: some View {
107
+ NavigationStack(path: $router.stack) {
108
+ HubView()
109
+ .navigationDestination(for: Screen.self) { screen in
110
+ switch screen {
111
+ case .detail(let id): DetailPane(id: id)
112
+ case .preferences: PreferencesPane()
113
+ }
114
+ }
115
+ }
116
+ .environment(router)
117
+ }
118
+ }
119
+ ```
120
+
121
+ ## Performance tactics
122
+
123
+ - Lazy stacks inside `ScrollView` for long content.
124
+ - `Equatable` on expensive leaf views when inputs are equatable — compare only fields that affect rendering.
125
+ - Avoid expensive effects in cells; prefer `.geometryGroup()` and haptics outside fast scroll regions when needed.
126
+
127
+ ```swift
128
+ ScrollView {
129
+ LazyVStack(spacing: 8) {
130
+ ForEach(rows, id: \.persistentKey) { row in RowView(row: row) }
131
+ }
132
+ }
133
+ ```
134
+
135
+ ## Avoid
136
+
137
+ - Child-owned `@State` view models for data the parent already owns — pass the model down.
138
+ - Legacy observation wrappers in greenfield code.
139
+ - Async side effects directly inside `body`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: vue
3
+ description: Vue 3 Composition API, Pinia, Vue Router, Nuxt 4 SSR/hydration, and screenshot-to-Vue conversion flows. Use for `.vue` SFCs, composables, Nuxt data fetching, route rules, or batch UI imports (Vant, Element Plus, Ant Design Vue).
4
+ ---
5
+
6
+ Vue 3 with `<script setup>`: feature-oriented folders, composables over mixins, Pinia for shared state, and Nuxt-aware SSR. **techne:web** covers Vite/Bun/SEO shared ground; **ui-design** for a11y polish; **biblos** for API details; **techne:quality** for Playwright E2E.
7
+
8
+ ## Non-negotiable rules
9
+
10
+ 1. **`<script setup lang="ts">` for new code** — ordered blocks: imports → props/emits → composables → state → computed → methods → watchers → lifecycle.
11
+ 2. **Composables start with `use`**, accept `MaybeRef` inputs, return refs/computed, and tear down in `onUnmounted` / watcher cleanup.
12
+ 3. **Never mutate props** — emit events or use `defineModel()` / `v-model`.
13
+ 4. **Stable `:key` on `v-for`** — entity ids, not array index; filter lists in computed, not `v-if` + `v-for` on one node.
14
+ 5. **Pinia setup stores** — async actions expose loading/error; prefer actions over scattered `$patch` for business rules.
15
+ 6. **Lazy routes** via dynamic `import()` for non-critical pages; `v-show` for frequent toggles, `v-if` for rare mounts.
16
+ 7. **Nuxt: `await useFetch` / `useAsyncData` for SSR page data** — not bare top-level `$fetch`; stable cache keys; side-effect-free fetch handlers.
17
+ 8. **Hydration-safe first paint** — no `Date.now()`, random, or `localStorage` in SSR templates; use `ClientOnly`, `.client.vue`, or `onMounted`.
18
+ 9. **Use `useRoute()` from Nuxt in Nuxt apps** — not vue-router's import; avoid `route.fullPath` driving SSR markup (fragments are client-only).
19
+ 10. **`routeRules` per segment** — prerender marketing, SWR/ISR catalogs, `ssr: false` only for true client-only areas.
20
+ 11. **Sanitize before `v-html`** — user HTML is XSS risk; prefer text bindings.
21
+ 12. **Screenshot conversion sends images to external APIs** — get permission, pin tool version, never commit keys or customer assets; review generated code before merge.
22
+
23
+ ## References
24
+
25
+ | File | Load when |
26
+ |------|-----------|
27
+ | [reference/vue-patterns.md](reference/vue-patterns.md) | Project layout, SFC architecture, Pinia, router, Vue 3.5 APIs, testing |
28
+ | [reference/nuxt4-patterns.md](reference/nuxt4-patterns.md) | Hydration, `useFetch`, route rules, lazy components and hydration |
29
+ | [reference/ui-to-vue.md](reference/ui-to-vue.md) | Batch design screenshot → Vue with component libraries |
@@ -0,0 +1,90 @@
1
+ # Nuxt 4 SSR & routing
2
+
3
+ Build/debug Nuxt 4 with hybrid rendering, payload discipline, and hydration-safe UI.
4
+
5
+ ## Hydration safety
6
+
7
+ First server and client render must match.
8
+
9
+ - No `Date.now()`, `Math.random()`, `window`, or storage reads in SSR template state.
10
+ - Defer browser-only work: `onMounted`, `import.meta.client`, `<ClientOnly>`, `*.client.vue`.
11
+ - In Nuxt apps use **`useRoute()` from `#app`**, not a direct `vue-router` import.
12
+ - Do not drive SSR markup from `route.fullPath` (hash is client-only).
13
+ - `ssr: false` route rule is last resort for truly client-only surfaces—not a default mismatch fix.
14
+
15
+ ## Data fetching
16
+
17
+ | API | When |
18
+ |-----|------|
19
+ | `await useFetch(url)` | Standard SSR read; hydrates from payload |
20
+ | `await useAsyncData(key, fn)` | Custom fetcher, composed sources, explicit cache key |
21
+ | `$fetch` in handlers | User actions, mutations, client-only reads |
22
+ | `lazy: true` / `useLazyFetch` | Non-blocking; show `pending` UI |
23
+ | `server: false` | Data not needed for SEO/first paint |
24
+
25
+ Handlers must be side-effect free (run on server + hydration). Trim payload with `pick`; avoid deep reactivity when unnecessary.
26
+
27
+ ```typescript
28
+ const route = useRoute()
29
+
30
+ const { data: article, status, refresh } = await useAsyncData(
31
+ () => `article:${route.params.slug}`,
32
+ () => $fetch(`/api/articles/${route.params.slug}`),
33
+ )
34
+
35
+ const { data: comments } = await useFetch(
36
+ `/api/articles/${route.params.slug}/comments`,
37
+ { lazy: true, server: false },
38
+ )
39
+ ```
40
+
41
+ ## routeRules
42
+
43
+ Configure in `nuxt.config.ts` by path pattern:
44
+
45
+ ```typescript
46
+ export default defineNuxtConfig({
47
+ routeRules: {
48
+ '/': { prerender: true },
49
+ '/products/**': { swr: 3600 },
50
+ '/blog/**': { isr: true },
51
+ '/admin/**': { ssr: false },
52
+ '/api/**': { cache: { maxAge: 3600 } },
53
+ },
54
+ })
55
+ ```
56
+
57
+ | Rule | Effect |
58
+ |------|--------|
59
+ | `prerender` | Static HTML at build |
60
+ | `swr` | Stale-while-revalidate |
61
+ | `isr` | Platform incremental static regen |
62
+ | `ssr: false` | SPA render for route |
63
+ | `cache` / `redirect` | Nitro response behavior |
64
+
65
+ Tune per section (marketing vs app vs API)—not one global mode.
66
+
67
+ ## Lazy loading & perf
68
+
69
+ - Pages already code-split by route—keep routes meaningful.
70
+ - Prefix `Lazy` on components for dynamic import; gate with `v-if` so chunk loads only when needed.
71
+ - Below-fold interactivity: `hydrate-on-visible` or `defineLazyHydrationComponent`.
72
+ - New props to a lazy-hydrated component force immediate hydration.
73
+ - Internal nav: `<NuxtLink>` for prefetch of route + payload.
74
+
75
+ Example:
76
+
77
+ ```vue
78
+ <template>
79
+ <LazyRecommendations v-if="openRecs" />
80
+ <LazyProductGallery hydrate-on-visible />
81
+ </template>
82
+ ```
83
+
84
+ ## Review checklist
85
+
86
+ - [ ] SSR and client HTML align on first paint
87
+ - [ ] Page data via `useFetch` / `useAsyncData`, not top-level `$fetch`
88
+ - [ ] Lazy fetches show loading states
89
+ - [ ] `routeRules` match SEO/freshness needs
90
+ - [ ] Heavy islands lazy-loaded or lazy-hydrated
@@ -0,0 +1,90 @@
1
+ # Design screenshots → Vue components
2
+
3
+ First-pass conversion of batched UI images into Vue 3 SFCs with Vant, Element Plus, or Ant Design Vue. **External model APIs process images—treat responses as untrusted; review all generated code before commit.**
4
+
5
+ ## When to use
6
+
7
+ - Folder of module/page screenshots or exports
8
+ - Vue 3 target with a named component library
9
+ - Need scaffold pages, shared widgets, and starter routes
10
+
11
+ ## When to skip
12
+
13
+ - Single bespoke screen (implement manually)
14
+ - Non-Vue stack
15
+ - Needs full interaction design, data layer, or a11y sign-off (**ui-design**)
16
+ - Sensitive customer imagery without consent to send to third-party APIs
17
+
18
+ ## Input layout
19
+
20
+ Group by module and state:
21
+
22
+ ```text
23
+ screenshots/
24
+ HomePage/
25
+ HomePage-Default@3x.png
26
+ List/HomePage-List-Default@3x.png
27
+ cut-images/
28
+ cut-images/
29
+ ```
30
+
31
+ Asset folder names: `assets`, `icons`, `sprites`, `cut`, `images`, `cut-images`.
32
+
33
+ ## Conversion rules
34
+
35
+ - Merge related shots (list/detail/form/empty) into one page SFC when they belong together
36
+ - Map controls to library components (Vant / Element Plus / Ant Design Vue)
37
+ - Prefer page-level cut assets, then module, then global
38
+ - Extract repeated regions to `components/` only when reuse is obvious
39
+
40
+ ## CLI
41
+
42
+ Pin version in repeatable workflows:
43
+
44
+ ```bash
45
+ export DASHSCOPE_API_KEY=your_key
46
+ npx ui-to-vue-converter@1.0.2 --input ./screenshots --ui vant --output ./src
47
+ npx ui-to-vue-converter@1.0.2 --input ./designs --ui element-plus --output ./src
48
+ npx ui-to-vue-converter@1.0.2 --input ./designs --ui antd-vue --output ./src
49
+ ```
50
+
51
+ Global install optional: `ui-to-vue` binary from same package.
52
+
53
+ | Flag | Purpose | Default |
54
+ |------|---------|---------|
55
+ | `--input` | Image root | `./screenshots` |
56
+ | `--ui` | `vant` \| `element-plus` \| `antd-vue` | `vant` |
57
+ | `--output` | Generated tree | `./src` |
58
+ | `--config` | JSON config path | `./.ui-to-vue.config.json` |
59
+
60
+ ## Secrets
61
+
62
+ Prefer env var `DASHSCOPE_API_KEY`. If using config file, gitignore it:
63
+
64
+ ```gitignore
65
+ .ui-to-vue.config.json
66
+ ```
67
+
68
+ Never commit API keys, customer screenshots, or generated credentials.
69
+
70
+ ## Post-generation review
71
+
72
+ - [ ] Pages under chosen output (e.g. `views/`)
73
+ - [ ] Shared pieces only where duplication is real
74
+ - [ ] Router matches project style (Vue Router vs Nuxt pages)
75
+ - [ ] Library imports consistent with `--ui`
76
+ - [ ] CSS units match design baseline
77
+ - [ ] Formatter, linter, `vue-tsc`, and build pass
78
+ - [ ] Placeholder copy and mock data replaced
79
+
80
+ ## Troubleshooting
81
+
82
+ | Symptom | Check |
83
+ |---------|--------|
84
+ | 401 | `DASHSCOPE_API_KEY` in shell running CLI |
85
+ | Command missing | Use `npx ui-to-vue-converter@1.0.2` |
86
+ | Assets skipped | Supported folder name under correct page/module |
87
+ | Wrong library | Explicit `--ui`; inspect imports |
88
+ | Layout scale off | Screenshot width vs library baseline |
89
+
90
+ npm package name: `ui-to-vue-converter`.