@atlashub/smartstack-cli 4.80.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1008) hide show
  1. package/.documentation/agents.html +124 -585
  2. package/.documentation/ba-develop.html +852 -0
  3. package/.documentation/ba-skills.html +465 -0
  4. package/.documentation/business-analyse.html +385 -1570
  5. package/.documentation/cli-commands.html +162 -799
  6. package/.documentation/commands.html +902 -1338
  7. package/.documentation/css/styles.css +34 -1
  8. package/.documentation/efcore.html +161 -2599
  9. package/.documentation/gitflow.html +62 -105
  10. package/.documentation/hooks.html +94 -343
  11. package/.documentation/index.html +116 -385
  12. package/.documentation/init.html +217 -1566
  13. package/.documentation/installation.html +121 -1470
  14. package/.documentation/license.html +90 -450
  15. package/.documentation/ralph-loop.html +105 -602
  16. package/dist/index.js +9421 -79036
  17. package/dist/index.js.map +1 -1
  18. package/package.json +5 -20
  19. package/scripts/generate-docs/README.md +87 -0
  20. package/scripts/generate-docs/index.ts +175 -0
  21. package/scripts/generate-docs/lib/context-builder.ts +81 -0
  22. package/scripts/generate-docs/lib/handlebars-setup.ts +162 -0
  23. package/scripts/generate-docs/lib/markdown-parser.ts +86 -0
  24. package/scripts/generate-docs/lib/sidebar-builder.ts +80 -0
  25. package/scripts/generate-docs/lib/skill-parser.ts +171 -0
  26. package/scripts/generate-docs/lib/stats.ts +32 -0
  27. package/scripts/generate-docs/lib/version.ts +17 -0
  28. package/scripts/generate-docs/templates/layout.hbs +33 -0
  29. package/scripts/generate-docs/templates/pages/_generic.hbs +12 -0
  30. package/scripts/generate-docs/templates/pages/ba-develop.hbs +10 -0
  31. package/scripts/generate-docs/templates/pages/ba-skills.hbs +8 -0
  32. package/scripts/generate-docs/templates/pages/business-analyse.hbs +1 -0
  33. package/scripts/generate-docs/templates/pages/commands.hbs +13 -0
  34. package/scripts/generate-docs/templates/pages/gitflow.hbs +2164 -0
  35. package/scripts/generate-docs/templates/pages/index.hbs +5 -0
  36. package/scripts/generate-docs/templates/partials/breadcrumb.hbs +6 -0
  37. package/scripts/generate-docs/templates/partials/header.hbs +22 -0
  38. package/scripts/generate-docs/templates/partials/sidebar.hbs +32 -0
  39. package/scripts/generate-docs/templates/partials/skill-card.hbs +22 -0
  40. package/scripts/generate-docs/templates/partials/skill-grid.hbs +5 -0
  41. package/scripts/generate-docs/templates/partials/skill-table.hbs +18 -0
  42. package/scripts/generate-docs/templates/partials/stats-bar.hbs +20 -0
  43. package/scripts/test-migration-program-cs.mts +94 -0
  44. package/templates/agents/explore-codebase.md +2 -3
  45. package/templates/agents/explore-docs.md +5 -5
  46. package/templates/hooks/hooks.json +0 -9
  47. package/templates/project/Program.cs.template +17 -5
  48. package/templates/project/appsettings.json.template +208 -195
  49. package/templates/project/claude-md/api.CLAUDE.md.template +27 -2
  50. package/templates/project/patch-smartstack-theme.cjs.template +42 -0
  51. package/templates/scripts/statusline/README.md +47 -0
  52. package/templates/scripts/statusline/index.js +224 -0
  53. package/templates/skills/CLAUDE.md +235 -0
  54. package/templates/skills/ba-develop/SKILL.md +310 -0
  55. package/templates/skills/ba-develop/cli/compute-page-diff/__tests__/compute-page-diff.test.ts +177 -0
  56. package/templates/skills/ba-develop/cli/compute-page-diff/compute-diff.ts +51 -0
  57. package/templates/skills/ba-develop/cli/compute-page-diff/disk-drift.ts +55 -0
  58. package/templates/skills/ba-develop/cli/compute-page-diff/index.ts +89 -0
  59. package/templates/skills/ba-develop/cli/compute-page-diff/scan-pagespecs.ts +115 -0
  60. package/templates/skills/ba-develop/cli/compute-page-diff/types.ts +63 -0
  61. package/templates/skills/ba-develop/cli/compute-page-diff/validate.ts +20 -0
  62. package/templates/skills/ba-develop/cli/update-snapshot/__tests__/update-snapshot.test.ts +73 -0
  63. package/templates/skills/ba-develop/cli/update-snapshot/execute.ts +24 -0
  64. package/templates/skills/ba-develop/cli/update-snapshot/index.ts +61 -0
  65. package/templates/skills/ba-develop/cli/update-snapshot/types.ts +40 -0
  66. package/templates/skills/ba-develop/cli/update-snapshot/validate.ts +17 -0
  67. package/templates/skills/ba-develop/references/anti-patterns.md +101 -0
  68. package/templates/skills/ba-develop/references/auto-healing.md +191 -0
  69. package/templates/skills/ba-develop/references/commit-checkpoints.md +79 -0
  70. package/templates/skills/ba-develop/references/gates.md +380 -0
  71. package/templates/skills/ba-develop/references/output-contract.md +95 -0
  72. package/templates/skills/ba-develop/references/phases-detail.md +592 -0
  73. package/templates/skills/ba-develop-plan/SKILL.md +239 -0
  74. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/__tests__/validate.test.ts +225 -0
  75. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/index.ts +102 -0
  76. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/types.ts +121 -0
  77. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/validate.ts +261 -0
  78. package/templates/skills/business-analyse/_workflow/README.md +34 -0
  79. package/templates/skills/business-analyse/_workflow/ba-files.md +174 -0
  80. package/templates/skills/business-analyse/_workflow/code-discipline.md +104 -0
  81. package/templates/skills/business-analyse/_workflow/communication.md +63 -0
  82. package/templates/skills/business-analyse/_workflow/completeAuto-discipline.md +79 -0
  83. package/templates/skills/business-analyse/_workflow/context-documents.md +45 -0
  84. package/templates/skills/business-analyse/_workflow/doc-templates.md +318 -0
  85. package/templates/skills/business-analyse/audit-actors/SKILL.md +97 -0
  86. package/templates/skills/business-analyse/audit-cross-dimension/SKILL.md +127 -0
  87. package/templates/skills/business-analyse/audit-cross-ref-code/SKILL.md +119 -0
  88. package/templates/skills/business-analyse/audit-data-model/SKILL.md +343 -0
  89. package/templates/skills/business-analyse/audit-menu/SKILL.md +97 -0
  90. package/templates/skills/business-analyse/audit-prd/SKILL.md +479 -0
  91. package/templates/skills/business-analyse/audit-pre-dev/SKILL.md +135 -0
  92. package/templates/skills/business-analyse/audit-rbac/SKILL.md +93 -0
  93. package/templates/skills/business-analyse/audit-rules/SKILL.md +182 -0
  94. package/templates/skills/business-analyse/audit-screens/SKILL.md +169 -0
  95. package/templates/skills/business-analyse/audit-sections/SKILL.md +174 -0
  96. package/templates/skills/business-analyse/audit-use-cases/SKILL.md +245 -0
  97. package/templates/skills/business-analyse/create-actors/SKILL.md +129 -0
  98. package/templates/skills/business-analyse/create-ba-order/SKILL.md +182 -0
  99. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/generate.test.ts +151 -0
  100. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/graph.test.ts +173 -0
  101. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/generate.ts +273 -0
  102. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/graph.ts +193 -0
  103. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/index.ts +108 -0
  104. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/types.ts +106 -0
  105. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/validate.ts +79 -0
  106. package/templates/skills/business-analyse/create-business-rules/SKILL.md +302 -0
  107. package/templates/skills/business-analyse/create-business-rules/levels/access-rules.md +105 -0
  108. package/templates/skills/business-analyse/create-business-rules/levels/elaborate.md +193 -0
  109. package/templates/skills/business-analyse/create-business-rules/levels/identify.md +157 -0
  110. package/templates/skills/business-analyse/create-business-rules/levels/link.md +86 -0
  111. package/templates/skills/business-analyse/create-data-model/SKILL.md +319 -0
  112. package/templates/skills/business-analyse/create-data-model/levels/attributes.md +130 -0
  113. package/templates/skills/business-analyse/create-data-model/levels/identify.md +100 -0
  114. package/templates/skills/business-analyse/create-data-model/levels/relationships.md +97 -0
  115. package/templates/skills/business-analyse/create-menu/SKILL.md +191 -0
  116. package/templates/skills/business-analyse/create-menu/levels/applications.md +85 -0
  117. package/templates/skills/business-analyse/create-menu/levels/modules.md +81 -0
  118. package/templates/skills/business-analyse/create-menu/levels/resources.md +75 -0
  119. package/templates/skills/business-analyse/create-menu/levels/sections.md +82 -0
  120. package/templates/skills/business-analyse/create-plan-development/SKILL.md +93 -0
  121. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/graph.test.ts +271 -0
  122. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/parse.test.ts +177 -0
  123. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/generate.ts +317 -0
  124. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/graph.ts +233 -0
  125. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/index.ts +106 -0
  126. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/parse.ts +346 -0
  127. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/types.ts +160 -0
  128. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/validate.ts +118 -0
  129. package/templates/skills/business-analyse/create-prd/SKILL.md +228 -0
  130. package/templates/skills/business-analyse/create-rbac/SKILL.md +255 -0
  131. package/templates/skills/business-analyse/create-rbac/levels/detail.md +86 -0
  132. package/templates/skills/business-analyse/create-rbac/levels/discovery.md +63 -0
  133. package/templates/skills/business-analyse/create-rbac/levels/review.md +66 -0
  134. package/templates/skills/business-analyse/create-screen/SKILL.md +386 -0
  135. package/templates/skills/business-analyse/create-screen/levels/dashboard-screens.md +94 -0
  136. package/templates/skills/business-analyse/create-screen/levels/form-screens.md +142 -0
  137. package/templates/skills/business-analyse/create-screen/levels/home-screens.md +151 -0
  138. package/templates/skills/business-analyse/create-screen/levels/kanban-screens.md +86 -0
  139. package/templates/skills/business-analyse/create-screen/levels/list-screens.md +134 -0
  140. package/templates/skills/business-analyse/create-screen/references/post-check.md +101 -0
  141. package/templates/skills/business-analyse/create-screen/references/react-templates.md +252 -0
  142. package/templates/skills/business-analyse/create-screen/references/smartcomponents.md +419 -0
  143. package/templates/skills/business-analyse/create-screen/references/type-mapping.md +150 -0
  144. package/templates/skills/business-analyse/create-use-case/SKILL.md +347 -0
  145. package/templates/skills/business-analyse/create-use-case/levels/detail.md +136 -0
  146. package/templates/skills/business-analyse/create-use-case/levels/discovery.md +110 -0
  147. package/templates/skills/business-analyse/loop/SKILL.md +401 -0
  148. package/templates/skills/business-analyse/modeling-detail/SKILL.md +241 -0
  149. package/templates/skills/business-analyse/modeling-inventory/SKILL.md +174 -0
  150. package/templates/skills/business-analyse/reconcile-menu/SKILL.md +180 -0
  151. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/clean.test.ts +266 -0
  152. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/detect.test.ts +231 -0
  153. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/scan.test.ts +154 -0
  154. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/clean.ts +319 -0
  155. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/detect.ts +256 -0
  156. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/index.ts +126 -0
  157. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/scan.ts +175 -0
  158. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/types.ts +136 -0
  159. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/validate.ts +32 -0
  160. package/templates/skills/check-version/SKILL.md +196 -196
  161. package/templates/skills/cli-app-sync/SKILL.md +9 -9
  162. package/templates/skills/cli-app-sync/references/comparison-map.md +4 -4
  163. package/templates/skills/cli-app-sync/references/diff-entities.md +6 -6
  164. package/templates/skills/conventions/SKILL.md +64 -0
  165. package/templates/skills/dev-start/SKILL.md +190 -237
  166. package/templates/skills/development/SKILL.md +87 -0
  167. package/templates/skills/development/audit/SKILL.md +156 -0
  168. package/templates/skills/development/audit/routing-dynamic/SKILL.md +196 -0
  169. package/templates/skills/development/audit-dev-api/SKILL.md +331 -0
  170. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/__tests__/end-to-end.test.ts +364 -0
  171. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/audit.ts +646 -0
  172. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/index.ts +140 -0
  173. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/types.ts +158 -0
  174. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/validate.ts +45 -0
  175. package/templates/skills/development/audit-dev-core/SKILL.md +182 -0
  176. package/templates/skills/development/audit-dev-data/SKILL.md +195 -0
  177. package/templates/skills/development/audit-dev-domain/SKILL.md +184 -0
  178. package/templates/skills/development/audit-dev-frontend/SKILL.md +530 -0
  179. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/__tests__/end-to-end.test.ts +202 -0
  180. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/apply.ts +31 -0
  181. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/audit.ts +734 -0
  182. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/index.ts +125 -0
  183. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/types.ts +165 -0
  184. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/validate.ts +36 -0
  185. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/__tests__/dev-ui-022.test.ts +193 -0
  186. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/apply.ts +374 -0
  187. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/audit.ts +1126 -0
  188. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/index.ts +141 -0
  189. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/types.ts +218 -0
  190. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/validate.ts +80 -0
  191. package/templates/skills/development/audit-dev-tests/SKILL.md +82 -0
  192. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/__tests__/audit.test.ts +220 -0
  193. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/audit.ts +185 -0
  194. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/index.ts +84 -0
  195. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/types.ts +48 -0
  196. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/validate.ts +36 -0
  197. package/templates/skills/development/audit-dev-wire/SKILL.md +144 -0
  198. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/__tests__/audit.test.ts +171 -0
  199. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/audit.ts +307 -0
  200. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/index.ts +139 -0
  201. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/types.ts +110 -0
  202. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/validate.ts +16 -0
  203. package/templates/skills/development/backend/business-layer/SKILL.md +255 -0
  204. package/templates/skills/development/backend/business-layer/cli/scaffold-business/__tests__/generate.test.ts +254 -0
  205. package/templates/skills/development/backend/business-layer/cli/scaffold-business/generate.ts +842 -0
  206. package/templates/skills/development/backend/business-layer/cli/scaffold-business/index.ts +56 -0
  207. package/templates/skills/development/backend/business-layer/cli/scaffold-business/types.ts +112 -0
  208. package/templates/skills/development/backend/business-layer/cli/scaffold-business/validate.ts +24 -0
  209. package/templates/skills/development/backend/controller/SKILL.md +154 -0
  210. package/templates/skills/development/backend/controller/cli/scaffold-controller/__tests__/generate.test.ts +345 -0
  211. package/templates/skills/development/backend/controller/cli/scaffold-controller/generate.ts +280 -0
  212. package/templates/skills/development/backend/controller/cli/scaffold-controller/index.ts +49 -0
  213. package/templates/skills/development/backend/controller/cli/scaffold-controller/types.ts +72 -0
  214. package/templates/skills/development/backend/controller/cli/scaffold-controller/validate.ts +14 -0
  215. package/templates/skills/development/backend/core-seed/SKILL.md +177 -0
  216. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/build-spec.test.ts +163 -0
  217. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/generate.test.ts +330 -0
  218. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/validate.test.ts +126 -0
  219. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/build-spec.ts +287 -0
  220. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/generate.ts +826 -0
  221. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/index.ts +188 -0
  222. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/types.ts +163 -0
  223. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/validate.ts +129 -0
  224. package/templates/skills/development/backend/data-layer/SKILL.md +163 -0
  225. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/__tests__/generate.test.ts +155 -0
  226. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/generate.ts +232 -0
  227. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/index.ts +34 -0
  228. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/types.ts +60 -0
  229. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/validate.ts +42 -0
  230. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/execute.ts +13 -0
  231. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/index.ts +25 -0
  232. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/types.ts +11 -0
  233. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/validate.ts +9 -0
  234. package/templates/skills/development/backend/screen-controller/SKILL.md +169 -0
  235. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/generate.test.ts +329 -0
  236. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/hub-views.test.ts +105 -0
  237. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/parse-pagespec.test.ts +137 -0
  238. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/generate.ts +437 -0
  239. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/index.ts +108 -0
  240. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/parse-pagespec.ts +104 -0
  241. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/types.ts +101 -0
  242. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/validate.ts +26 -0
  243. package/templates/skills/development/backend/seed-data/SKILL.md +91 -0
  244. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/generate.ts +471 -0
  245. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/index.ts +74 -0
  246. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/types.ts +104 -0
  247. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/validate.ts +63 -0
  248. package/templates/skills/development/backend/structure/SKILL.md +47 -0
  249. package/templates/skills/development/debug/SKILL.md +62 -0
  250. package/templates/skills/development/debug/audit-bug/SKILL.md +185 -0
  251. package/templates/skills/development/debug/backend/SKILL.md +114 -0
  252. package/templates/skills/development/debug/discuss-bug/SKILL.md +193 -0
  253. package/templates/skills/development/debug/fix-bug/SKILL.md +172 -0
  254. package/templates/skills/development/debug/frontend/SKILL.md +215 -0
  255. package/templates/skills/development/frontend/api-client/SKILL.md +158 -0
  256. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/generate.test.ts +1180 -0
  257. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/screen-strata-contract.test.ts +261 -0
  258. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/url-parity.test.ts +201 -0
  259. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/generate.ts +875 -0
  260. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/index.ts +36 -0
  261. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/types.ts +251 -0
  262. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/validate.ts +10 -0
  263. package/templates/skills/development/frontend/auth/SKILL.md +77 -0
  264. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/generate.ts +306 -0
  265. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/index.ts +179 -0
  266. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/types.ts +22 -0
  267. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/validate.ts +37 -0
  268. package/templates/skills/development/frontend/component/SKILL.md +347 -0
  269. package/templates/skills/development/frontend/component/cli/scaffold-component/__tests__/generate.test.ts +1237 -0
  270. package/templates/skills/development/frontend/component/cli/scaffold-component/generate.ts +1923 -0
  271. package/templates/skills/development/frontend/component/cli/scaffold-component/index.ts +155 -0
  272. package/templates/skills/development/frontend/component/cli/scaffold-component/types.ts +290 -0
  273. package/templates/skills/development/frontend/component/cli/scaffold-component/validate.ts +16 -0
  274. package/templates/skills/development/frontend/component/cli/validate-page/__tests__/execute.test.ts +231 -0
  275. package/templates/skills/development/frontend/component/cli/validate-page/execute.ts +598 -0
  276. package/templates/skills/development/frontend/component/cli/validate-page/index.ts +88 -0
  277. package/templates/skills/development/frontend/component/cli/validate-page/types.ts +58 -0
  278. package/templates/skills/development/frontend/component/cli/validate-page/validate.ts +28 -0
  279. package/templates/skills/development/frontend/component/patterns/README.md +42 -0
  280. package/templates/skills/development/frontend/component/patterns/detail-page.md +133 -0
  281. package/templates/skills/development/frontend/component/patterns/entity-card.md +148 -0
  282. package/templates/skills/development/frontend/component/patterns/form-page.md +191 -0
  283. package/templates/skills/development/frontend/component/patterns/kanban-board.md +195 -0
  284. package/templates/skills/development/frontend/component/patterns/list-page.md +175 -0
  285. package/templates/skills/development/frontend/extension-config/SKILL.md +108 -0
  286. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/generate.ts +64 -0
  287. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/index.ts +70 -0
  288. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/types.ts +27 -0
  289. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/validate.ts +16 -0
  290. package/templates/skills/development/frontend/layout/SKILL.md +52 -0
  291. package/templates/skills/development/frontend/layout/cli/scaffold-layout/__tests__/generate.test.ts +66 -0
  292. package/templates/skills/development/frontend/layout/cli/scaffold-layout/generate.ts +175 -0
  293. package/templates/skills/development/frontend/layout/cli/scaffold-layout/index.ts +104 -0
  294. package/templates/skills/development/frontend/layout/cli/scaffold-layout/types.ts +17 -0
  295. package/templates/skills/development/frontend/layout/cli/scaffold-layout/validate.ts +37 -0
  296. package/templates/skills/development/frontend/routes/SKILL.md +152 -0
  297. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/generate.ts +216 -0
  298. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/index.ts +121 -0
  299. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/types.ts +69 -0
  300. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/validate.ts +23 -0
  301. package/templates/skills/development/frontend/routes/cli/scaffold-routes/__tests__/generate.test.ts +292 -0
  302. package/templates/skills/development/frontend/routes/cli/scaffold-routes/generate.ts +270 -0
  303. package/templates/skills/development/frontend/routes/cli/scaffold-routes/index.ts +42 -0
  304. package/templates/skills/development/frontend/routes/cli/scaffold-routes/types.ts +114 -0
  305. package/templates/skills/development/frontend/routes/cli/scaffold-routes/validate.ts +68 -0
  306. package/templates/skills/development/frontend/structure/SKILL.md +119 -0
  307. package/templates/skills/development/frontend/theme/SKILL.md +48 -0
  308. package/templates/skills/development/frontend/theme/cli/scaffold-theme/__tests__/generate.test.ts +53 -0
  309. package/templates/skills/development/frontend/theme/cli/scaffold-theme/generate.ts +129 -0
  310. package/templates/skills/development/frontend/theme/cli/scaffold-theme/index.ts +102 -0
  311. package/templates/skills/development/frontend/theme/cli/scaffold-theme/types.ts +48 -0
  312. package/templates/skills/development/frontend/theme/cli/scaffold-theme/validate.ts +37 -0
  313. package/templates/skills/development/frontend/ui-polish/SKILL.md +192 -0
  314. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r18.test.ts +153 -0
  315. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r19.test.ts +307 -0
  316. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r20.test.ts +167 -0
  317. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/shared-scan.test.ts +262 -0
  318. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/apply.ts +580 -0
  319. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/audit.ts +825 -0
  320. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/index.ts +133 -0
  321. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/types.ts +121 -0
  322. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/validate.ts +73 -0
  323. package/templates/skills/development/frontend/ui-polish/tokens.json +292 -0
  324. package/templates/skills/development/frontend/ui-primitives/SKILL.md +88 -0
  325. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/__tests__/generate.test.ts +158 -0
  326. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/generate.ts +345 -0
  327. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/index.ts +142 -0
  328. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/types.ts +27 -0
  329. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/validate.ts +37 -0
  330. package/templates/skills/development/run/SKILL.md +61 -0
  331. package/templates/skills/development/run/backend/SKILL.md +106 -0
  332. package/templates/skills/development/run/frontend/SKILL.md +116 -0
  333. package/templates/skills/development/smoke-test/SKILL.md +99 -0
  334. package/templates/skills/development/smoke-test/cli/run-smoke/execute.ts +424 -0
  335. package/templates/skills/development/smoke-test/cli/run-smoke/index.ts +75 -0
  336. package/templates/skills/development/smoke-test/cli/run-smoke/types.ts +100 -0
  337. package/templates/skills/development/testing/SKILL.md +148 -0
  338. package/templates/skills/development/testing/cli/scaffold-tests/generate.ts +530 -0
  339. package/templates/skills/development/testing/cli/scaffold-tests/index.ts +83 -0
  340. package/templates/skills/development/testing/cli/scaffold-tests/types.ts +51 -0
  341. package/templates/skills/development/testing/cli/scaffold-tests/validate.ts +33 -0
  342. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/generate.test.ts +188 -0
  343. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/parse-ac.test.ts +191 -0
  344. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/generate.ts +190 -0
  345. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/index.ts +138 -0
  346. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/parse-ac.ts +172 -0
  347. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/types.ts +104 -0
  348. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/validate.ts +57 -0
  349. package/templates/skills/development/testing/cli/test-report/execute.ts +140 -0
  350. package/templates/skills/development/testing/cli/test-report/index.ts +96 -0
  351. package/templates/skills/development/testing/cli/test-report/types.ts +52 -0
  352. package/templates/skills/development/testing/cli/test-report/validate.ts +26 -0
  353. package/templates/skills/development/testing/fix-build/SKILL.md +81 -0
  354. package/templates/skills/development/testing/smoke-http/SKILL.md +123 -0
  355. package/templates/skills/development/testing/smoke-http/cli/smoke-http/execute.ts +129 -0
  356. package/templates/skills/development/testing/smoke-http/cli/smoke-http/index.ts +113 -0
  357. package/templates/skills/development/testing/smoke-http/cli/smoke-http/types.ts +62 -0
  358. package/templates/skills/development/testing/smoke-http/cli/smoke-http/validate.ts +36 -0
  359. package/templates/skills/development/testing/ui-test/SKILL.md +128 -0
  360. package/templates/skills/development/testing/ui-test/cli/build-manifest/generate.ts +129 -0
  361. package/templates/skills/development/testing/ui-test/cli/build-manifest/index.ts +80 -0
  362. package/templates/skills/development/testing/ui-test/cli/build-manifest/types.ts +72 -0
  363. package/templates/skills/development/testing/ui-test/cli/build-manifest/validate.ts +44 -0
  364. package/templates/skills/development/testing/ui-test/cli/run-ui-test/execute.ts +136 -0
  365. package/templates/skills/development/testing/ui-test/cli/run-ui-test/index.ts +75 -0
  366. package/templates/skills/development/testing/ui-test/cli/run-ui-test/lib/dev-browser-driver.ts +250 -0
  367. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/delete.js.hbs +83 -0
  368. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/detail.js.hbs +87 -0
  369. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/edit.js.hbs +91 -0
  370. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/form-submit.js.hbs +82 -0
  371. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/list.js.hbs +125 -0
  372. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/permission-negative.js.hbs +65 -0
  373. package/templates/skills/development/testing/ui-test/cli/run-ui-test/types.ts +57 -0
  374. package/templates/skills/development/testing/ui-test/cli/run-ui-test/validate.ts +56 -0
  375. package/templates/skills/documentation/SKILL.md +168 -139
  376. package/templates/skills/documentation/cli/extract-doc/__tests__/forbidden.test.ts +136 -0
  377. package/templates/skills/documentation/cli/extract-doc/__tests__/overflow.test.ts +76 -0
  378. package/templates/skills/documentation/cli/extract-doc/__tests__/required.test.ts +147 -0
  379. package/templates/skills/documentation/cli/extract-doc/extract.ts +657 -0
  380. package/templates/skills/documentation/cli/extract-doc/index.ts +102 -0
  381. package/templates/skills/documentation/cli/extract-doc/types.ts +133 -0
  382. package/templates/skills/documentation/cli/extract-doc/validate.ts +35 -0
  383. package/templates/skills/documentation/cli/scaffold-doc/generate.ts +198 -0
  384. package/templates/skills/documentation/cli/scaffold-doc/index.ts +61 -0
  385. package/templates/skills/documentation/cli/scaffold-doc/types.ts +72 -0
  386. package/templates/skills/documentation/cli/scaffold-doc/validate.ts +33 -0
  387. package/templates/skills/documentation/data-schema.md +18 -38
  388. package/templates/skills/documentation/steps/step-01-scan.md +59 -113
  389. package/templates/skills/documentation/steps/step-02-generate.md +158 -231
  390. package/templates/skills/documentation/steps/step-03-validate.md +101 -280
  391. package/templates/skills/documentation/templates.md +403 -92
  392. package/templates/skills/efcore/SKILL.md +88 -308
  393. package/templates/skills/efcore/_shared.md +140 -0
  394. package/templates/skills/efcore/agents/create.md +69 -0
  395. package/templates/skills/efcore/agents/db-update.md +58 -0
  396. package/templates/skills/efcore/agents/list.md +35 -0
  397. package/templates/skills/efcore/agents/rebase-snapshot.md +50 -0
  398. package/templates/skills/efcore/agents/recreate-db.md +78 -0
  399. package/templates/skills/efcore/agents/squash.md +78 -0
  400. package/templates/skills/efcore/agents/status.md +35 -0
  401. package/templates/skills/efcore/cli/create/execute.ts +164 -0
  402. package/templates/skills/efcore/cli/create/index.ts +51 -0
  403. package/templates/skills/efcore/cli/create/types.ts +35 -0
  404. package/templates/skills/efcore/cli/create/validate.ts +29 -0
  405. package/templates/skills/efcore/cli/lib/detect-dbcontexts.ts +195 -0
  406. package/templates/skills/efcore/cli/lib/ef-runner.ts +144 -0
  407. package/templates/skills/efcore/cli/lib/migration-name.ts +56 -0
  408. package/templates/skills/efcore/cli/lib/parse-csproj-version.ts +45 -0
  409. package/templates/skills/efcore/cli/list/execute.ts +83 -0
  410. package/templates/skills/efcore/cli/list/index.ts +60 -0
  411. package/templates/skills/efcore/cli/list/types.ts +46 -0
  412. package/templates/skills/efcore/cli/list/validate.ts +20 -0
  413. package/templates/skills/efcore/cli/rebase-snapshot/execute.ts +21 -0
  414. package/templates/skills/efcore/cli/rebase-snapshot/index.ts +53 -0
  415. package/templates/skills/efcore/cli/rebase-snapshot/types.ts +20 -0
  416. package/templates/skills/efcore/cli/rebase-snapshot/validate.ts +25 -0
  417. package/templates/skills/efcore/cli/squash/execute.ts +298 -0
  418. package/templates/skills/efcore/cli/squash/index.ts +57 -0
  419. package/templates/skills/efcore/cli/squash/types.ts +38 -0
  420. package/templates/skills/efcore/cli/squash/validate.ts +30 -0
  421. package/templates/skills/efcore/cli/status/execute.ts +152 -0
  422. package/templates/skills/efcore/cli/status/index.ts +45 -0
  423. package/templates/skills/efcore/cli/status/types.ts +32 -0
  424. package/templates/skills/efcore/cli/status/validate.ts +20 -0
  425. package/templates/skills/external/context7/SKILL.md +121 -0
  426. package/templates/skills/external/dev-browser/SKILL.md +134 -0
  427. package/templates/skills/gitflow/SKILL.md +139 -392
  428. package/templates/skills/gitflow/_shared.md +24 -620
  429. package/templates/skills/gitflow/agents/abort.md +47 -0
  430. package/templates/skills/gitflow/agents/cleanup.md +50 -0
  431. package/templates/skills/gitflow/agents/commit.md +41 -0
  432. package/templates/skills/gitflow/agents/finish.md +47 -0
  433. package/templates/skills/gitflow/agents/init.md +41 -0
  434. package/templates/skills/gitflow/agents/merge.md +44 -0
  435. package/templates/skills/gitflow/agents/pr.md +39 -0
  436. package/templates/skills/gitflow/agents/start.md +42 -0
  437. package/templates/skills/gitflow/agents/status.md +39 -0
  438. package/templates/skills/gitflow/agents/sync.md +38 -0
  439. package/templates/skills/gitflow/cli/abort/execute.ts +61 -0
  440. package/templates/skills/gitflow/cli/abort/index.ts +116 -0
  441. package/templates/skills/gitflow/cli/abort/types.ts +21 -0
  442. package/templates/skills/gitflow/cli/abort/validate.ts +38 -0
  443. package/templates/skills/gitflow/cli/cleanup/execute.ts +107 -0
  444. package/templates/skills/gitflow/cli/cleanup/index.ts +122 -0
  445. package/templates/skills/gitflow/cli/cleanup/types.ts +26 -0
  446. package/templates/skills/gitflow/cli/cleanup/validate.ts +33 -0
  447. package/templates/skills/gitflow/cli/commit/execute.ts +146 -0
  448. package/templates/skills/gitflow/cli/commit/index.ts +77 -0
  449. package/templates/skills/gitflow/cli/commit/types.ts +36 -0
  450. package/templates/skills/gitflow/cli/commit/validate.ts +38 -0
  451. package/templates/skills/gitflow/cli/finish/execute.ts +127 -0
  452. package/templates/skills/gitflow/cli/finish/index.ts +106 -0
  453. package/templates/skills/gitflow/cli/finish/types.ts +25 -0
  454. package/templates/skills/gitflow/cli/finish/validate.ts +44 -0
  455. package/templates/skills/gitflow/cli/generate-msg/execute.ts +51 -0
  456. package/templates/skills/gitflow/cli/generate-msg/index.ts +73 -0
  457. package/templates/skills/gitflow/cli/generate-msg/types.ts +37 -0
  458. package/templates/skills/gitflow/cli/generate-msg/validate.ts +42 -0
  459. package/templates/skills/gitflow/cli/init/execute.ts +186 -0
  460. package/templates/skills/gitflow/cli/init/index.ts +127 -0
  461. package/templates/skills/gitflow/cli/init/types.ts +63 -0
  462. package/templates/skills/gitflow/cli/init/validate.ts +56 -0
  463. package/templates/skills/gitflow/cli/lib/branch.ts +83 -0
  464. package/templates/skills/gitflow/cli/lib/config.ts +149 -0
  465. package/templates/skills/gitflow/cli/lib/efcore.ts +136 -0
  466. package/templates/skills/gitflow/cli/lib/git.ts +212 -0
  467. package/templates/skills/gitflow/cli/lib/output.ts +49 -0
  468. package/templates/skills/gitflow/cli/lib/paths.ts +54 -0
  469. package/templates/skills/gitflow/cli/lib/platform.ts +44 -0
  470. package/templates/skills/gitflow/cli/lib/provider.ts +147 -0
  471. package/templates/skills/gitflow/cli/lib/types.ts +189 -0
  472. package/templates/skills/gitflow/cli/lib/version.ts +152 -0
  473. package/templates/skills/gitflow/cli/lib/worktree.ts +170 -0
  474. package/templates/skills/gitflow/cli/merge/execute.ts +93 -0
  475. package/templates/skills/gitflow/cli/merge/index.ts +109 -0
  476. package/templates/skills/gitflow/cli/merge/types.ts +24 -0
  477. package/templates/skills/gitflow/cli/merge/validate.ts +33 -0
  478. package/templates/skills/gitflow/cli/pr/execute.ts +131 -0
  479. package/templates/skills/gitflow/cli/pr/index.ts +115 -0
  480. package/templates/skills/gitflow/cli/pr/types.ts +27 -0
  481. package/templates/skills/gitflow/cli/pr/validate.ts +27 -0
  482. package/templates/skills/gitflow/cli/start/execute.ts +98 -0
  483. package/templates/skills/gitflow/cli/start/index.ts +75 -0
  484. package/templates/skills/gitflow/cli/start/types.ts +26 -0
  485. package/templates/skills/gitflow/cli/start/validate.ts +47 -0
  486. package/templates/skills/gitflow/cli/status/execute.ts +251 -0
  487. package/templates/skills/gitflow/cli/status/index.ts +154 -0
  488. package/templates/skills/gitflow/cli/status/types.ts +75 -0
  489. package/templates/skills/gitflow/cli/status/validate.ts +38 -0
  490. package/templates/skills/gitflow/cli/sync/execute.ts +84 -0
  491. package/templates/skills/gitflow/cli/sync/index.ts +75 -0
  492. package/templates/skills/gitflow/cli/sync/types.ts +25 -0
  493. package/templates/skills/gitflow/cli/sync/validate.ts +34 -0
  494. package/templates/skills/gitflow/commit-message.md +46 -0
  495. package/templates/skills/init/SKILL.md +54 -0
  496. package/templates/skills/lib/__tests__/canonical-hash.test.ts +45 -0
  497. package/templates/skills/lib/__tests__/page-spec-actions.test.ts +232 -0
  498. package/templates/skills/lib/canonical-hash.ts +40 -0
  499. package/templates/skills/lib/detector.ts +243 -0
  500. package/templates/skills/lib/dotnet.ts +238 -0
  501. package/templates/skills/lib/frontend-fixers.ts +151 -0
  502. package/templates/skills/lib/fs.ts +238 -0
  503. package/templates/skills/lib/git.ts +134 -0
  504. package/templates/skills/lib/graph.ts +138 -0
  505. package/templates/skills/lib/navroute-parser.ts +51 -0
  506. package/templates/skills/lib/output.ts +117 -0
  507. package/templates/skills/lib/page-spec-actions.ts +350 -0
  508. package/templates/skills/lib/skill-slug.ts +121 -0
  509. package/templates/skills/lib/string-utils.ts +140 -0
  510. package/templates/skills/lib/template-loader.ts +115 -0
  511. package/templates/skills/lib/url-conventions.ts +151 -0
  512. package/templates/skills/package.json +5 -0
  513. package/templates/skills/quick-search/SKILL.md +99 -99
  514. package/templates/skills/review/SKILL.md +56 -0
  515. package/templates/skills/smoke-generation/SKILL.md +18 -16
  516. package/templates/skills/ui-components/SKILL.md +136 -457
  517. package/templates/skills/upgrade/SKILL.md +36 -0
  518. package/templates/skills/utils/SKILL.md +45 -44
  519. package/templates/skills/utils/subcommands/test-web-config.md +152 -152
  520. package/templates/skills/utils/subcommands/test-web.md +123 -123
  521. package/templates/skills/validate-feature/SKILL.md +102 -101
  522. package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
  523. package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
  524. package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
  525. package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
  526. package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
  527. package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
  528. package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
  529. package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
  530. package/templates/skills/validation/conventions/SKILL.md +193 -0
  531. package/templates/skills/validation/conventions/cli/validate-conventions/execute.ts +368 -0
  532. package/templates/skills/validation/conventions/cli/validate-conventions/index.ts +67 -0
  533. package/templates/skills/validation/conventions/cli/validate-conventions/types.ts +91 -0
  534. package/templates/skills/validation/conventions/cli/validate-conventions/validate.ts +36 -0
  535. package/templates/skills/validation/cross-validate/SKILL.md +83 -0
  536. package/templates/skills/validation/cross-validate/cli/execute.ts +576 -0
  537. package/templates/skills/validation/cross-validate/cli/index.ts +87 -0
  538. package/templates/skills/validation/cross-validate/cli/types.ts +85 -0
  539. package/templates/skills/validation/cross-validate/cli/validate.ts +54 -0
  540. package/templates/skills/validation/eslint/SKILL.md +65 -0
  541. package/templates/skills/validation/eslint/cli/execute.ts +413 -0
  542. package/templates/skills/validation/eslint/cli/index.ts +102 -0
  543. package/templates/skills/validation/eslint/cli/types.ts +48 -0
  544. package/templates/skills/validation/eslint/cli/validate.ts +43 -0
  545. package/templates/skills/validation/project-inventory/SKILL.md +166 -0
  546. package/templates/skills/validation/project-inventory/cli/project-inventory/execute.ts +397 -0
  547. package/templates/skills/validation/project-inventory/cli/project-inventory/index.ts +80 -0
  548. package/templates/skills/validation/project-inventory/cli/project-inventory/types.ts +89 -0
  549. package/templates/skills/validation/project-inventory/cli/project-inventory/validate.ts +35 -0
  550. package/templates/skills/validation/readiness-report/SKILL.md +109 -0
  551. package/templates/skills/validation/readiness-report/cli/execute.ts +236 -0
  552. package/templates/skills/validation/readiness-report/cli/index.ts +234 -0
  553. package/templates/skills/validation/readiness-report/cli/types.ts +61 -0
  554. package/templates/skills/validation/readiness-report/cli/validate.ts +54 -0
  555. package/templates/skills/validation/roslyn/SKILL.md +103 -0
  556. package/templates/skills/validation/roslyn/cli/execute.ts +616 -0
  557. package/templates/skills/validation/roslyn/cli/index.ts +86 -0
  558. package/templates/skills/validation/roslyn/cli/types.ts +50 -0
  559. package/templates/skills/validation/roslyn/cli/validate.ts +43 -0
  560. package/.documentation/apex.html +0 -649
  561. package/dist/mcp-entry.mjs +0 -68888
  562. package/dist/mcp-entry.mjs.map +0 -1
  563. package/scripts/extract-api-endpoints.ts +0 -325
  564. package/scripts/extract-business-rules.ts +0 -440
  565. package/scripts/generate-doc-with-mock-ui.ts +0 -804
  566. package/templates/agents/ba-reader.md +0 -386
  567. package/templates/agents/ba-writer.md +0 -810
  568. package/templates/agents/efcore/migration.md +0 -204
  569. package/templates/agents/efcore/rebase-snapshot.md +0 -202
  570. package/templates/agents/efcore/squash.md +0 -269
  571. package/templates/agents/gitflow/abort.md +0 -45
  572. package/templates/agents/gitflow/cleanup.md +0 -107
  573. package/templates/agents/gitflow/commit.md +0 -236
  574. package/templates/agents/gitflow/exec.md +0 -48
  575. package/templates/agents/gitflow/finish.md +0 -146
  576. package/templates/agents/gitflow/init-clone.md +0 -199
  577. package/templates/agents/gitflow/init-detect.md +0 -137
  578. package/templates/agents/gitflow/init-validate.md +0 -225
  579. package/templates/agents/gitflow/init.md +0 -509
  580. package/templates/agents/gitflow/merge.md +0 -145
  581. package/templates/agents/gitflow/plan.md +0 -42
  582. package/templates/agents/gitflow/pr.md +0 -191
  583. package/templates/agents/gitflow/review.md +0 -49
  584. package/templates/agents/gitflow/start.md +0 -147
  585. package/templates/agents/gitflow/status.md +0 -95
  586. package/templates/agents/mcp-healthcheck.md +0 -163
  587. package/templates/hooks/docs-drift-check.md +0 -96
  588. package/templates/hooks/ef-migration-check.md +0 -139
  589. package/templates/hooks/mcp-check.md +0 -64
  590. package/templates/hooks/ralph-mcp-logger.sh +0 -46
  591. package/templates/mcp-scaffolding/component.tsx.hbs +0 -318
  592. package/templates/mcp-scaffolding/controller.cs.hbs +0 -118
  593. package/templates/mcp-scaffolding/entity-extension.cs.hbs +0 -239
  594. package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +0 -117
  595. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +0 -133
  596. package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +0 -261
  597. package/templates/mcp-scaffolding/service-extension.cs.hbs +0 -53
  598. package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +0 -436
  599. package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +0 -239
  600. package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +0 -441
  601. package/templates/mcp-scaffolding/tests/security.test.cs.hbs +0 -442
  602. package/templates/mcp-scaffolding/tests/service.test.cs.hbs +0 -402
  603. package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +0 -428
  604. package/templates/skills/_resources/config-safety.md +0 -61
  605. package/templates/skills/_resources/context-digest-template.md +0 -53
  606. package/templates/skills/_resources/doc-context-cache.md +0 -60
  607. package/templates/skills/_resources/docs-manifest-schema.md +0 -155
  608. package/templates/skills/_resources/formatting-guide.md +0 -124
  609. package/templates/skills/_resources/mcp-validate-documentation-spec.md +0 -181
  610. package/templates/skills/_shared.md +0 -228
  611. package/templates/skills/admin/SKILL.md +0 -48
  612. package/templates/skills/ai-prompt/SKILL.md +0 -171
  613. package/templates/skills/ai-prompt/references/ai-agent-modes.md +0 -89
  614. package/templates/skills/ai-prompt/references/eval-framework.md +0 -129
  615. package/templates/skills/ai-prompt/steps/step-00-init.md +0 -47
  616. package/templates/skills/ai-prompt/steps/step-01-implementation.md +0 -122
  617. package/templates/skills/apex/SKILL.md +0 -234
  618. package/templates/skills/apex/_shared.md +0 -197
  619. package/templates/skills/apex/references/analysis-methods.md +0 -178
  620. package/templates/skills/apex/references/challenge-questions.md +0 -359
  621. package/templates/skills/apex/references/checks/architecture-checks.sh +0 -154
  622. package/templates/skills/apex/references/checks/backend-checks.sh +0 -208
  623. package/templates/skills/apex/references/checks/frontend-checks.sh +0 -560
  624. package/templates/skills/apex/references/checks/infrastructure-checks.sh +0 -292
  625. package/templates/skills/apex/references/checks/security-checks.sh +0 -153
  626. package/templates/skills/apex/references/checks/seed-checks.sh +0 -610
  627. package/templates/skills/apex/references/code-generation.md +0 -412
  628. package/templates/skills/apex/references/core-seed-data.md +0 -1502
  629. package/templates/skills/apex/references/domain-events-pattern.md +0 -45
  630. package/templates/skills/apex/references/entity-hooks-pattern.md +0 -68
  631. package/templates/skills/apex/references/error-classification.md +0 -168
  632. package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +0 -91
  633. package/templates/skills/apex/references/licensing-enforcement.md +0 -52
  634. package/templates/skills/apex/references/parallel-execution.md +0 -187
  635. package/templates/skills/apex/references/person-extension-pattern.md +0 -619
  636. package/templates/skills/apex/references/post-checks.md +0 -162
  637. package/templates/skills/apex/references/smartstack-api.md +0 -591
  638. package/templates/skills/apex/references/smartstack-frontend-compliance.md +0 -616
  639. package/templates/skills/apex/references/smartstack-frontend.md +0 -442
  640. package/templates/skills/apex/references/smartstack-layers.md +0 -551
  641. package/templates/skills/apex/steps/step-00-init.md +0 -405
  642. package/templates/skills/apex/steps/step-01-analyze.md +0 -210
  643. package/templates/skills/apex/steps/step-02-plan.md +0 -303
  644. package/templates/skills/apex/steps/step-03-execute.md +0 -194
  645. package/templates/skills/apex/steps/step-03a-layer0-domain.md +0 -144
  646. package/templates/skills/apex/steps/step-03b-layer1-seed.md +0 -339
  647. package/templates/skills/apex/steps/step-03c-layer2-backend.md +0 -401
  648. package/templates/skills/apex/steps/step-03d-layer3-frontend.md +0 -562
  649. package/templates/skills/apex/steps/step-03e-layer4-devdata.md +0 -46
  650. package/templates/skills/apex/steps/step-04-examine.md +0 -404
  651. package/templates/skills/apex/steps/step-05-deep-review.md +0 -140
  652. package/templates/skills/apex/steps/step-06-resolve.md +0 -120
  653. package/templates/skills/apex/steps/step-07-tests.md +0 -271
  654. package/templates/skills/apex/steps/step-08-run-tests.md +0 -135
  655. package/templates/skills/apex-verify/SKILL.md +0 -110
  656. package/templates/skills/apex-verify/references/audit-rules.md +0 -50
  657. package/templates/skills/apex-verify/steps/step-00-init.md +0 -119
  658. package/templates/skills/apex-verify/steps/step-01-nav-audit.md +0 -96
  659. package/templates/skills/apex-verify/steps/step-02-crud-audit.md +0 -127
  660. package/templates/skills/apex-verify/steps/step-03-perm-audit.md +0 -119
  661. package/templates/skills/apex-verify/steps/step-04-route-audit.md +0 -98
  662. package/templates/skills/apex-verify/steps/step-05-report.md +0 -110
  663. package/templates/skills/application/SKILL.md +0 -241
  664. package/templates/skills/application/references/application-roles-template.md +0 -228
  665. package/templates/skills/application/references/backend-controller-hierarchy.md +0 -68
  666. package/templates/skills/application/references/backend-entity-seeding.md +0 -73
  667. package/templates/skills/application/references/backend-seeding-and-dto-output.md +0 -83
  668. package/templates/skills/application/references/backend-table-prefix-mapping.md +0 -80
  669. package/templates/skills/application/references/backend-verification.md +0 -88
  670. package/templates/skills/application/references/contexts-cheatsheet.md +0 -86
  671. package/templates/skills/application/references/extensions-system.md +0 -158
  672. package/templates/skills/application/references/frontend-i18n-and-output.md +0 -67
  673. package/templates/skills/application/references/frontend-route-naming.md +0 -123
  674. package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +0 -91
  675. package/templates/skills/application/references/frontend-verification.md +0 -158
  676. package/templates/skills/application/references/init-parameter-detection.md +0 -121
  677. package/templates/skills/application/references/migration-checklist-troubleshooting.md +0 -88
  678. package/templates/skills/application/references/nav-fallback-procedure.md +0 -198
  679. package/templates/skills/application/references/provider-template.md +0 -191
  680. package/templates/skills/application/references/roles-client-project-handling.md +0 -55
  681. package/templates/skills/application/references/roles-fallback-procedure.md +0 -144
  682. package/templates/skills/application/references/smartstack-provider.md +0 -118
  683. package/templates/skills/application/references/test-coverage-requirements.md +0 -213
  684. package/templates/skills/application/references/test-frontend.md +0 -73
  685. package/templates/skills/application/references/test-prerequisites.md +0 -72
  686. package/templates/skills/application/references/themes-db-driven.md +0 -484
  687. package/templates/skills/application/steps/step-00-init.md +0 -130
  688. package/templates/skills/application/steps/step-01-navigation.md +0 -170
  689. package/templates/skills/application/steps/step-02-permissions.md +0 -196
  690. package/templates/skills/application/steps/step-03-roles.md +0 -182
  691. package/templates/skills/application/steps/step-03b-provider.md +0 -134
  692. package/templates/skills/application/steps/step-04-backend.md +0 -174
  693. package/templates/skills/application/steps/step-05-frontend.md +0 -189
  694. package/templates/skills/application/steps/step-06-migration.md +0 -189
  695. package/templates/skills/application/steps/step-07-tests.md +0 -356
  696. package/templates/skills/application/steps/step-08-documentation.md +0 -137
  697. package/templates/skills/application/templates-backend.md +0 -463
  698. package/templates/skills/application/templates-frontend.md +0 -950
  699. package/templates/skills/application/templates-i18n.md +0 -520
  700. package/templates/skills/application/templates-seed.md +0 -1110
  701. package/templates/skills/audit-route/SKILL.md +0 -107
  702. package/templates/skills/audit-route/references/routing-pattern.md +0 -131
  703. package/templates/skills/audit-route/steps/step-00-init.md +0 -128
  704. package/templates/skills/audit-route/steps/step-01-inventory.md +0 -157
  705. package/templates/skills/audit-route/steps/step-02-conformity.md +0 -193
  706. package/templates/skills/audit-route/steps/step-03-report.md +0 -201
  707. package/templates/skills/business-analyse/SKILL.md +0 -252
  708. package/templates/skills/business-analyse/_shared.md +0 -276
  709. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +0 -560
  710. package/templates/skills/business-analyse/questionnaire/01-context.md +0 -43
  711. package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +0 -111
  712. package/templates/skills/business-analyse/questionnaire/03-data-ui.md +0 -125
  713. package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +0 -6
  714. package/templates/skills/business-analyse/questionnaire/05-cross-module.md +0 -69
  715. package/templates/skills/business-analyse/questionnaire.md +0 -156
  716. package/templates/skills/business-analyse/react/application-viewer.md +0 -242
  717. package/templates/skills/business-analyse/react/components.md +0 -532
  718. package/templates/skills/business-analyse/react/i18n-template.md +0 -306
  719. package/templates/skills/business-analyse/react/schema.md +0 -831
  720. package/templates/skills/business-analyse/references/03-json-schemas.md +0 -221
  721. package/templates/skills/business-analyse/references/03-post-check-validation.md +0 -208
  722. package/templates/skills/business-analyse/references/03-smartstack-entity-guards.md +0 -32
  723. package/templates/skills/business-analyse/references/04-cross-module-validation.md +0 -95
  724. package/templates/skills/business-analyse/references/04-file-allocation.md +0 -162
  725. package/templates/skills/business-analyse/references/04-naming-audit-checks.md +0 -174
  726. package/templates/skills/business-analyse/references/04-semantic-validation-matrix.md +0 -118
  727. package/templates/skills/business-analyse/references/acceptance-criteria.md +0 -164
  728. package/templates/skills/business-analyse/references/analysis-semantic-checks.md +0 -190
  729. package/templates/skills/business-analyse/references/canonical-json-formats.md +0 -204
  730. package/templates/skills/business-analyse/references/compilation-structure-cards.md +0 -297
  731. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +0 -124
  732. package/templates/skills/business-analyse/references/detection-strategies.md +0 -424
  733. package/templates/skills/business-analyse/references/domain-research-playbook.md +0 -234
  734. package/templates/skills/business-analyse/references/entity-architecture-decision.md +0 -240
  735. package/templates/skills/business-analyse/references/entity-sourcing-presentation.md +0 -166
  736. package/templates/skills/business-analyse/references/init-resume-logic.md +0 -70
  737. package/templates/skills/business-analyse/references/init-schema-deployment.md +0 -65
  738. package/templates/skills/business-analyse/references/module-completeness-challenge.md +0 -174
  739. package/templates/skills/business-analyse/references/multi-app-detection.md +0 -149
  740. package/templates/skills/business-analyse/references/naming-conventions.md +0 -253
  741. package/templates/skills/business-analyse/references/portal-classification.md +0 -52
  742. package/templates/skills/business-analyse/references/robustness-checks.md +0 -426
  743. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +0 -85
  744. package/templates/skills/business-analyse/references/ui-resource-cards.md +0 -259
  745. package/templates/skills/business-analyse/references/validation-checklist.md +0 -378
  746. package/templates/skills/business-analyse/schemas/application-schema.json +0 -481
  747. package/templates/skills/business-analyse/schemas/feature-schema.json +0 -53
  748. package/templates/skills/business-analyse/schemas/index-schema.json +0 -47
  749. package/templates/skills/business-analyse/schemas/project-schema.json +0 -481
  750. package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +0 -245
  751. package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +0 -80
  752. package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +0 -82
  753. package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +0 -70
  754. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +0 -567
  755. package/templates/skills/business-analyse/schemas/sections/validation-schema.json +0 -93
  756. package/templates/skills/business-analyse/schemas/shared/common-defs.json +0 -227
  757. package/templates/skills/business-analyse/steps/step-00-init.md +0 -463
  758. package/templates/skills/business-analyse/steps/step-01-cadrage.md +0 -901
  759. package/templates/skills/business-analyse/steps/step-02-structure.md +0 -315
  760. package/templates/skills/business-analyse/steps/step-03-specify.md +0 -986
  761. package/templates/skills/business-analyse/steps/step-04-consolidate.md +0 -928
  762. package/templates/skills/business-analyse/templates/tpl-frd.md +0 -168
  763. package/templates/skills/business-analyse/templates/tpl-handoff.md +0 -189
  764. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +0 -59
  765. package/templates/skills/business-analyse/templates-frd.md +0 -476
  766. package/templates/skills/business-analyse/templates-react.md +0 -574
  767. package/templates/skills/business-analyse-design/SKILL.md +0 -101
  768. package/templates/skills/business-analyse-design/references/screens-post-check.md +0 -221
  769. package/templates/skills/business-analyse-design/references/screens-type-mapping.md +0 -138
  770. package/templates/skills/business-analyse-design/references/smartcomponents-templates.md +0 -225
  771. package/templates/skills/business-analyse-design/references/spec-auto-inference.md +0 -117
  772. package/templates/skills/business-analyse-design/steps/step-01-screens.md +0 -108
  773. package/templates/skills/business-analyse-design/steps/step-02-wireframes.md +0 -155
  774. package/templates/skills/business-analyse-design/steps/step-03-navigation.md +0 -189
  775. package/templates/skills/business-analyse-develop/SKILL.md +0 -250
  776. package/templates/skills/business-analyse-develop/references/category-completeness.md +0 -326
  777. package/templates/skills/business-analyse-develop/references/category-rules.md +0 -109
  778. package/templates/skills/business-analyse-develop/references/compact-loop.md +0 -478
  779. package/templates/skills/business-analyse-develop/references/handoff-quality-gate.md +0 -132
  780. package/templates/skills/business-analyse-develop/references/init-resume-recovery.md +0 -183
  781. package/templates/skills/business-analyse-develop/references/module-transition.md +0 -246
  782. package/templates/skills/business-analyse-develop/references/multi-module-queue.md +0 -171
  783. package/templates/skills/business-analyse-develop/references/parallel-execution.md +0 -246
  784. package/templates/skills/business-analyse-develop/references/prd-v3-transformation.md +0 -326
  785. package/templates/skills/business-analyse-develop/references/quality-gates.md +0 -160
  786. package/templates/skills/business-analyse-develop/references/report-reconciliation.md +0 -140
  787. package/templates/skills/business-analyse-develop/references/report-template.md +0 -142
  788. package/templates/skills/business-analyse-develop/references/section-splitting.md +0 -439
  789. package/templates/skills/business-analyse-develop/references/task-transform-legacy.md +0 -256
  790. package/templates/skills/business-analyse-develop/references/team-orchestration.md +0 -547
  791. package/templates/skills/business-analyse-develop/steps/step-00-init.md +0 -242
  792. package/templates/skills/business-analyse-develop/steps/step-01-task.md +0 -182
  793. package/templates/skills/business-analyse-develop/steps/step-01-v4-execute.md +0 -139
  794. package/templates/skills/business-analyse-develop/steps/step-02-execute.md +0 -216
  795. package/templates/skills/business-analyse-develop/steps/step-02-v4-verify.md +0 -176
  796. package/templates/skills/business-analyse-develop/steps/step-03-commit.md +0 -107
  797. package/templates/skills/business-analyse-develop/steps/step-04-check.md +0 -419
  798. package/templates/skills/business-analyse-develop/steps/step-05-report.md +0 -137
  799. package/templates/skills/business-analyse-handoff/SKILL.md +0 -101
  800. package/templates/skills/business-analyse-handoff/references/acceptance-criteria.md +0 -318
  801. package/templates/skills/business-analyse-handoff/references/agent-handoff-transform-prompt.md +0 -211
  802. package/templates/skills/business-analyse-handoff/references/context-isolation-pattern.md +0 -47
  803. package/templates/skills/business-analyse-handoff/references/entity-canonicalization.md +0 -158
  804. package/templates/skills/business-analyse-handoff/references/entity-domain-mapping.md +0 -115
  805. package/templates/skills/business-analyse-handoff/references/handoff-file-inventory.md +0 -49
  806. package/templates/skills/business-analyse-handoff/references/handoff-file-templates.md +0 -197
  807. package/templates/skills/business-analyse-handoff/references/handoff-global-validation.md +0 -142
  808. package/templates/skills/business-analyse-handoff/references/handoff-mappings.md +0 -108
  809. package/templates/skills/business-analyse-handoff/references/handoff-seeddata-generation.md +0 -314
  810. package/templates/skills/business-analyse-handoff/references/prd-generation.md +0 -362
  811. package/templates/skills/business-analyse-handoff/references/prd-validation-checks.md +0 -125
  812. package/templates/skills/business-analyse-handoff/references/project-index-update.md +0 -98
  813. package/templates/skills/business-analyse-handoff/references/readiness-scoring.md +0 -95
  814. package/templates/skills/business-analyse-handoff/schemas/handoff-schema.json +0 -95
  815. package/templates/skills/business-analyse-handoff/steps/step-00-validate.md +0 -158
  816. package/templates/skills/business-analyse-handoff/steps/step-01-transform.md +0 -85
  817. package/templates/skills/business-analyse-handoff/steps/step-02-export.md +0 -169
  818. package/templates/skills/business-analyse-handoff/templates/tpl-progress.md +0 -172
  819. package/templates/skills/business-analyse-html/SKILL.md +0 -89
  820. package/templates/skills/business-analyse-html/html/ba-interactive.html +0 -6134
  821. package/templates/skills/business-analyse-html/html/build-html.js +0 -137
  822. package/templates/skills/business-analyse-html/html/src/partials/cadrage-context.html +0 -34
  823. package/templates/skills/business-analyse-html/html/src/partials/cadrage-scope.html +0 -27
  824. package/templates/skills/business-analyse-html/html/src/partials/cadrage-stakeholders.html +0 -55
  825. package/templates/skills/business-analyse-html/html/src/partials/cadrage-success.html +0 -34
  826. package/templates/skills/business-analyse-html/html/src/partials/consol-datamodel.html +0 -8
  827. package/templates/skills/business-analyse-html/html/src/partials/consol-flows.html +0 -29
  828. package/templates/skills/business-analyse-html/html/src/partials/consol-interactions.html +0 -8
  829. package/templates/skills/business-analyse-html/html/src/partials/consol-permissions.html +0 -8
  830. package/templates/skills/business-analyse-html/html/src/partials/decomp-dependencies.html +0 -38
  831. package/templates/skills/business-analyse-html/html/src/partials/decomp-modules.html +0 -43
  832. package/templates/skills/business-analyse-html/html/src/partials/handoff-summary.html +0 -24
  833. package/templates/skills/business-analyse-html/html/src/partials/module-spec-container.html +0 -4
  834. package/templates/skills/business-analyse-html/html/src/scripts/01-data-init.js +0 -313
  835. package/templates/skills/business-analyse-html/html/src/scripts/02-navigation.js +0 -316
  836. package/templates/skills/business-analyse-html/html/src/scripts/03-render-cadrage.js +0 -162
  837. package/templates/skills/business-analyse-html/html/src/scripts/04-render-modules.js +0 -203
  838. package/templates/skills/business-analyse-html/html/src/scripts/05-render-specs.js +0 -866
  839. package/templates/skills/business-analyse-html/html/src/scripts/06-render-consolidation.js +0 -196
  840. package/templates/skills/business-analyse-html/html/src/scripts/06-render-mockups.js +0 -564
  841. package/templates/skills/business-analyse-html/html/src/scripts/07-render-handoff.js +0 -108
  842. package/templates/skills/business-analyse-html/html/src/scripts/08-editing.js +0 -137
  843. package/templates/skills/business-analyse-html/html/src/scripts/09-export.js +0 -138
  844. package/templates/skills/business-analyse-html/html/src/scripts/10-comments.js +0 -221
  845. package/templates/skills/business-analyse-html/html/src/scripts/11-review-panel.js +0 -167
  846. package/templates/skills/business-analyse-html/html/src/scripts/12-render-diagrams.js +0 -162
  847. package/templates/skills/business-analyse-html/html/src/styles/01-variables.css +0 -38
  848. package/templates/skills/business-analyse-html/html/src/styles/02-layout.css +0 -216
  849. package/templates/skills/business-analyse-html/html/src/styles/03-navigation.css +0 -120
  850. package/templates/skills/business-analyse-html/html/src/styles/04-cards.css +0 -194
  851. package/templates/skills/business-analyse-html/html/src/styles/05-modules.css +0 -518
  852. package/templates/skills/business-analyse-html/html/src/styles/06-wireframes.css +0 -263
  853. package/templates/skills/business-analyse-html/html/src/styles/07-comments.css +0 -184
  854. package/templates/skills/business-analyse-html/html/src/styles/08-review-panel.css +0 -241
  855. package/templates/skills/business-analyse-html/html/src/styles/09-mockups-html.css +0 -220
  856. package/templates/skills/business-analyse-html/html/src/styles/10-diagrams.css +0 -73
  857. package/templates/skills/business-analyse-html/html/src/template.html +0 -449
  858. package/templates/skills/business-analyse-html/references/02-embedded-artifacts-building.md +0 -144
  859. package/templates/skills/business-analyse-html/references/02-feature-data-building.md +0 -143
  860. package/templates/skills/business-analyse-html/references/02-mapping-tables.md +0 -442
  861. package/templates/skills/business-analyse-html/references/02-normalization-helpers.md +0 -139
  862. package/templates/skills/business-analyse-html/references/02-screen-format-detection.md +0 -283
  863. package/templates/skills/business-analyse-html/references/02-self-check-validation.md +0 -199
  864. package/templates/skills/business-analyse-html/references/data-build.md +0 -215
  865. package/templates/skills/business-analyse-html/references/data-mapping.md +0 -452
  866. package/templates/skills/business-analyse-html/references/output-modes.md +0 -119
  867. package/templates/skills/business-analyse-html/references/wireframe-svg-style-guide.md +0 -335
  868. package/templates/skills/business-analyse-html/steps/step-01-collect.md +0 -140
  869. package/templates/skills/business-analyse-html/steps/step-02-build-data.md +0 -76
  870. package/templates/skills/business-analyse-html/steps/step-03-render.md +0 -95
  871. package/templates/skills/business-analyse-html/steps/step-04-verify.md +0 -224
  872. package/templates/skills/business-analyse-quick/SKILL.md +0 -807
  873. package/templates/skills/business-analyse-quick/references/domain-heuristics.md +0 -172
  874. package/templates/skills/business-analyse-quick/references/prd-schema.md +0 -268
  875. package/templates/skills/business-analyse-review/SKILL.md +0 -71
  876. package/templates/skills/business-analyse-review/references/review-data-mapping.md +0 -367
  877. package/templates/skills/business-analyse-review/steps/step-00-init.md +0 -111
  878. package/templates/skills/business-analyse-review/steps/step-01-apply.md +0 -304
  879. package/templates/skills/business-analyse-status/SKILL.md +0 -136
  880. package/templates/skills/cc-agent/SKILL.md +0 -129
  881. package/templates/skills/cc-agent/references/agent-behavior-patterns.md +0 -95
  882. package/templates/skills/cc-agent/references/agent-frontmatter.md +0 -213
  883. package/templates/skills/cc-agent/references/permission-modes.md +0 -102
  884. package/templates/skills/cc-agent/references/tools-reference.md +0 -144
  885. package/templates/skills/cc-agent/steps/step-00-init.md +0 -134
  886. package/templates/skills/cc-agent/steps/step-01-design.md +0 -186
  887. package/templates/skills/cc-agent/steps/step-02-generate.md +0 -131
  888. package/templates/skills/cc-agent/steps/step-03-validate.md +0 -130
  889. package/templates/skills/cc-agent/templates/agent-categorized.md +0 -67
  890. package/templates/skills/cc-agent/templates/agent-standalone.md +0 -56
  891. package/templates/skills/cc-agent/templates/agent-with-skills.md +0 -94
  892. package/templates/skills/cc-audit/SKILL.md +0 -108
  893. package/templates/skills/cc-audit/references/agent-checklist.md +0 -91
  894. package/templates/skills/cc-audit/references/hook-checklist.md +0 -110
  895. package/templates/skills/cc-audit/references/skill-checklist.md +0 -70
  896. package/templates/skills/cc-audit/steps/step-00-init.md +0 -98
  897. package/templates/skills/cc-audit/steps/step-01-scan.md +0 -142
  898. package/templates/skills/cc-audit/steps/step-02-analyze.md +0 -158
  899. package/templates/skills/cc-audit/steps/step-03-report.md +0 -142
  900. package/templates/skills/cc-skill/SKILL.md +0 -134
  901. package/templates/skills/cc-skill/references/best-practices.md +0 -167
  902. package/templates/skills/cc-skill/references/frontmatter-reference.md +0 -182
  903. package/templates/skills/cc-skill/references/skill-patterns.md +0 -199
  904. package/templates/skills/cc-skill/steps/step-00-init.md +0 -119
  905. package/templates/skills/cc-skill/steps/step-01-design.md +0 -199
  906. package/templates/skills/cc-skill/steps/step-02-generate.md +0 -145
  907. package/templates/skills/cc-skill/steps/step-03-steps.md +0 -151
  908. package/templates/skills/cc-skill/steps/step-04-validate.md +0 -124
  909. package/templates/skills/cc-skill/templates/skill-forked.md +0 -85
  910. package/templates/skills/cc-skill/templates/skill-progressive.md +0 -102
  911. package/templates/skills/cc-skill/templates/skill-simple.md +0 -75
  912. package/templates/skills/cc-skill/templates/step-template.md +0 -82
  913. package/templates/skills/controller/SKILL.md +0 -162
  914. package/templates/skills/controller/postman-templates.md +0 -614
  915. package/templates/skills/controller/references/controller-code-templates.md +0 -162
  916. package/templates/skills/controller/references/mcp-scaffold-workflow.md +0 -237
  917. package/templates/skills/controller/references/permission-sync-templates.md +0 -149
  918. package/templates/skills/controller/steps/step-00-init.md +0 -193
  919. package/templates/skills/controller/steps/step-01-analyze.md +0 -152
  920. package/templates/skills/controller/steps/step-02-plan.md +0 -176
  921. package/templates/skills/controller/steps/step-03-generate.md +0 -189
  922. package/templates/skills/controller/steps/step-04-perms.md +0 -80
  923. package/templates/skills/controller/steps/step-05-validate.md +0 -107
  924. package/templates/skills/controller/templates.md +0 -1556
  925. package/templates/skills/debug/SKILL.md +0 -70
  926. package/templates/skills/debug/references/team-protocol.md +0 -232
  927. package/templates/skills/debug/steps/step-00-init.md +0 -57
  928. package/templates/skills/debug/steps/step-01-analyze.md +0 -219
  929. package/templates/skills/debug/steps/step-02-resolve.md +0 -85
  930. package/templates/skills/efcore/references/database-operations.md +0 -66
  931. package/templates/skills/efcore/references/reset-operations.md +0 -81
  932. package/templates/skills/efcore/references/seed-methods.md +0 -86
  933. package/templates/skills/efcore/references/shared-init-functions.md +0 -250
  934. package/templates/skills/efcore/references/sql-objects-injection.md +0 -19
  935. package/templates/skills/efcore/references/troubleshooting.md +0 -81
  936. package/templates/skills/efcore/references/zero-downtime-patterns.md +0 -229
  937. package/templates/skills/explore/SKILL.md +0 -98
  938. package/templates/skills/feature-full/SKILL.md +0 -111
  939. package/templates/skills/feature-full/steps/step-00-init.md +0 -57
  940. package/templates/skills/feature-full/steps/step-01-implementation.md +0 -133
  941. package/templates/skills/gitflow/phases/abort.md +0 -189
  942. package/templates/skills/gitflow/phases/cleanup.md +0 -264
  943. package/templates/skills/gitflow/phases/status.md +0 -192
  944. package/templates/skills/gitflow/references/commit-message-generation.md +0 -58
  945. package/templates/skills/gitflow/references/commit-migration-validation.md +0 -53
  946. package/templates/skills/gitflow/references/finish-cleanup.md +0 -55
  947. package/templates/skills/gitflow/references/finish-version-bumping.md +0 -45
  948. package/templates/skills/gitflow/references/init-config-template.md +0 -143
  949. package/templates/skills/gitflow/references/init-environment-detection.md +0 -41
  950. package/templates/skills/gitflow/references/init-name-normalization.md +0 -118
  951. package/templates/skills/gitflow/references/init-questions.md +0 -193
  952. package/templates/skills/gitflow/references/init-structure-creation.md +0 -75
  953. package/templates/skills/gitflow/references/init-version-detection.md +0 -23
  954. package/templates/skills/gitflow/references/init-workspace-detection.md +0 -43
  955. package/templates/skills/gitflow/references/merge-ci-status.md +0 -36
  956. package/templates/skills/gitflow/references/merge-execution.md +0 -62
  957. package/templates/skills/gitflow/references/merge-pr-context.md +0 -76
  958. package/templates/skills/gitflow/references/plan-template.md +0 -69
  959. package/templates/skills/gitflow/references/pr-build-checks.md +0 -60
  960. package/templates/skills/gitflow/references/pr-generation.md +0 -58
  961. package/templates/skills/gitflow/references/start-branch-normalization.md +0 -28
  962. package/templates/skills/gitflow/references/start-efcore-preflight.md +0 -70
  963. package/templates/skills/gitflow/references/start-local-config.md +0 -113
  964. package/templates/skills/gitflow/references/start-worktree-creation.md +0 -50
  965. package/templates/skills/gitflow/references/sync-push-verify.md +0 -44
  966. package/templates/skills/gitflow/references/sync-rebase-conflicts.md +0 -38
  967. package/templates/skills/gitflow/steps/step-commit.md +0 -199
  968. package/templates/skills/gitflow/steps/step-finish.md +0 -147
  969. package/templates/skills/gitflow/steps/step-init.md +0 -230
  970. package/templates/skills/gitflow/steps/step-merge.md +0 -85
  971. package/templates/skills/gitflow/steps/step-plan.md +0 -151
  972. package/templates/skills/gitflow/steps/step-pr.md +0 -247
  973. package/templates/skills/gitflow/steps/step-start.md +0 -195
  974. package/templates/skills/gitflow/steps/step-sync.md +0 -161
  975. package/templates/skills/gitflow/templates/config.json +0 -72
  976. package/templates/skills/mcp/SKILL.md +0 -62
  977. package/templates/skills/mcp/steps/step-01-healthcheck.md +0 -108
  978. package/templates/skills/mcp/steps/step-02-tools.md +0 -73
  979. package/templates/skills/migrate/SKILL.md +0 -312
  980. package/templates/skills/migrate/references/v3.34-to-v3.46.md +0 -289
  981. package/templates/skills/notification/SKILL.md +0 -173
  982. package/templates/skills/refactor/SKILL.md +0 -56
  983. package/templates/skills/refactor/steps/step-01-discover.md +0 -60
  984. package/templates/skills/refactor/steps/step-02-execute.md +0 -67
  985. package/templates/skills/review-code/SKILL.md +0 -95
  986. package/templates/skills/review-code/references/clean-code-principles.md +0 -292
  987. package/templates/skills/review-code/references/code-quality-metrics.md +0 -174
  988. package/templates/skills/review-code/references/feedback-patterns.md +0 -149
  989. package/templates/skills/review-code/references/owasp-api-top10.md +0 -243
  990. package/templates/skills/review-code/references/security-checklist.md +0 -212
  991. package/templates/skills/review-code/references/smartstack-conventions.md +0 -568
  992. package/templates/skills/review-code/steps/step-01-smartstack.md +0 -96
  993. package/templates/skills/review-code/steps/step-02-detailed-review.md +0 -80
  994. package/templates/skills/review-code/steps/step-03-react.md +0 -44
  995. package/templates/skills/sketch/SKILL.md +0 -34
  996. package/templates/skills/ui-components/accessibility.md +0 -170
  997. package/templates/skills/ui-components/patterns/dashboard-chart.md +0 -327
  998. package/templates/skills/ui-components/patterns/data-table.md +0 -175
  999. package/templates/skills/ui-components/patterns/entity-card.md +0 -77
  1000. package/templates/skills/ui-components/patterns/grid-layout.md +0 -91
  1001. package/templates/skills/ui-components/patterns/kanban.md +0 -43
  1002. package/templates/skills/ui-components/references/component-catalog.md +0 -82
  1003. package/templates/skills/ui-components/responsive-guidelines.md +0 -278
  1004. package/templates/skills/ui-components/style-guide.md +0 -113
  1005. package/templates/skills/validate/SKILL.md +0 -181
  1006. package/templates/skills/workflow/SKILL.md +0 -196
  1007. package/templates/skills/workflow/steps/step-00-init.md +0 -57
  1008. package/templates/skills/workflow/steps/step-01-implementation.md +0 -84
