@cherishxn/agent-scaffold 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -2
  3. package/THIRD_PARTY_NOTICES.md +18 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +105 -0
  6. package/dist/diagnostics.d.ts +10 -0
  7. package/dist/diagnostics.js +27 -0
  8. package/dist/generate.d.ts +55 -0
  9. package/dist/generate.js +159 -0
  10. package/dist/model.d.ts +33 -0
  11. package/dist/model.js +24 -0
  12. package/dist/verify.d.ts +67 -0
  13. package/dist/verify.js +278 -0
  14. package/package.json +52 -4
  15. package/schemas/manifest.json +171 -0
  16. package/schemas/plan.json +164 -0
  17. package/schemas/result.json +97 -0
  18. package/schemas/spec.json +50 -0
  19. package/skills/scaffold-use/SKILL.md +24 -0
  20. package/templates/catalog.json +37 -0
  21. package/templates/next-fullstack-antd/.agents/skills/design-contract/SKILL.md +23 -0
  22. package/templates/next-fullstack-antd/.agents/skills/project-work/SKILL.md +10 -0
  23. package/templates/next-fullstack-antd/.claude/skills/design-contract/SKILL.md +23 -0
  24. package/templates/next-fullstack-antd/.claude/skills/project-work/SKILL.md +10 -0
  25. package/templates/next-fullstack-antd/.dockerignore +18 -0
  26. package/templates/next-fullstack-antd/.env.example +13 -0
  27. package/templates/next-fullstack-antd/.grok/skills/design-contract/SKILL.md +23 -0
  28. package/templates/next-fullstack-antd/.grok/skills/project-work/SKILL.md +10 -0
  29. package/templates/next-fullstack-antd/.scaffold-checks.json +7 -0
  30. package/templates/next-fullstack-antd/AGENTS.md +11 -0
  31. package/templates/next-fullstack-antd/CLAUDE.md +1 -0
  32. package/templates/next-fullstack-antd/DESIGN.md +208 -0
  33. package/templates/next-fullstack-antd/LICENSE +21 -0
  34. package/templates/next-fullstack-antd/README.md +64 -0
  35. package/templates/next-fullstack-antd/THIRD_PARTY_NOTICES.md +18 -0
  36. package/templates/next-fullstack-antd/compose.yaml +18 -0
  37. package/templates/next-fullstack-antd/design/guide.md +61 -0
  38. package/templates/next-fullstack-antd/design/layout.css +6 -0
  39. package/templates/next-fullstack-antd/design/structure.json +107 -0
  40. package/templates/next-fullstack-antd/design/tokens.json +171 -0
  41. package/templates/next-fullstack-antd/design/widgets.css +30 -0
  42. package/templates/next-fullstack-antd/design/widgets.json +233 -0
  43. package/templates/next-fullstack-antd/docs/PROJECT.md +32 -0
  44. package/templates/next-fullstack-antd/docs/api.d.ts +544 -0
  45. package/templates/next-fullstack-antd/docs/openapi.json +461 -0
  46. package/templates/next-fullstack-antd/gitignore.template +19 -0
  47. package/templates/next-fullstack-antd/licenses/fastapi.txt +21 -0
  48. package/templates/next-fullstack-antd/licenses/nest.txt +22 -0
  49. package/templates/next-fullstack-antd/licenses/next.txt +21 -0
  50. package/templates/next-fullstack-antd/licenses/shadcn.txt +21 -0
  51. package/templates/next-fullstack-antd/licenses/sources.json +27 -0
  52. package/templates/next-fullstack-antd/licenses/spring.txt +202 -0
  53. package/templates/next-fullstack-antd/package-lock.json +494 -0
  54. package/templates/next-fullstack-antd/package.json +26 -0
  55. package/templates/next-fullstack-antd/playwright.config.ts +3 -0
  56. package/templates/next-fullstack-antd/project.json +8 -0
  57. package/templates/next-fullstack-antd/scripts/api-check.mjs +18 -0
  58. package/templates/next-fullstack-antd/scripts/api-contract.mjs +46 -0
  59. package/templates/next-fullstack-antd/scripts/design-coverage.mjs +20 -0
  60. package/templates/next-fullstack-antd/scripts/design-next-cleanup.mjs +13 -0
  61. package/templates/next-fullstack-antd/scripts/design-verify.mjs +154 -0
  62. package/templates/next-fullstack-antd/scripts/design.mjs +108 -0
  63. package/templates/next-fullstack-antd/scripts/project.mjs +120 -0
  64. package/templates/next-fullstack-antd/tests/contract-client.ts +20 -0
  65. package/templates/next-fullstack-antd/tests/contract.spec.ts +49 -0
  66. package/templates/next-fullstack-antd/tests/design/harness.tsx +63 -0
  67. package/templates/next-fullstack-antd/tests/ui.spec.ts +61 -0
  68. package/templates/next-fullstack-antd/web/Dockerfile +12 -0
  69. package/templates/next-fullstack-antd/web/app/api/auth/login/route.ts +1 -0
  70. package/templates/next-fullstack-antd/web/app/api/auth/logout/route.ts +1 -0
  71. package/templates/next-fullstack-antd/web/app/api/auth/me/route.ts +1 -0
  72. package/templates/next-fullstack-antd/web/app/api/health/route.ts +1 -0
  73. package/templates/next-fullstack-antd/web/app/api/records/[id]/route.ts +5 -0
  74. package/templates/next-fullstack-antd/web/app/api/records/route.ts +3 -0
  75. package/templates/next-fullstack-antd/web/app/layout.tsx +5 -0
  76. package/templates/next-fullstack-antd/web/app/page.tsx +2 -0
  77. package/templates/next-fullstack-antd/web/eslint.config.mjs +3 -0
  78. package/templates/next-fullstack-antd/web/lib/api.ts +35 -0
  79. package/templates/next-fullstack-antd/web/lib/auth.ts +10 -0
  80. package/templates/next-fullstack-antd/web/lib/db.ts +3 -0
  81. package/templates/next-fullstack-antd/web/lib/session.test.ts +15 -0
  82. package/templates/next-fullstack-antd/web/lib/validation.test.ts +3 -0
  83. package/templates/next-fullstack-antd/web/lib/validation.ts +5 -0
  84. package/templates/next-fullstack-antd/web/next-env.d.ts +7 -0
  85. package/templates/next-fullstack-antd/web/next.config.ts +3 -0
  86. package/templates/next-fullstack-antd/web/package.json +35 -0
  87. package/templates/next-fullstack-antd/web/pnpm-lock.yaml +3756 -0
  88. package/templates/next-fullstack-antd/web/pnpm-workspace.yaml +7 -0
  89. package/templates/next-fullstack-antd/web/prisma/migrations/202610190001_initial/migration.sql +99 -0
  90. package/templates/next-fullstack-antd/web/prisma/migrations/migration_lock.toml +1 -0
  91. package/templates/next-fullstack-antd/web/prisma/schema.prisma +72 -0
  92. package/templates/next-fullstack-antd/web/scripts/seed.ts +4 -0
  93. package/templates/next-fullstack-antd/web/src/App.tsx +29 -0
  94. package/templates/next-fullstack-antd/web/src/design-layout.css +7 -0
  95. package/templates/next-fullstack-antd/web/src/design-runtime.json +511 -0
  96. package/templates/next-fullstack-antd/web/src/design-tokens.css +168 -0
  97. package/templates/next-fullstack-antd/web/src/design-widgets.css +31 -0
  98. package/templates/next-fullstack-antd/web/src/structure-view.tsx +16 -0
  99. package/templates/next-fullstack-antd/web/src/styles.css +3 -0
  100. package/templates/next-fullstack-antd/web/src/ui.tsx +30 -0
  101. package/templates/next-fullstack-antd/web/src/widget-icon.tsx +5 -0
  102. package/templates/next-fullstack-antd/web/src/widget-types.ts +13 -0
  103. package/templates/next-fullstack-antd/web/src/workspace-model.ts +85 -0
  104. package/templates/next-fullstack-antd/web/tsconfig.json +42 -0
  105. package/templates/next-fullstack-antd/web/vitest.config.ts +2 -0
  106. package/templates/next-fullstack-shadcn/.agents/skills/design-contract/SKILL.md +23 -0
  107. package/templates/next-fullstack-shadcn/.agents/skills/project-work/SKILL.md +10 -0
  108. package/templates/next-fullstack-shadcn/.claude/skills/design-contract/SKILL.md +23 -0
  109. package/templates/next-fullstack-shadcn/.claude/skills/project-work/SKILL.md +10 -0
  110. package/templates/next-fullstack-shadcn/.dockerignore +18 -0
  111. package/templates/next-fullstack-shadcn/.env.example +13 -0
  112. package/templates/next-fullstack-shadcn/.grok/skills/design-contract/SKILL.md +23 -0
  113. package/templates/next-fullstack-shadcn/.grok/skills/project-work/SKILL.md +10 -0
  114. package/templates/next-fullstack-shadcn/.scaffold-checks.json +7 -0
  115. package/templates/next-fullstack-shadcn/AGENTS.md +11 -0
  116. package/templates/next-fullstack-shadcn/CLAUDE.md +1 -0
  117. package/templates/next-fullstack-shadcn/DESIGN.md +208 -0
  118. package/templates/next-fullstack-shadcn/LICENSE +21 -0
  119. package/templates/next-fullstack-shadcn/README.md +64 -0
  120. package/templates/next-fullstack-shadcn/THIRD_PARTY_NOTICES.md +18 -0
  121. package/templates/next-fullstack-shadcn/compose.yaml +18 -0
  122. package/templates/next-fullstack-shadcn/design/guide.md +61 -0
  123. package/templates/next-fullstack-shadcn/design/layout.css +6 -0
  124. package/templates/next-fullstack-shadcn/design/structure.json +107 -0
  125. package/templates/next-fullstack-shadcn/design/tokens.json +171 -0
  126. package/templates/next-fullstack-shadcn/design/widgets.css +30 -0
  127. package/templates/next-fullstack-shadcn/design/widgets.json +233 -0
  128. package/templates/next-fullstack-shadcn/docs/PROJECT.md +32 -0
  129. package/templates/next-fullstack-shadcn/docs/api.d.ts +544 -0
  130. package/templates/next-fullstack-shadcn/docs/openapi.json +461 -0
  131. package/templates/next-fullstack-shadcn/gitignore.template +19 -0
  132. package/templates/next-fullstack-shadcn/licenses/fastapi.txt +21 -0
  133. package/templates/next-fullstack-shadcn/licenses/nest.txt +22 -0
  134. package/templates/next-fullstack-shadcn/licenses/next.txt +21 -0
  135. package/templates/next-fullstack-shadcn/licenses/shadcn.txt +21 -0
  136. package/templates/next-fullstack-shadcn/licenses/sources.json +27 -0
  137. package/templates/next-fullstack-shadcn/licenses/spring.txt +202 -0
  138. package/templates/next-fullstack-shadcn/package-lock.json +494 -0
  139. package/templates/next-fullstack-shadcn/package.json +26 -0
  140. package/templates/next-fullstack-shadcn/playwright.config.ts +3 -0
  141. package/templates/next-fullstack-shadcn/project.json +8 -0
  142. package/templates/next-fullstack-shadcn/scripts/api-check.mjs +18 -0
  143. package/templates/next-fullstack-shadcn/scripts/api-contract.mjs +46 -0
  144. package/templates/next-fullstack-shadcn/scripts/design-coverage.mjs +20 -0
  145. package/templates/next-fullstack-shadcn/scripts/design-next-cleanup.mjs +13 -0
  146. package/templates/next-fullstack-shadcn/scripts/design-verify.mjs +154 -0
  147. package/templates/next-fullstack-shadcn/scripts/design.mjs +108 -0
  148. package/templates/next-fullstack-shadcn/scripts/project.mjs +120 -0
  149. package/templates/next-fullstack-shadcn/tests/contract-client.ts +20 -0
  150. package/templates/next-fullstack-shadcn/tests/contract.spec.ts +49 -0
  151. package/templates/next-fullstack-shadcn/tests/design/harness.tsx +63 -0
  152. package/templates/next-fullstack-shadcn/tests/ui.spec.ts +61 -0
  153. package/templates/next-fullstack-shadcn/web/Dockerfile +12 -0
  154. package/templates/next-fullstack-shadcn/web/app/api/auth/login/route.ts +1 -0
  155. package/templates/next-fullstack-shadcn/web/app/api/auth/logout/route.ts +1 -0
  156. package/templates/next-fullstack-shadcn/web/app/api/auth/me/route.ts +1 -0
  157. package/templates/next-fullstack-shadcn/web/app/api/health/route.ts +1 -0
  158. package/templates/next-fullstack-shadcn/web/app/api/records/[id]/route.ts +5 -0
  159. package/templates/next-fullstack-shadcn/web/app/api/records/route.ts +3 -0
  160. package/templates/next-fullstack-shadcn/web/app/layout.tsx +4 -0
  161. package/templates/next-fullstack-shadcn/web/app/page.tsx +2 -0
  162. package/templates/next-fullstack-shadcn/web/eslint.config.mjs +3 -0
  163. package/templates/next-fullstack-shadcn/web/lib/api.ts +35 -0
  164. package/templates/next-fullstack-shadcn/web/lib/auth.ts +10 -0
  165. package/templates/next-fullstack-shadcn/web/lib/db.ts +3 -0
  166. package/templates/next-fullstack-shadcn/web/lib/session.test.ts +15 -0
  167. package/templates/next-fullstack-shadcn/web/lib/validation.test.ts +3 -0
  168. package/templates/next-fullstack-shadcn/web/lib/validation.ts +5 -0
  169. package/templates/next-fullstack-shadcn/web/next-env.d.ts +7 -0
  170. package/templates/next-fullstack-shadcn/web/next.config.ts +3 -0
  171. package/templates/next-fullstack-shadcn/web/package.json +39 -0
  172. package/templates/next-fullstack-shadcn/web/pnpm-lock.yaml +3286 -0
  173. package/templates/next-fullstack-shadcn/web/pnpm-workspace.yaml +7 -0
  174. package/templates/next-fullstack-shadcn/web/postcss.config.mjs +1 -0
  175. package/templates/next-fullstack-shadcn/web/prisma/migrations/202610190001_initial/migration.sql +99 -0
  176. package/templates/next-fullstack-shadcn/web/prisma/migrations/migration_lock.toml +1 -0
  177. package/templates/next-fullstack-shadcn/web/prisma/schema.prisma +72 -0
  178. package/templates/next-fullstack-shadcn/web/scripts/seed.ts +4 -0
  179. package/templates/next-fullstack-shadcn/web/src/App.tsx +30 -0
  180. package/templates/next-fullstack-shadcn/web/src/design-layout.css +7 -0
  181. package/templates/next-fullstack-shadcn/web/src/design-runtime.json +511 -0
  182. package/templates/next-fullstack-shadcn/web/src/design-tokens.css +168 -0
  183. package/templates/next-fullstack-shadcn/web/src/design-widgets.css +31 -0
  184. package/templates/next-fullstack-shadcn/web/src/structure-view.tsx +16 -0
  185. package/templates/next-fullstack-shadcn/web/src/styles.css +3 -0
  186. package/templates/next-fullstack-shadcn/web/src/tailwind.css +2 -0
  187. package/templates/next-fullstack-shadcn/web/src/ui.tsx +13 -0
  188. package/templates/next-fullstack-shadcn/web/src/widget-icon.tsx +5 -0
  189. package/templates/next-fullstack-shadcn/web/src/widget-types.ts +13 -0
  190. package/templates/next-fullstack-shadcn/web/src/workspace-model.ts +85 -0
  191. package/templates/next-fullstack-shadcn/web/tsconfig.json +42 -0
  192. package/templates/next-fullstack-shadcn/web/vitest.config.ts +2 -0
  193. package/templates/react-fastapi-antd/.agents/skills/design-contract/SKILL.md +23 -0
  194. package/templates/react-fastapi-antd/.agents/skills/project-work/SKILL.md +10 -0
  195. package/templates/react-fastapi-antd/.claude/skills/design-contract/SKILL.md +23 -0
  196. package/templates/react-fastapi-antd/.claude/skills/project-work/SKILL.md +10 -0
  197. package/templates/react-fastapi-antd/.dockerignore +18 -0
  198. package/templates/react-fastapi-antd/.env.example +13 -0
  199. package/templates/react-fastapi-antd/.grok/skills/design-contract/SKILL.md +23 -0
  200. package/templates/react-fastapi-antd/.grok/skills/project-work/SKILL.md +10 -0
  201. package/templates/react-fastapi-antd/.scaffold-checks.json +7 -0
  202. package/templates/react-fastapi-antd/AGENTS.md +11 -0
  203. package/templates/react-fastapi-antd/CLAUDE.md +1 -0
  204. package/templates/react-fastapi-antd/DESIGN.md +208 -0
  205. package/templates/react-fastapi-antd/LICENSE +21 -0
  206. package/templates/react-fastapi-antd/README.md +64 -0
  207. package/templates/react-fastapi-antd/THIRD_PARTY_NOTICES.md +18 -0
  208. package/templates/react-fastapi-antd/backend/.python-version +1 -0
  209. package/templates/react-fastapi-antd/backend/Dockerfile +10 -0
  210. package/templates/react-fastapi-antd/backend/alembic.ini +3 -0
  211. package/templates/react-fastapi-antd/backend/app/__init__.py +0 -0
  212. package/templates/react-fastapi-antd/backend/app/core/__init__.py +0 -0
  213. package/templates/react-fastapi-antd/backend/app/core/security.py +25 -0
  214. package/templates/react-fastapi-antd/backend/app/db.py +11 -0
  215. package/templates/react-fastapi-antd/backend/app/main.py +146 -0
  216. package/templates/react-fastapi-antd/backend/app/models.py +21 -0
  217. package/templates/react-fastapi-antd/backend/app/seed.py +21 -0
  218. package/templates/react-fastapi-antd/backend/migrations/env.py +9 -0
  219. package/templates/react-fastapi-antd/backend/migrations/versions/0001_initial.py +18 -0
  220. package/templates/react-fastapi-antd/backend/pyproject.toml +16 -0
  221. package/templates/react-fastapi-antd/backend/tests/test_api.py +27 -0
  222. package/templates/react-fastapi-antd/backend/uv.lock +1085 -0
  223. package/templates/react-fastapi-antd/compose.yaml +18 -0
  224. package/templates/react-fastapi-antd/design/guide.md +61 -0
  225. package/templates/react-fastapi-antd/design/layout.css +6 -0
  226. package/templates/react-fastapi-antd/design/structure.json +107 -0
  227. package/templates/react-fastapi-antd/design/tokens.json +171 -0
  228. package/templates/react-fastapi-antd/design/widgets.css +30 -0
  229. package/templates/react-fastapi-antd/design/widgets.json +233 -0
  230. package/templates/react-fastapi-antd/docs/PROJECT.md +32 -0
  231. package/templates/react-fastapi-antd/docs/api.d.ts +544 -0
  232. package/templates/react-fastapi-antd/docs/openapi.json +461 -0
  233. package/templates/react-fastapi-antd/gitignore.template +19 -0
  234. package/templates/react-fastapi-antd/licenses/fastapi.txt +21 -0
  235. package/templates/react-fastapi-antd/licenses/nest.txt +22 -0
  236. package/templates/react-fastapi-antd/licenses/next.txt +21 -0
  237. package/templates/react-fastapi-antd/licenses/shadcn.txt +21 -0
  238. package/templates/react-fastapi-antd/licenses/sources.json +27 -0
  239. package/templates/react-fastapi-antd/licenses/spring.txt +202 -0
  240. package/templates/react-fastapi-antd/package-lock.json +494 -0
  241. package/templates/react-fastapi-antd/package.json +26 -0
  242. package/templates/react-fastapi-antd/playwright.config.ts +3 -0
  243. package/templates/react-fastapi-antd/project.json +8 -0
  244. package/templates/react-fastapi-antd/scripts/api-check.mjs +18 -0
  245. package/templates/react-fastapi-antd/scripts/api-contract.mjs +46 -0
  246. package/templates/react-fastapi-antd/scripts/design-coverage.mjs +20 -0
  247. package/templates/react-fastapi-antd/scripts/design-next-cleanup.mjs +13 -0
  248. package/templates/react-fastapi-antd/scripts/design-verify.mjs +154 -0
  249. package/templates/react-fastapi-antd/scripts/design.mjs +108 -0
  250. package/templates/react-fastapi-antd/scripts/project.mjs +120 -0
  251. package/templates/react-fastapi-antd/tests/contract-client.ts +20 -0
  252. package/templates/react-fastapi-antd/tests/contract.spec.ts +49 -0
  253. package/templates/react-fastapi-antd/tests/design/harness.tsx +63 -0
  254. package/templates/react-fastapi-antd/tests/ui.spec.ts +61 -0
  255. package/templates/react-fastapi-antd/web/bun.lock +442 -0
  256. package/templates/react-fastapi-antd/web/eslint.config.mjs +3 -0
  257. package/templates/react-fastapi-antd/web/index.html +1 -0
  258. package/templates/react-fastapi-antd/web/package.json +28 -0
  259. package/templates/react-fastapi-antd/web/src/App.tsx +29 -0
  260. package/templates/react-fastapi-antd/web/src/design-layout.css +7 -0
  261. package/templates/react-fastapi-antd/web/src/design-runtime.json +511 -0
  262. package/templates/react-fastapi-antd/web/src/design-tokens.css +168 -0
  263. package/templates/react-fastapi-antd/web/src/design-widgets.css +31 -0
  264. package/templates/react-fastapi-antd/web/src/main.tsx +6 -0
  265. package/templates/react-fastapi-antd/web/src/structure-view.tsx +16 -0
  266. package/templates/react-fastapi-antd/web/src/styles.css +3 -0
  267. package/templates/react-fastapi-antd/web/src/ui.tsx +30 -0
  268. package/templates/react-fastapi-antd/web/src/widget-icon.tsx +5 -0
  269. package/templates/react-fastapi-antd/web/src/widget-types.ts +13 -0
  270. package/templates/react-fastapi-antd/web/src/workspace-model.ts +85 -0
  271. package/templates/react-fastapi-antd/web/tsconfig.json +22 -0
  272. package/templates/react-fastapi-antd/web/vite.config.ts +3 -0
  273. package/templates/react-fastapi-shadcn/.agents/skills/design-contract/SKILL.md +23 -0
  274. package/templates/react-fastapi-shadcn/.agents/skills/project-work/SKILL.md +10 -0
  275. package/templates/react-fastapi-shadcn/.claude/skills/design-contract/SKILL.md +23 -0
  276. package/templates/react-fastapi-shadcn/.claude/skills/project-work/SKILL.md +10 -0
  277. package/templates/react-fastapi-shadcn/.dockerignore +18 -0
  278. package/templates/react-fastapi-shadcn/.env.example +13 -0
  279. package/templates/react-fastapi-shadcn/.grok/skills/design-contract/SKILL.md +23 -0
  280. package/templates/react-fastapi-shadcn/.grok/skills/project-work/SKILL.md +10 -0
  281. package/templates/react-fastapi-shadcn/.scaffold-checks.json +7 -0
  282. package/templates/react-fastapi-shadcn/AGENTS.md +11 -0
  283. package/templates/react-fastapi-shadcn/CLAUDE.md +1 -0
  284. package/templates/react-fastapi-shadcn/DESIGN.md +208 -0
  285. package/templates/react-fastapi-shadcn/LICENSE +21 -0
  286. package/templates/react-fastapi-shadcn/README.md +64 -0
  287. package/templates/react-fastapi-shadcn/THIRD_PARTY_NOTICES.md +18 -0
  288. package/templates/react-fastapi-shadcn/backend/.python-version +1 -0
  289. package/templates/react-fastapi-shadcn/backend/Dockerfile +10 -0
  290. package/templates/react-fastapi-shadcn/backend/alembic.ini +3 -0
  291. package/templates/react-fastapi-shadcn/backend/app/__init__.py +0 -0
  292. package/templates/react-fastapi-shadcn/backend/app/core/__init__.py +0 -0
  293. package/templates/react-fastapi-shadcn/backend/app/core/security.py +25 -0
  294. package/templates/react-fastapi-shadcn/backend/app/db.py +11 -0
  295. package/templates/react-fastapi-shadcn/backend/app/main.py +146 -0
  296. package/templates/react-fastapi-shadcn/backend/app/models.py +21 -0
  297. package/templates/react-fastapi-shadcn/backend/app/seed.py +21 -0
  298. package/templates/react-fastapi-shadcn/backend/migrations/env.py +9 -0
  299. package/templates/react-fastapi-shadcn/backend/migrations/versions/0001_initial.py +18 -0
  300. package/templates/react-fastapi-shadcn/backend/pyproject.toml +16 -0
  301. package/templates/react-fastapi-shadcn/backend/tests/test_api.py +27 -0
  302. package/templates/react-fastapi-shadcn/backend/uv.lock +1085 -0
  303. package/templates/react-fastapi-shadcn/compose.yaml +18 -0
  304. package/templates/react-fastapi-shadcn/design/guide.md +61 -0
  305. package/templates/react-fastapi-shadcn/design/layout.css +6 -0
  306. package/templates/react-fastapi-shadcn/design/structure.json +107 -0
  307. package/templates/react-fastapi-shadcn/design/tokens.json +171 -0
  308. package/templates/react-fastapi-shadcn/design/widgets.css +30 -0
  309. package/templates/react-fastapi-shadcn/design/widgets.json +233 -0
  310. package/templates/react-fastapi-shadcn/docs/PROJECT.md +32 -0
  311. package/templates/react-fastapi-shadcn/docs/api.d.ts +544 -0
  312. package/templates/react-fastapi-shadcn/docs/openapi.json +461 -0
  313. package/templates/react-fastapi-shadcn/gitignore.template +19 -0
  314. package/templates/react-fastapi-shadcn/licenses/fastapi.txt +21 -0
  315. package/templates/react-fastapi-shadcn/licenses/nest.txt +22 -0
  316. package/templates/react-fastapi-shadcn/licenses/next.txt +21 -0
  317. package/templates/react-fastapi-shadcn/licenses/shadcn.txt +21 -0
  318. package/templates/react-fastapi-shadcn/licenses/sources.json +27 -0
  319. package/templates/react-fastapi-shadcn/licenses/spring.txt +202 -0
  320. package/templates/react-fastapi-shadcn/package-lock.json +494 -0
  321. package/templates/react-fastapi-shadcn/package.json +26 -0
  322. package/templates/react-fastapi-shadcn/playwright.config.ts +3 -0
  323. package/templates/react-fastapi-shadcn/project.json +8 -0
  324. package/templates/react-fastapi-shadcn/scripts/api-check.mjs +18 -0
  325. package/templates/react-fastapi-shadcn/scripts/api-contract.mjs +46 -0
  326. package/templates/react-fastapi-shadcn/scripts/design-coverage.mjs +20 -0
  327. package/templates/react-fastapi-shadcn/scripts/design-next-cleanup.mjs +13 -0
  328. package/templates/react-fastapi-shadcn/scripts/design-verify.mjs +154 -0
  329. package/templates/react-fastapi-shadcn/scripts/design.mjs +108 -0
  330. package/templates/react-fastapi-shadcn/scripts/project.mjs +120 -0
  331. package/templates/react-fastapi-shadcn/tests/contract-client.ts +20 -0
  332. package/templates/react-fastapi-shadcn/tests/contract.spec.ts +49 -0
  333. package/templates/react-fastapi-shadcn/tests/design/harness.tsx +63 -0
  334. package/templates/react-fastapi-shadcn/tests/ui.spec.ts +61 -0
  335. package/templates/react-fastapi-shadcn/web/bun.lock +413 -0
  336. package/templates/react-fastapi-shadcn/web/eslint.config.mjs +3 -0
  337. package/templates/react-fastapi-shadcn/web/index.html +1 -0
  338. package/templates/react-fastapi-shadcn/web/package.json +33 -0
  339. package/templates/react-fastapi-shadcn/web/src/App.tsx +30 -0
  340. package/templates/react-fastapi-shadcn/web/src/design-layout.css +7 -0
  341. package/templates/react-fastapi-shadcn/web/src/design-runtime.json +511 -0
  342. package/templates/react-fastapi-shadcn/web/src/design-tokens.css +168 -0
  343. package/templates/react-fastapi-shadcn/web/src/design-widgets.css +31 -0
  344. package/templates/react-fastapi-shadcn/web/src/main.tsx +6 -0
  345. package/templates/react-fastapi-shadcn/web/src/structure-view.tsx +16 -0
  346. package/templates/react-fastapi-shadcn/web/src/styles.css +3 -0
  347. package/templates/react-fastapi-shadcn/web/src/tailwind.css +2 -0
  348. package/templates/react-fastapi-shadcn/web/src/ui.tsx +13 -0
  349. package/templates/react-fastapi-shadcn/web/src/widget-icon.tsx +5 -0
  350. package/templates/react-fastapi-shadcn/web/src/widget-types.ts +13 -0
  351. package/templates/react-fastapi-shadcn/web/src/workspace-model.ts +85 -0
  352. package/templates/react-fastapi-shadcn/web/tsconfig.json +22 -0
  353. package/templates/react-fastapi-shadcn/web/vite.config.ts +4 -0
  354. package/templates/react-nest-antd/.agents/skills/design-contract/SKILL.md +23 -0
  355. package/templates/react-nest-antd/.agents/skills/project-work/SKILL.md +10 -0
  356. package/templates/react-nest-antd/.claude/skills/design-contract/SKILL.md +23 -0
  357. package/templates/react-nest-antd/.claude/skills/project-work/SKILL.md +10 -0
  358. package/templates/react-nest-antd/.dockerignore +18 -0
  359. package/templates/react-nest-antd/.env.example +13 -0
  360. package/templates/react-nest-antd/.grok/skills/design-contract/SKILL.md +23 -0
  361. package/templates/react-nest-antd/.grok/skills/project-work/SKILL.md +10 -0
  362. package/templates/react-nest-antd/.scaffold-checks.json +7 -0
  363. package/templates/react-nest-antd/AGENTS.md +11 -0
  364. package/templates/react-nest-antd/CLAUDE.md +1 -0
  365. package/templates/react-nest-antd/DESIGN.md +208 -0
  366. package/templates/react-nest-antd/LICENSE +21 -0
  367. package/templates/react-nest-antd/README.md +64 -0
  368. package/templates/react-nest-antd/THIRD_PARTY_NOTICES.md +18 -0
  369. package/templates/react-nest-antd/backend/Dockerfile +12 -0
  370. package/templates/react-nest-antd/backend/eslint.config.mjs +3 -0
  371. package/templates/react-nest-antd/backend/jest.config.cjs +1 -0
  372. package/templates/react-nest-antd/backend/package.json +40 -0
  373. package/templates/react-nest-antd/backend/pnpm-lock.yaml +5165 -0
  374. package/templates/react-nest-antd/backend/pnpm-workspace.yaml +6 -0
  375. package/templates/react-nest-antd/backend/prisma/migrations/202610190001_initial/migration.sql +3 -0
  376. package/templates/react-nest-antd/backend/prisma/migrations/migration_lock.toml +1 -0
  377. package/templates/react-nest-antd/backend/prisma/schema.prisma +25 -0
  378. package/templates/react-nest-antd/backend/scripts/seed.ts +4 -0
  379. package/templates/react-nest-antd/backend/src/app.module.ts +43 -0
  380. package/templates/react-nest-antd/backend/src/main.ts +6 -0
  381. package/templates/react-nest-antd/backend/src/password.ts +3 -0
  382. package/templates/react-nest-antd/backend/src/validation.ts +7 -0
  383. package/templates/react-nest-antd/backend/test/api.test.ts +25 -0
  384. package/templates/react-nest-antd/backend/tsconfig.build.json +15 -0
  385. package/templates/react-nest-antd/backend/tsconfig.json +17 -0
  386. package/templates/react-nest-antd/compose.yaml +18 -0
  387. package/templates/react-nest-antd/design/guide.md +61 -0
  388. package/templates/react-nest-antd/design/layout.css +6 -0
  389. package/templates/react-nest-antd/design/structure.json +107 -0
  390. package/templates/react-nest-antd/design/tokens.json +171 -0
  391. package/templates/react-nest-antd/design/widgets.css +30 -0
  392. package/templates/react-nest-antd/design/widgets.json +233 -0
  393. package/templates/react-nest-antd/docs/PROJECT.md +32 -0
  394. package/templates/react-nest-antd/docs/api.d.ts +544 -0
  395. package/templates/react-nest-antd/docs/openapi.json +461 -0
  396. package/templates/react-nest-antd/gitignore.template +19 -0
  397. package/templates/react-nest-antd/licenses/fastapi.txt +21 -0
  398. package/templates/react-nest-antd/licenses/nest.txt +22 -0
  399. package/templates/react-nest-antd/licenses/next.txt +21 -0
  400. package/templates/react-nest-antd/licenses/shadcn.txt +21 -0
  401. package/templates/react-nest-antd/licenses/sources.json +27 -0
  402. package/templates/react-nest-antd/licenses/spring.txt +202 -0
  403. package/templates/react-nest-antd/package-lock.json +494 -0
  404. package/templates/react-nest-antd/package.json +26 -0
  405. package/templates/react-nest-antd/playwright.config.ts +3 -0
  406. package/templates/react-nest-antd/project.json +8 -0
  407. package/templates/react-nest-antd/scripts/api-check.mjs +18 -0
  408. package/templates/react-nest-antd/scripts/api-contract.mjs +46 -0
  409. package/templates/react-nest-antd/scripts/design-coverage.mjs +20 -0
  410. package/templates/react-nest-antd/scripts/design-next-cleanup.mjs +13 -0
  411. package/templates/react-nest-antd/scripts/design-verify.mjs +154 -0
  412. package/templates/react-nest-antd/scripts/design.mjs +108 -0
  413. package/templates/react-nest-antd/scripts/project.mjs +120 -0
  414. package/templates/react-nest-antd/tests/contract-client.ts +20 -0
  415. package/templates/react-nest-antd/tests/contract.spec.ts +49 -0
  416. package/templates/react-nest-antd/tests/design/harness.tsx +63 -0
  417. package/templates/react-nest-antd/tests/ui.spec.ts +61 -0
  418. package/templates/react-nest-antd/web/eslint.config.mjs +3 -0
  419. package/templates/react-nest-antd/web/index.html +1 -0
  420. package/templates/react-nest-antd/web/package.json +28 -0
  421. package/templates/react-nest-antd/web/pnpm-lock.yaml +2215 -0
  422. package/templates/react-nest-antd/web/src/App.tsx +29 -0
  423. package/templates/react-nest-antd/web/src/design-layout.css +7 -0
  424. package/templates/react-nest-antd/web/src/design-runtime.json +511 -0
  425. package/templates/react-nest-antd/web/src/design-tokens.css +168 -0
  426. package/templates/react-nest-antd/web/src/design-widgets.css +31 -0
  427. package/templates/react-nest-antd/web/src/main.tsx +6 -0
  428. package/templates/react-nest-antd/web/src/structure-view.tsx +16 -0
  429. package/templates/react-nest-antd/web/src/styles.css +3 -0
  430. package/templates/react-nest-antd/web/src/ui.tsx +30 -0
  431. package/templates/react-nest-antd/web/src/widget-icon.tsx +5 -0
  432. package/templates/react-nest-antd/web/src/widget-types.ts +13 -0
  433. package/templates/react-nest-antd/web/src/workspace-model.ts +85 -0
  434. package/templates/react-nest-antd/web/tsconfig.json +22 -0
  435. package/templates/react-nest-antd/web/vite.config.ts +3 -0
  436. package/templates/react-nest-shadcn/.agents/skills/design-contract/SKILL.md +23 -0
  437. package/templates/react-nest-shadcn/.agents/skills/project-work/SKILL.md +10 -0
  438. package/templates/react-nest-shadcn/.claude/skills/design-contract/SKILL.md +23 -0
  439. package/templates/react-nest-shadcn/.claude/skills/project-work/SKILL.md +10 -0
  440. package/templates/react-nest-shadcn/.dockerignore +18 -0
  441. package/templates/react-nest-shadcn/.env.example +13 -0
  442. package/templates/react-nest-shadcn/.grok/skills/design-contract/SKILL.md +23 -0
  443. package/templates/react-nest-shadcn/.grok/skills/project-work/SKILL.md +10 -0
  444. package/templates/react-nest-shadcn/.scaffold-checks.json +7 -0
  445. package/templates/react-nest-shadcn/AGENTS.md +11 -0
  446. package/templates/react-nest-shadcn/CLAUDE.md +1 -0
  447. package/templates/react-nest-shadcn/DESIGN.md +208 -0
  448. package/templates/react-nest-shadcn/LICENSE +21 -0
  449. package/templates/react-nest-shadcn/README.md +64 -0
  450. package/templates/react-nest-shadcn/THIRD_PARTY_NOTICES.md +18 -0
  451. package/templates/react-nest-shadcn/backend/Dockerfile +12 -0
  452. package/templates/react-nest-shadcn/backend/eslint.config.mjs +3 -0
  453. package/templates/react-nest-shadcn/backend/jest.config.cjs +1 -0
  454. package/templates/react-nest-shadcn/backend/package.json +40 -0
  455. package/templates/react-nest-shadcn/backend/pnpm-lock.yaml +5165 -0
  456. package/templates/react-nest-shadcn/backend/pnpm-workspace.yaml +6 -0
  457. package/templates/react-nest-shadcn/backend/prisma/migrations/202610190001_initial/migration.sql +3 -0
  458. package/templates/react-nest-shadcn/backend/prisma/migrations/migration_lock.toml +1 -0
  459. package/templates/react-nest-shadcn/backend/prisma/schema.prisma +25 -0
  460. package/templates/react-nest-shadcn/backend/scripts/seed.ts +4 -0
  461. package/templates/react-nest-shadcn/backend/src/app.module.ts +43 -0
  462. package/templates/react-nest-shadcn/backend/src/main.ts +6 -0
  463. package/templates/react-nest-shadcn/backend/src/password.ts +3 -0
  464. package/templates/react-nest-shadcn/backend/src/validation.ts +7 -0
  465. package/templates/react-nest-shadcn/backend/test/api.test.ts +25 -0
  466. package/templates/react-nest-shadcn/backend/tsconfig.build.json +15 -0
  467. package/templates/react-nest-shadcn/backend/tsconfig.json +17 -0
  468. package/templates/react-nest-shadcn/compose.yaml +18 -0
  469. package/templates/react-nest-shadcn/design/guide.md +61 -0
  470. package/templates/react-nest-shadcn/design/layout.css +6 -0
  471. package/templates/react-nest-shadcn/design/structure.json +107 -0
  472. package/templates/react-nest-shadcn/design/tokens.json +171 -0
  473. package/templates/react-nest-shadcn/design/widgets.css +30 -0
  474. package/templates/react-nest-shadcn/design/widgets.json +233 -0
  475. package/templates/react-nest-shadcn/docs/PROJECT.md +32 -0
  476. package/templates/react-nest-shadcn/docs/api.d.ts +544 -0
  477. package/templates/react-nest-shadcn/docs/openapi.json +461 -0
  478. package/templates/react-nest-shadcn/gitignore.template +19 -0
  479. package/templates/react-nest-shadcn/licenses/fastapi.txt +21 -0
  480. package/templates/react-nest-shadcn/licenses/nest.txt +22 -0
  481. package/templates/react-nest-shadcn/licenses/next.txt +21 -0
  482. package/templates/react-nest-shadcn/licenses/shadcn.txt +21 -0
  483. package/templates/react-nest-shadcn/licenses/sources.json +27 -0
  484. package/templates/react-nest-shadcn/licenses/spring.txt +202 -0
  485. package/templates/react-nest-shadcn/package-lock.json +494 -0
  486. package/templates/react-nest-shadcn/package.json +26 -0
  487. package/templates/react-nest-shadcn/playwright.config.ts +3 -0
  488. package/templates/react-nest-shadcn/project.json +8 -0
  489. package/templates/react-nest-shadcn/scripts/api-check.mjs +18 -0
  490. package/templates/react-nest-shadcn/scripts/api-contract.mjs +46 -0
  491. package/templates/react-nest-shadcn/scripts/design-coverage.mjs +20 -0
  492. package/templates/react-nest-shadcn/scripts/design-next-cleanup.mjs +13 -0
  493. package/templates/react-nest-shadcn/scripts/design-verify.mjs +154 -0
  494. package/templates/react-nest-shadcn/scripts/design.mjs +108 -0
  495. package/templates/react-nest-shadcn/scripts/project.mjs +120 -0
  496. package/templates/react-nest-shadcn/tests/contract-client.ts +20 -0
  497. package/templates/react-nest-shadcn/tests/contract.spec.ts +49 -0
  498. package/templates/react-nest-shadcn/tests/design/harness.tsx +63 -0
  499. package/templates/react-nest-shadcn/tests/ui.spec.ts +61 -0
  500. package/templates/react-nest-shadcn/web/eslint.config.mjs +3 -0
  501. package/templates/react-nest-shadcn/web/index.html +1 -0
  502. package/templates/react-nest-shadcn/web/package.json +33 -0
  503. package/templates/react-nest-shadcn/web/pnpm-lock.yaml +1788 -0
  504. package/templates/react-nest-shadcn/web/src/App.tsx +30 -0
  505. package/templates/react-nest-shadcn/web/src/design-layout.css +7 -0
  506. package/templates/react-nest-shadcn/web/src/design-runtime.json +511 -0
  507. package/templates/react-nest-shadcn/web/src/design-tokens.css +168 -0
  508. package/templates/react-nest-shadcn/web/src/design-widgets.css +31 -0
  509. package/templates/react-nest-shadcn/web/src/main.tsx +6 -0
  510. package/templates/react-nest-shadcn/web/src/structure-view.tsx +16 -0
  511. package/templates/react-nest-shadcn/web/src/styles.css +3 -0
  512. package/templates/react-nest-shadcn/web/src/tailwind.css +2 -0
  513. package/templates/react-nest-shadcn/web/src/ui.tsx +13 -0
  514. package/templates/react-nest-shadcn/web/src/widget-icon.tsx +5 -0
  515. package/templates/react-nest-shadcn/web/src/widget-types.ts +13 -0
  516. package/templates/react-nest-shadcn/web/src/workspace-model.ts +85 -0
  517. package/templates/react-nest-shadcn/web/tsconfig.json +22 -0
  518. package/templates/react-nest-shadcn/web/vite.config.ts +4 -0
  519. package/templates/react-spring-antd/.agents/skills/design-contract/SKILL.md +23 -0
  520. package/templates/react-spring-antd/.agents/skills/project-work/SKILL.md +10 -0
  521. package/templates/react-spring-antd/.claude/skills/design-contract/SKILL.md +23 -0
  522. package/templates/react-spring-antd/.claude/skills/project-work/SKILL.md +10 -0
  523. package/templates/react-spring-antd/.dockerignore +18 -0
  524. package/templates/react-spring-antd/.env.example +13 -0
  525. package/templates/react-spring-antd/.grok/skills/design-contract/SKILL.md +23 -0
  526. package/templates/react-spring-antd/.grok/skills/project-work/SKILL.md +10 -0
  527. package/templates/react-spring-antd/.scaffold-checks.json +7 -0
  528. package/templates/react-spring-antd/AGENTS.md +11 -0
  529. package/templates/react-spring-antd/CLAUDE.md +1 -0
  530. package/templates/react-spring-antd/DESIGN.md +208 -0
  531. package/templates/react-spring-antd/LICENSE +21 -0
  532. package/templates/react-spring-antd/README.md +64 -0
  533. package/templates/react-spring-antd/THIRD_PARTY_NOTICES.md +18 -0
  534. package/templates/react-spring-antd/backend/.mvn/wrapper/maven-wrapper.properties +3 -0
  535. package/templates/react-spring-antd/backend/Dockerfile +11 -0
  536. package/templates/react-spring-antd/backend/mvnw +295 -0
  537. package/templates/react-spring-antd/backend/pom.xml +15 -0
  538. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Api.java +38 -0
  539. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/AppUser.java +11 -0
  540. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Application.java +7 -0
  541. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Errors.java +13 -0
  542. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/PersonalRecord.java +15 -0
  543. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Records.java +14 -0
  544. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Security.java +28 -0
  545. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Seed.java +13 -0
  546. package/templates/react-spring-antd/backend/src/main/java/dev/scaffold/app/Users.java +5 -0
  547. package/templates/react-spring-antd/backend/src/main/resources/application.properties +17 -0
  548. package/templates/react-spring-antd/backend/src/main/resources/db/migration/V1__initial.sql +3 -0
  549. package/templates/react-spring-antd/backend/src/main/resources/openapi.json +461 -0
  550. package/templates/react-spring-antd/backend/src/test/java/dev/scaffold/app/ApiTest.java +28 -0
  551. package/templates/react-spring-antd/backend/src/test/java/dev/scaffold/app/SessionExpiryTest.java +37 -0
  552. package/templates/react-spring-antd/compose.yaml +18 -0
  553. package/templates/react-spring-antd/design/guide.md +61 -0
  554. package/templates/react-spring-antd/design/layout.css +6 -0
  555. package/templates/react-spring-antd/design/structure.json +107 -0
  556. package/templates/react-spring-antd/design/tokens.json +171 -0
  557. package/templates/react-spring-antd/design/widgets.css +30 -0
  558. package/templates/react-spring-antd/design/widgets.json +233 -0
  559. package/templates/react-spring-antd/docs/PROJECT.md +32 -0
  560. package/templates/react-spring-antd/docs/api.d.ts +544 -0
  561. package/templates/react-spring-antd/docs/openapi.json +461 -0
  562. package/templates/react-spring-antd/gitignore.template +19 -0
  563. package/templates/react-spring-antd/licenses/fastapi.txt +21 -0
  564. package/templates/react-spring-antd/licenses/nest.txt +22 -0
  565. package/templates/react-spring-antd/licenses/next.txt +21 -0
  566. package/templates/react-spring-antd/licenses/shadcn.txt +21 -0
  567. package/templates/react-spring-antd/licenses/sources.json +27 -0
  568. package/templates/react-spring-antd/licenses/spring.txt +202 -0
  569. package/templates/react-spring-antd/package-lock.json +494 -0
  570. package/templates/react-spring-antd/package.json +26 -0
  571. package/templates/react-spring-antd/playwright.config.ts +3 -0
  572. package/templates/react-spring-antd/project.json +8 -0
  573. package/templates/react-spring-antd/scripts/api-check.mjs +18 -0
  574. package/templates/react-spring-antd/scripts/api-contract.mjs +46 -0
  575. package/templates/react-spring-antd/scripts/design-coverage.mjs +20 -0
  576. package/templates/react-spring-antd/scripts/design-next-cleanup.mjs +13 -0
  577. package/templates/react-spring-antd/scripts/design-verify.mjs +154 -0
  578. package/templates/react-spring-antd/scripts/design.mjs +108 -0
  579. package/templates/react-spring-antd/scripts/project.mjs +120 -0
  580. package/templates/react-spring-antd/tests/contract-client.ts +20 -0
  581. package/templates/react-spring-antd/tests/contract.spec.ts +49 -0
  582. package/templates/react-spring-antd/tests/design/harness.tsx +63 -0
  583. package/templates/react-spring-antd/tests/ui.spec.ts +61 -0
  584. package/templates/react-spring-antd/web/eslint.config.mjs +3 -0
  585. package/templates/react-spring-antd/web/index.html +1 -0
  586. package/templates/react-spring-antd/web/package.json +28 -0
  587. package/templates/react-spring-antd/web/pnpm-lock.yaml +2215 -0
  588. package/templates/react-spring-antd/web/src/App.tsx +29 -0
  589. package/templates/react-spring-antd/web/src/design-layout.css +7 -0
  590. package/templates/react-spring-antd/web/src/design-runtime.json +511 -0
  591. package/templates/react-spring-antd/web/src/design-tokens.css +168 -0
  592. package/templates/react-spring-antd/web/src/design-widgets.css +31 -0
  593. package/templates/react-spring-antd/web/src/main.tsx +6 -0
  594. package/templates/react-spring-antd/web/src/structure-view.tsx +16 -0
  595. package/templates/react-spring-antd/web/src/styles.css +3 -0
  596. package/templates/react-spring-antd/web/src/ui.tsx +30 -0
  597. package/templates/react-spring-antd/web/src/widget-icon.tsx +5 -0
  598. package/templates/react-spring-antd/web/src/widget-types.ts +13 -0
  599. package/templates/react-spring-antd/web/src/workspace-model.ts +85 -0
  600. package/templates/react-spring-antd/web/tsconfig.json +22 -0
  601. package/templates/react-spring-antd/web/vite.config.ts +3 -0
  602. package/templates/react-spring-shadcn/.agents/skills/design-contract/SKILL.md +23 -0
  603. package/templates/react-spring-shadcn/.agents/skills/project-work/SKILL.md +10 -0
  604. package/templates/react-spring-shadcn/.claude/skills/design-contract/SKILL.md +23 -0
  605. package/templates/react-spring-shadcn/.claude/skills/project-work/SKILL.md +10 -0
  606. package/templates/react-spring-shadcn/.dockerignore +18 -0
  607. package/templates/react-spring-shadcn/.env.example +13 -0
  608. package/templates/react-spring-shadcn/.grok/skills/design-contract/SKILL.md +23 -0
  609. package/templates/react-spring-shadcn/.grok/skills/project-work/SKILL.md +10 -0
  610. package/templates/react-spring-shadcn/.scaffold-checks.json +7 -0
  611. package/templates/react-spring-shadcn/AGENTS.md +11 -0
  612. package/templates/react-spring-shadcn/CLAUDE.md +1 -0
  613. package/templates/react-spring-shadcn/DESIGN.md +208 -0
  614. package/templates/react-spring-shadcn/LICENSE +21 -0
  615. package/templates/react-spring-shadcn/README.md +64 -0
  616. package/templates/react-spring-shadcn/THIRD_PARTY_NOTICES.md +18 -0
  617. package/templates/react-spring-shadcn/backend/.mvn/wrapper/maven-wrapper.properties +3 -0
  618. package/templates/react-spring-shadcn/backend/Dockerfile +11 -0
  619. package/templates/react-spring-shadcn/backend/mvnw +295 -0
  620. package/templates/react-spring-shadcn/backend/pom.xml +15 -0
  621. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Api.java +38 -0
  622. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/AppUser.java +11 -0
  623. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Application.java +7 -0
  624. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Errors.java +13 -0
  625. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/PersonalRecord.java +15 -0
  626. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Records.java +14 -0
  627. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Security.java +28 -0
  628. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Seed.java +13 -0
  629. package/templates/react-spring-shadcn/backend/src/main/java/dev/scaffold/app/Users.java +5 -0
  630. package/templates/react-spring-shadcn/backend/src/main/resources/application.properties +17 -0
  631. package/templates/react-spring-shadcn/backend/src/main/resources/db/migration/V1__initial.sql +3 -0
  632. package/templates/react-spring-shadcn/backend/src/main/resources/openapi.json +461 -0
  633. package/templates/react-spring-shadcn/backend/src/test/java/dev/scaffold/app/ApiTest.java +28 -0
  634. package/templates/react-spring-shadcn/backend/src/test/java/dev/scaffold/app/SessionExpiryTest.java +37 -0
  635. package/templates/react-spring-shadcn/compose.yaml +18 -0
  636. package/templates/react-spring-shadcn/design/guide.md +61 -0
  637. package/templates/react-spring-shadcn/design/layout.css +6 -0
  638. package/templates/react-spring-shadcn/design/structure.json +107 -0
  639. package/templates/react-spring-shadcn/design/tokens.json +171 -0
  640. package/templates/react-spring-shadcn/design/widgets.css +30 -0
  641. package/templates/react-spring-shadcn/design/widgets.json +233 -0
  642. package/templates/react-spring-shadcn/docs/PROJECT.md +32 -0
  643. package/templates/react-spring-shadcn/docs/api.d.ts +544 -0
  644. package/templates/react-spring-shadcn/docs/openapi.json +461 -0
  645. package/templates/react-spring-shadcn/gitignore.template +19 -0
  646. package/templates/react-spring-shadcn/licenses/fastapi.txt +21 -0
  647. package/templates/react-spring-shadcn/licenses/nest.txt +22 -0
  648. package/templates/react-spring-shadcn/licenses/next.txt +21 -0
  649. package/templates/react-spring-shadcn/licenses/shadcn.txt +21 -0
  650. package/templates/react-spring-shadcn/licenses/sources.json +27 -0
  651. package/templates/react-spring-shadcn/licenses/spring.txt +202 -0
  652. package/templates/react-spring-shadcn/package-lock.json +494 -0
  653. package/templates/react-spring-shadcn/package.json +26 -0
  654. package/templates/react-spring-shadcn/playwright.config.ts +3 -0
  655. package/templates/react-spring-shadcn/project.json +8 -0
  656. package/templates/react-spring-shadcn/scripts/api-check.mjs +18 -0
  657. package/templates/react-spring-shadcn/scripts/api-contract.mjs +46 -0
  658. package/templates/react-spring-shadcn/scripts/design-coverage.mjs +20 -0
  659. package/templates/react-spring-shadcn/scripts/design-next-cleanup.mjs +13 -0
  660. package/templates/react-spring-shadcn/scripts/design-verify.mjs +154 -0
  661. package/templates/react-spring-shadcn/scripts/design.mjs +108 -0
  662. package/templates/react-spring-shadcn/scripts/project.mjs +120 -0
  663. package/templates/react-spring-shadcn/tests/contract-client.ts +20 -0
  664. package/templates/react-spring-shadcn/tests/contract.spec.ts +49 -0
  665. package/templates/react-spring-shadcn/tests/design/harness.tsx +63 -0
  666. package/templates/react-spring-shadcn/tests/ui.spec.ts +61 -0
  667. package/templates/react-spring-shadcn/web/eslint.config.mjs +3 -0
  668. package/templates/react-spring-shadcn/web/index.html +1 -0
  669. package/templates/react-spring-shadcn/web/package.json +33 -0
  670. package/templates/react-spring-shadcn/web/pnpm-lock.yaml +1788 -0
  671. package/templates/react-spring-shadcn/web/src/App.tsx +30 -0
  672. package/templates/react-spring-shadcn/web/src/design-layout.css +7 -0
  673. package/templates/react-spring-shadcn/web/src/design-runtime.json +511 -0
  674. package/templates/react-spring-shadcn/web/src/design-tokens.css +168 -0
  675. package/templates/react-spring-shadcn/web/src/design-widgets.css +31 -0
  676. package/templates/react-spring-shadcn/web/src/main.tsx +6 -0
  677. package/templates/react-spring-shadcn/web/src/structure-view.tsx +16 -0
  678. package/templates/react-spring-shadcn/web/src/styles.css +3 -0
  679. package/templates/react-spring-shadcn/web/src/tailwind.css +2 -0
  680. package/templates/react-spring-shadcn/web/src/ui.tsx +13 -0
  681. package/templates/react-spring-shadcn/web/src/widget-icon.tsx +5 -0
  682. package/templates/react-spring-shadcn/web/src/widget-types.ts +13 -0
  683. package/templates/react-spring-shadcn/web/src/workspace-model.ts +85 -0
  684. package/templates/react-spring-shadcn/web/tsconfig.json +22 -0
  685. package/templates/react-spring-shadcn/web/vite.config.ts +4 -0
