@ngxtm/devkit 2.1.0 → 3.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 (533) hide show
  1. package/cli/detect.js +292 -0
  2. package/cli/index.js +204 -92
  3. package/cli/init.js +245 -0
  4. package/cli/update.js +243 -0
  5. package/cli/utils.js +195 -0
  6. package/package.json +16 -20
  7. package/rules-index.json +76 -0
  8. package/scripts/generate-index.js +223 -0
  9. package/scripts/merge-commands.js +290 -0
  10. package/scripts/organize-rules.js +226 -0
  11. package/templates/base/hooks/lib/ck-config-utils.cjs +769 -0
  12. package/templates/base/hooks/lib/ck-paths.cjs +110 -0
  13. package/templates/base/hooks/lib/colors.cjs +95 -0
  14. package/templates/base/hooks/lib/config-counter.cjs +103 -0
  15. package/templates/base/hooks/lib/context-builder.cjs +600 -0
  16. package/templates/base/hooks/lib/context-tracker.cjs +335 -0
  17. package/templates/base/hooks/lib/privacy-checker.cjs +297 -0
  18. package/templates/base/hooks/lib/project-detector.cjs +430 -0
  19. package/templates/base/hooks/lib/scout-checker.cjs +172 -0
  20. package/templates/base/hooks/lib/transcript-parser.cjs +164 -0
  21. package/templates/base/hooks/privacy-block.cjs +145 -0
  22. package/agents/backend-engineer.md +0 -154
  23. package/agents/brainstormer.md +0 -169
  24. package/agents/business-analyst.md +0 -166
  25. package/agents/database-architect.md +0 -159
  26. package/agents/debugger.md +0 -155
  27. package/agents/designer.md +0 -150
  28. package/agents/devops-engineer.md +0 -155
  29. package/agents/docs-manager.md +0 -171
  30. package/agents/frontend-engineer.md +0 -159
  31. package/agents/game-engineer.md +0 -148
  32. package/agents/mobile-engineer.md +0 -149
  33. package/agents/performance-engineer.md +0 -152
  34. package/agents/planner.md +0 -161
  35. package/agents/project-manager.md +0 -160
  36. package/agents/researcher.md +0 -146
  37. package/agents/reviewer.md +0 -155
  38. package/agents/scouter.md +0 -157
  39. package/agents/security-engineer.md +0 -154
  40. package/agents/tech-lead.md +0 -159
  41. package/agents/tester.md +0 -157
  42. package/agents-claudekit/brainstormer.md +0 -113
  43. package/agents-claudekit/code-reviewer.md +0 -157
  44. package/agents-claudekit/code-simplifier.md +0 -42
  45. package/agents-claudekit/copywriter.md +0 -110
  46. package/agents-claudekit/database-admin.md +0 -92
  47. package/agents-claudekit/debugger.md +0 -137
  48. package/agents-claudekit/docs-manager.md +0 -208
  49. package/agents-claudekit/fullstack-developer.md +0 -95
  50. package/agents-claudekit/git-manager.md +0 -394
  51. package/agents-claudekit/journal-writer.md +0 -113
  52. package/agents-claudekit/mcp-manager.md +0 -93
  53. package/agents-claudekit/planner.md +0 -108
  54. package/agents-claudekit/project-manager.md +0 -125
  55. package/agents-claudekit/researcher.md +0 -38
  56. package/agents-claudekit/scout-external.md +0 -141
  57. package/agents-claudekit/scout.md +0 -107
  58. package/agents-claudekit/tester.md +0 -105
  59. package/agents-claudekit/ui-ux-designer.md +0 -236
  60. package/commands/ask.md +0 -64
  61. package/commands/brainstorm.md +0 -64
  62. package/commands/code.md +0 -64
  63. package/commands/cook.md +0 -64
  64. package/commands/debug.md +0 -64
  65. package/commands/design/fast.md +0 -134
  66. package/commands/fix/fast.md +0 -84
  67. package/commands/fix/hard.md +0 -116
  68. package/commands/fix.md +0 -64
  69. package/commands/plan/fast.md +0 -78
  70. package/commands/plan/hard.md +0 -131
  71. package/commands/plan.md +0 -64
  72. package/commands/test.md +0 -64
  73. package/matrix-skills/_index.yaml +0 -275
  74. package/matrix-skills/ai-ml.yaml +0 -353
  75. package/matrix-skills/architecture.yaml +0 -93
  76. package/matrix-skills/backend.yaml +0 -280
  77. package/matrix-skills/cloud.yaml +0 -112
  78. package/matrix-skills/data.yaml +0 -74
  79. package/matrix-skills/design.yaml +0 -98
  80. package/matrix-skills/devops.yaml +0 -200
  81. package/matrix-skills/frontend.yaml +0 -200
  82. package/matrix-skills/gaming.yaml +0 -39
  83. package/matrix-skills/languages.yaml +0 -160
  84. package/matrix-skills/management.yaml +0 -50
  85. package/matrix-skills/mcp.yaml +0 -82
  86. package/matrix-skills/mobile.yaml +0 -85
  87. package/matrix-skills/performance.yaml +0 -23
  88. package/matrix-skills/planning.yaml +0 -117
  89. package/matrix-skills/quality.yaml +0 -195
  90. package/matrix-skills/research.yaml +0 -106
  91. package/matrix-skills/security.yaml +0 -293
  92. package/matrix-skills/tools.yaml +0 -352
  93. package/output-styles/coding-level-0-eli5.md +0 -103
  94. package/output-styles/coding-level-1-junior.md +0 -124
  95. package/output-styles/coding-level-2-mid.md +0 -146
  96. package/output-styles/coding-level-3-senior.md +0 -148
  97. package/output-styles/coding-level-4-lead.md +0 -159
  98. package/output-styles/coding-level-5-god.md +0 -91
  99. package/rules/README.md +0 -141
  100. package/rules/metadata.json +0 -54
  101. package/settings.json +0 -3
  102. package/statusline.cjs +0 -500
  103. package/statusline.ps1 +0 -307
  104. package/statusline.sh +0 -237
  105. package/workflows/development-rules.md +0 -42
  106. package/workflows/documentation-management.md +0 -121
  107. package/workflows/orchestration-protocol.md +0 -16
  108. package/workflows/primary-workflow.md +0 -45
  109. /package/{commands → merged-commands}/ask/fast.md +0 -0
  110. /package/{commands → merged-commands}/ask/hard.md +0 -0
  111. /package/{commands-claudekit → merged-commands}/ask.md +0 -0
  112. /package/{commands → merged-commands}/auto.md +0 -0
  113. /package/{commands-claudekit → merged-commands}/bootstrap/auto/fast.md +0 -0
  114. /package/{commands-claudekit → merged-commands}/bootstrap/auto/parallel.md +0 -0
  115. /package/{commands-claudekit → merged-commands}/bootstrap/auto.md +0 -0
  116. /package/{commands-claudekit → merged-commands}/bootstrap.md +0 -0
  117. /package/{commands → merged-commands}/brainstorm/fast.md +0 -0
  118. /package/{commands → merged-commands}/brainstorm/hard.md +0 -0
  119. /package/{commands-claudekit → merged-commands}/brainstorm.md +0 -0
  120. /package/{commands-claudekit → merged-commands}/ck-help.md +0 -0
  121. /package/{commands-claudekit → merged-commands}/code/auto.md +0 -0
  122. /package/{commands → merged-commands}/code/fast.md +0 -0
  123. /package/{commands → merged-commands}/code/hard.md +0 -0
  124. /package/{commands-claudekit → merged-commands}/code/no-test.md +0 -0
  125. /package/{commands-claudekit → merged-commands}/code/parallel.md +0 -0
  126. /package/{commands-claudekit → merged-commands}/code.md +0 -0
  127. /package/{commands-claudekit → merged-commands}/coding-level.md +0 -0
  128. /package/{commands-claudekit → merged-commands}/content/cro.md +0 -0
  129. /package/{commands-claudekit → merged-commands}/content/enhance.md +0 -0
  130. /package/{commands-claudekit → merged-commands}/content/fast.md +0 -0
  131. /package/{commands-claudekit → merged-commands}/content/good.md +0 -0
  132. /package/{commands-claudekit → merged-commands}/cook/auto/fast.md +0 -0
  133. /package/{commands-claudekit → merged-commands}/cook/auto/parallel.md +0 -0
  134. /package/{commands-claudekit → merged-commands}/cook/auto.md +0 -0
  135. /package/{commands → merged-commands}/cook/fast.md +0 -0
  136. /package/{commands → merged-commands}/cook/hard.md +0 -0
  137. /package/{commands-claudekit → merged-commands}/cook.md +0 -0
  138. /package/{commands → merged-commands}/debug/fast.md +0 -0
  139. /package/{commands → merged-commands}/debug/hard.md +0 -0
  140. /package/{commands-claudekit → merged-commands}/debug.md +0 -0
  141. /package/{commands → merged-commands}/deploy/check.md +0 -0
  142. /package/{commands → merged-commands}/deploy/preview.md +0 -0
  143. /package/{commands → merged-commands}/deploy/production.md +0 -0
  144. /package/{commands → merged-commands}/deploy/rollback.md +0 -0
  145. /package/{commands → merged-commands}/deploy.md +0 -0
  146. /package/{commands-claudekit → merged-commands}/design/3d.md +0 -0
  147. /package/{commands-claudekit → merged-commands}/design/describe.md +0 -0
  148. /package/{commands-claudekit → merged-commands}/design/fast.md +0 -0
  149. /package/{commands-claudekit → merged-commands}/design/good.md +0 -0
  150. /package/{commands → merged-commands}/design/hard.md +0 -0
  151. /package/{commands-claudekit → merged-commands}/design/screenshot.md +0 -0
  152. /package/{commands-claudekit → merged-commands}/design/video.md +0 -0
  153. /package/{commands → merged-commands}/design.md +0 -0
  154. /package/{commands → merged-commands}/docs/audit.md +0 -0
  155. /package/{commands → merged-commands}/docs/business.md +0 -0
  156. /package/{commands → merged-commands}/docs/core.md +0 -0
  157. /package/{commands-claudekit → merged-commands}/docs/init.md +0 -0
  158. /package/{commands-claudekit → merged-commands}/docs/summarize.md +0 -0
  159. /package/{commands-claudekit → merged-commands}/docs/update.md +0 -0
  160. /package/{commands → merged-commands}/docs.md +0 -0
  161. /package/{commands-claudekit → merged-commands}/fix/ci.md +0 -0
  162. /package/{commands-claudekit → merged-commands}/fix/fast.md +0 -0
  163. /package/{commands-claudekit → merged-commands}/fix/hard.md +0 -0
  164. /package/{commands-claudekit → merged-commands}/fix/logs.md +0 -0
  165. /package/{commands-claudekit → merged-commands}/fix/parallel.md +0 -0
  166. /package/{commands-claudekit → merged-commands}/fix/test.md +0 -0
  167. /package/{commands-claudekit → merged-commands}/fix/types.md +0 -0
  168. /package/{commands-claudekit → merged-commands}/fix/ui.md +0 -0
  169. /package/{commands-claudekit → merged-commands}/fix.md +0 -0
  170. /package/{commands-claudekit → merged-commands}/git/cm.md +0 -0
  171. /package/{commands-claudekit → merged-commands}/git/cp.md +0 -0
  172. /package/{commands-claudekit → merged-commands}/git/merge.md +0 -0
  173. /package/{commands-claudekit → merged-commands}/git/pr.md +0 -0
  174. /package/{commands-claudekit → merged-commands}/integrate/polar.md +0 -0
  175. /package/{commands-claudekit → merged-commands}/integrate/sepay.md +0 -0
  176. /package/{commands-claudekit → merged-commands}/journal.md +0 -0
  177. /package/{commands-claudekit → merged-commands}/kanban.md +0 -0
  178. /package/{commands-claudekit → merged-commands}/plan/archive.md +0 -0
  179. /package/{commands-claudekit → merged-commands}/plan/ci.md +0 -0
  180. /package/{commands-claudekit → merged-commands}/plan/cro.md +0 -0
  181. /package/{commands-claudekit → merged-commands}/plan/fast.md +0 -0
  182. /package/{commands-claudekit → merged-commands}/plan/hard.md +0 -0
  183. /package/{commands-claudekit → merged-commands}/plan/parallel.md +0 -0
  184. /package/{commands-claudekit → merged-commands}/plan/two.md +0 -0
  185. /package/{commands-claudekit → merged-commands}/plan/validate.md +0 -0
  186. /package/{commands-claudekit → merged-commands}/plan.md +0 -0
  187. /package/{commands-claudekit → merged-commands}/preview.md +0 -0
  188. /package/{commands-claudekit → merged-commands}/review/codebase/parallel.md +0 -0
  189. /package/{commands-claudekit → merged-commands}/review/codebase.md +0 -0
  190. /package/{commands → merged-commands}/review/fast.md +0 -0
  191. /package/{commands → merged-commands}/review/hard.md +0 -0
  192. /package/{commands → merged-commands}/review.md +0 -0
  193. /package/{commands-claudekit → merged-commands}/scout/ext.md +0 -0
  194. /package/{commands-claudekit → merged-commands}/scout.md +0 -0
  195. /package/{commands-claudekit → merged-commands}/skill/add.md +0 -0
  196. /package/{commands-claudekit → merged-commands}/skill/create.md +0 -0
  197. /package/{commands-claudekit → merged-commands}/skill/fix-logs.md +0 -0
  198. /package/{commands-claudekit → merged-commands}/skill/optimize/auto.md +0 -0
  199. /package/{commands-claudekit → merged-commands}/skill/optimize.md +0 -0
  200. /package/{commands-claudekit → merged-commands}/skill/plan.md +0 -0
  201. /package/{commands-claudekit → merged-commands}/skill/update.md +0 -0
  202. /package/{commands → merged-commands}/test/fast.md +0 -0
  203. /package/{commands → merged-commands}/test/hard.md +0 -0
  204. /package/{commands-claudekit → merged-commands}/test/ui.md +0 -0
  205. /package/{commands-claudekit → merged-commands}/test.md +0 -0
  206. /package/{commands-claudekit → merged-commands}/use-mcp.md +0 -0
  207. /package/{commands-claudekit → merged-commands}/watzup.md +0 -0
  208. /package/{commands-claudekit → merged-commands}/worktree.md +0 -0
  209. /package/{rules → templates/dart/rules}/dart/best-practices/SKILL.md +0 -0
  210. /package/{rules → templates/dart/rules}/dart/language/SKILL.md +0 -0
  211. /package/{rules → templates/dart/rules}/dart/tooling/SKILL.md +0 -0
  212. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/SKILL.md +0 -0
  213. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/references/REFERENCE.md +0 -0
  214. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/references/router-config.md +0 -0
  215. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/SKILL.md +0 -0
  216. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/REFERENCE.md +0 -0
  217. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/auth-bloc-example.md +0 -0
  218. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/equatable-usage.md +0 -0
  219. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/property-based-state.md +0 -0
  220. /package/{rules → templates/flutter/rules}/flutter/bloc.rule.md +0 -0
  221. /package/{rules → templates/flutter/rules}/flutter/cicd/SKILL.md +0 -0
  222. /package/{rules → templates/flutter/rules}/flutter/cicd/references/advanced-workflow.md +0 -0
  223. /package/{rules → templates/flutter/rules}/flutter/cicd/references/fastlane.md +0 -0
  224. /package/{rules → templates/flutter/rules}/flutter/cicd/references/github-actions.md +0 -0
  225. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/SKILL.md +0 -0
  226. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/references/REFERENCE.md +0 -0
  227. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/references/modules.md +0 -0
  228. /package/{rules → templates/flutter/rules}/flutter/error-handling/SKILL.md +0 -0
  229. /package/{rules → templates/flutter/rules}/flutter/error-handling/references/REFERENCE.md +0 -0
  230. /package/{rules → templates/flutter/rules}/flutter/error-handling/references/error-mapping.md +0 -0
  231. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/SKILL.md +0 -0
  232. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/references/REFERENCE.md +0 -0
  233. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/references/folder-structure.md +0 -0
  234. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/SKILL.md +0 -0
  235. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/references/app-pages.md +0 -0
  236. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/references/middleware-example.md +0 -0
  237. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/SKILL.md +0 -0
  238. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/references/binding-example.md +0 -0
  239. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/references/reactive-vs-simple.md +0 -0
  240. /package/{rules → templates/flutter/rules}/flutter/go-router-navigation/SKILL.md +0 -0
  241. /package/{rules → templates/flutter/rules}/flutter/idiomatic-flutter/SKILL.md +0 -0
  242. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/SKILL.md +0 -0
  243. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/references/REFERENCE.md +0 -0
  244. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/references/repository-mapping.md +0 -0
  245. /package/{rules → templates/flutter/rules}/flutter/localization/SKILL.md +0 -0
  246. /package/{rules → templates/flutter/rules}/flutter/localization/references/REFERENCE.md +0 -0
  247. /package/{rules → templates/flutter/rules}/flutter/localization/references/sheet-loader.md +0 -0
  248. /package/{rules → templates/flutter/rules}/flutter/navigator-v1-navigation/SKILL.md +0 -0
  249. /package/{rules → templates/flutter/rules}/flutter/navigator-v1-navigation/references/on-generate-route.md +0 -0
  250. /package/{rules → templates/flutter/rules}/flutter/performance/SKILL.md +0 -0
  251. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/SKILL.md +0 -0
  252. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/references/REFERENCE.md +0 -0
  253. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/references/token-refresh.md +0 -0
  254. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/SKILL.md +0 -0
  255. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/architecture.md +0 -0
  256. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/best-practices.md +0 -0
  257. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/testing.md +0 -0
  258. /package/{rules → templates/flutter/rules}/flutter/riverpod.rule.md +0 -0
  259. /package/{rules → templates/flutter/rules}/flutter/security/SKILL.md +0 -0
  260. /package/{rules → templates/flutter/rules}/flutter/security/references/REFERENCE.md +0 -0
  261. /package/{rules → templates/flutter/rules}/flutter/security/references/network-security.md +0 -0
  262. /package/{rules → templates/flutter/rules}/flutter/testing/SKILL.md +0 -0
  263. /package/{rules → templates/flutter/rules}/flutter/testing/references/REFERENCE.md +0 -0
  264. /package/{rules → templates/flutter/rules}/flutter/testing/references/bloc-testing.md +0 -0
  265. /package/{rules → templates/flutter/rules}/flutter/testing/references/integration-testing.md +0 -0
  266. /package/{rules → templates/flutter/rules}/flutter/testing/references/robot-pattern.md +0 -0
  267. /package/{rules → templates/flutter/rules}/flutter/testing/references/unit-testing.md +0 -0
  268. /package/{rules → templates/flutter/rules}/flutter/testing/references/widget-testing.md +0 -0
  269. /package/{rules → templates/flutter/rules}/flutter/widgets/SKILL.md +0 -0
  270. /package/{rules → templates/golang/rules}/golang/chi-router/SKILL.md +0 -0
  271. /package/{rules → templates/golang/rules}/golang/chi-router/references/REFERENCE.md +0 -0
  272. /package/{rules → templates/golang/rules}/golang/chi-router/references/routing-patterns.md +0 -0
  273. /package/{rules → templates/golang/rules}/golang/cobra-cli/SKILL.md +0 -0
  274. /package/{rules → templates/golang/rules}/golang/cobra-cli/references/REFERENCE.md +0 -0
  275. /package/{rules → templates/golang/rules}/golang/cobra-cli/references/command-patterns.md +0 -0
  276. /package/{rules → templates/golang/rules}/golang/core/SKILL.md +0 -0
  277. /package/{rules → templates/golang/rules}/golang/core/references/REFERENCE.md +0 -0
  278. /package/{rules → templates/golang/rules}/golang/core/references/concurrency-patterns.md +0 -0
  279. /package/{rules → templates/golang/rules}/golang/core/references/error-handling.md +0 -0
  280. /package/{rules → templates/golang/rules}/golang/echo-framework/SKILL.md +0 -0
  281. /package/{rules → templates/golang/rules}/golang/echo-framework/references/REFERENCE.md +0 -0
  282. /package/{rules → templates/golang/rules}/golang/echo-framework/references/middleware-patterns.md +0 -0
  283. /package/{rules → templates/golang/rules}/golang/echo-framework/references/routing-patterns.md +0 -0
  284. /package/{rules → templates/golang/rules}/golang/ent-orm/SKILL.md +0 -0
  285. /package/{rules → templates/golang/rules}/golang/ent-orm/references/REFERENCE.md +0 -0
  286. /package/{rules → templates/golang/rules}/golang/ent-orm/references/schema-patterns.md +0 -0
  287. /package/{rules → templates/golang/rules}/golang/fiber-framework/SKILL.md +0 -0
  288. /package/{rules → templates/golang/rules}/golang/fiber-framework/references/REFERENCE.md +0 -0
  289. /package/{rules → templates/golang/rules}/golang/fiber-framework/references/routing-patterns.md +0 -0
  290. /package/{rules → templates/golang/rules}/golang/gin-framework/SKILL.md +0 -0
  291. /package/{rules → templates/golang/rules}/golang/gin-framework/references/REFERENCE.md +0 -0
  292. /package/{rules → templates/golang/rules}/golang/gin-framework/references/middleware-patterns.md +0 -0
  293. /package/{rules → templates/golang/rules}/golang/gorm-orm/SKILL.md +0 -0
  294. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/REFERENCE.md +0 -0
  295. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/model-definitions.md +0 -0
  296. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/query-patterns.md +0 -0
  297. /package/{rules → templates/golang/rules}/golang/grpc/SKILL.md +0 -0
  298. /package/{rules → templates/golang/rules}/golang/grpc/references/REFERENCE.md +0 -0
  299. /package/{rules → templates/golang/rules}/golang/grpc/references/service-patterns.md +0 -0
  300. /package/{rules → templates/golang/rules}/golang/testify/SKILL.md +0 -0
  301. /package/{rules → templates/golang/rules}/golang/testify/references/REFERENCE.md +0 -0
  302. /package/{rules → templates/golang/rules}/golang/testify/references/assert-patterns.md +0 -0
  303. /package/{rules → templates/golang/rules}/golang/validator/SKILL.md +0 -0
  304. /package/{rules → templates/golang/rules}/golang/validator/references/REFERENCE.md +0 -0
  305. /package/{rules → templates/golang/rules}/golang/validator/references/validation-tags.md +0 -0
  306. /package/{rules → templates/golang/rules}/golang/viper-config/SKILL.md +0 -0
  307. /package/{rules → templates/golang/rules}/golang/viper-config/references/REFERENCE.md +0 -0
  308. /package/{rules → templates/golang/rules}/golang/viper-config/references/config-loading.md +0 -0
  309. /package/{rules → templates/golang/rules}/golang/wire-di/SKILL.md +0 -0
  310. /package/{rules → templates/golang/rules}/golang/wire-di/references/REFERENCE.md +0 -0
  311. /package/{rules → templates/golang/rules}/golang/wire-di/references/provider-patterns.md +0 -0
  312. /package/{rules → templates/golang/rules}/golang/zap-logging/SKILL.md +0 -0
  313. /package/{rules → templates/golang/rules}/golang/zap-logging/references/REFERENCE.md +0 -0
  314. /package/{rules → templates/golang/rules}/golang/zap-logging/references/logger-config.md +0 -0
  315. /package/{rules → templates/java/rules}/java/build-gradle/SKILL.md +0 -0
  316. /package/{rules → templates/java/rules}/java/build-gradle/references/REFERENCE.md +0 -0
  317. /package/{rules → templates/java/rules}/java/build-gradle/references/kotlin-dsl.md +0 -0
  318. /package/{rules → templates/java/rules}/java/build-gradle/references/task-configuration.md +0 -0
  319. /package/{rules → templates/java/rules}/java/build-maven/SKILL.md +0 -0
  320. /package/{rules → templates/java/rules}/java/build-maven/references/REFERENCE.md +0 -0
  321. /package/{rules → templates/java/rules}/java/build-maven/references/dependency-management.md +0 -0
  322. /package/{rules → templates/java/rules}/java/build-maven/references/lifecycle-phases.md +0 -0
  323. /package/{rules → templates/java/rules}/java/graalvm-native/SKILL.md +0 -0
  324. /package/{rules → templates/java/rules}/java/graalvm-native/references/REFERENCE.md +0 -0
  325. /package/{rules → templates/java/rules}/java/java-collections-streams/SKILL.md +0 -0
  326. /package/{rules → templates/java/rules}/java/java-collections-streams/references/REFERENCE.md +0 -0
  327. /package/{rules → templates/java/rules}/java/java-collections-streams/references/collectors-patterns.md +0 -0
  328. /package/{rules → templates/java/rules}/java/java-collections-streams/references/stream-pipelines.md +0 -0
  329. /package/{rules → templates/java/rules}/java/java-concurrency/SKILL.md +0 -0
  330. /package/{rules → templates/java/rules}/java/java-concurrency/references/REFERENCE.md +0 -0
  331. /package/{rules → templates/java/rules}/java/java-concurrency/references/completable-future.md +0 -0
  332. /package/{rules → templates/java/rules}/java/java-concurrency/references/executor-patterns.md +0 -0
  333. /package/{rules → templates/java/rules}/java/java-concurrency/references/virtual-threads.md +0 -0
  334. /package/{rules → templates/java/rules}/java/java-core-language/SKILL.md +0 -0
  335. /package/{rules → templates/java/rules}/java/java-core-language/references/REFERENCE.md +0 -0
  336. /package/{rules → templates/java/rules}/java/java-core-language/references/jvm-memory-model.md +0 -0
  337. /package/{rules → templates/java/rules}/java/java-core-language/references/modern-java-features.md +0 -0
  338. /package/{rules → templates/java/rules}/java/java-project-structure/SKILL.md +0 -0
  339. /package/{rules → templates/java/rules}/java/java-project-structure/references/REFERENCE.md +0 -0
  340. /package/{rules → templates/java/rules}/java/java-project-structure/references/maven-project-layout.md +0 -0
  341. /package/{rules → templates/java/rules}/java/java-project-structure/references/module-system.md +0 -0
  342. /package/{rules → templates/java/rules}/java/micronaut-core/SKILL.md +0 -0
  343. /package/{rules → templates/java/rules}/java/micronaut-core/references/REFERENCE.md +0 -0
  344. /package/{rules → templates/java/rules}/java/micronaut-reactive/SKILL.md +0 -0
  345. /package/{rules → templates/java/rules}/java/micronaut-reactive/references/REFERENCE.md +0 -0
  346. /package/{rules → templates/java/rules}/java/quarkus-core/SKILL.md +0 -0
  347. /package/{rules → templates/java/rules}/java/quarkus-core/references/REFERENCE.md +0 -0
  348. /package/{rules → templates/java/rules}/java/quarkus-reactive/SKILL.md +0 -0
  349. /package/{rules → templates/java/rules}/java/quarkus-reactive/references/REFERENCE.md +0 -0
  350. /package/{rules → templates/java/rules}/java/spring-batch/SKILL.md +0 -0
  351. /package/{rules → templates/java/rules}/java/spring-batch/references/REFERENCE.md +0 -0
  352. /package/{rules → templates/java/rules}/java/spring-boot-architecture/SKILL.md +0 -0
  353. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/REFERENCE.md +0 -0
  354. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/auto-configuration.md +0 -0
  355. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/configuration-properties.md +0 -0
  356. /package/{rules → templates/java/rules}/java/spring-boot-web/SKILL.md +0 -0
  357. /package/{rules → templates/java/rules}/java/spring-boot-web/references/REFERENCE.md +0 -0
  358. /package/{rules → templates/java/rules}/java/spring-cloud/SKILL.md +0 -0
  359. /package/{rules → templates/java/rules}/java/spring-cloud/references/REFERENCE.md +0 -0
  360. /package/{rules → templates/java/rules}/java/spring-data-jpa/SKILL.md +0 -0
  361. /package/{rules → templates/java/rules}/java/spring-data-jpa/references/REFERENCE.md +0 -0
  362. /package/{rules → templates/java/rules}/java/spring-security/SKILL.md +0 -0
  363. /package/{rules → templates/java/rules}/java/spring-security/references/REFERENCE.md +0 -0
  364. /package/{rules → templates/java/rules}/java/spring-security/references/jwt-auth-flow.md +0 -0
  365. /package/{rules → templates/java/rules}/java/testing-junit-mockito/SKILL.md +0 -0
  366. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/REFERENCE.md +0 -0
  367. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/junit5-patterns.md +0 -0
  368. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/mockito-patterns.md +0 -0
  369. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/spring-boot-testing.md +0 -0
  370. /package/{rules → templates/javascript/rules}/javascript/best-practices/SKILL.md +0 -0
  371. /package/{rules → templates/javascript/rules}/javascript/best-practices/references/REFERENCE.md +0 -0
  372. /package/{rules → templates/javascript/rules}/javascript/language/SKILL.md +0 -0
  373. /package/{rules → templates/javascript/rules}/javascript/language/references/REFERENCE.md +0 -0
  374. /package/{rules → templates/javascript/rules}/javascript/tooling/SKILL.md +0 -0
  375. /package/{rules → templates/javascript/rules}/javascript/tooling/references/REFERENCE.md +0 -0
  376. /package/{rules → templates/nestjs/rules}/nestjs/api-standards/SKILL.md +0 -0
  377. /package/{rules → templates/nestjs/rules}/nestjs/api-standards/references/pagination-wrapper.md +0 -0
  378. /package/{rules → templates/nestjs/rules}/nestjs/architecture/SKILL.md +0 -0
  379. /package/{rules → templates/nestjs/rules}/nestjs/architecture/references/dynamic-module.md +0 -0
  380. /package/{rules → templates/nestjs/rules}/nestjs/caching/SKILL.md +0 -0
  381. /package/{rules → templates/nestjs/rules}/nestjs/caching/references/REFERENCE.md +0 -0
  382. /package/{rules → templates/nestjs/rules}/nestjs/caching/references/cache-patterns.md +0 -0
  383. /package/{rules → templates/nestjs/rules}/nestjs/configuration/SKILL.md +0 -0
  384. /package/{rules → templates/nestjs/rules}/nestjs/configuration/references/REFERENCE.md +0 -0
  385. /package/{rules → templates/nestjs/rules}/nestjs/configuration/references/config-patterns.md +0 -0
  386. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/SKILL.md +0 -0
  387. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/REFERENCE.md +0 -0
  388. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/controller-patterns.md +0 -0
  389. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/service-patterns.md +0 -0
  390. /package/{rules → templates/nestjs/rules}/nestjs/database/SKILL.md +0 -0
  391. /package/{rules → templates/nestjs/rules}/nestjs/database/references/REFERENCE.md +0 -0
  392. /package/{rules → templates/nestjs/rules}/nestjs/database/references/typeorm-patterns.md +0 -0
  393. /package/{rules → templates/nestjs/rules}/nestjs/deployment/SKILL.md +0 -0
  394. /package/{rules → templates/nestjs/rules}/nestjs/deployment/references/REFERENCE.md +0 -0
  395. /package/{rules → templates/nestjs/rules}/nestjs/deployment/references/deployment-patterns.md +0 -0
  396. /package/{rules → templates/nestjs/rules}/nestjs/documentation/SKILL.md +0 -0
  397. /package/{rules → templates/nestjs/rules}/nestjs/documentation/references/REFERENCE.md +0 -0
  398. /package/{rules → templates/nestjs/rules}/nestjs/documentation/references/swagger-patterns.md +0 -0
  399. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/SKILL.md +0 -0
  400. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/references/REFERENCE.md +0 -0
  401. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/references/exception-filters.md +0 -0
  402. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/SKILL.md +0 -0
  403. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/references/REFERENCE.md +0 -0
  404. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/references/upload-patterns.md +0 -0
  405. /package/{rules → templates/nestjs/rules}/nestjs/observability/SKILL.md +0 -0
  406. /package/{rules → templates/nestjs/rules}/nestjs/observability/references/REFERENCE.md +0 -0
  407. /package/{rules → templates/nestjs/rules}/nestjs/observability/references/logging-metrics.md +0 -0
  408. /package/{rules → templates/nestjs/rules}/nestjs/performance/SKILL.md +0 -0
  409. /package/{rules → templates/nestjs/rules}/nestjs/performance/references/REFERENCE.md +0 -0
  410. /package/{rules → templates/nestjs/rules}/nestjs/performance/references/performance-patterns.md +0 -0
  411. /package/{rules → templates/nestjs/rules}/nestjs/real-time/SKILL.md +0 -0
  412. /package/{rules → templates/nestjs/rules}/nestjs/real-time/references/REFERENCE.md +0 -0
  413. /package/{rules → templates/nestjs/rules}/nestjs/real-time/references/websocket-patterns.md +0 -0
  414. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/SKILL.md +0 -0
  415. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/references/REFERENCE.md +0 -0
  416. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/references/scheduling-patterns.md +0 -0
  417. /package/{rules → templates/nestjs/rules}/nestjs/search/SKILL.md +0 -0
  418. /package/{rules → templates/nestjs/rules}/nestjs/search/references/REFERENCE.md +0 -0
  419. /package/{rules → templates/nestjs/rules}/nestjs/search/references/search-patterns.md +0 -0
  420. /package/{rules → templates/nestjs/rules}/nestjs/security/SKILL.md +0 -0
  421. /package/{rules → templates/nestjs/rules}/nestjs/security/references/REFERENCE.md +0 -0
  422. /package/{rules → templates/nestjs/rules}/nestjs/security/references/authentication.md +0 -0
  423. /package/{rules → templates/nestjs/rules}/nestjs/testing/SKILL.md +0 -0
  424. /package/{rules → templates/nestjs/rules}/nestjs/testing/references/REFERENCE.md +0 -0
  425. /package/{rules → templates/nestjs/rules}/nestjs/testing/references/unit-testing.md +0 -0
  426. /package/{rules → templates/nestjs/rules}/nestjs/transport/SKILL.md +0 -0
  427. /package/{rules → templates/nestjs/rules}/nestjs/transport/references/REFERENCE.md +0 -0
  428. /package/{rules → templates/nestjs/rules}/nestjs/transport/references/microservices-patterns.md +0 -0
  429. /package/{rules → templates/nextjs/rules}/nextjs/app-router/SKILL.md +0 -0
  430. /package/{rules → templates/nextjs/rules}/nextjs/app-router/references/REFERENCE.md +0 -0
  431. /package/{rules → templates/nextjs/rules}/nextjs/app-router/references/routing-patterns.md +0 -0
  432. /package/{rules → templates/nextjs/rules}/nextjs/architecture/SKILL.md +0 -0
  433. /package/{rules → templates/nextjs/rules}/nextjs/architecture/references/fsd-structure.md +0 -0
  434. /package/{rules → templates/nextjs/rules}/nextjs/authentication/SKILL.md +0 -0
  435. /package/{rules → templates/nextjs/rules}/nextjs/authentication/references/auth-implementation.md +0 -0
  436. /package/{rules → templates/nextjs/rules}/nextjs/caching/SKILL.md +0 -0
  437. /package/{rules → templates/nextjs/rules}/nextjs/caching/references/REFERENCE.md +0 -0
  438. /package/{rules → templates/nextjs/rules}/nextjs/caching/references/cache-strategies.md +0 -0
  439. /package/{rules → templates/nextjs/rules}/nextjs/data-access-layer/SKILL.md +0 -0
  440. /package/{rules → templates/nextjs/rules}/nextjs/data-access-layer/references/patterns.md +0 -0
  441. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/SKILL.md +0 -0
  442. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/references/REFERENCE.md +0 -0
  443. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/references/fetch-patterns.md +0 -0
  444. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/SKILL.md +0 -0
  445. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/references/REFERENCE.md +0 -0
  446. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/references/i18n-patterns.md +0 -0
  447. /package/{rules → templates/nextjs/rules}/nextjs/optimization/SKILL.md +0 -0
  448. /package/{rules → templates/nextjs/rules}/nextjs/optimization/references/REFERENCE.md +0 -0
  449. /package/{rules → templates/nextjs/rules}/nextjs/optimization/references/optimization-patterns.md +0 -0
  450. /package/{rules → templates/nextjs/rules}/nextjs/rendering/SKILL.md +0 -0
  451. /package/{rules → templates/nextjs/rules}/nextjs/rendering/references/REFERENCE.md +0 -0
  452. /package/{rules → templates/nextjs/rules}/nextjs/rendering/references/rendering-modes.md +0 -0
  453. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/SKILL.md +0 -0
  454. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/references/REFERENCE.md +0 -0
  455. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/references/action-patterns.md +0 -0
  456. /package/{rules → templates/nextjs/rules}/nextjs/server-components/SKILL.md +0 -0
  457. /package/{rules → templates/nextjs/rules}/nextjs/server-components/references/REFERENCE.md +0 -0
  458. /package/{rules → templates/nextjs/rules}/nextjs/server-components/references/component-patterns.md +0 -0
  459. /package/{rules → templates/nextjs/rules}/nextjs/state-management/SKILL.md +0 -0
  460. /package/{rules → templates/nextjs/rules}/nextjs/state-management/references/REFERENCE.md +0 -0
  461. /package/{rules → templates/nextjs/rules}/nextjs/state-management/references/state-patterns.md +0 -0
  462. /package/{rules → templates/nextjs/rules}/nextjs/styling/SKILL.md +0 -0
  463. /package/{rules → templates/nextjs/rules}/nextjs/styling/references/implementation.md +0 -0
  464. /package/{rules → templates/react/rules}/react/component-patterns/SKILL.md +0 -0
  465. /package/{rules → templates/react/rules}/react/component-patterns/references/REFERENCE.md +0 -0
  466. /package/{rules → templates/react/rules}/react/hooks/SKILL.md +0 -0
  467. /package/{rules → templates/react/rules}/react/hooks/references/REFERENCE.md +0 -0
  468. /package/{rules → templates/react/rules}/react/hooks.rule.md +0 -0
  469. /package/{rules → templates/react/rules}/react/performance/SKILL.md +0 -0
  470. /package/{rules → templates/react/rules}/react/performance/references/REFERENCE.md +0 -0
  471. /package/{rules → templates/react/rules}/react/security/SKILL.md +0 -0
  472. /package/{rules → templates/react/rules}/react/security/references/REFERENCE.md +0 -0
  473. /package/{rules → templates/react/rules}/react/state-management/SKILL.md +0 -0
  474. /package/{rules → templates/react/rules}/react/state-management/references/REFERENCE.md +0 -0
  475. /package/{rules → templates/react/rules}/react/testing/SKILL.md +0 -0
  476. /package/{rules → templates/react/rules}/react/testing/references/REFERENCE.md +0 -0
  477. /package/{rules → templates/react/rules}/react/tooling/SKILL.md +0 -0
  478. /package/{rules → templates/react/rules}/react/typescript/SKILL.md +0 -0
  479. /package/{rules → templates/rust/rules}/rust/actix-web/SKILL.md +0 -0
  480. /package/{rules → templates/rust/rules}/rust/actix-web/references/REFERENCE.md +0 -0
  481. /package/{rules → templates/rust/rules}/rust/actix-web/references/handler-patterns.md +0 -0
  482. /package/{rules → templates/rust/rules}/rust/async-graphql/SKILL.md +0 -0
  483. /package/{rules → templates/rust/rules}/rust/async-graphql/references/REFERENCE.md +0 -0
  484. /package/{rules → templates/rust/rules}/rust/async-graphql/references/schema-patterns.md +0 -0
  485. /package/{rules → templates/rust/rules}/rust/axum/SKILL.md +0 -0
  486. /package/{rules → templates/rust/rules}/rust/axum/references/REFERENCE.md +0 -0
  487. /package/{rules → templates/rust/rules}/rust/axum/references/handler-patterns.md +0 -0
  488. /package/{rules → templates/rust/rules}/rust/bevy/SKILL.md +0 -0
  489. /package/{rules → templates/rust/rules}/rust/bevy/references/REFERENCE.md +0 -0
  490. /package/{rules → templates/rust/rules}/rust/bevy/references/ecs-patterns.md +0 -0
  491. /package/{rules → templates/rust/rules}/rust/clap/SKILL.md +0 -0
  492. /package/{rules → templates/rust/rules}/rust/clap/references/REFERENCE.md +0 -0
  493. /package/{rules → templates/rust/rules}/rust/clap/references/derive-patterns.md +0 -0
  494. /package/{rules → templates/rust/rules}/rust/core/SKILL.md +0 -0
  495. /package/{rules → templates/rust/rules}/rust/core/references/REFERENCE.md +0 -0
  496. /package/{rules → templates/rust/rules}/rust/core/references/error-handling.md +0 -0
  497. /package/{rules → templates/rust/rules}/rust/diesel-orm/SKILL.md +0 -0
  498. /package/{rules → templates/rust/rules}/rust/diesel-orm/references/REFERENCE.md +0 -0
  499. /package/{rules → templates/rust/rules}/rust/diesel-orm/references/schema-patterns.md +0 -0
  500. /package/{rules → templates/rust/rules}/rust/rocket/SKILL.md +0 -0
  501. /package/{rules → templates/rust/rules}/rust/rocket/references/REFERENCE.md +0 -0
  502. /package/{rules → templates/rust/rules}/rust/rocket/references/handler-patterns.md +0 -0
  503. /package/{rules → templates/rust/rules}/rust/sea-orm/SKILL.md +0 -0
  504. /package/{rules → templates/rust/rules}/rust/sea-orm/references/REFERENCE.md +0 -0
  505. /package/{rules → templates/rust/rules}/rust/sea-orm/references/entity-patterns.md +0 -0
  506. /package/{rules → templates/rust/rules}/rust/serde-serialization/SKILL.md +0 -0
  507. /package/{rules → templates/rust/rules}/rust/serde-serialization/references/REFERENCE.md +0 -0
  508. /package/{rules → templates/rust/rules}/rust/serde-serialization/references/serialization-patterns.md +0 -0
  509. /package/{rules → templates/rust/rules}/rust/sqlx-database/SKILL.md +0 -0
  510. /package/{rules → templates/rust/rules}/rust/sqlx-database/references/REFERENCE.md +0 -0
  511. /package/{rules → templates/rust/rules}/rust/sqlx-database/references/query-patterns.md +0 -0
  512. /package/{rules → templates/rust/rules}/rust/tauri/SKILL.md +0 -0
  513. /package/{rules → templates/rust/rules}/rust/tauri/references/REFERENCE.md +0 -0
  514. /package/{rules → templates/rust/rules}/rust/tauri/references/command-patterns.md +0 -0
  515. /package/{rules → templates/rust/rules}/rust/tokio-runtime/SKILL.md +0 -0
  516. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/REFERENCE.md +0 -0
  517. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/async-patterns.md +0 -0
  518. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/synchronization.md +0 -0
  519. /package/{rules → templates/rust/rules}/rust/tonic/SKILL.md +0 -0
  520. /package/{rules → templates/rust/rules}/rust/tonic/references/REFERENCE.md +0 -0
  521. /package/{rules → templates/rust/rules}/rust/tonic/references/service-patterns.md +0 -0
  522. /package/{rules → templates/rust/rules}/rust/tracing/SKILL.md +0 -0
  523. /package/{rules → templates/rust/rules}/rust/tracing/references/REFERENCE.md +0 -0
  524. /package/{rules → templates/rust/rules}/rust/tracing/references/instrumentation.md +0 -0
  525. /package/{rules → templates/typescript/rules}/typescript/best-practices/SKILL.md +0 -0
  526. /package/{rules → templates/typescript/rules}/typescript/best-practices/references/REFERENCE.md +0 -0
  527. /package/{rules → templates/typescript/rules}/typescript/language/SKILL.md +0 -0
  528. /package/{rules → templates/typescript/rules}/typescript/language/references/REFERENCE.md +0 -0
  529. /package/{rules → templates/typescript/rules}/typescript/patterns.rule.md +0 -0
  530. /package/{rules → templates/typescript/rules}/typescript/security/SKILL.md +0 -0
  531. /package/{rules → templates/typescript/rules}/typescript/security/references/REFERENCE.md +0 -0
  532. /package/{rules → templates/typescript/rules}/typescript/tooling/SKILL.md +0 -0
  533. /package/{rules → templates/typescript/rules}/typescript/tooling/references/REFERENCE.md +0 -0