@@ -1,1556 +0,0 @@
1
- # SmartStack Controller Templates
2
-
3
- > **⚠️ OBSOLETE - DO NOT USE THESE TEMPLATES MANUALLY**
4
- >
5
- > **The `/controller` skill now uses the MCP `scaffold_extension` tool to generate controllers.**
6
- > These templates are kept for reference only. All controller generation MUST go through the MCP to ensure:
7
- > - ✅ `[NavRoute]` attribute is included for frontend/backend sync
8
- > - ✅ Permissions are correctly generated
9
- > - ✅ Consistency with SmartStack conventions
10
- >
11
- > **To generate a controller, use:** `/controller` skill which calls MCP `scaffold_extension` automatically.
12
- >
13
- > **If you modify these templates, they will NOT be used.** The MCP templates in `templates/mcp-scaffolding/controller.cs.hbs` are the source of truth.
14
-
15
- ---
16
-
17
- ## Template CRUD Controller (Standard)
18
-
19
- ```csharp
20
- // src/SmartStack.Api/Controllers/{Area}/{Module}Controller.cs
21
-
22
- using Microsoft.AspNetCore.Authorization;
23
- using Microsoft.AspNetCore.Mvc;
24
- using Microsoft.EntityFrameworkCore;
25
- using SmartStack.Application.Common.Authorization;
26
- using SmartStack.Application.Common.Interfaces;
27
- using SmartStack.Api.Authorization;
28
- using SmartStack.Domain.{DomainNamespace};
29
-
30
- namespace SmartStack.Api.Controllers.{Area};
31
-
32
- [ApiController]
33
- [NavRoute("{area}.{module}")]
34
- [Microsoft.AspNetCore.Authorization.Authorize]
35
- [Produces("application/json")]
36
- [Tags("{Module}")]
37
- public class {Module}Controller : ControllerBase
38
- {
39
- private readonly ISender _mediator; // MediatR — NOT IApplicationDbContext
40
- private readonly ICurrentUserService _currentUser;
41
- private readonly ILogger<{Module}Controller> _logger;
42
-
43
- public {Module}Controller(
44
- IApplicationDbContext context,
45
- ICurrentUserService currentUser,
46
- ILogger<{Module}Controller> logger)
47
- {
48
- _context = context;
49
- _currentUser = currentUser;
50
- _logger = logger;
51
- }
52
-
53
- #region GET - List with Pagination
54
-
55
- [HttpGet]
56
- [RequirePermission(Permissions.{PermissionClass}.View)]
57
- [ProducesResponseType(typeof(PaginatedResult<{Entity}ListDto>), StatusCodes.Status200OK)]
58
- public async Task<ActionResult<PaginatedResult<{Entity}ListDto>>> Get{Module}(
59
- [FromQuery] int page = 1,
60
- [FromQuery] int pageSize = 20,
61
- [FromQuery] string? search = null,
62
- CancellationToken cancellationToken = default)
63
- {
64
- var query = _context.{DbSet}.AsQueryable();
65
-
66
- // Search filter
67
- if (!string.IsNullOrWhiteSpace(search))
68
- {
69
- var searchLower = search.ToLower();
70
- query = query.Where(x =>
71
- x.Name.ToLower().Contains(searchLower) ||
72
- x.Description != null && x.Description.ToLower().Contains(searchLower));
73
- }
74
-
75
- var totalCount = await query.CountAsync(cancellationToken);
76
-
77
- var items = await query
78
- .OrderBy(x => x.Name)
79
- .Skip((page - 1) * pageSize)
80
- .Take(pageSize)
81
- .Select(x => new {Entity}ListDto(
82
- x.Id,
83
- x.Name,
84
- x.Description,
85
- x.IsActive,
86
- x.CreatedAt
87
- ))
88
- .ToListAsync(cancellationToken);
89
-
90
- _logger.LogInformation("User {User} retrieved {Count} {Module}",
91
- _currentUser.Email, items.Count, "{Module}");
92
-
93
- return Ok(new PaginatedResult<{Entity}ListDto>(items, totalCount, page, pageSize));
94
- }
95
-
96
- #endregion
97
-
98
- #region GET - Single by ID
99
-
100
- [HttpGet("{id:guid}")]
101
- [RequirePermission(Permissions.{PermissionClass}.View)]
102
- [ProducesResponseType(typeof({Entity}DetailDto), StatusCodes.Status200OK)]
103
- [ProducesResponseType(StatusCodes.Status404NotFound)]
104
- public async Task<ActionResult<{Entity}DetailDto>> Get{Entity}(
105
- Guid id,
106
- CancellationToken cancellationToken)
107
- {
108
- var entity = await _context.{DbSet}
109
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
110
-
111
- if (entity == null)
112
- return NotFound(new { message = "{Entity} not found" });
113
-
114
- return Ok(new {Entity}DetailDto(
115
- entity.Id,
116
- entity.Name,
117
- entity.Description,
118
- entity.IsActive,
119
- entity.CreatedAt,
120
- entity.UpdatedAt
121
- ));
122
- }
123
-
124
- #endregion
125
-
126
- #region POST - Create
127
-
128
- [HttpPost]
129
- [RequirePermission(Permissions.{PermissionClass}.Create)]
130
- [ProducesResponseType(typeof({Entity}DetailDto), StatusCodes.Status201Created)]
131
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
132
- [ProducesResponseType(StatusCodes.Status409Conflict)]
133
- public async Task<ActionResult<{Entity}DetailDto>> Create{Entity}(
134
- [FromBody] Create{Entity}Request request,
135
- CancellationToken cancellationToken)
136
- {
137
- // Check for duplicates
138
- var exists = await _context.{DbSet}
139
- .AnyAsync(x => x.Name == request.Name, cancellationToken);
140
-
141
- if (exists)
142
- return Conflict(new { message = "{Entity} with this name already exists" });
143
-
144
- var entity = {Entity}.Create(
145
- request.Name,
146
- request.Description
147
- );
148
-
149
- _context.{DbSet}.Add(entity);
150
- await _context.SaveChangesAsync(cancellationToken);
151
-
152
- _logger.LogInformation("User {User} created {Entity} {EntityId} ({Name})",
153
- _currentUser.Email, entity.Id, entity.Name);
154
-
155
- return CreatedAtAction(
156
- nameof(Get{Entity}),
157
- new { id = entity.Id },
158
- new {Entity}DetailDto(
159
- entity.Id,
160
- entity.Name,
161
- entity.Description,
162
- entity.IsActive,
163
- entity.CreatedAt,
164
- entity.UpdatedAt
165
- ));
166
- }
167
-
168
- #endregion
169
-
170
- #region PUT - Update
171
-
172
- [HttpPut("{id:guid}")]
173
- [RequirePermission(Permissions.{PermissionClass}.Update)]
174
- [ProducesResponseType(typeof({Entity}DetailDto), StatusCodes.Status200OK)]
175
- [ProducesResponseType(StatusCodes.Status404NotFound)]
176
- [ProducesResponseType(StatusCodes.Status409Conflict)]
177
- public async Task<ActionResult<{Entity}DetailDto>> Update{Entity}(
178
- Guid id,
179
- [FromBody] Update{Entity}Request request,
180
- CancellationToken cancellationToken)
181
- {
182
- var entity = await _context.{DbSet}
183
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
184
-
185
- if (entity == null)
186
- return NotFound(new { message = "{Entity} not found" });
187
-
188
- // Check for duplicate name (excluding current)
189
- if (!string.IsNullOrEmpty(request.Name))
190
- {
191
- var duplicate = await _context.{DbSet}
192
- .AnyAsync(x => x.Name == request.Name && x.Id != id, cancellationToken);
193
-
194
- if (duplicate)
195
- return Conflict(new { message = "{Entity} with this name already exists" });
196
- }
197
-
198
- entity.Update(
199
- request.Name ?? entity.Name,
200
- request.Description ?? entity.Description
201
- );
202
-
203
- await _context.SaveChangesAsync(cancellationToken);
204
-
205
- _logger.LogInformation("User {User} updated {Entity} {EntityId}",
206
- _currentUser.Email, entity.Id);
207
-
208
- return Ok(new {Entity}DetailDto(
209
- entity.Id,
210
- entity.Name,
211
- entity.Description,
212
- entity.IsActive,
213
- entity.CreatedAt,
214
- entity.UpdatedAt
215
- ));
216
- }
217
-
218
- #endregion
219
-
220
- #region PATCH - Activate/Deactivate
221
-
222
- [HttpPatch("{id:guid}/activate")]
223
- [RequirePermission(Permissions.{PermissionClass}.Update)]
224
- [ProducesResponseType(StatusCodes.Status204NoContent)]
225
- [ProducesResponseType(StatusCodes.Status404NotFound)]
226
- public async Task<IActionResult> Activate{Entity}(
227
- Guid id,
228
- CancellationToken cancellationToken)
229
- {
230
- var entity = await _context.{DbSet}
231
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
232
-
233
- if (entity == null)
234
- return NotFound(new { message = "{Entity} not found" });
235
-
236
- entity.Activate();
237
- await _context.SaveChangesAsync(cancellationToken);
238
-
239
- _logger.LogInformation("User {User} activated {Entity} {EntityId}",
240
- _currentUser.Email, entity.Id);
241
-
242
- return NoContent();
243
- }
244
-
245
- [HttpPatch("{id:guid}/deactivate")]
246
- [RequirePermission(Permissions.{PermissionClass}.Update)]
247
- [ProducesResponseType(StatusCodes.Status204NoContent)]
248
- [ProducesResponseType(StatusCodes.Status404NotFound)]
249
- public async Task<IActionResult> Deactivate{Entity}(
250
- Guid id,
251
- CancellationToken cancellationToken)
252
- {
253
- var entity = await _context.{DbSet}
254
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
255
-
256
- if (entity == null)
257
- return NotFound(new { message = "{Entity} not found" });
258
-
259
- entity.Deactivate();
260
- await _context.SaveChangesAsync(cancellationToken);
261
-
262
- _logger.LogWarning("User {User} deactivated {Entity} {EntityId}",
263
- _currentUser.Email, entity.Id);
264
-
265
- return NoContent();
266
- }
267
-
268
- #endregion
269
-
270
- #region DELETE
271
-
272
- [HttpDelete("{id:guid}")]
273
- [RequirePermission(Permissions.{PermissionClass}.Delete)]
274
- [ProducesResponseType(StatusCodes.Status204NoContent)]
275
- [ProducesResponseType(StatusCodes.Status404NotFound)]
276
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
277
- public async Task<IActionResult> Delete{Entity}(
278
- Guid id,
279
- CancellationToken cancellationToken)
280
- {
281
- var entity = await _context.{DbSet}
282
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
283
-
284
- if (entity == null)
285
- return NotFound(new { message = "{Entity} not found" });
286
-
287
- // Check for dependencies before deletion
288
- // var hasReferences = await _context.ChildEntities.AnyAsync(x => x.{Entity}Id == id, ct);
289
- // if (hasReferences)
290
- // return BadRequest(new { message = "Cannot delete: has dependent records" });
291
-
292
- _context.{DbSet}.Remove(entity);
293
- await _context.SaveChangesAsync(cancellationToken);
294
-
295
- _logger.LogWarning("User {User} deleted {Entity} {EntityId} ({Name})",
296
- _currentUser.Email, id, entity.Name);
297
-
298
- return NoContent();
299
- }
300
-
301
- #endregion
302
- }
303
-
304
- #region DTOs
305
-
306
- public record {Entity}ListDto(
307
- Guid Id,
308
- string Name,
309
- string? Description,
310
- bool IsActive,
311
- DateTime CreatedAt
312
- );
313
-
314
- public record {Entity}DetailDto(
315
- Guid Id,
316
- string Name,
317
- string? Description,
318
- bool IsActive,
319
- DateTime CreatedAt,
320
- DateTime? UpdatedAt
321
- );
322
-
323
- public record Create{Entity}Request(
324
- string Name,
325
- string? Description
326
- );
327
-
328
- public record Update{Entity}Request(
329
- string? Name,
330
- string? Description
331
- );
332
-
333
- public record PaginatedResult<T>(
334
- List<T> Items,
335
- int TotalCount,
336
- int Page,
337
- int PageSize
338
- )
339
- {
340
- public int TotalPages => (int)Math.Ceiling((double)TotalCount / PageSize);
341
- public bool HasPreviousPage => Page > 1;
342
- public bool HasNextPage => Page < TotalPages;
343
- }
344
-
345
- #endregion
346
- ```
347
-
348
- ---
349
-
350
- ## Template Auth Controller (Login/Logout)
351
-
352
- ```csharp
353
- // src/SmartStack.Api/Controllers/AuthController.cs
354
- // NOTE: This controller already exists - use as reference for auth patterns
355
-
356
- using Microsoft.AspNetCore.Authorization;
357
- using Microsoft.AspNetCore.Mvc;
358
- using Microsoft.EntityFrameworkCore;
359
- using Microsoft.Extensions.Options;
360
- using SmartStack.Application.Common.Interfaces;
361
- using SmartStack.Application.Common.Settings;
362
- using SmartStack.Domain.Platform.Administration.Users;
363
-
364
- namespace SmartStack.Api.Controllers;
365
-
366
- [ApiController]
367
- [Route("api/[controller]")]
368
- public class AuthController : ControllerBase
369
- {
370
- private readonly IApplicationDbContext _context;
371
- private readonly IPasswordService _passwordService;
372
- private readonly IJwtService _jwtService;
373
- private readonly IUserSessionService _sessionService;
374
- private readonly ISessionValidationService _sessionValidationService;
375
- private readonly SessionSettings _sessionSettings;
376
- private readonly ILogger<AuthController> _logger;
377
-
378
- // ... Constructor avec tous les services auth
379
-
380
- #region Login - LOGS CRITIQUES OBLIGATOIRES
381
-
382
- [HttpPost("login")]
383
- [AllowAnonymous]
384
- [ProducesResponseType(typeof(LoginResponse), StatusCodes.Status200OK)]
385
- [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status401Unauthorized)]
386
- public async Task<ActionResult<LoginResponse>> Login(
387
- [FromBody] LoginRequest request,
388
- CancellationToken cancellationToken)
389
- {
390
- var ipAddress = GetClientIpAddress();
391
- var userAgent = Request.Headers.UserAgent.ToString();
392
-
393
- var user = await _context.Users
394
- .Include(u => u.UserRoles)
395
- .ThenInclude(ur => ur.Role)
396
- .ThenInclude(r => r!.RolePermissions)
397
- .ThenInclude(rp => rp.Permission)
398
- .FirstOrDefaultAsync(u => u.Email == request.Email, cancellationToken);
399
-
400
- // ============================================
401
- // LOGS CRITIQUES - NE JAMAIS OMETTRE
402
- // ============================================
403
-
404
- if (user == null)
405
- {
406
- // WARNING: User not found (potential enumeration)
407
- _logger.LogWarning(
408
- "Login failed: User not found - {Email} from {IpAddress}",
409
- request.Email, ipAddress);
410
- return Unauthorized(new ErrorResponse("Identifiants invalides", "INVALID_CREDENTIALS"));
411
- }
412
-
413
- if (!user.IsActive)
414
- {
415
- // WARNING: Disabled account
416
- _logger.LogWarning(
417
- "Login failed: Account disabled - {Email} from {IpAddress}",
418
- request.Email, ipAddress);
419
- return Unauthorized(new ErrorResponse("Account disabled", "ACCOUNT_DISABLED"));
420
- }
421
-
422
- if (user.IsLocked)
423
- {
424
- // CRITICAL: Locked account attempt
425
- _logger.LogCritical(
426
- "SECURITY: Login attempt on locked account - User: {Email} (ID: {UserId}) from {IpAddress}",
427
- request.Email, user.Id, ipAddress);
428
- return Unauthorized(new ErrorResponse("Account locked", "ACCOUNT_LOCKED_BY_ADMIN"));
429
- }
430
-
431
- // Check brute force protection
432
- var recentFailedAttempts = await _context.UserSessions
433
- .Where(s => s.UserId == user.Id && !s.IsSuccessful && s.LoginAt > DateTime.UtcNow.AddMinutes(-15))
434
- .CountAsync(cancellationToken);
435
-
436
- if (recentFailedAttempts >= 5)
437
- {
438
- // CRITICAL: Too many failed attempts
439
- _logger.LogCritical(
440
- "SECURITY: Account temporarily locked due to brute force - User: {Email} (ID: {UserId}) from {IpAddress}",
441
- request.Email, user.Id, ipAddress);
442
- return Unauthorized(new ErrorResponse("Account temporarily locked", "ACCOUNT_LOCKED"));
443
- }
444
-
445
- if (!_passwordService.VerifyPassword(request.Password, user.PasswordHash))
446
- {
447
- // WARNING: Invalid password with remaining attempts
448
- var remainingAttempts = 5 - recentFailedAttempts - 1;
449
- _logger.LogWarning(
450
- "Login failed: Invalid password - {Email} from {IpAddress}, remaining attempts: {Remaining}",
451
- request.Email, ipAddress, remainingAttempts);
452
-
453
- // Log failed attempt to session
454
- await _sessionService.LogFailedLoginAsync(user.Id, ipAddress, userAgent, cancellationToken);
455
-
456
- return Unauthorized(new ErrorResponse("Mot de passe incorrect", "INVALID_PASSWORD"));
457
- }
458
-
459
- // ============================================
460
- // SUCCESS - Generate tokens
461
- // ============================================
462
-
463
- var roles = user.UserRoles.Select(ur => ur.Role!.Name).ToList();
464
- var permissions = user.UserRoles
465
- .SelectMany(ur => ur.Role!.RolePermissions)
466
- .Select(rp => rp.Permission!.Path)
467
- .Distinct()
468
- .ToList();
469
-
470
- var accessToken = _jwtService.GenerateAccessToken(user, roles, permissions);
471
- var refreshToken = _jwtService.GenerateRefreshToken();
472
-
473
- await _sessionService.LogLoginAsync(user.Id, accessToken, ipAddress, userAgent, cancellationToken: cancellationToken);
474
-
475
- // INFO: Successful login
476
- _logger.LogInformation(
477
- "User logged in successfully: {Email} from {IpAddress}",
478
- user.Email, ipAddress);
479
-
480
- return Ok(new LoginResponse(accessToken, refreshToken, /* UserInfo */));
481
- }
482
-
483
- #endregion
484
-
485
- #region Logout
486
-
487
- [HttpPost("logout")]
488
- [Authorize]
489
- [ProducesResponseType(StatusCodes.Status204NoContent)]
490
- public async Task<IActionResult> Logout(CancellationToken cancellationToken)
491
- {
492
- var token = Request.Headers.Authorization.ToString().Replace("Bearer ", "");
493
- await _sessionService.LogLogoutAsync(token, cancellationToken);
494
-
495
- _logger.LogInformation("User logged out: {UserId}", User.FindFirst("sub")?.Value);
496
-
497
- return NoContent();
498
- }
499
-
500
- #endregion
501
-
502
- #region Change Password - LOG WARNING
503
-
504
- [HttpPost("change-password")]
505
- [Authorize]
506
- [ProducesResponseType(typeof(ChangePasswordResponse), StatusCodes.Status200OK)]
507
- [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status400BadRequest)]
508
- public async Task<ActionResult<ChangePasswordResponse>> ChangePassword(
509
- [FromBody] ChangePasswordRequest request,
510
- CancellationToken cancellationToken)
511
- {
512
- // ... validation logic
513
-
514
- user.UpdatePassword(newPasswordHash);
515
- await _context.SaveChangesAsync(cancellationToken);
516
-
517
- // Invalidate ALL sessions after password change
518
- await _sessionService.InvalidateAllUserSessionsAsync(userId, "Password changed", cancellationToken);
519
-
520
- // WARNING: Sensitive operation
521
- _logger.LogWarning(
522
- "Password changed for user {Email} - All sessions invalidated",
523
- user.Email);
524
-
525
- return Ok(new ChangePasswordResponse("Password changed", true));
526
- }
527
-
528
- #endregion
529
-
530
- private string GetClientIpAddress()
531
- {
532
- var forwardedFor = Request.Headers["X-Forwarded-For"].FirstOrDefault();
533
- if (!string.IsNullOrEmpty(forwardedFor))
534
- return forwardedFor.Split(',')[0].Trim();
535
- return HttpContext.Connection.RemoteIpAddress?.ToString() ?? "Unknown";
536
- }
537
- }
538
- ```
539
-
540
- ---
541
-
542
- ## Template Permissions Constants
543
-
544
- ```csharp
545
- // src/SmartStack.Application/Common/Authorization/Permissions.cs
546
- // ADD to existing class
547
-
548
- public static class Permissions
549
- {
550
- // ... existing permissions ...
551
-
552
- public static class {PermissionClass}
553
- {
554
- public const string Access = "{permission.path}";
555
- public const string View = "{permission.path}.read";
556
- public const string Create = "{permission.path}.create";
557
- public const string Update = "{permission.path}.update";
558
- public const string Delete = "{permission.path}.delete";
559
- // Optional depending on module
560
- public const string Assign = "{permission.path}.assign";
561
- public const string Execute = "{permission.path}.execute";
562
- public const string Export = "{permission.path}.export";
563
- }
564
- }
565
- ```
566
-
567
- ---
568
-
569
- ## Template PermissionConfiguration Seed
570
-
571
- > **CRITICAL:** This template is MANDATORY. Without these entries, all API calls will return 403 Forbidden.
572
-
573
- ```csharp
574
- // src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/PermissionConfiguration.cs
575
- // ADD in Configure() method, HasData section
576
-
577
- // ============================================
578
- // STEP 1: Declare ModuleId
579
- // ============================================
580
- // Check in ModuleConfiguration.cs if module already exists
581
- // Otherwise, create the module first via /application skill
582
-
583
- var {module}ModuleId = Guid.Parse("{MODULE-GUID}"); // Get from ModuleConfiguration.cs
584
-
585
- // ============================================
586
- // STEP 2: Add permissions (HasData)
587
- // ============================================
588
-
589
- // Pattern: {application}.{module}.{action}
590
- // Example: administration.users.read
591
-
592
- var seedDate = new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc);
593
-
594
- builder.HasData(
595
- // Wildcard permission (full module access)
596
- new
597
- {
598
- Id = Guid.Parse("{NOUVEAU-GUID-1}"),
599
- Path = "{application}.{module}.*",
600
- Level = PermissionLevel.Module,
601
- Action = (PermissionAction?)null,
602
- IsWildcard = true,
603
- ModuleId = {module}ModuleId,
604
- Description = "Full {module} management",
605
- CreatedAt = seedDate
606
- },
607
-
608
- // Read permission
609
- new
610
- {
611
- Id = Guid.Parse("{NOUVEAU-GUID-2}"),
612
- Path = "{application}.{module}.read",
613
- Level = PermissionLevel.Module,
614
- Action = PermissionAction.Read,
615
- IsWildcard = false,
616
- ModuleId = {module}ModuleId,
617
- Description = "View {module}",
618
- CreatedAt = seedDate
619
- },
620
-
621
- // Create permission
622
- new
623
- {
624
- Id = Guid.Parse("{NOUVEAU-GUID-3}"),
625
- Path = "{application}.{module}.create",
626
- Level = PermissionLevel.Module,
627
- Action = PermissionAction.Create,
628
- IsWildcard = false,
629
- ModuleId = {module}ModuleId,
630
- Description = "Create {module}",
631
- CreatedAt = seedDate
632
- },
633
-
634
- // Update permission
635
- new
636
- {
637
- Id = Guid.Parse("{NOUVEAU-GUID-4}"),
638
- Path = "{application}.{module}.update",
639
- Level = PermissionLevel.Module,
640
- Action = PermissionAction.Update,
641
- IsWildcard = false,
642
- ModuleId = {module}ModuleId,
643
- Description = "Update {module}",
644
- CreatedAt = seedDate
645
- },
646
-
647
- // Delete permission
648
- new
649
- {
650
- Id = Guid.Parse("{NOUVEAU-GUID-5}"),
651
- Path = "{application}.{module}.delete",
652
- Level = PermissionLevel.Module,
653
- Action = PermissionAction.Delete,
654
- IsWildcard = false,
655
- ModuleId = {module}ModuleId,
656
- Description = "Delete {module}",
657
- CreatedAt = seedDate
658
- }
659
-
660
- // Optional actions depending on module:
661
- // - PermissionAction.Assign → To assign resources/roles
662
- // - PermissionAction.Execute → To execute actions (export, etc.)
663
- );
664
- ```
665
-
666
- ### GUID Generation
667
-
668
- ```bash
669
- # PowerShell (Windows)
670
- [guid]::NewGuid().ToString()
671
-
672
- # Bash (Linux/Mac)
673
- uuidgen | tr '[:upper:]' '[:lower:]'
674
- ```
675
-
676
- ### Validation Consistency Permissions.cs ↔ PermissionConfiguration.cs
677
-
678
- > **RULE:** Each constant in `Permissions.cs` MUST have a corresponding entry in `PermissionConfiguration.cs`
679
-
680
- ```
681
- ┌─────────────────────────────────────────────────────────────────────────────┐
682
- │ CONSISTENCY VALIDATION │
683
- ├─────────────────────────────────────────────────────────────────────────────┤
684
- │ │
685
- │ Permissions.cs PermissionConfiguration.cs │
686
- │ ────────────────────────────── ────────────────────────────────────── │
687
- │ Permissions.Support.Tickets.View → Path = "support.tickets.read"│
688
- │ Permissions.Support.Tickets.Create→ Path = "support.tickets.create"│
689
- │ Permissions.Support.Tickets.Update→ Path = "support.tickets.update"│
690
- │ Permissions.Support.Tickets.Delete→ Path = "support.tickets.delete"│
691
- │ │
692
- │ WARNING: COMMON ERROR: │
693
- │ - Permissions.cs: "support.tickets.read" │
694
- │ - PermissionConfiguration.cs: MISSING │
695
- │ → Result: 403 Forbidden for ALL users │
696
- │ │
697
- └─────────────────────────────────────────────────────────────────────────────┘
698
- ```
699
-
700
- ### Post-generation commands
701
-
702
- After adding entries in both files:
703
-
704
- ```bash
705
- # 1. Create migration
706
- /efcore migration Add{Module}Permissions
707
-
708
- # 2. Apply migration
709
- /efcore db-deploy
710
-
711
- # 3. Verify (optional)
712
- /efcore db-status
713
- ```
714
-
715
- ---
716
-
717
- ## Template Controller avec Relations
718
-
719
- ```csharp
720
- // For controllers with related entities (ex: Tickets with Comments)
721
-
722
- #region GET with Includes
723
-
724
- [HttpGet("{id:guid}")]
725
- [RequirePermission(Permissions.{PermissionClass}.View)]
726
- [ProducesResponseType(typeof({Entity}DetailDto), StatusCodes.Status200OK)]
727
- [ProducesResponseType(StatusCodes.Status404NotFound)]
728
- public async Task<ActionResult<{Entity}DetailDto>> Get{Entity}(
729
- Guid id,
730
- CancellationToken cancellationToken)
731
- {
732
- var entity = await _context.{DbSet}
733
- .Include(x => x.CreatedByUser)
734
- .Include(x => x.AssignedToUser)
735
- .Include(x => x.Comments)
736
- .ThenInclude(c => c.Author)
737
- .Include(x => x.Attachments)
738
- .FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
739
-
740
- if (entity == null)
741
- return NotFound(new { message = "{Entity} not found" });
742
-
743
- return Ok(MapToDetailDto(entity));
744
- }
745
-
746
- #endregion
747
-
748
- #region Nested Resources
749
-
750
- [HttpGet("{parentId:guid}/children")]
751
- [RequirePermission(Permissions.{PermissionClass}.View)]
752
- [ProducesResponseType(typeof(List<ChildDto>), StatusCodes.Status200OK)]
753
- public async Task<ActionResult<List<ChildDto>>> GetChildren(
754
- Guid parentId,
755
- CancellationToken cancellationToken)
756
- {
757
- var children = await _context.Children
758
- .Where(x => x.ParentId == parentId)
759
- .OrderByDescending(x => x.CreatedAt)
760
- .Select(x => new ChildDto(x.Id, x.Name, x.CreatedAt))
761
- .ToListAsync(cancellationToken);
762
-
763
- return Ok(children);
764
- }
765
-
766
- [HttpPost("{parentId:guid}/children")]
767
- [RequirePermission(Permissions.{PermissionClass}.Create)]
768
- [ProducesResponseType(typeof(ChildDto), StatusCodes.Status201Created)]
769
- public async Task<ActionResult<ChildDto>> AddChild(
770
- Guid parentId,
771
- [FromBody] CreateChildRequest request,
772
- CancellationToken cancellationToken)
773
- {
774
- var parent = await _context.{DbSet}
775
- .FirstOrDefaultAsync(x => x.Id == parentId, cancellationToken);
776
-
777
- if (parent == null)
778
- return NotFound(new { message = "Parent not found" });
779
-
780
- var child = Child.Create(parentId, request.Name, _currentUser.UserId!.Value);
781
-
782
- _context.Children.Add(child);
783
- await _context.SaveChangesAsync(cancellationToken);
784
-
785
- _logger.LogInformation("User {User} added child to {Entity} {ParentId}",
786
- _currentUser.Email, parentId);
787
-
788
- return CreatedAtAction(
789
- nameof(GetChildren),
790
- new { parentId },
791
- new ChildDto(child.Id, child.Name, child.CreatedAt));
792
- }
793
-
794
- #endregion
795
- ```
796
-
797
- ---
798
-
799
- ## Reusable Patterns
800
-
801
- ### Error Response Standard
802
-
803
- ```csharp
804
- public record ErrorResponse(string Message, string? Code = null);
805
-
806
- // Usage:
807
- return BadRequest(new ErrorResponse("Validation failed", "VALIDATION_ERROR"));
808
- return Conflict(new ErrorResponse("Already exists", "DUPLICATE"));
809
- return NotFound(new { message = "Resource not found" });
810
- ```
811
-
812
- ### Pagination Query Extension
813
-
814
- ```csharp
815
- public static class QueryableExtensions
816
- {
817
- public static async Task<PaginatedResult<T>> ToPaginatedResultAsync<T>(
818
- this IQueryable<T> query,
819
- int page,
820
- int pageSize,
821
- CancellationToken ct = default)
822
- {
823
- var totalCount = await query.CountAsync(ct);
824
- var items = await query
825
- .Skip((page - 1) * pageSize)
826
- .Take(pageSize)
827
- .ToListAsync(ct);
828
-
829
- return new PaginatedResult<T>(items, totalCount, page, pageSize);
830
- }
831
- }
832
- ```
833
-
834
- ### Log Context Pattern
835
-
836
- ```csharp
837
- // Always include user context in logs
838
- _logger.LogInformation(
839
- "User {User} ({UserId}) performed {Action} on {Entity} {EntityId}",
840
- _currentUser.Email,
841
- _currentUser.UserId,
842
- "Create",
843
- "{Entity}",
844
- entity.Id);
845
- ```
846
-
847
- ---
848
-
849
- ## Template Section-Level Permissions (Level 3)
850
-
851
- > **Usage:** When a Module has multiple sub-pages/tabs with different permissions (ex: AI → Dashboard, Settings, Prompts)
852
-
853
- ### Permissions.cs - Section
854
-
855
- ```csharp
856
- // src/SmartStack.Application/Common/Authorization/Permissions.cs
857
-
858
- public static class Admin
859
- {
860
- public static class {Module}
861
- {
862
- // Section permissions (Level 3)
863
- public static class {Section}
864
- {
865
- public const string View = "{application}.{module}.{section}.read";
866
- public const string Create = "{application}.{module}.{section}.create";
867
- public const string Update = "{application}.{module}.{section}.update";
868
- public const string Delete = "{application}.{module}.{section}.delete";
869
- public const string Execute = "{application}.{module}.{section}.execute";
870
- }
871
- }
872
- }
873
- ```
874
-
875
- ### PermissionConfiguration.cs - Section Seed
876
-
877
- ```csharp
878
- // src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/PermissionConfiguration.cs
879
- // ADD in Configure() method, HasData section
880
-
881
- // ============================================
882
- // STEP 1: Declare SectionId
883
- // ============================================
884
- // Get from NavigationSectionConfiguration.cs
885
-
886
- var {section}SectionId = Guid.Parse("{SECTION-GUID}");
887
-
888
- // ============================================
889
- // STEP 2: Add Section permissions (Level 3)
890
- // ============================================
891
-
892
- // Pattern: {application}.{module}.{section}.{action}
893
- // Example: administration.ai.settings.read
894
-
895
- builder.HasData(
896
- // Wildcard permission (full section access)
897
- new
898
- {
899
- Id = Guid.Parse("{NOUVEAU-GUID-1}"),
900
- Path = "{application}.{module}.{section}.*",
901
- Level = PermissionLevel.Section,
902
- Action = (PermissionAction?)null,
903
- IsWildcard = true,
904
- SectionId = {section}SectionId,
905
- Description = "Full {section} access",
906
- CreatedAt = seedDate
907
- },
908
-
909
- // Read permission
910
- new
911
- {
912
- Id = Guid.Parse("{NOUVEAU-GUID-2}"),
913
- Path = "{application}.{module}.{section}.read",
914
- Level = PermissionLevel.Section,
915
- Action = PermissionAction.Read,
916
- IsWildcard = false,
917
- SectionId = {section}SectionId,
918
- Description = "View {section}",
919
- CreatedAt = seedDate
920
- },
921
-
922
- // Create permission
923
- new
924
- {
925
- Id = Guid.Parse("{NOUVEAU-GUID-3}"),
926
- Path = "{application}.{module}.{section}.create",
927
- Level = PermissionLevel.Section,
928
- Action = PermissionAction.Create,
929
- IsWildcard = false,
930
- SectionId = {section}SectionId,
931
- Description = "Create in {section}",
932
- CreatedAt = seedDate
933
- },
934
-
935
- // Update permission
936
- new
937
- {
938
- Id = Guid.Parse("{NOUVEAU-GUID-4}"),
939
- Path = "{application}.{module}.{section}.update",
940
- Level = PermissionLevel.Section,
941
- Action = PermissionAction.Update,
942
- IsWildcard = false,
943
- SectionId = {section}SectionId,
944
- Description = "Update in {section}",
945
- CreatedAt = seedDate
946
- },
947
-
948
- // Delete permission
949
- new
950
- {
951
- Id = Guid.Parse("{NOUVEAU-GUID-5}"),
952
- Path = "{application}.{module}.{section}.delete",
953
- Level = PermissionLevel.Section,
954
- Action = PermissionAction.Delete,
955
- IsWildcard = false,
956
- SectionId = {section}SectionId,
957
- Description = "Delete in {section}",
958
- CreatedAt = seedDate
959
- },
960
-
961
- // Execute permission (optional)
962
- new
963
- {
964
- Id = Guid.Parse("{NOUVEAU-GUID-6}"),
965
- Path = "{application}.{module}.{section}.execute",
966
- Level = PermissionLevel.Section,
967
- Action = PermissionAction.Execute,
968
- IsWildcard = false,
969
- SectionId = {section}SectionId,
970
- Description = "Execute actions in {section}",
971
- CreatedAt = seedDate
972
- }
973
- );
974
- ```
975
-
976
- ---
977
-
978
- ## Template Resource-Level Permissions (Level 4)
979
-
980
- > **Usage:** For the finest granularity level (ex: Prompts → Blocks, Users → Profiles)
981
- > **CRITICAL:** Used when a Section contains sub-resources with distinct permissions
982
-
983
- ### Permissions.cs - Resource
984
-
985
- ```csharp
986
- // src/SmartStack.Application/Common/Authorization/Permissions.cs
987
-
988
- public static class Admin
989
- {
990
- public static class {Module}
991
- {
992
- public static class {Section}
993
- {
994
- // Section-level permissions...
995
-
996
- // Resource permissions (Level 4 - finest granularity)
997
- public static class {Resource}
998
- {
999
- public const string View = "{application}.{module}.{section}.{resource}.read";
1000
- public const string Create = "{application}.{module}.{section}.{resource}.create";
1001
- public const string Update = "{application}.{module}.{section}.{resource}.update";
1002
- public const string Delete = "{application}.{module}.{section}.{resource}.delete";
1003
- }
1004
- }
1005
- }
1006
- }
1007
- ```
1008
-
1009
- ### PermissionConfiguration.cs - Resource Seed
1010
-
1011
- ```csharp
1012
- // src/SmartStack.Infrastructure/Persistence/Configurations/Navigation/PermissionConfiguration.cs
1013
- // ADD in Configure() method, HasData section
1014
-
1015
- // ============================================
1016
- // STEP 1: Declare ResourceId
1017
- // ============================================
1018
- // Get from NavigationResourceConfiguration.cs
1019
-
1020
- var {resource}ResourceId = Guid.Parse("{RESOURCE-GUID}");
1021
-
1022
- // ============================================
1023
- // STEP 2: Add Resource permissions (Level 4)
1024
- // ============================================
1025
-
1026
- // Pattern: {application}.{module}.{section}.{resource}.{action}
1027
- // Example: administration.ai.prompts.blocks.read
1028
-
1029
- builder.HasData(
1030
- // Wildcard permission (full resource access)
1031
- new
1032
- {
1033
- Id = Guid.Parse("{NOUVEAU-GUID-1}"),
1034
- Path = "{application}.{module}.{section}.{resource}.*",
1035
- Level = PermissionLevel.Resource,
1036
- Action = (PermissionAction?)null,
1037
- IsWildcard = true,
1038
- ResourceId = {resource}ResourceId,
1039
- Description = "Full {resource} access",
1040
- CreatedAt = seedDate
1041
- },
1042
-
1043
- // Read permission
1044
- new
1045
- {
1046
- Id = Guid.Parse("{NOUVEAU-GUID-2}"),
1047
- Path = "{application}.{module}.{section}.{resource}.read",
1048
- Level = PermissionLevel.Resource,
1049
- Action = PermissionAction.Read,
1050
- IsWildcard = false,
1051
- ResourceId = {resource}ResourceId,
1052
- Description = "View {resource}",
1053
- CreatedAt = seedDate
1054
- },
1055
-
1056
- // Create permission
1057
- new
1058
- {
1059
- Id = Guid.Parse("{NOUVEAU-GUID-3}"),
1060
- Path = "{application}.{module}.{section}.{resource}.create",
1061
- Level = PermissionLevel.Resource,
1062
- Action = PermissionAction.Create,
1063
- IsWildcard = false,
1064
- ResourceId = {resource}ResourceId,
1065
- Description = "Create {resource}",
1066
- CreatedAt = seedDate
1067
- },
1068
-
1069
- // Update permission
1070
- new
1071
- {
1072
- Id = Guid.Parse("{NOUVEAU-GUID-4}"),
1073
- Path = "{application}.{module}.{section}.{resource}.update",
1074
- Level = PermissionLevel.Resource,
1075
- Action = PermissionAction.Update,
1076
- IsWildcard = false,
1077
- ResourceId = {resource}ResourceId,
1078
- Description = "Update {resource}",
1079
- CreatedAt = seedDate
1080
- },
1081
-
1082
- // Delete permission
1083
- new
1084
- {
1085
- Id = Guid.Parse("{NOUVEAU-GUID-5}"),
1086
- Path = "{application}.{module}.{section}.{resource}.delete",
1087
- Level = PermissionLevel.Resource,
1088
- Action = PermissionAction.Delete,
1089
- IsWildcard = false,
1090
- ResourceId = {resource}ResourceId,
1091
- Description = "Delete {resource}",
1092
- CreatedAt = seedDate
1093
- }
1094
- );
1095
- ```
1096
-
1097
- ---
1098
-
1099
- ## Template Bulk Operations (Batch Insertion)
1100
-
1101
- > **MANDATORY:** Always provide bulk endpoints when creating a CRUD controller
1102
-
1103
- ### Permissions.cs - Bulk Operations
1104
-
1105
- ```csharp
1106
- // src/SmartStack.Application/Common/Authorization/Permissions.cs
1107
-
1108
- public static class {Module}
1109
- {
1110
- // CRUD standard
1111
- public const string View = "{path}.read";
1112
- public const string Create = "{path}.create";
1113
- public const string Update = "{path}.update";
1114
- public const string Delete = "{path}.delete";
1115
-
1116
- // Bulk operations (MANDATORY for all CRUD modules)
1117
- public const string BulkCreate = "{path}.bulk-create";
1118
- public const string BulkUpdate = "{path}.bulk-update";
1119
- public const string BulkDelete = "{path}.bulk-delete";
1120
- public const string Export = "{path}.export";
1121
- public const string Import = "{path}.import";
1122
- }
1123
- ```
1124
-
1125
- ### PermissionConfiguration.cs - Bulk Permissions Seed
1126
-
1127
- ```csharp
1128
- // Add after standard CRUD permissions
1129
-
1130
- // Bulk Create permission
1131
- new
1132
- {
1133
- Id = Guid.Parse("{NOUVEAU-GUID-BULK-1}"),
1134
- Path = "{application}.{module}.bulk-create",
1135
- Level = PermissionLevel.Module,
1136
- Action = PermissionAction.Create,
1137
- IsWildcard = false,
1138
- ModuleId = {module}ModuleId,
1139
- Description = "Bulk create {module}",
1140
- CreatedAt = seedDate
1141
- },
1142
-
1143
- // Bulk Update permission
1144
- new
1145
- {
1146
- Id = Guid.Parse("{NOUVEAU-GUID-BULK-2}"),
1147
- Path = "{application}.{module}.bulk-update",
1148
- Level = PermissionLevel.Module,
1149
- Action = PermissionAction.Update,
1150
- IsWildcard = false,
1151
- ModuleId = {module}ModuleId,
1152
- Description = "Bulk update {module}",
1153
- CreatedAt = seedDate
1154
- },
1155
-
1156
- // Bulk Delete permission
1157
- new
1158
- {
1159
- Id = Guid.Parse("{NOUVEAU-GUID-BULK-3}"),
1160
- Path = "{application}.{module}.bulk-delete",
1161
- Level = PermissionLevel.Module,
1162
- Action = PermissionAction.Delete,
1163
- IsWildcard = false,
1164
- ModuleId = {module}ModuleId,
1165
- Description = "Bulk delete {module}",
1166
- CreatedAt = seedDate
1167
- },
1168
-
1169
- // Export permission
1170
- new
1171
- {
1172
- Id = Guid.Parse("{NOUVEAU-GUID-EXPORT}"),
1173
- Path = "{application}.{module}.export",
1174
- Level = PermissionLevel.Module,
1175
- Action = PermissionAction.Execute,
1176
- IsWildcard = false,
1177
- ModuleId = {module}ModuleId,
1178
- Description = "Export {module} data",
1179
- CreatedAt = seedDate
1180
- },
1181
-
1182
- // Import permission
1183
- new
1184
- {
1185
- Id = Guid.Parse("{NOUVEAU-GUID-IMPORT}"),
1186
- Path = "{application}.{module}.import",
1187
- Level = PermissionLevel.Module,
1188
- Action = PermissionAction.Create,
1189
- IsWildcard = false,
1190
- ModuleId = {module}ModuleId,
1191
- Description = "Import {module} data",
1192
- CreatedAt = seedDate
1193
- }
1194
- ```
1195
-
1196
- ### Controller Endpoints - Bulk Operations
1197
-
1198
- ```csharp
1199
- // src/SmartStack.Api/Controllers/{Area}/{Module}Controller.cs
1200
- // ADD after standard CRUD endpoints
1201
-
1202
- #region BULK OPERATIONS
1203
-
1204
- /// <summary>
1205
- /// Bulk create multiple entities
1206
- /// </summary>
1207
- [HttpPost("bulk")]
1208
- [RequirePermission(Permissions.{PermissionClass}.BulkCreate)]
1209
- [ProducesResponseType(typeof(BulkOperationResult<{Entity}Dto>), StatusCodes.Status201Created)]
1210
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
1211
- public async Task<ActionResult<BulkOperationResult<{Entity}Dto>>> BulkCreate{Entity}(
1212
- [FromBody] List<Create{Entity}Request> requests,
1213
- CancellationToken cancellationToken)
1214
- {
1215
- if (requests == null || requests.Count == 0)
1216
- return BadRequest(new { message = "No items provided" });
1217
-
1218
- if (requests.Count > 100)
1219
- return BadRequest(new { message = "Maximum 100 items per bulk operation" });
1220
-
1221
- var results = new List<{Entity}Dto>();
1222
- var errors = new List<BulkOperationError>();
1223
-
1224
- for (int i = 0; i < requests.Count; i++)
1225
- {
1226
- try
1227
- {
1228
- var entity = {Entity}.Create(
1229
- requests[i].Name,
1230
- requests[i].Description
1231
- );
1232
-
1233
- _context.{DbSet}.Add(entity);
1234
- results.Add(new {Entity}Dto(entity.Id, entity.Name));
1235
- }
1236
- catch (Exception ex)
1237
- {
1238
- errors.Add(new BulkOperationError(i, requests[i].Name, ex.Message));
1239
- }
1240
- }
1241
-
1242
- await _context.SaveChangesAsync(cancellationToken);
1243
-
1244
- _logger.LogInformation("User {User} bulk created {Count} {Entity}(s), {Errors} error(s)",
1245
- _currentUser.Email, results.Count, errors.Count);
1246
-
1247
- return CreatedAtAction(
1248
- nameof(Get{Module}),
1249
- new BulkOperationResult<{Entity}Dto>(results, errors, results.Count, errors.Count));
1250
- }
1251
-
1252
- /// <summary>
1253
- /// Bulk update multiple entities
1254
- /// </summary>
1255
- [HttpPut("bulk")]
1256
- [RequirePermission(Permissions.{PermissionClass}.BulkUpdate)]
1257
- [ProducesResponseType(typeof(BulkOperationResult), StatusCodes.Status200OK)]
1258
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
1259
- public async Task<ActionResult<BulkOperationResult>> BulkUpdate{Entity}(
1260
- [FromBody] List<BulkUpdate{Entity}Request> requests,
1261
- CancellationToken cancellationToken)
1262
- {
1263
- if (requests == null || requests.Count == 0)
1264
- return BadRequest(new { message = "No items provided" });
1265
-
1266
- if (requests.Count > 100)
1267
- return BadRequest(new { message = "Maximum 100 items per bulk operation" });
1268
-
1269
- var ids = requests.Select(r => r.Id).ToList();
1270
- var entities = await _context.{DbSet}
1271
- .Where(x => ids.Contains(x.Id))
1272
- .ToDictionaryAsync(x => x.Id, cancellationToken);
1273
-
1274
- var updated = 0;
1275
- var errors = new List<BulkOperationError>();
1276
-
1277
- for (int i = 0; i < requests.Count; i++)
1278
- {
1279
- if (!entities.TryGetValue(requests[i].Id, out var entity))
1280
- {
1281
- errors.Add(new BulkOperationError(i, requests[i].Id.ToString(), "Entity not found"));
1282
- continue;
1283
- }
1284
-
1285
- try
1286
- {
1287
- entity.Update(
1288
- requests[i].Name ?? entity.Name,
1289
- requests[i].Description ?? entity.Description
1290
- );
1291
- updated++;
1292
- }
1293
- catch (Exception ex)
1294
- {
1295
- errors.Add(new BulkOperationError(i, requests[i].Id.ToString(), ex.Message));
1296
- }
1297
- }
1298
-
1299
- await _context.SaveChangesAsync(cancellationToken);
1300
-
1301
- _logger.LogInformation("User {User} bulk updated {Count} {Entity}(s), {Errors} error(s)",
1302
- _currentUser.Email, updated, errors.Count);
1303
-
1304
- return Ok(new BulkOperationResult(updated, errors.Count, errors));
1305
- }
1306
-
1307
- /// <summary>
1308
- /// Bulk delete multiple entities by IDs
1309
- /// </summary>
1310
- [HttpDelete("bulk")]
1311
- [RequirePermission(Permissions.{PermissionClass}.BulkDelete)]
1312
- [ProducesResponseType(typeof(BulkOperationResult), StatusCodes.Status200OK)]
1313
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
1314
- public async Task<ActionResult<BulkOperationResult>> BulkDelete{Entity}(
1315
- [FromBody] List<Guid> ids,
1316
- CancellationToken cancellationToken)
1317
- {
1318
- if (ids == null || ids.Count == 0)
1319
- return BadRequest(new { message = "No IDs provided" });
1320
-
1321
- if (ids.Count > 100)
1322
- return BadRequest(new { message = "Maximum 100 items per bulk operation" });
1323
-
1324
- var entities = await _context.{DbSet}
1325
- .Where(x => ids.Contains(x.Id))
1326
- .ToListAsync(cancellationToken);
1327
-
1328
- var deleted = entities.Count;
1329
- var notFound = ids.Count - deleted;
1330
-
1331
- _context.{DbSet}.RemoveRange(entities);
1332
- await _context.SaveChangesAsync(cancellationToken);
1333
-
1334
- _logger.LogWarning("User {User} bulk deleted {Count} {Entity}(s), {NotFound} not found",
1335
- _currentUser.Email, deleted, notFound);
1336
-
1337
- var errors = notFound > 0
1338
- ? new List<BulkOperationError> { new(-1, "N/A", $"{notFound} entities not found") }
1339
- : new List<BulkOperationError>();
1340
-
1341
- return Ok(new BulkOperationResult(deleted, errors.Count, errors));
1342
- }
1343
-
1344
- /// <summary>
1345
- /// Export entities to CSV/Excel
1346
- /// </summary>
1347
- [HttpGet("export")]
1348
- [RequirePermission(Permissions.{PermissionClass}.Export)]
1349
- [ProducesResponseType(typeof(FileContentResult), StatusCodes.Status200OK)]
1350
- public async Task<IActionResult> Export{Module}(
1351
- [FromQuery] string format = "csv",
1352
- [FromQuery] string? search = null,
1353
- CancellationToken cancellationToken = default)
1354
- {
1355
- var query = _context.{DbSet}.AsQueryable();
1356
-
1357
- if (!string.IsNullOrWhiteSpace(search))
1358
- {
1359
- var searchLower = search.ToLower();
1360
- query = query.Where(x => x.Name.ToLower().Contains(searchLower));
1361
- }
1362
-
1363
- var entities = await query.ToListAsync(cancellationToken);
1364
-
1365
- _logger.LogInformation("User {User} exported {Count} {Entity}(s) to {Format}",
1366
- _currentUser.Email, entities.Count, format);
1367
-
1368
- // Implement CSV/Excel export logic here
1369
- // Using libraries like CsvHelper or ClosedXML
1370
-
1371
- var content = format.ToLower() switch
1372
- {
1373
- "xlsx" => GenerateExcel(entities),
1374
- _ => GenerateCsv(entities)
1375
- };
1376
-
1377
- var contentType = format.ToLower() == "xlsx"
1378
- ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
1379
- : "text/csv";
1380
-
1381
- var fileName = $"{module}-export-{DateTime.UtcNow:yyyyMMdd-HHmmss}.{format}";
1382
-
1383
- return File(content, contentType, fileName);
1384
- }
1385
-
1386
- #endregion
1387
-
1388
- #region Bulk DTOs
1389
-
1390
- public record BulkOperationResult(
1391
- int SuccessCount,
1392
- int ErrorCount,
1393
- List<BulkOperationError> Errors);
1394
-
1395
- public record BulkOperationResult<T>(
1396
- List<T> Created,
1397
- List<BulkOperationError> Errors,
1398
- int SuccessCount,
1399
- int ErrorCount);
1400
-
1401
- public record BulkOperationError(
1402
- int Index,
1403
- string Identifier,
1404
- string Message);
1405
-
1406
- public record BulkUpdate{Entity}Request(
1407
- Guid Id,
1408
- string? Name,
1409
- string? Description);
1410
-
1411
- #endregion
1412
- ```
1413
-
1414
- ---
1415
-
1416
- ## Complete Permissions Hierarchy
1417
-
1418
- ```
1419
- ┌─────────────────────────────────────────────────────────────────────────────────┐
1420
- │ COMPLETE PERMISSIONS HIERARCHY │
1421
- ├─────────────────────────────────────────────────────────────────────────────────┤
1422
- │ │
1423
- │ Level 1: APPLICATION │
1424
- │ └─ Path: {application}.* │
1425
- │ └─ Ex: administration.* → Full administration access │
1426
- │ │
1427
- │ Level 2: MODULE │
1428
- │ └─ Path: {application}.{module}.{action} │
1429
- │ └─ Ex: administration.users.read → Read users │
1430
- │ └─ BULK: administration.users.bulk-create → Batch create │
1431
- │ │
1432
- │ Level 3: SECTION │
1433
- │ └─ Path: {application}.{module}.{section}.{action} │
1434
- │ └─ Ex: administration.ai.settings.update → Update AI settings │
1435
- │ │
1436
- │ Level 4: RESOURCE (finest granularity) │
1437
- │ └─ Path: {application}.{module}.{section}.{resource}.{action} │
1438
- │ └─ Ex: administration.ai.prompts.blocks.delete → Delete blocks │
1439
- │ │
1440
- └─────────────────────────────────────────────────────────────────────────────────┘
1441
- ```
1442
-
1443
- ---
1444
-
1445
- ## Controller Checklist with Complete Permissions
1446
-
1447
- ```
1448
- □ CRUD Standard
1449
- □ GET /api/.../ → {path}.read
1450
- □ GET /api/.../{id} → {path}.read
1451
- □ POST /api/.../ → {path}.create
1452
- □ PUT /api/.../{id} → {path}.update
1453
- □ DELETE /api/.../{id} → {path}.delete
1454
-
1455
- □ Bulk Operations
1456
- □ POST /api/.../bulk → {path}.bulk-create
1457
- □ PUT /api/.../bulk → {path}.bulk-update
1458
- □ DELETE /api/.../bulk → {path}.bulk-delete
1459
-
1460
- □ Export/Import
1461
- □ GET /api/.../export → {path}.export
1462
- □ POST /api/.../import → {path}.import
1463
-
1464
- □ Permissions Configured
1465
- □ Permissions.cs - Constants defined
1466
- □ PermissionConfiguration.cs - Seed HasData
1467
- □ EF Core Migration created
1468
- □ Migration applied
1469
-
1470
- □ API Versioning (if applicable)
1471
- □ See API Versioning section below
1472
-
1473
- □ Correct Permission Level
1474
- □ Module (Level 2) - For main CRUD
1475
- □ Section (Level 3) - If sub-pages with different permissions
1476
- □ Resource (Level 4) - If sub-resources with distinct permissions
1477
- ```
1478
-
1479
- ---
1480
-
1481
- ## API Versioning
1482
-
1483
- **SmartStack convention:** Header-based versioning using `Asp.Versioning.Mvc`.
1484
-
1485
- ### Setup
1486
-
1487
- ```csharp
1488
- // Program.cs
1489
- builder.Services.AddApiVersioning(options =>
1490
- {
1491
- options.DefaultApiVersion = new ApiVersion(1, 0);
1492
- options.AssumeDefaultVersionWhenUnspecified = true;
1493
- options.ReportApiVersions = true; // Adds api-supported-versions header
1494
- options.ApiVersionReader = new HeaderApiVersionReader("api-version");
1495
- })
1496
- .AddApiExplorer(options =>
1497
- {
1498
- options.GroupNameFormat = "'v'VVV";
1499
- options.SubstituteApiVersionInUrl = true;
1500
- });
1501
- ```
1502
-
1503
- ### Controller Usage
1504
-
1505
- ```csharp
1506
- // v1 - Default (no attribute needed if only one version exists)
1507
- [ApiController]
1508
- [ApiVersion("1.0")]
1509
- [NavRoute("crm.contacts")]
1510
- public class ContactsController : ControllerBase
1511
- {
1512
- [HttpGet]
1513
- [RequirePermission(Permissions.Crm.Contacts.Read)]
1514
- public async Task<ActionResult<PaginatedResult<ContactDto>>> GetAll(...) { ... }
1515
- }
1516
-
1517
- // v2 - Breaking changes only
1518
- [ApiController]
1519
- [ApiVersion("2.0")]
1520
- [NavRoute("crm.contacts")]
1521
- public class ContactsV2Controller : ControllerBase
1522
- {
1523
- [HttpGet]
1524
- [RequirePermission(Permissions.Crm.Contacts.Read)]
1525
- public async Task<ActionResult<PaginatedResult<ContactV2Dto>>> GetAll(...) { ... }
1526
- }
1527
- ```
1528
-
1529
- ### Deprecation
1530
-
1531
- ```csharp
1532
- [ApiVersion("1.0", Deprecated = true)] // Adds api-deprecated-versions header
1533
- [ApiVersion("2.0")]
1534
- public class ContactsController : ControllerBase
1535
- {
1536
- [HttpGet]
1537
- [MapToApiVersion("1.0")]
1538
- public async Task<ActionResult<PaginatedResult<ContactDto>>> GetAllV1(...) { ... }
1539
-
1540
- [HttpGet]
1541
- [MapToApiVersion("2.0")]
1542
- public async Task<ActionResult<PaginatedResult<ContactV2Dto>>> GetAllV2(...) { ... }
1543
- }
1544
- ```
1545
-
1546
- ### SmartStack Versioning Rules
1547
-
1548
- | Rule | Detail |
1549
- |------|--------|
1550
- | Default version | `1.0` (assumed when no header sent) |
1551
- | Version header | `api-version: 2.0` |
1552
- | When to version | Breaking changes only (field removal, type change, behavior change) |
1553
- | Non-breaking changes | Add to existing version (new fields, new endpoints) |
1554
- | Naming | `V2Controller` suffix or `[MapToApiVersion]` in same controller |
1555
- | Deprecation | Mark old version deprecated, maintain for 2 releases minimum |
1556
- | Documentation | Both versions documented via `[ProducesResponseType]` |