@@ -0,0 +1,494 @@
1
+ {
2
+ "name": "__NAME_EN__",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "__NAME_EN__",
9
+ "version": "1.0.0",
10
+ "devDependencies": {
11
+ "@playwright/test": "1.64.1",
12
+ "ajv": "8.20.0",
13
+ "ajv-formats": "3.0.1",
14
+ "openapi-typescript": "7.13.0"
15
+ }
16
+ },
17
+ "node_modules/@babel/code-frame": {
18
+ "version": "7.29.7",
19
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
20
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
21
+ "dev": true,
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "@babel/helper-validator-identifier": "^7.29.7",
25
+ "js-tokens": "^4.0.0",
26
+ "picocolors": "^1.1.1"
27
+ },
28
+ "engines": {
29
+ "node": ">=6.9.0"
30
+ }
31
+ },
32
+ "node_modules/@babel/helper-validator-identifier": {
33
+ "version": "7.29.7",
34
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
35
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
36
+ "dev": true,
37
+ "license": "MIT",
38
+ "engines": {
39
+ "node": ">=6.9.0"
40
+ }
41
+ },
42
+ "node_modules/@playwright/test": {
43
+ "version": "1.64.1",
44
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.1.tgz",
45
+ "integrity": "sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==",
46
+ "dev": true,
47
+ "license": "Apache-2.0",
48
+ "dependencies": {
49
+ "playwright": "1.64.1"
50
+ },
51
+ "bin": {
52
+ "playwright": "cli.js"
53
+ },
54
+ "engines": {
55
+ "node": ">=20"
56
+ }
57
+ },
58
+ "node_modules/@redocly/ajv": {
59
+ "version": "8.11.2",
60
+ "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz",
61
+ "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==",
62
+ "dev": true,
63
+ "license": "MIT",
64
+ "dependencies": {
65
+ "fast-deep-equal": "^3.1.1",
66
+ "json-schema-traverse": "^1.0.0",
67
+ "require-from-string": "^2.0.2",
68
+ "uri-js-replace": "^1.0.1"
69
+ },
70
+ "funding": {
71
+ "type": "github",
72
+ "url": "https://github.com/sponsors/epoberezkin"
73
+ }
74
+ },
75
+ "node_modules/@redocly/config": {
76
+ "version": "0.22.0",
77
+ "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.0.tgz",
78
+ "integrity": "sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==",
79
+ "dev": true,
80
+ "license": "MIT"
81
+ },
82
+ "node_modules/@redocly/openapi-core": {
83
+ "version": "1.34.21",
84
+ "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.21.tgz",
85
+ "integrity": "sha512-yXMiBFYJbP5JOaxPzx2tJhK+v8h2Wu2uhad1Ro6GzVT8E3F4GcQ7sbLPJ9w4zvGjfxroD0bIh5B0pDtnLV/qUA==",
86
+ "dev": true,
87
+ "license": "MIT",
88
+ "dependencies": {
89
+ "@redocly/ajv": "8.11.2",
90
+ "@redocly/config": "0.22.0",
91
+ "colorette": "1.4.0",
92
+ "https-proxy-agent": "7.0.6",
93
+ "js-levenshtein": "1.1.6",
94
+ "js-yaml": "4.3.2",
95
+ "minimatch": "5.1.9",
96
+ "pluralize": "8.0.0",
97
+ "yaml-ast-parser": "0.0.43"
98
+ },
99
+ "engines": {
100
+ "node": ">=18.17.0",
101
+ "npm": ">=9.5.0"
102
+ }
103
+ },
104
+ "node_modules/agent-base": {
105
+ "version": "7.1.4",
106
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
107
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
108
+ "dev": true,
109
+ "license": "MIT",
110
+ "engines": {
111
+ "node": ">= 14"
112
+ }
113
+ },
114
+ "node_modules/ajv": {
115
+ "version": "8.20.0",
116
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
117
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
118
+ "dev": true,
119
+ "license": "MIT",
120
+ "dependencies": {
121
+ "fast-deep-equal": "^3.1.3",
122
+ "fast-uri": "^3.0.1",
123
+ "json-schema-traverse": "^1.0.0",
124
+ "require-from-string": "^2.0.2"
125
+ },
126
+ "funding": {
127
+ "type": "github",
128
+ "url": "https://github.com/sponsors/epoberezkin"
129
+ }
130
+ },
131
+ "node_modules/ajv-formats": {
132
+ "version": "3.0.1",
133
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
134
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
135
+ "dev": true,
136
+ "license": "MIT",
137
+ "dependencies": {
138
+ "ajv": "^8.0.0"
139
+ },
140
+ "peerDependencies": {
141
+ "ajv": "^8.0.0"
142
+ },
143
+ "peerDependenciesMeta": {
144
+ "ajv": {
145
+ "optional": true
146
+ }
147
+ }
148
+ },
149
+ "node_modules/ansi-colors": {
150
+ "version": "4.1.3",
151
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
152
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
153
+ "dev": true,
154
+ "license": "MIT",
155
+ "engines": {
156
+ "node": ">=6"
157
+ }
158
+ },
159
+ "node_modules/argparse": {
160
+ "version": "2.0.1",
161
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
162
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
163
+ "dev": true,
164
+ "license": "Python-2.0"
165
+ },
166
+ "node_modules/balanced-match": {
167
+ "version": "1.0.2",
168
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
169
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
170
+ "dev": true,
171
+ "license": "MIT"
172
+ },
173
+ "node_modules/brace-expansion": {
174
+ "version": "2.1.7",
175
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
176
+ "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
177
+ "dev": true,
178
+ "license": "MIT",
179
+ "dependencies": {
180
+ "balanced-match": "^1.0.0"
181
+ }
182
+ },
183
+ "node_modules/change-case": {
184
+ "version": "5.4.4",
185
+ "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz",
186
+ "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==",
187
+ "dev": true,
188
+ "license": "MIT"
189
+ },
190
+ "node_modules/colorette": {
191
+ "version": "1.4.0",
192
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
193
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
194
+ "dev": true,
195
+ "license": "MIT"
196
+ },
197
+ "node_modules/debug": {
198
+ "version": "4.4.3",
199
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
200
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
201
+ "dev": true,
202
+ "license": "MIT",
203
+ "dependencies": {
204
+ "ms": "^2.1.3"
205
+ },
206
+ "engines": {
207
+ "node": ">=6.0"
208
+ },
209
+ "peerDependenciesMeta": {
210
+ "supports-color": {
211
+ "optional": true
212
+ }
213
+ }
214
+ },
215
+ "node_modules/fast-deep-equal": {
216
+ "version": "3.1.3",
217
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
218
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
219
+ "dev": true,
220
+ "license": "MIT"
221
+ },
222
+ "node_modules/fast-uri": {
223
+ "version": "3.1.9",
224
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz",
225
+ "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==",
226
+ "dev": true,
227
+ "funding": [
228
+ {
229
+ "type": "github",
230
+ "url": "https://github.com/sponsors/fastify"
231
+ },
232
+ {
233
+ "type": "opencollective",
234
+ "url": "https://opencollective.com/fastify"
235
+ }
236
+ ],
237
+ "license": "BSD-3-Clause"
238
+ },
239
+ "node_modules/https-proxy-agent": {
240
+ "version": "7.0.6",
241
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
242
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
243
+ "dev": true,
244
+ "license": "MIT",
245
+ "dependencies": {
246
+ "agent-base": "^7.1.2",
247
+ "debug": "4"
248
+ },
249
+ "engines": {
250
+ "node": ">= 14"
251
+ }
252
+ },
253
+ "node_modules/index-to-position": {
254
+ "version": "1.2.0",
255
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
256
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
257
+ "dev": true,
258
+ "license": "MIT",
259
+ "engines": {
260
+ "node": ">=18"
261
+ },
262
+ "funding": {
263
+ "url": "https://github.com/sponsors/sindresorhus"
264
+ }
265
+ },
266
+ "node_modules/js-levenshtein": {
267
+ "version": "1.1.6",
268
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
269
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
270
+ "dev": true,
271
+ "license": "MIT",
272
+ "engines": {
273
+ "node": ">=0.10.0"
274
+ }
275
+ },
276
+ "node_modules/js-tokens": {
277
+ "version": "4.0.0",
278
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
279
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
280
+ "dev": true,
281
+ "license": "MIT"
282
+ },
283
+ "node_modules/js-yaml": {
284
+ "version": "4.3.2",
285
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
286
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
287
+ "dev": true,
288
+ "funding": [
289
+ {
290
+ "type": "github",
291
+ "url": "https://github.com/sponsors/puzrin"
292
+ },
293
+ {
294
+ "type": "github",
295
+ "url": "https://github.com/sponsors/nodeca"
296
+ }
297
+ ],
298
+ "license": "MIT",
299
+ "dependencies": {
300
+ "argparse": "^2.0.1"
301
+ },
302
+ "bin": {
303
+ "js-yaml": "bin/js-yaml.js"
304
+ }
305
+ },
306
+ "node_modules/json-schema-traverse": {
307
+ "version": "1.0.0",
308
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
309
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
310
+ "dev": true,
311
+ "license": "MIT"
312
+ },
313
+ "node_modules/minimatch": {
314
+ "version": "5.1.9",
315
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
316
+ "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
317
+ "dev": true,
318
+ "license": "ISC",
319
+ "dependencies": {
320
+ "brace-expansion": "^2.0.1"
321
+ },
322
+ "engines": {
323
+ "node": ">=10"
324
+ }
325
+ },
326
+ "node_modules/ms": {
327
+ "version": "2.1.3",
328
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
329
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
330
+ "dev": true,
331
+ "license": "MIT"
332
+ },
333
+ "node_modules/openapi-typescript": {
334
+ "version": "7.13.0",
335
+ "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.13.0.tgz",
336
+ "integrity": "sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==",
337
+ "dev": true,
338
+ "license": "MIT",
339
+ "dependencies": {
340
+ "@redocly/openapi-core": "^1.34.6",
341
+ "ansi-colors": "^4.1.3",
342
+ "change-case": "^5.4.4",
343
+ "parse-json": "^8.3.0",
344
+ "supports-color": "^10.2.2",
345
+ "yargs-parser": "^21.1.1"
346
+ },
347
+ "bin": {
348
+ "openapi-typescript": "bin/cli.js"
349
+ },
350
+ "peerDependencies": {
351
+ "typescript": "^5.x"
352
+ }
353
+ },
354
+ "node_modules/parse-json": {
355
+ "version": "8.3.0",
356
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
357
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
358
+ "dev": true,
359
+ "license": "MIT",
360
+ "dependencies": {
361
+ "@babel/code-frame": "^7.26.2",
362
+ "index-to-position": "^1.1.0",
363
+ "type-fest": "^4.39.1"
364
+ },
365
+ "engines": {
366
+ "node": ">=18"
367
+ },
368
+ "funding": {
369
+ "url": "https://github.com/sponsors/sindresorhus"
370
+ }
371
+ },
372
+ "node_modules/picocolors": {
373
+ "version": "1.1.1",
374
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
375
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
376
+ "dev": true,
377
+ "license": "ISC"
378
+ },
379
+ "node_modules/playwright": {
380
+ "version": "1.64.1",
381
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz",
382
+ "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==",
383
+ "dev": true,
384
+ "license": "Apache-2.0",
385
+ "dependencies": {
386
+ "playwright-core": "1.64.1"
387
+ },
388
+ "bin": {
389
+ "playwright": "cli.js"
390
+ },
391
+ "engines": {
392
+ "node": ">=20"
393
+ }
394
+ },
395
+ "node_modules/playwright-core": {
396
+ "version": "1.64.1",
397
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz",
398
+ "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==",
399
+ "dev": true,
400
+ "license": "Apache-2.0",
401
+ "bin": {
402
+ "playwright-core": "cli.js"
403
+ },
404
+ "engines": {
405
+ "node": ">=20"
406
+ }
407
+ },
408
+ "node_modules/pluralize": {
409
+ "version": "8.0.0",
410
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
411
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
412
+ "dev": true,
413
+ "license": "MIT",
414
+ "engines": {
415
+ "node": ">=4"
416
+ }
417
+ },
418
+ "node_modules/require-from-string": {
419
+ "version": "2.0.2",
420
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
421
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
422
+ "dev": true,
423
+ "license": "MIT",
424
+ "engines": {
425
+ "node": ">=0.10.0"
426
+ }
427
+ },
428
+ "node_modules/supports-color": {
429
+ "version": "10.2.2",
430
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
431
+ "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
432
+ "dev": true,
433
+ "license": "MIT",
434
+ "engines": {
435
+ "node": ">=18"
436
+ },
437
+ "funding": {
438
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
439
+ }
440
+ },
441
+ "node_modules/type-fest": {
442
+ "version": "4.41.0",
443
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
444
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
445
+ "dev": true,
446
+ "license": "(MIT OR CC0-1.0)",
447
+ "engines": {
448
+ "node": ">=16"
449
+ },
450
+ "funding": {
451
+ "url": "https://github.com/sponsors/sindresorhus"
452
+ }
453
+ },
454
+ "node_modules/typescript": {
455
+ "version": "5.9.3",
456
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
457
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
458
+ "dev": true,
459
+ "license": "Apache-2.0",
460
+ "peer": true,
461
+ "bin": {
462
+ "tsc": "bin/tsc",
463
+ "tsserver": "bin/tsserver"
464
+ },
465
+ "engines": {
466
+ "node": ">=14.17"
467
+ }
468
+ },
469
+ "node_modules/uri-js-replace": {
470
+ "version": "1.0.1",
471
+ "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz",
472
+ "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==",
473
+ "dev": true,
474
+ "license": "MIT"
475
+ },
476
+ "node_modules/yaml-ast-parser": {
477
+ "version": "0.0.43",
478
+ "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz",
479
+ "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==",
480
+ "dev": true,
481
+ "license": "Apache-2.0"
482
+ },
483
+ "node_modules/yargs-parser": {
484
+ "version": "21.1.1",
485
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
486
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
487
+ "dev": true,
488
+ "license": "ISC",
489
+ "engines": {
490
+ "node": ">=12"
491
+ }
492
+ }
493
+ }
494
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "__NAME_EN__",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "api:check": "node scripts/project.mjs api:check",
8
+ "api:generate": "node scripts/project.mjs api:generate",
9
+ "check": "node scripts/project.mjs check",
10
+ "setup": "node scripts/project.mjs setup",
11
+ "design:verify": "node scripts/design-verify.mjs",
12
+ "design:sync": "node scripts/design.mjs sync",
13
+ "design:check": "node scripts/design.mjs check",
14
+ "installProject": "node scripts/project.mjs install",
15
+ "dev": "node scripts/project.mjs dev",
16
+ "build": "node scripts/project.mjs build",
17
+ "test:api": "node scripts/project.mjs test:api",
18
+ "test:e2e": "node scripts/project.mjs test:e2e"
19
+ },
20
+ "devDependencies": {
21
+ "ajv": "8.20.0",
22
+ "ajv-formats": "3.0.1",
23
+ "@playwright/test": "1.64.1",
24
+ "openapi-typescript": "7.13.0"
25
+ }
26
+ }
@@ -0,0 +1,3 @@
1
+ import { defineConfig } from '@playwright/test';
2
+ const port=process.env.WEB_PORT||'5173';
3
+ export default defineConfig({testDir:'./tests',outputDir:process.env.SCAFFOLD_REPORT_DIR?process.env.SCAFFOLD_REPORT_DIR+'/playwright':'test-results',workers:1,retries:0,timeout:30000,reporter:[['line'],['junit',{outputFile:process.env.PLAYWRIGHT_JUNIT_OUTPUT_FILE||'reports/playwright.xml'}]],use:{baseURL:`http://127.0.0.1:${port}`,headless:true,trace:'off',screenshot:'off'},webServer:{command:'node scripts/project.mjs serve',url:`http://127.0.0.1:${port}/api/health`,reuseExistingServer:false,timeout:120000,stdout:'pipe',stderr:'pipe'},expect:{timeout:10000}});
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "nameZh": "模板工作空间",
4
+ "nameEn": "template-project",
5
+ "description": "模板验证",
6
+ "template": "react-spring",
7
+ "ui": "shadcn"
8
+ }
@@ -0,0 +1,18 @@
1
+ import {mkdtemp,readFile,rm} from 'node:fs/promises';
2
+ import {tmpdir} from 'node:os';
3
+ import {join,resolve} from 'node:path';
4
+ import {spawnSync} from 'node:child_process';
5
+
6
+ // Generate outside the workspace: validation never repairs or overwrites source.
7
+ const directory=await mkdtemp(join(tmpdir(),'scaffold-api-check-'));
8
+ try{
9
+ const target=join(directory,'api.d.ts');
10
+ const result=spawnSync(process.execPath,['node_modules/openapi-typescript/bin/cli.js','docs/openapi.json','-o',target],{cwd:resolve('.'),encoding:'utf8'});
11
+ if(result.status!==0)throw new Error('API_CONTRACT_INVALID: OpenAPI generation failed. '+result.stderr);
12
+ const expected=await readFile(target,'utf8'),actual=await readFile('docs/api.d.ts','utf8');
13
+ if(expected!==actual){
14
+ const a=actual.split('\n'),e=expected.split('\n');let line=0;while(line<Math.max(a.length,e.length)&&a[line]===e[line])line++;
15
+ throw new Error(`API_CONTRACT_DRIFT: docs/api.d.ts differs from docs/openapi.json at line ${line+1}. Run npm run api:generate after reviewing the intended contract.`);
16
+ }
17
+ console.log('API contract and generated types match.');
18
+ }finally{await rm(directory,{recursive:true,force:true});}
@@ -0,0 +1,46 @@
1
+ import Ajv from 'ajv';
2
+ import addFormats from 'ajv-formats';
3
+
4
+ export function responseValidator(document){
5
+ const ajv=new Ajv({strict:false,allErrors:true});addFormats(ajv);
6
+ ajv.addSchema(document,'contract');
7
+ const operations=[];
8
+ function dereference(value,pointer){
9
+ const seen=new Set();
10
+ while(value?.$ref){
11
+ const ref=value.$ref;
12
+ if(!ref.startsWith('#/')||seen.has(ref))throw new Error('API_CONTRACT_INVALID: unsupported or circular response reference');
13
+ seen.add(ref);pointer=ref.slice(1);value=pointer.slice(1).split('/').map(s=>s.replaceAll('~1','/').replaceAll('~0','~')).reduce((at,key)=>at?.[key],document);
14
+ if(!value)throw new Error('API_CONTRACT_INVALID: unresolved response reference');
15
+ }
16
+ return {value,pointer};
17
+ }
18
+ const pointer=value=>value.replaceAll('~','~0').replaceAll('/','~1');
19
+ for(const [path,item] of Object.entries(document.paths))for(const [method,operation] of Object.entries(item)){
20
+ if(!['get','post','put','delete','patch','head','options'].includes(method))continue;
21
+ const statuses=new Map();
22
+ for(const [status,response] of Object.entries(operation.responses)){
23
+ const resolved=dereference(response,`/paths/${pointer(path)}/${method}/responses/${pointer(status)}`);
24
+ const content=resolved.value.content?.['application/json'];
25
+ if(resolved.value.content&&!content)throw new Error('API_CONTRACT_INVALID: only JSON response schemas are supported');
26
+ const validate=content?ajv.compile({$ref:`contract#${resolved.pointer}/content/application~1json/schema`}):null;
27
+ statuses.set(status,validate);
28
+ }
29
+ operations.push({path,parts:path.split('/'),method,statuses});
30
+ }
31
+ return (method,url,status,headers,body)=>{
32
+ const parts=new URL(url,'http://contract.invalid').pathname.split('/');
33
+ const operation=operations.find(o=>o.method===method.toLowerCase()&&o.parts.length===parts.length&&o.parts.every((part,i)=>part===parts[i]||/^\{[^}]+\}$/.test(part)&&parts[i]!==''));
34
+ const label=`API_RESPONSE_INVALID: ${method.toUpperCase()} ${operation?.path??'unlisted operation'} status ${status}`;
35
+ if(!operation)throw new Error(label+' is absent from docs/openapi.json');
36
+ const key=operation.statuses.has(String(status))?String(status):operation.statuses.has(`${Math.floor(status/100)}XX`)?`${Math.floor(status/100)}XX`:'default';
37
+ if(!operation.statuses.has(key))throw new Error(label+' is not declared');
38
+ const validate=operation.statuses.get(key);
39
+ if(status===204&&body.length)throw new Error(label+' must have an empty body');
40
+ if(validate){
41
+ if(!/^application\/json(?:;|$)/i.test(headers['content-type']??''))throw new Error(label+' requires application/json');
42
+ let data;try{data=JSON.parse(body);}catch{throw new Error(label+' is not valid JSON');}
43
+ if(!validate(data))throw new Error(label+' '+validate.errors.map(e=>`${e.instancePath||'/'} ${e.keyword}${e.params.missingProperty?' '+e.params.missingProperty:''}`).join('; '));
44
+ }
45
+ };
46
+ }
@@ -0,0 +1,20 @@
1
+ // Each entry corresponds to a concrete branch in tests/design/harness.tsx.
2
+ const supported={
3
+ button:{variants:['primary','secondary','danger'],states:['default','hover','active','focus','disabled','loading']},
4
+ input:{variants:['text','email','password'],states:['default','hover','focus','disabled','invalid','readonly']},
5
+ textarea:{variants:['default'],states:['default','hover','focus','disabled','invalid','readonly']},
6
+ alert:{variants:['error','success'],states:['default']},
7
+ badge:{variants:['default'],states:['default']},panel:{variants:['default'],states:['default']},field:{variants:['default'],states:['default']}
8
+ };
9
+ const scenarios=['checking','login','login-error','login-busy','workspace-empty','workspace-loading','workspace-records','editor-new','editor-existing','editor-error'];
10
+ export function validateFixtureCoverage(design){
11
+ const acceptance=design.widgets.acceptance;
12
+ if(!Array.isArray(acceptance.viewports)||!acceptance.viewports.length||acceptance.viewports.some(view=>!Number.isInteger(view.width)||!Number.isInteger(view.height)||view.width<1||view.height<1))throw new Error('Design verification requires nonempty valid viewports');
13
+ if(acceptance.positionTolerance!==0.6)throw new Error('Position tolerance must remain 0.6 CSS px');
14
+ if(!Object.keys(design.widgets.widgets).length)throw new Error('No widget coverage');
15
+ for(const [name,spec] of Object.entries(design.widgets.widgets)){
16
+ if(!supported[name])throw new Error('Unimplemented widget fixture: '+name);
17
+ for(const key of ['variants','states'])if(!Array.isArray(spec[key])||!spec[key].length||spec[key].some(value=>!supported[name][key].includes(value)))throw new Error('Unimplemented fixture '+name+'.'+key);
18
+ }
19
+ if(!Array.isArray(design.structure.scenarios)||!design.structure.scenarios.length||design.structure.scenarios.some(value=>!scenarios.includes(value)))throw new Error('Unimplemented page scenario');
20
+ }
@@ -0,0 +1,13 @@
1
+ // Remove only paths owned by this fixture run; preserve concurrent source edits.
2
+ export function cleanNextFixtureConfig(file,current,original,dist) {
3
+ if(file==='tsconfig.json'){
4
+ const value=JSON.parse(current),before=JSON.parse(original);
5
+ if(Array.isArray(value.include))value.include=value.include.filter(path=>path!==`${dist}/types/**/*.ts`&&path!==`${dist}/dev/types/**/*.ts`);
6
+ return JSON.stringify(value)===JSON.stringify(before)?original:JSON.stringify(value,null,2)+'\n';
7
+ }
8
+ return current.split('\n').map(line=>{
9
+ if(!line.startsWith(`import "./${dist}/`))return line;
10
+ const suffix=line.slice(line.lastIndexOf('/types/'));
11
+ return original.split('\n').find(old=>old.startsWith('import ')&&old.endsWith(suffix))||'';
12
+ }).join('\n');
13
+ }