package/cli/detect.js ADDED
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Project Type Detection
3
+ *
4
+ * Detects the technology stack of a project by analyzing:
5
+ * - Configuration files (package.json, pubspec.yaml, go.mod, etc.)
6
+ * - Dependencies
7
+ * - File patterns
8
+ */
9
+
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ /**
14
+ * Detection rules for different technology stacks
15
+ * Each rule can have:
16
+ * - files: Array of files that indicate this tech (any match)
17
+ * - dependencies: Array of npm dependencies (any match)
18
+ * - devDependencies: Array of npm devDependencies (any match)
19
+ * - rules: Array of rule directories to install
20
+ */
21
+ const DETECTION_RULES = {
22
+ // Flutter/Dart
23
+ flutter: {
24
+ files: ['pubspec.yaml', 'pubspec.lock'],
25
+ rules: ['flutter', 'dart']
26
+ },
27
+
28
+ // React (standalone)
29
+ react: {
30
+ dependencies: ['react', 'react-dom'],
31
+ excludeIf: ['next'], // Don't detect if Next.js is present
32
+ rules: ['react', 'typescript']
33
+ },
34
+
35
+ // Next.js (includes React rules)
36
+ nextjs: {
37
+ files: ['next.config.js', 'next.config.mjs', 'next.config.ts'],
38
+ dependencies: ['next'],
39
+ rules: ['nextjs', 'react', 'typescript']
40
+ },
41
+
42
+ // NestJS
43
+ nestjs: {
44
+ files: ['nest-cli.json'],
45
+ dependencies: ['@nestjs/core', '@nestjs/common'],
46
+ rules: ['nestjs', 'typescript']
47
+ },
48
+
49
+ // Golang
50
+ golang: {
51
+ files: ['go.mod', 'go.sum'],
52
+ rules: ['golang']
53
+ },
54
+
55
+ // Python
56
+ python: {
57
+ files: ['pyproject.toml', 'requirements.txt', 'Pipfile', 'setup.py', 'poetry.lock'],
58
+ rules: ['python']
59
+ },
60
+
61
+ // Rust
62
+ rust: {
63
+ files: ['Cargo.toml', 'Cargo.lock'],
64
+ rules: ['rust']
65
+ },
66
+
67
+ // Java/Kotlin
68
+ java: {
69
+ files: ['pom.xml', 'build.gradle', 'build.gradle.kts'],
70
+ rules: ['java']
71
+ },
72
+
73
+ // TypeScript (generic, if not covered by framework)
74
+ typescript: {
75
+ files: ['tsconfig.json'],
76
+ devDependencies: ['typescript'],
77
+ rules: ['typescript']
78
+ },
79
+
80
+ // Prisma ORM
81
+ prisma: {
82
+ files: ['prisma/schema.prisma'],
83
+ dependencies: ['@prisma/client'],
84
+ devDependencies: ['prisma'],
85
+ rules: ['prisma']
86
+ },
87
+
88
+ // Supabase
89
+ supabase: {
90
+ files: ['supabase/config.toml'],
91
+ dependencies: ['@supabase/supabase-js'],
92
+ rules: ['supabase']
93
+ },
94
+
95
+ // Vue.js
96
+ vue: {
97
+ dependencies: ['vue'],
98
+ files: ['vue.config.js', 'vite.config.ts', 'vite.config.js'],
99
+ rules: ['vue', 'typescript']
100
+ },
101
+
102
+ // Angular
103
+ angular: {
104
+ files: ['angular.json'],
105
+ dependencies: ['@angular/core'],
106
+ rules: ['angular', 'typescript']
107
+ },
108
+
109
+ // Svelte/SvelteKit
110
+ svelte: {
111
+ files: ['svelte.config.js'],
112
+ dependencies: ['svelte', '@sveltejs/kit'],
113
+ rules: ['svelte', 'typescript']
114
+ },
115
+
116
+ // Express.js
117
+ express: {
118
+ dependencies: ['express'],
119
+ rules: ['express', 'nodejs']
120
+ },
121
+
122
+ // Fastify
123
+ fastify: {
124
+ dependencies: ['fastify'],
125
+ rules: ['fastify', 'nodejs']
126
+ },
127
+
128
+ // Hono
129
+ hono: {
130
+ dependencies: ['hono'],
131
+ rules: ['hono', 'typescript']
132
+ },
133
+
134
+ // Tailwind CSS
135
+ tailwind: {
136
+ files: ['tailwind.config.js', 'tailwind.config.ts', 'tailwind.config.cjs'],
137
+ devDependencies: ['tailwindcss'],
138
+ rules: ['tailwind']
139
+ },
140
+
141
+ // Docker
142
+ docker: {
143
+ files: ['Dockerfile', 'docker-compose.yml', 'docker-compose.yaml'],
144
+ rules: ['docker']
145
+ }
146
+ };
147
+
148
+ /**
149
+ * Parse package.json and extract dependencies
150
+ */
151
+ function parsePackageJson(projectDir) {
152
+ const pkgPath = path.join(projectDir, 'package.json');
153
+
154
+ if (!fs.existsSync(pkgPath)) {
155
+ return { dependencies: {}, devDependencies: {} };
156
+ }
157
+
158
+ try {
159
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
160
+ return {
161
+ dependencies: pkg.dependencies || {},
162
+ devDependencies: pkg.devDependencies || {}
163
+ };
164
+ } catch (e) {
165
+ return { dependencies: {}, devDependencies: {} };
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Check if any file from the list exists in the project
171
+ */
172
+ function hasAnyFile(projectDir, files) {
173
+ return files.some(file => fs.existsSync(path.join(projectDir, file)));
174
+ }
175
+
176
+ /**
177
+ * Check if any dependency from the list exists
178
+ */
179
+ function hasAnyDependency(deps, targetDeps) {
180
+ return targetDeps.some(dep => dep in deps);
181
+ }
182
+
183
+ /**
184
+ * Detect project types based on rules
185
+ * @param {string} projectDir - Project directory to analyze
186
+ * @returns {string[]} - Array of detected technology types
187
+ */
188
+ function detectProjectType(projectDir = process.cwd()) {
189
+ const detected = new Set();
190
+ const { dependencies, devDependencies } = parsePackageJson(projectDir);
191
+ const allDeps = { ...dependencies, ...devDependencies };
192
+
193
+ // First pass: detect all matching rules
194
+ const matches = [];
195
+
196
+ for (const [type, config] of Object.entries(DETECTION_RULES)) {
197
+ let isMatch = false;
198
+
199
+ // Check files
200
+ if (config.files && hasAnyFile(projectDir, config.files)) {
201
+ isMatch = true;
202
+ }
203
+
204
+ // Check dependencies
205
+ if (config.dependencies && hasAnyDependency(allDeps, config.dependencies)) {
206
+ isMatch = true;
207
+ }
208
+
209
+ // Check devDependencies specifically
210
+ if (config.devDependencies && hasAnyDependency(devDependencies, config.devDependencies)) {
211
+ isMatch = true;
212
+ }
213
+
214
+ if (isMatch) {
215
+ // Check exclusions
216
+ if (config.excludeIf) {
217
+ const shouldExclude = config.excludeIf.some(excludeType => {
218
+ const excludeConfig = DETECTION_RULES[excludeType];
219
+ if (!excludeConfig) return false;
220
+
221
+ if (excludeConfig.files && hasAnyFile(projectDir, excludeConfig.files)) return true;
222
+ if (excludeConfig.dependencies && hasAnyDependency(allDeps, excludeConfig.dependencies)) return true;
223
+ return false;
224
+ });
225
+
226
+ if (shouldExclude) continue;
227
+ }
228
+
229
+ matches.push({ type, rules: config.rules });
230
+ }
231
+ }
232
+
233
+ // Collect unique rules from all matches
234
+ for (const match of matches) {
235
+ detected.add(match.type);
236
+ }
237
+
238
+ return Array.from(detected);
239
+ }
240
+
241
+ /**
242
+ * Get all rules that should be installed for detected types
243
+ * @param {string[]} detectedTypes - Array of detected technology types
244
+ * @returns {string[]} - Array of unique rule directories to install
245
+ */
246
+ function getRulesForTypes(detectedTypes) {
247
+ const rules = new Set();
248
+
249
+ for (const type of detectedTypes) {
250
+ const config = DETECTION_RULES[type];
251
+ if (config && config.rules) {
252
+ config.rules.forEach(rule => rules.add(rule));
253
+ }
254
+ }
255
+
256
+ return Array.from(rules);
257
+ }
258
+
259
+ /**
260
+ * Print detection results
261
+ */
262
+ function printDetectionResults(projectDir = process.cwd()) {
263
+ const detected = detectProjectType(projectDir);
264
+ const rules = getRulesForTypes(detected);
265
+
266
+ console.log('\n' + '='.repeat(50));
267
+ console.log(' PROJECT DETECTION RESULTS');
268
+ console.log('='.repeat(50));
269
+ console.log(`\nDirectory: ${projectDir}`);
270
+
271
+ if (detected.length === 0) {
272
+ console.log('\nNo specific technology detected.');
273
+ console.log('Will install base commands only.\n');
274
+ return;
275
+ }
276
+
277
+ console.log('\nDetected Technologies:');
278
+ detected.forEach(tech => console.log(` - ${tech}`));
279
+
280
+ console.log('\nRules to Install:');
281
+ rules.forEach(rule => console.log(` - ${rule}`));
282
+
283
+ console.log('');
284
+ }
285
+
286
+ module.exports = {
287
+ DETECTION_RULES,
288
+ detectProjectType,
289
+ getRulesForTypes,
290
+ printDetectionResults,
291
+ parsePackageJson
292
+ };
package/cli/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Devkit Agent Assistant CLI
4
+ * Devkit CLI v3
5
5
  *
6
+ * Per-project installation with smart tech detection.
6
7
  * Main entry point for the CLI tool.
7
8
  */
8
9
 
@@ -10,15 +11,21 @@ const path = require('path');
10
11
  const fs = require('fs');
11
12
 
12
13
  const VERSION = require('../package.json').version;
13
- const {
14
- install,
15
- uninstall,
16
- update,
17
- interactiveInstall,
18
- listSkills,
19
- listCategories,
20
- initProject
21
- } = require('./install');
14
+
15
+ // New modular imports
16
+ const { initProject, uninstallProject } = require('./init');
17
+ const { updateProject, showStatus } = require('./update');
18
+ const { detectProjectType, getRulesForTypes, printDetectionResults } = require('./detect');
19
+ const { validatePath } = require('./utils');
20
+
21
+ // Legacy imports for backwards compatibility (will be deprecated)
22
+ let legacyInstall = null;
23
+ try {
24
+ const legacy = require('./install');
25
+ legacyInstall = legacy;
26
+ } catch (e) {
27
+ // Legacy install not available, that's fine
28
+ }
22
29
 
23
30
  /**
24
31
  * Parse command line arguments
@@ -26,40 +33,53 @@ const {
26
33
  function parseArgs(args) {
27
34
  const options = {
28
35
  command: null,
36
+ path: null,
37
+ force: false,
38
+ update: false,
39
+ clean: false,
40
+ help: false,
41
+ // Legacy options (deprecated)
29
42
  tool: null,
30
43
  minimal: false,
31
- lite: false, // New: commands only, no skills/rules/hooks
44
+ lite: false,
32
45
  categories: [],
33
46
  interactive: false,
34
47
  fullSkills: false,
35
- indexOnly: true, // Default: index-only mode
36
- help: false
48
+ indexOnly: true
37
49
  };
38
50
 
39
51
  for (const arg of args) {
40
52
  if (arg === '--help' || arg === '-h') {
41
53
  options.help = true;
42
- } else if (arg === '--minimal' || arg === '-m') {
43
- options.minimal = true;
44
- options.indexOnly = false;
45
- } else if (arg === '--lite' || arg === '-l') {
46
- options.lite = true;
47
- options.indexOnly = false;
48
- } else if (arg === '--interactive' || arg === '-i') {
49
- options.interactive = true;
50
- } else if (arg === '--full' || arg === '-f') {
51
- options.fullSkills = true;
52
- options.indexOnly = false;
53
- } else if (arg.startsWith('--category=') || arg.startsWith('-c=')) {
54
- const cats = arg.split('=')[1].split(',').map(c => c.trim());
55
- options.categories.push(...cats);
56
- options.indexOnly = false;
54
+ } else if (arg === '--force' || arg === '-f') {
55
+ options.force = true;
56
+ } else if (arg === '--update' || arg === '-u') {
57
+ options.update = true;
58
+ } else if (arg === '--clean' || arg === '-c') {
59
+ options.clean = true;
60
+ } else if (arg === '--status' || arg === '-s') {
61
+ options.command = 'status';
62
+ } else if (arg.startsWith('--path=')) {
63
+ options.path = arg.split('=')[1];
57
64
  } else if (arg.startsWith('--')) {
58
- // Unknown flag, ignore
65
+ // Handle legacy options for backwards compatibility
66
+ if (arg === '--minimal' || arg === '-m') options.minimal = true;
67
+ if (arg === '--lite' || arg === '-l') options.lite = true;
68
+ if (arg === '--interactive' || arg === '-i') options.interactive = true;
69
+ if (arg === '--full') options.fullSkills = true;
70
+ if (arg.startsWith('--category=')) {
71
+ const cats = arg.split('=')[1].split(',').map(c => c.trim());
72
+ options.categories.push(...cats);
73
+ }
59
74
  } else if (!options.command) {
60
75
  options.command = arg;
61
- } else if (!options.tool) {
62
- options.tool = arg;
76
+ } else if (!options.path && !options.tool) {
77
+ // Could be a path or a tool name (legacy)
78
+ if (['claude', 'cursor', 'copilot', 'gemini'].includes(arg)) {
79
+ options.tool = arg;
80
+ } else {
81
+ options.path = arg;
82
+ }
63
83
  }
64
84
  }
65
85
 
@@ -68,95 +88,187 @@ function parseArgs(args) {
68
88
 
69
89
  function showHelp() {
70
90
  console.log(`
71
- Devkit v${VERSION}
91
+ Devkit v${VERSION} - Per-Project AI Skills
72
92
 
73
93
  USAGE:
74
- devkit <command> [tool] [options]
94
+ devkit <command> [options]
75
95
 
76
96
  COMMANDS:
77
- install Install skills and rules to AI tools (global ~/.claude/)
78
- init Initialize devkit in current project (.claude/ folder)
79
- uninstall Remove all installed skills and rules
80
- update Check for updates and reinstall
81
- list List all available skills
82
- categories List available skill categories
83
- version Show version
84
- help Show this help
85
-
86
- TOOLS:
87
- claude Claude Code (~/.claude/)
88
- cursor Cursor (~/.cursor/)
89
- copilot GitHub Copilot (~/.copilot/)
90
- gemini Gemini / Antigravity (~/.gemini/)
97
+ init Initialize devkit in current project (.claude/ folder)
98
+ Auto-detects tech stack and installs relevant rules only.
99
+ This is the PRIMARY command - use this for new projects.
91
100
 
92
- OPTIONS:
93
- --lite, -l LITE mode - commands only, no skills/rules/hooks
94
- Best for avoiding context limit issues
95
- Installs: /brainstorm, /plan, /fix, /code, etc.
101
+ update Update existing installation
102
+ Re-detects project type and updates rules accordingly.
103
+
104
+ detect Show detected technologies for current project
105
+ Useful to see what devkit will install.
96
106
 
97
- (default) Index-only mode - installs skills index file only
98
- Commands and agents are always fully installed
99
- May still cause context issues with some models
107
+ status Show installation status
100
108
 
101
- --minimal, -m Install ~20 core skills (instead of index)
109
+ uninstall Remove devkit from current project
102
110
 
103
- --category=CATS, -c= Install specific categories
104
- Example: --category=react,typescript,testing
111
+ list List all available skills
105
112
 
106
- --full, -f Install ALL 413+ skills (may cause context limit)
107
- Only use if you need full skill content locally
113
+ help Show this help
108
114
 
109
- --interactive, -i Interactive mode - choose categories
115
+ version Show version
110
116
 
111
- --help, -h Show this help
117
+ OPTIONS:
118
+ --force, -f Force overwrite existing installation
119
+ --clean, -c Remove rules for technologies no longer detected (with update)
120
+ --path=DIR Specify project directory (default: current directory)
121
+ --help, -h Show this help
112
122
 
113
123
  EXAMPLES:
114
- devkit install --lite # Commands only (recommended for context limit)
115
- devkit install # Index-only (default)
116
- devkit install claude # Index-only to Claude Code
117
- devkit install --minimal # Install ~20 core skills
118
- devkit install --category=react # Install React-related skills
119
- devkit install --full # Install all skills (large)
120
- devkit install --interactive # Choose interactively
121
- devkit uninstall # Remove from all tools
124
+ devkit init # Initialize in current project
125
+ devkit init --force # Overwrite existing installation
126
+ devkit update # Update and re-detect technologies
127
+ devkit update --clean # Update and remove old rules
128
+ devkit detect # Show what would be detected
129
+ devkit status # Show current installation
130
+ devkit uninstall # Remove from current project
122
131
 
123
132
  HOW IT WORKS:
124
- By default, devkit installs:
125
- - SKILLS_INDEX.md (29KB summary of 411 skills)
126
- - All commands (/plan, /cook, /brainstorm, etc.)
127
- - All agents (planner, debugger, reviewer, etc.)
128
- - Hooks, rules, output-styles
133
+ 1. devkit init analyzes your project files:
134
+ - package.json React, Next.js, NestJS, etc.
135
+ - pubspec.yaml Flutter
136
+ - go.mod Golang
137
+ - pyproject.toml Python
129
138
 
130
- When you need a specific skill, Claude reads it on-demand from
131
- the skills-index.json or loads the full skill file.
139
+ 2. Installs ONLY relevant content:
140
+ - Merged commands (~100 commands, ~150KB)
141
+ - Tech-specific rules (based on detection)
142
+ - Skills index (for on-demand loading)
143
+ - Essential hooks
132
144
 
133
- This reduces context usage from ~59MB to ~30KB for skills.
145
+ 3. Total size: ~300-500KB (vs 59MB for global install)
146
+
147
+ This ensures best practices for your tech stack without
148
+ overwhelming Claude with irrelevant rules.
134
149
 
135
150
  For more info: https://github.com/ngxtm/devkit
136
151
  `);
137
152
  }
138
153
 
154
+ function showDeprecationWarning(cmd) {
155
+ console.log(`
156
+ ⚠️ DEPRECATION WARNING
157
+ ========================
158
+ The 'devkit ${cmd}' command is deprecated in v3.
159
+
160
+ Global installation caused context limit issues (~59MB).
161
+ Use per-project installation instead:
162
+
163
+ devkit init # Initialize in current project (~300-500KB)
164
+
165
+ This auto-detects your tech stack and installs only relevant rules.
166
+ `);
167
+ }
168
+
139
169
  // Command handlers
140
170
  const commands = {
141
- install: (options) => {
142
- if (options.interactive) {
143
- return interactiveInstall(options.tool);
144
- }
145
- install(options.tool, {
146
- minimal: options.minimal,
147
- lite: options.lite,
148
- categories: options.categories,
149
- fullSkills: options.fullSkills,
150
- indexOnly: options.indexOnly
171
+ // Primary command - per-project init
172
+ init: (options) => {
173
+ const projectPath = validatePath(options.path) || process.cwd();
174
+ return initProject({
175
+ path: projectPath,
176
+ force: options.force,
177
+ update: options.update
151
178
  });
152
179
  },
153
- init: (options) => initProject(options),
154
- uninstall: (options) => uninstall(options.tool),
155
- update: () => update(),
156
- list: () => listSkills(),
157
- categories: () => listCategories(),
180
+
181
+ // Update existing installation
182
+ update: (options) => {
183
+ const projectPath = validatePath(options.path) || process.cwd();
184
+ return updateProject({
185
+ path: projectPath,
186
+ force: options.force,
187
+ clean: options.clean
188
+ });
189
+ },
190
+
191
+ // Detect project type
192
+ detect: (options) => {
193
+ const projectDir = validatePath(options.path) || process.cwd();
194
+ printDetectionResults(projectDir);
195
+ return { success: true };
196
+ },
197
+
198
+ // Show status
199
+ status: (options) => {
200
+ const projectPath = validatePath(options.path) || process.cwd();
201
+ return showStatus({
202
+ path: projectPath
203
+ });
204
+ },
205
+
206
+ // Uninstall
207
+ uninstall: (options) => {
208
+ const projectPath = validatePath(options.path) || process.cwd();
209
+ return uninstallProject({
210
+ path: projectPath
211
+ });
212
+ },
213
+
214
+ // List skills (from skills-index.json)
215
+ list: () => {
216
+ const indexPath = path.join(__dirname, '..', 'skills-index.json');
217
+ if (!fs.existsSync(indexPath)) {
218
+ console.log('Skills index not found.');
219
+ return;
220
+ }
221
+
222
+ const index = JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
223
+ console.log(`\nAvailable Skills (${index.skills?.length || 0} total):\n`);
224
+
225
+ // Group by category
226
+ const categories = {};
227
+ for (const skill of (index.skills || [])) {
228
+ const cat = skill.category || 'other';
229
+ categories[cat] = categories[cat] || [];
230
+ categories[cat].push(skill.name);
231
+ }
232
+
233
+ for (const [cat, skills] of Object.entries(categories).sort()) {
234
+ console.log(` ${cat} (${skills.length}):`);
235
+ skills.slice(0, 5).forEach(s => console.log(` - ${s}`));
236
+ if (skills.length > 5) {
237
+ console.log(` ... and ${skills.length - 5} more`);
238
+ }
239
+ console.log('');
240
+ }
241
+ },
242
+
243
+ // Help
158
244
  help: () => showHelp(),
245
+
246
+ // Version
159
247
  version: () => console.log(`v${VERSION}`),
248
+
249
+ // Legacy commands (deprecated) - redirect with warning
250
+ install: (options) => {
251
+ showDeprecationWarning('install');
252
+
253
+ // Still try to run if legacy module available
254
+ if (legacyInstall && legacyInstall.install) {
255
+ console.log('Running legacy install anyway...\n');
256
+ return legacyInstall.install(options.tool, {
257
+ minimal: options.minimal,
258
+ lite: options.lite,
259
+ categories: options.categories,
260
+ fullSkills: options.fullSkills,
261
+ indexOnly: options.indexOnly
262
+ });
263
+ }
264
+ },
265
+
266
+ categories: () => {
267
+ if (legacyInstall && legacyInstall.listCategories) {
268
+ return legacyInstall.listCategories();
269
+ }
270
+ console.log('Use: devkit list');
271
+ }
160
272
  };
161
273
 
162
274
  // Main execution