@ngxtm/devkit 2.0.2 → 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 (534) hide show
  1. package/cli/detect.js +292 -0
  2. package/cli/index.js +205 -80
  3. package/cli/init.js +245 -0
  4. package/cli/install.js +231 -53
  5. package/cli/update.js +243 -0
  6. package/cli/utils.js +195 -0
  7. package/package.json +16 -20
  8. package/rules-index.json +76 -0
  9. package/scripts/generate-index.js +223 -0
  10. package/scripts/merge-commands.js +290 -0
  11. package/scripts/organize-rules.js +226 -0
  12. package/templates/base/hooks/lib/ck-config-utils.cjs +769 -0
  13. package/templates/base/hooks/lib/ck-paths.cjs +110 -0
  14. package/templates/base/hooks/lib/colors.cjs +95 -0
  15. package/templates/base/hooks/lib/config-counter.cjs +103 -0
  16. package/templates/base/hooks/lib/context-builder.cjs +600 -0
  17. package/templates/base/hooks/lib/context-tracker.cjs +335 -0
  18. package/templates/base/hooks/lib/privacy-checker.cjs +297 -0
  19. package/templates/base/hooks/lib/project-detector.cjs +430 -0
  20. package/templates/base/hooks/lib/scout-checker.cjs +172 -0
  21. package/templates/base/hooks/lib/transcript-parser.cjs +164 -0
  22. package/templates/base/hooks/privacy-block.cjs +145 -0
  23. package/agents/backend-engineer.md +0 -154
  24. package/agents/brainstormer.md +0 -169
  25. package/agents/business-analyst.md +0 -166
  26. package/agents/database-architect.md +0 -159
  27. package/agents/debugger.md +0 -155
  28. package/agents/designer.md +0 -150
  29. package/agents/devops-engineer.md +0 -155
  30. package/agents/docs-manager.md +0 -171
  31. package/agents/frontend-engineer.md +0 -159
  32. package/agents/game-engineer.md +0 -148
  33. package/agents/mobile-engineer.md +0 -149
  34. package/agents/performance-engineer.md +0 -152
  35. package/agents/planner.md +0 -161
  36. package/agents/project-manager.md +0 -160
  37. package/agents/researcher.md +0 -146
  38. package/agents/reviewer.md +0 -155
  39. package/agents/scouter.md +0 -157
  40. package/agents/security-engineer.md +0 -154
  41. package/agents/tech-lead.md +0 -159
  42. package/agents/tester.md +0 -157
  43. package/agents-claudekit/brainstormer.md +0 -113
  44. package/agents-claudekit/code-reviewer.md +0 -157
  45. package/agents-claudekit/code-simplifier.md +0 -42
  46. package/agents-claudekit/copywriter.md +0 -110
  47. package/agents-claudekit/database-admin.md +0 -92
  48. package/agents-claudekit/debugger.md +0 -137
  49. package/agents-claudekit/docs-manager.md +0 -208
  50. package/agents-claudekit/fullstack-developer.md +0 -95
  51. package/agents-claudekit/git-manager.md +0 -394
  52. package/agents-claudekit/journal-writer.md +0 -113
  53. package/agents-claudekit/mcp-manager.md +0 -93
  54. package/agents-claudekit/planner.md +0 -108
  55. package/agents-claudekit/project-manager.md +0 -125
  56. package/agents-claudekit/researcher.md +0 -38
  57. package/agents-claudekit/scout-external.md +0 -141
  58. package/agents-claudekit/scout.md +0 -107
  59. package/agents-claudekit/tester.md +0 -105
  60. package/agents-claudekit/ui-ux-designer.md +0 -236
  61. package/commands/ask.md +0 -64
  62. package/commands/brainstorm.md +0 -64
  63. package/commands/code.md +0 -64
  64. package/commands/cook.md +0 -64
  65. package/commands/debug.md +0 -64
  66. package/commands/design/fast.md +0 -134
  67. package/commands/fix/fast.md +0 -84
  68. package/commands/fix/hard.md +0 -116
  69. package/commands/fix.md +0 -64
  70. package/commands/plan/fast.md +0 -78
  71. package/commands/plan/hard.md +0 -131
  72. package/commands/plan.md +0 -64
  73. package/commands/test.md +0 -64
  74. package/matrix-skills/_index.yaml +0 -275
  75. package/matrix-skills/ai-ml.yaml +0 -353
  76. package/matrix-skills/architecture.yaml +0 -93
  77. package/matrix-skills/backend.yaml +0 -280
  78. package/matrix-skills/cloud.yaml +0 -112
  79. package/matrix-skills/data.yaml +0 -74
  80. package/matrix-skills/design.yaml +0 -98
  81. package/matrix-skills/devops.yaml +0 -200
  82. package/matrix-skills/frontend.yaml +0 -200
  83. package/matrix-skills/gaming.yaml +0 -39
  84. package/matrix-skills/languages.yaml +0 -160
  85. package/matrix-skills/management.yaml +0 -50
  86. package/matrix-skills/mcp.yaml +0 -82
  87. package/matrix-skills/mobile.yaml +0 -85
  88. package/matrix-skills/performance.yaml +0 -23
  89. package/matrix-skills/planning.yaml +0 -117
  90. package/matrix-skills/quality.yaml +0 -195
  91. package/matrix-skills/research.yaml +0 -106
  92. package/matrix-skills/security.yaml +0 -293
  93. package/matrix-skills/tools.yaml +0 -352
  94. package/output-styles/coding-level-0-eli5.md +0 -103
  95. package/output-styles/coding-level-1-junior.md +0 -124
  96. package/output-styles/coding-level-2-mid.md +0 -146
  97. package/output-styles/coding-level-3-senior.md +0 -148
  98. package/output-styles/coding-level-4-lead.md +0 -159
  99. package/output-styles/coding-level-5-god.md +0 -91
  100. package/rules/README.md +0 -141
  101. package/rules/metadata.json +0 -54
  102. package/settings.json +0 -3
  103. package/statusline.cjs +0 -500
  104. package/statusline.ps1 +0 -307
  105. package/statusline.sh +0 -237
  106. package/workflows/development-rules.md +0 -42
  107. package/workflows/documentation-management.md +0 -121
  108. package/workflows/orchestration-protocol.md +0 -16
  109. package/workflows/primary-workflow.md +0 -45
  110. /package/{commands → merged-commands}/ask/fast.md +0 -0
  111. /package/{commands → merged-commands}/ask/hard.md +0 -0
  112. /package/{commands-claudekit → merged-commands}/ask.md +0 -0
  113. /package/{commands → merged-commands}/auto.md +0 -0
  114. /package/{commands-claudekit → merged-commands}/bootstrap/auto/fast.md +0 -0
  115. /package/{commands-claudekit → merged-commands}/bootstrap/auto/parallel.md +0 -0
  116. /package/{commands-claudekit → merged-commands}/bootstrap/auto.md +0 -0
  117. /package/{commands-claudekit → merged-commands}/bootstrap.md +0 -0
  118. /package/{commands → merged-commands}/brainstorm/fast.md +0 -0
  119. /package/{commands → merged-commands}/brainstorm/hard.md +0 -0
  120. /package/{commands-claudekit → merged-commands}/brainstorm.md +0 -0
  121. /package/{commands-claudekit → merged-commands}/ck-help.md +0 -0
  122. /package/{commands-claudekit → merged-commands}/code/auto.md +0 -0
  123. /package/{commands → merged-commands}/code/fast.md +0 -0
  124. /package/{commands → merged-commands}/code/hard.md +0 -0
  125. /package/{commands-claudekit → merged-commands}/code/no-test.md +0 -0
  126. /package/{commands-claudekit → merged-commands}/code/parallel.md +0 -0
  127. /package/{commands-claudekit → merged-commands}/code.md +0 -0
  128. /package/{commands-claudekit → merged-commands}/coding-level.md +0 -0
  129. /package/{commands-claudekit → merged-commands}/content/cro.md +0 -0
  130. /package/{commands-claudekit → merged-commands}/content/enhance.md +0 -0
  131. /package/{commands-claudekit → merged-commands}/content/fast.md +0 -0
  132. /package/{commands-claudekit → merged-commands}/content/good.md +0 -0
  133. /package/{commands-claudekit → merged-commands}/cook/auto/fast.md +0 -0
  134. /package/{commands-claudekit → merged-commands}/cook/auto/parallel.md +0 -0
  135. /package/{commands-claudekit → merged-commands}/cook/auto.md +0 -0
  136. /package/{commands → merged-commands}/cook/fast.md +0 -0
  137. /package/{commands → merged-commands}/cook/hard.md +0 -0
  138. /package/{commands-claudekit → merged-commands}/cook.md +0 -0
  139. /package/{commands → merged-commands}/debug/fast.md +0 -0
  140. /package/{commands → merged-commands}/debug/hard.md +0 -0
  141. /package/{commands-claudekit → merged-commands}/debug.md +0 -0
  142. /package/{commands → merged-commands}/deploy/check.md +0 -0
  143. /package/{commands → merged-commands}/deploy/preview.md +0 -0
  144. /package/{commands → merged-commands}/deploy/production.md +0 -0
  145. /package/{commands → merged-commands}/deploy/rollback.md +0 -0
  146. /package/{commands → merged-commands}/deploy.md +0 -0
  147. /package/{commands-claudekit → merged-commands}/design/3d.md +0 -0
  148. /package/{commands-claudekit → merged-commands}/design/describe.md +0 -0
  149. /package/{commands-claudekit → merged-commands}/design/fast.md +0 -0
  150. /package/{commands-claudekit → merged-commands}/design/good.md +0 -0
  151. /package/{commands → merged-commands}/design/hard.md +0 -0
  152. /package/{commands-claudekit → merged-commands}/design/screenshot.md +0 -0
  153. /package/{commands-claudekit → merged-commands}/design/video.md +0 -0
  154. /package/{commands → merged-commands}/design.md +0 -0
  155. /package/{commands → merged-commands}/docs/audit.md +0 -0
  156. /package/{commands → merged-commands}/docs/business.md +0 -0
  157. /package/{commands → merged-commands}/docs/core.md +0 -0
  158. /package/{commands-claudekit → merged-commands}/docs/init.md +0 -0
  159. /package/{commands-claudekit → merged-commands}/docs/summarize.md +0 -0
  160. /package/{commands-claudekit → merged-commands}/docs/update.md +0 -0
  161. /package/{commands → merged-commands}/docs.md +0 -0
  162. /package/{commands-claudekit → merged-commands}/fix/ci.md +0 -0
  163. /package/{commands-claudekit → merged-commands}/fix/fast.md +0 -0
  164. /package/{commands-claudekit → merged-commands}/fix/hard.md +0 -0
  165. /package/{commands-claudekit → merged-commands}/fix/logs.md +0 -0
  166. /package/{commands-claudekit → merged-commands}/fix/parallel.md +0 -0
  167. /package/{commands-claudekit → merged-commands}/fix/test.md +0 -0
  168. /package/{commands-claudekit → merged-commands}/fix/types.md +0 -0
  169. /package/{commands-claudekit → merged-commands}/fix/ui.md +0 -0
  170. /package/{commands-claudekit → merged-commands}/fix.md +0 -0
  171. /package/{commands-claudekit → merged-commands}/git/cm.md +0 -0
  172. /package/{commands-claudekit → merged-commands}/git/cp.md +0 -0
  173. /package/{commands-claudekit → merged-commands}/git/merge.md +0 -0
  174. /package/{commands-claudekit → merged-commands}/git/pr.md +0 -0
  175. /package/{commands-claudekit → merged-commands}/integrate/polar.md +0 -0
  176. /package/{commands-claudekit → merged-commands}/integrate/sepay.md +0 -0
  177. /package/{commands-claudekit → merged-commands}/journal.md +0 -0
  178. /package/{commands-claudekit → merged-commands}/kanban.md +0 -0
  179. /package/{commands-claudekit → merged-commands}/plan/archive.md +0 -0
  180. /package/{commands-claudekit → merged-commands}/plan/ci.md +0 -0
  181. /package/{commands-claudekit → merged-commands}/plan/cro.md +0 -0
  182. /package/{commands-claudekit → merged-commands}/plan/fast.md +0 -0
  183. /package/{commands-claudekit → merged-commands}/plan/hard.md +0 -0
  184. /package/{commands-claudekit → merged-commands}/plan/parallel.md +0 -0
  185. /package/{commands-claudekit → merged-commands}/plan/two.md +0 -0
  186. /package/{commands-claudekit → merged-commands}/plan/validate.md +0 -0
  187. /package/{commands-claudekit → merged-commands}/plan.md +0 -0
  188. /package/{commands-claudekit → merged-commands}/preview.md +0 -0
  189. /package/{commands-claudekit → merged-commands}/review/codebase/parallel.md +0 -0
  190. /package/{commands-claudekit → merged-commands}/review/codebase.md +0 -0
  191. /package/{commands → merged-commands}/review/fast.md +0 -0
  192. /package/{commands → merged-commands}/review/hard.md +0 -0
  193. /package/{commands → merged-commands}/review.md +0 -0
  194. /package/{commands-claudekit → merged-commands}/scout/ext.md +0 -0
  195. /package/{commands-claudekit → merged-commands}/scout.md +0 -0
  196. /package/{commands-claudekit → merged-commands}/skill/add.md +0 -0
  197. /package/{commands-claudekit → merged-commands}/skill/create.md +0 -0
  198. /package/{commands-claudekit → merged-commands}/skill/fix-logs.md +0 -0
  199. /package/{commands-claudekit → merged-commands}/skill/optimize/auto.md +0 -0
  200. /package/{commands-claudekit → merged-commands}/skill/optimize.md +0 -0
  201. /package/{commands-claudekit → merged-commands}/skill/plan.md +0 -0
  202. /package/{commands-claudekit → merged-commands}/skill/update.md +0 -0
  203. /package/{commands → merged-commands}/test/fast.md +0 -0
  204. /package/{commands → merged-commands}/test/hard.md +0 -0
  205. /package/{commands-claudekit → merged-commands}/test/ui.md +0 -0
  206. /package/{commands-claudekit → merged-commands}/test.md +0 -0
  207. /package/{commands-claudekit → merged-commands}/use-mcp.md +0 -0
  208. /package/{commands-claudekit → merged-commands}/watzup.md +0 -0
  209. /package/{commands-claudekit → merged-commands}/worktree.md +0 -0
  210. /package/{rules → templates/dart/rules}/dart/best-practices/SKILL.md +0 -0
  211. /package/{rules → templates/dart/rules}/dart/language/SKILL.md +0 -0
  212. /package/{rules → templates/dart/rules}/dart/tooling/SKILL.md +0 -0
  213. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/SKILL.md +0 -0
  214. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/references/REFERENCE.md +0 -0
  215. /package/{rules → templates/flutter/rules}/flutter/auto-route-navigation/references/router-config.md +0 -0
  216. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/SKILL.md +0 -0
  217. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/REFERENCE.md +0 -0
  218. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/auth-bloc-example.md +0 -0
  219. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/equatable-usage.md +0 -0
  220. /package/{rules → templates/flutter/rules}/flutter/bloc-state-management/references/property-based-state.md +0 -0
  221. /package/{rules → templates/flutter/rules}/flutter/bloc.rule.md +0 -0
  222. /package/{rules → templates/flutter/rules}/flutter/cicd/SKILL.md +0 -0
  223. /package/{rules → templates/flutter/rules}/flutter/cicd/references/advanced-workflow.md +0 -0
  224. /package/{rules → templates/flutter/rules}/flutter/cicd/references/fastlane.md +0 -0
  225. /package/{rules → templates/flutter/rules}/flutter/cicd/references/github-actions.md +0 -0
  226. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/SKILL.md +0 -0
  227. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/references/REFERENCE.md +0 -0
  228. /package/{rules → templates/flutter/rules}/flutter/dependency-injection/references/modules.md +0 -0
  229. /package/{rules → templates/flutter/rules}/flutter/error-handling/SKILL.md +0 -0
  230. /package/{rules → templates/flutter/rules}/flutter/error-handling/references/REFERENCE.md +0 -0
  231. /package/{rules → templates/flutter/rules}/flutter/error-handling/references/error-mapping.md +0 -0
  232. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/SKILL.md +0 -0
  233. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/references/REFERENCE.md +0 -0
  234. /package/{rules → templates/flutter/rules}/flutter/feature-based-clean-architecture/references/folder-structure.md +0 -0
  235. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/SKILL.md +0 -0
  236. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/references/app-pages.md +0 -0
  237. /package/{rules → templates/flutter/rules}/flutter/getx-navigation/references/middleware-example.md +0 -0
  238. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/SKILL.md +0 -0
  239. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/references/binding-example.md +0 -0
  240. /package/{rules → templates/flutter/rules}/flutter/getx-state-management/references/reactive-vs-simple.md +0 -0
  241. /package/{rules → templates/flutter/rules}/flutter/go-router-navigation/SKILL.md +0 -0
  242. /package/{rules → templates/flutter/rules}/flutter/idiomatic-flutter/SKILL.md +0 -0
  243. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/SKILL.md +0 -0
  244. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/references/REFERENCE.md +0 -0
  245. /package/{rules → templates/flutter/rules}/flutter/layer-based-clean-architecture/references/repository-mapping.md +0 -0
  246. /package/{rules → templates/flutter/rules}/flutter/localization/SKILL.md +0 -0
  247. /package/{rules → templates/flutter/rules}/flutter/localization/references/REFERENCE.md +0 -0
  248. /package/{rules → templates/flutter/rules}/flutter/localization/references/sheet-loader.md +0 -0
  249. /package/{rules → templates/flutter/rules}/flutter/navigator-v1-navigation/SKILL.md +0 -0
  250. /package/{rules → templates/flutter/rules}/flutter/navigator-v1-navigation/references/on-generate-route.md +0 -0
  251. /package/{rules → templates/flutter/rules}/flutter/performance/SKILL.md +0 -0
  252. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/SKILL.md +0 -0
  253. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/references/REFERENCE.md +0 -0
  254. /package/{rules → templates/flutter/rules}/flutter/retrofit-networking/references/token-refresh.md +0 -0
  255. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/SKILL.md +0 -0
  256. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/architecture.md +0 -0
  257. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/best-practices.md +0 -0
  258. /package/{rules → templates/flutter/rules}/flutter/riverpod-state-management/references/testing.md +0 -0
  259. /package/{rules → templates/flutter/rules}/flutter/riverpod.rule.md +0 -0
  260. /package/{rules → templates/flutter/rules}/flutter/security/SKILL.md +0 -0
  261. /package/{rules → templates/flutter/rules}/flutter/security/references/REFERENCE.md +0 -0
  262. /package/{rules → templates/flutter/rules}/flutter/security/references/network-security.md +0 -0
  263. /package/{rules → templates/flutter/rules}/flutter/testing/SKILL.md +0 -0
  264. /package/{rules → templates/flutter/rules}/flutter/testing/references/REFERENCE.md +0 -0
  265. /package/{rules → templates/flutter/rules}/flutter/testing/references/bloc-testing.md +0 -0
  266. /package/{rules → templates/flutter/rules}/flutter/testing/references/integration-testing.md +0 -0
  267. /package/{rules → templates/flutter/rules}/flutter/testing/references/robot-pattern.md +0 -0
  268. /package/{rules → templates/flutter/rules}/flutter/testing/references/unit-testing.md +0 -0
  269. /package/{rules → templates/flutter/rules}/flutter/testing/references/widget-testing.md +0 -0
  270. /package/{rules → templates/flutter/rules}/flutter/widgets/SKILL.md +0 -0
  271. /package/{rules → templates/golang/rules}/golang/chi-router/SKILL.md +0 -0
  272. /package/{rules → templates/golang/rules}/golang/chi-router/references/REFERENCE.md +0 -0
  273. /package/{rules → templates/golang/rules}/golang/chi-router/references/routing-patterns.md +0 -0
  274. /package/{rules → templates/golang/rules}/golang/cobra-cli/SKILL.md +0 -0
  275. /package/{rules → templates/golang/rules}/golang/cobra-cli/references/REFERENCE.md +0 -0
  276. /package/{rules → templates/golang/rules}/golang/cobra-cli/references/command-patterns.md +0 -0
  277. /package/{rules → templates/golang/rules}/golang/core/SKILL.md +0 -0
  278. /package/{rules → templates/golang/rules}/golang/core/references/REFERENCE.md +0 -0
  279. /package/{rules → templates/golang/rules}/golang/core/references/concurrency-patterns.md +0 -0
  280. /package/{rules → templates/golang/rules}/golang/core/references/error-handling.md +0 -0
  281. /package/{rules → templates/golang/rules}/golang/echo-framework/SKILL.md +0 -0
  282. /package/{rules → templates/golang/rules}/golang/echo-framework/references/REFERENCE.md +0 -0
  283. /package/{rules → templates/golang/rules}/golang/echo-framework/references/middleware-patterns.md +0 -0
  284. /package/{rules → templates/golang/rules}/golang/echo-framework/references/routing-patterns.md +0 -0
  285. /package/{rules → templates/golang/rules}/golang/ent-orm/SKILL.md +0 -0
  286. /package/{rules → templates/golang/rules}/golang/ent-orm/references/REFERENCE.md +0 -0
  287. /package/{rules → templates/golang/rules}/golang/ent-orm/references/schema-patterns.md +0 -0
  288. /package/{rules → templates/golang/rules}/golang/fiber-framework/SKILL.md +0 -0
  289. /package/{rules → templates/golang/rules}/golang/fiber-framework/references/REFERENCE.md +0 -0
  290. /package/{rules → templates/golang/rules}/golang/fiber-framework/references/routing-patterns.md +0 -0
  291. /package/{rules → templates/golang/rules}/golang/gin-framework/SKILL.md +0 -0
  292. /package/{rules → templates/golang/rules}/golang/gin-framework/references/REFERENCE.md +0 -0
  293. /package/{rules → templates/golang/rules}/golang/gin-framework/references/middleware-patterns.md +0 -0
  294. /package/{rules → templates/golang/rules}/golang/gorm-orm/SKILL.md +0 -0
  295. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/REFERENCE.md +0 -0
  296. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/model-definitions.md +0 -0
  297. /package/{rules → templates/golang/rules}/golang/gorm-orm/references/query-patterns.md +0 -0
  298. /package/{rules → templates/golang/rules}/golang/grpc/SKILL.md +0 -0
  299. /package/{rules → templates/golang/rules}/golang/grpc/references/REFERENCE.md +0 -0
  300. /package/{rules → templates/golang/rules}/golang/grpc/references/service-patterns.md +0 -0
  301. /package/{rules → templates/golang/rules}/golang/testify/SKILL.md +0 -0
  302. /package/{rules → templates/golang/rules}/golang/testify/references/REFERENCE.md +0 -0
  303. /package/{rules → templates/golang/rules}/golang/testify/references/assert-patterns.md +0 -0
  304. /package/{rules → templates/golang/rules}/golang/validator/SKILL.md +0 -0
  305. /package/{rules → templates/golang/rules}/golang/validator/references/REFERENCE.md +0 -0
  306. /package/{rules → templates/golang/rules}/golang/validator/references/validation-tags.md +0 -0
  307. /package/{rules → templates/golang/rules}/golang/viper-config/SKILL.md +0 -0
  308. /package/{rules → templates/golang/rules}/golang/viper-config/references/REFERENCE.md +0 -0
  309. /package/{rules → templates/golang/rules}/golang/viper-config/references/config-loading.md +0 -0
  310. /package/{rules → templates/golang/rules}/golang/wire-di/SKILL.md +0 -0
  311. /package/{rules → templates/golang/rules}/golang/wire-di/references/REFERENCE.md +0 -0
  312. /package/{rules → templates/golang/rules}/golang/wire-di/references/provider-patterns.md +0 -0
  313. /package/{rules → templates/golang/rules}/golang/zap-logging/SKILL.md +0 -0
  314. /package/{rules → templates/golang/rules}/golang/zap-logging/references/REFERENCE.md +0 -0
  315. /package/{rules → templates/golang/rules}/golang/zap-logging/references/logger-config.md +0 -0
  316. /package/{rules → templates/java/rules}/java/build-gradle/SKILL.md +0 -0
  317. /package/{rules → templates/java/rules}/java/build-gradle/references/REFERENCE.md +0 -0
  318. /package/{rules → templates/java/rules}/java/build-gradle/references/kotlin-dsl.md +0 -0
  319. /package/{rules → templates/java/rules}/java/build-gradle/references/task-configuration.md +0 -0
  320. /package/{rules → templates/java/rules}/java/build-maven/SKILL.md +0 -0
  321. /package/{rules → templates/java/rules}/java/build-maven/references/REFERENCE.md +0 -0
  322. /package/{rules → templates/java/rules}/java/build-maven/references/dependency-management.md +0 -0
  323. /package/{rules → templates/java/rules}/java/build-maven/references/lifecycle-phases.md +0 -0
  324. /package/{rules → templates/java/rules}/java/graalvm-native/SKILL.md +0 -0
  325. /package/{rules → templates/java/rules}/java/graalvm-native/references/REFERENCE.md +0 -0
  326. /package/{rules → templates/java/rules}/java/java-collections-streams/SKILL.md +0 -0
  327. /package/{rules → templates/java/rules}/java/java-collections-streams/references/REFERENCE.md +0 -0
  328. /package/{rules → templates/java/rules}/java/java-collections-streams/references/collectors-patterns.md +0 -0
  329. /package/{rules → templates/java/rules}/java/java-collections-streams/references/stream-pipelines.md +0 -0
  330. /package/{rules → templates/java/rules}/java/java-concurrency/SKILL.md +0 -0
  331. /package/{rules → templates/java/rules}/java/java-concurrency/references/REFERENCE.md +0 -0
  332. /package/{rules → templates/java/rules}/java/java-concurrency/references/completable-future.md +0 -0
  333. /package/{rules → templates/java/rules}/java/java-concurrency/references/executor-patterns.md +0 -0
  334. /package/{rules → templates/java/rules}/java/java-concurrency/references/virtual-threads.md +0 -0
  335. /package/{rules → templates/java/rules}/java/java-core-language/SKILL.md +0 -0
  336. /package/{rules → templates/java/rules}/java/java-core-language/references/REFERENCE.md +0 -0
  337. /package/{rules → templates/java/rules}/java/java-core-language/references/jvm-memory-model.md +0 -0
  338. /package/{rules → templates/java/rules}/java/java-core-language/references/modern-java-features.md +0 -0
  339. /package/{rules → templates/java/rules}/java/java-project-structure/SKILL.md +0 -0
  340. /package/{rules → templates/java/rules}/java/java-project-structure/references/REFERENCE.md +0 -0
  341. /package/{rules → templates/java/rules}/java/java-project-structure/references/maven-project-layout.md +0 -0
  342. /package/{rules → templates/java/rules}/java/java-project-structure/references/module-system.md +0 -0
  343. /package/{rules → templates/java/rules}/java/micronaut-core/SKILL.md +0 -0
  344. /package/{rules → templates/java/rules}/java/micronaut-core/references/REFERENCE.md +0 -0
  345. /package/{rules → templates/java/rules}/java/micronaut-reactive/SKILL.md +0 -0
  346. /package/{rules → templates/java/rules}/java/micronaut-reactive/references/REFERENCE.md +0 -0
  347. /package/{rules → templates/java/rules}/java/quarkus-core/SKILL.md +0 -0
  348. /package/{rules → templates/java/rules}/java/quarkus-core/references/REFERENCE.md +0 -0
  349. /package/{rules → templates/java/rules}/java/quarkus-reactive/SKILL.md +0 -0
  350. /package/{rules → templates/java/rules}/java/quarkus-reactive/references/REFERENCE.md +0 -0
  351. /package/{rules → templates/java/rules}/java/spring-batch/SKILL.md +0 -0
  352. /package/{rules → templates/java/rules}/java/spring-batch/references/REFERENCE.md +0 -0
  353. /package/{rules → templates/java/rules}/java/spring-boot-architecture/SKILL.md +0 -0
  354. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/REFERENCE.md +0 -0
  355. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/auto-configuration.md +0 -0
  356. /package/{rules → templates/java/rules}/java/spring-boot-architecture/references/configuration-properties.md +0 -0
  357. /package/{rules → templates/java/rules}/java/spring-boot-web/SKILL.md +0 -0
  358. /package/{rules → templates/java/rules}/java/spring-boot-web/references/REFERENCE.md +0 -0
  359. /package/{rules → templates/java/rules}/java/spring-cloud/SKILL.md +0 -0
  360. /package/{rules → templates/java/rules}/java/spring-cloud/references/REFERENCE.md +0 -0
  361. /package/{rules → templates/java/rules}/java/spring-data-jpa/SKILL.md +0 -0
  362. /package/{rules → templates/java/rules}/java/spring-data-jpa/references/REFERENCE.md +0 -0
  363. /package/{rules → templates/java/rules}/java/spring-security/SKILL.md +0 -0
  364. /package/{rules → templates/java/rules}/java/spring-security/references/REFERENCE.md +0 -0
  365. /package/{rules → templates/java/rules}/java/spring-security/references/jwt-auth-flow.md +0 -0
  366. /package/{rules → templates/java/rules}/java/testing-junit-mockito/SKILL.md +0 -0
  367. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/REFERENCE.md +0 -0
  368. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/junit5-patterns.md +0 -0
  369. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/mockito-patterns.md +0 -0
  370. /package/{rules → templates/java/rules}/java/testing-junit-mockito/references/spring-boot-testing.md +0 -0
  371. /package/{rules → templates/javascript/rules}/javascript/best-practices/SKILL.md +0 -0
  372. /package/{rules → templates/javascript/rules}/javascript/best-practices/references/REFERENCE.md +0 -0
  373. /package/{rules → templates/javascript/rules}/javascript/language/SKILL.md +0 -0
  374. /package/{rules → templates/javascript/rules}/javascript/language/references/REFERENCE.md +0 -0
  375. /package/{rules → templates/javascript/rules}/javascript/tooling/SKILL.md +0 -0
  376. /package/{rules → templates/javascript/rules}/javascript/tooling/references/REFERENCE.md +0 -0
  377. /package/{rules → templates/nestjs/rules}/nestjs/api-standards/SKILL.md +0 -0
  378. /package/{rules → templates/nestjs/rules}/nestjs/api-standards/references/pagination-wrapper.md +0 -0
  379. /package/{rules → templates/nestjs/rules}/nestjs/architecture/SKILL.md +0 -0
  380. /package/{rules → templates/nestjs/rules}/nestjs/architecture/references/dynamic-module.md +0 -0
  381. /package/{rules → templates/nestjs/rules}/nestjs/caching/SKILL.md +0 -0
  382. /package/{rules → templates/nestjs/rules}/nestjs/caching/references/REFERENCE.md +0 -0
  383. /package/{rules → templates/nestjs/rules}/nestjs/caching/references/cache-patterns.md +0 -0
  384. /package/{rules → templates/nestjs/rules}/nestjs/configuration/SKILL.md +0 -0
  385. /package/{rules → templates/nestjs/rules}/nestjs/configuration/references/REFERENCE.md +0 -0
  386. /package/{rules → templates/nestjs/rules}/nestjs/configuration/references/config-patterns.md +0 -0
  387. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/SKILL.md +0 -0
  388. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/REFERENCE.md +0 -0
  389. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/controller-patterns.md +0 -0
  390. /package/{rules → templates/nestjs/rules}/nestjs/controllers-services/references/service-patterns.md +0 -0
  391. /package/{rules → templates/nestjs/rules}/nestjs/database/SKILL.md +0 -0
  392. /package/{rules → templates/nestjs/rules}/nestjs/database/references/REFERENCE.md +0 -0
  393. /package/{rules → templates/nestjs/rules}/nestjs/database/references/typeorm-patterns.md +0 -0
  394. /package/{rules → templates/nestjs/rules}/nestjs/deployment/SKILL.md +0 -0
  395. /package/{rules → templates/nestjs/rules}/nestjs/deployment/references/REFERENCE.md +0 -0
  396. /package/{rules → templates/nestjs/rules}/nestjs/deployment/references/deployment-patterns.md +0 -0
  397. /package/{rules → templates/nestjs/rules}/nestjs/documentation/SKILL.md +0 -0
  398. /package/{rules → templates/nestjs/rules}/nestjs/documentation/references/REFERENCE.md +0 -0
  399. /package/{rules → templates/nestjs/rules}/nestjs/documentation/references/swagger-patterns.md +0 -0
  400. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/SKILL.md +0 -0
  401. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/references/REFERENCE.md +0 -0
  402. /package/{rules → templates/nestjs/rules}/nestjs/error-handling/references/exception-filters.md +0 -0
  403. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/SKILL.md +0 -0
  404. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/references/REFERENCE.md +0 -0
  405. /package/{rules → templates/nestjs/rules}/nestjs/file-uploads/references/upload-patterns.md +0 -0
  406. /package/{rules → templates/nestjs/rules}/nestjs/observability/SKILL.md +0 -0
  407. /package/{rules → templates/nestjs/rules}/nestjs/observability/references/REFERENCE.md +0 -0
  408. /package/{rules → templates/nestjs/rules}/nestjs/observability/references/logging-metrics.md +0 -0
  409. /package/{rules → templates/nestjs/rules}/nestjs/performance/SKILL.md +0 -0
  410. /package/{rules → templates/nestjs/rules}/nestjs/performance/references/REFERENCE.md +0 -0
  411. /package/{rules → templates/nestjs/rules}/nestjs/performance/references/performance-patterns.md +0 -0
  412. /package/{rules → templates/nestjs/rules}/nestjs/real-time/SKILL.md +0 -0
  413. /package/{rules → templates/nestjs/rules}/nestjs/real-time/references/REFERENCE.md +0 -0
  414. /package/{rules → templates/nestjs/rules}/nestjs/real-time/references/websocket-patterns.md +0 -0
  415. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/SKILL.md +0 -0
  416. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/references/REFERENCE.md +0 -0
  417. /package/{rules → templates/nestjs/rules}/nestjs/scheduling/references/scheduling-patterns.md +0 -0
  418. /package/{rules → templates/nestjs/rules}/nestjs/search/SKILL.md +0 -0
  419. /package/{rules → templates/nestjs/rules}/nestjs/search/references/REFERENCE.md +0 -0
  420. /package/{rules → templates/nestjs/rules}/nestjs/search/references/search-patterns.md +0 -0
  421. /package/{rules → templates/nestjs/rules}/nestjs/security/SKILL.md +0 -0
  422. /package/{rules → templates/nestjs/rules}/nestjs/security/references/REFERENCE.md +0 -0
  423. /package/{rules → templates/nestjs/rules}/nestjs/security/references/authentication.md +0 -0
  424. /package/{rules → templates/nestjs/rules}/nestjs/testing/SKILL.md +0 -0
  425. /package/{rules → templates/nestjs/rules}/nestjs/testing/references/REFERENCE.md +0 -0
  426. /package/{rules → templates/nestjs/rules}/nestjs/testing/references/unit-testing.md +0 -0
  427. /package/{rules → templates/nestjs/rules}/nestjs/transport/SKILL.md +0 -0
  428. /package/{rules → templates/nestjs/rules}/nestjs/transport/references/REFERENCE.md +0 -0
  429. /package/{rules → templates/nestjs/rules}/nestjs/transport/references/microservices-patterns.md +0 -0
  430. /package/{rules → templates/nextjs/rules}/nextjs/app-router/SKILL.md +0 -0
  431. /package/{rules → templates/nextjs/rules}/nextjs/app-router/references/REFERENCE.md +0 -0
  432. /package/{rules → templates/nextjs/rules}/nextjs/app-router/references/routing-patterns.md +0 -0
  433. /package/{rules → templates/nextjs/rules}/nextjs/architecture/SKILL.md +0 -0
  434. /package/{rules → templates/nextjs/rules}/nextjs/architecture/references/fsd-structure.md +0 -0
  435. /package/{rules → templates/nextjs/rules}/nextjs/authentication/SKILL.md +0 -0
  436. /package/{rules → templates/nextjs/rules}/nextjs/authentication/references/auth-implementation.md +0 -0
  437. /package/{rules → templates/nextjs/rules}/nextjs/caching/SKILL.md +0 -0
  438. /package/{rules → templates/nextjs/rules}/nextjs/caching/references/REFERENCE.md +0 -0
  439. /package/{rules → templates/nextjs/rules}/nextjs/caching/references/cache-strategies.md +0 -0
  440. /package/{rules → templates/nextjs/rules}/nextjs/data-access-layer/SKILL.md +0 -0
  441. /package/{rules → templates/nextjs/rules}/nextjs/data-access-layer/references/patterns.md +0 -0
  442. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/SKILL.md +0 -0
  443. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/references/REFERENCE.md +0 -0
  444. /package/{rules → templates/nextjs/rules}/nextjs/data-fetching/references/fetch-patterns.md +0 -0
  445. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/SKILL.md +0 -0
  446. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/references/REFERENCE.md +0 -0
  447. /package/{rules → templates/nextjs/rules}/nextjs/internationalization/references/i18n-patterns.md +0 -0
  448. /package/{rules → templates/nextjs/rules}/nextjs/optimization/SKILL.md +0 -0
  449. /package/{rules → templates/nextjs/rules}/nextjs/optimization/references/REFERENCE.md +0 -0
  450. /package/{rules → templates/nextjs/rules}/nextjs/optimization/references/optimization-patterns.md +0 -0
  451. /package/{rules → templates/nextjs/rules}/nextjs/rendering/SKILL.md +0 -0
  452. /package/{rules → templates/nextjs/rules}/nextjs/rendering/references/REFERENCE.md +0 -0
  453. /package/{rules → templates/nextjs/rules}/nextjs/rendering/references/rendering-modes.md +0 -0
  454. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/SKILL.md +0 -0
  455. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/references/REFERENCE.md +0 -0
  456. /package/{rules → templates/nextjs/rules}/nextjs/server-actions/references/action-patterns.md +0 -0
  457. /package/{rules → templates/nextjs/rules}/nextjs/server-components/SKILL.md +0 -0
  458. /package/{rules → templates/nextjs/rules}/nextjs/server-components/references/REFERENCE.md +0 -0
  459. /package/{rules → templates/nextjs/rules}/nextjs/server-components/references/component-patterns.md +0 -0
  460. /package/{rules → templates/nextjs/rules}/nextjs/state-management/SKILL.md +0 -0
  461. /package/{rules → templates/nextjs/rules}/nextjs/state-management/references/REFERENCE.md +0 -0
  462. /package/{rules → templates/nextjs/rules}/nextjs/state-management/references/state-patterns.md +0 -0
  463. /package/{rules → templates/nextjs/rules}/nextjs/styling/SKILL.md +0 -0
  464. /package/{rules → templates/nextjs/rules}/nextjs/styling/references/implementation.md +0 -0
  465. /package/{rules → templates/react/rules}/react/component-patterns/SKILL.md +0 -0
  466. /package/{rules → templates/react/rules}/react/component-patterns/references/REFERENCE.md +0 -0
  467. /package/{rules → templates/react/rules}/react/hooks/SKILL.md +0 -0
  468. /package/{rules → templates/react/rules}/react/hooks/references/REFERENCE.md +0 -0
  469. /package/{rules → templates/react/rules}/react/hooks.rule.md +0 -0
  470. /package/{rules → templates/react/rules}/react/performance/SKILL.md +0 -0
  471. /package/{rules → templates/react/rules}/react/performance/references/REFERENCE.md +0 -0
  472. /package/{rules → templates/react/rules}/react/security/SKILL.md +0 -0
  473. /package/{rules → templates/react/rules}/react/security/references/REFERENCE.md +0 -0
  474. /package/{rules → templates/react/rules}/react/state-management/SKILL.md +0 -0
  475. /package/{rules → templates/react/rules}/react/state-management/references/REFERENCE.md +0 -0
  476. /package/{rules → templates/react/rules}/react/testing/SKILL.md +0 -0
  477. /package/{rules → templates/react/rules}/react/testing/references/REFERENCE.md +0 -0
  478. /package/{rules → templates/react/rules}/react/tooling/SKILL.md +0 -0
  479. /package/{rules → templates/react/rules}/react/typescript/SKILL.md +0 -0
  480. /package/{rules → templates/rust/rules}/rust/actix-web/SKILL.md +0 -0
  481. /package/{rules → templates/rust/rules}/rust/actix-web/references/REFERENCE.md +0 -0
  482. /package/{rules → templates/rust/rules}/rust/actix-web/references/handler-patterns.md +0 -0
  483. /package/{rules → templates/rust/rules}/rust/async-graphql/SKILL.md +0 -0
  484. /package/{rules → templates/rust/rules}/rust/async-graphql/references/REFERENCE.md +0 -0
  485. /package/{rules → templates/rust/rules}/rust/async-graphql/references/schema-patterns.md +0 -0
  486. /package/{rules → templates/rust/rules}/rust/axum/SKILL.md +0 -0
  487. /package/{rules → templates/rust/rules}/rust/axum/references/REFERENCE.md +0 -0
  488. /package/{rules → templates/rust/rules}/rust/axum/references/handler-patterns.md +0 -0
  489. /package/{rules → templates/rust/rules}/rust/bevy/SKILL.md +0 -0
  490. /package/{rules → templates/rust/rules}/rust/bevy/references/REFERENCE.md +0 -0
  491. /package/{rules → templates/rust/rules}/rust/bevy/references/ecs-patterns.md +0 -0
  492. /package/{rules → templates/rust/rules}/rust/clap/SKILL.md +0 -0
  493. /package/{rules → templates/rust/rules}/rust/clap/references/REFERENCE.md +0 -0
  494. /package/{rules → templates/rust/rules}/rust/clap/references/derive-patterns.md +0 -0
  495. /package/{rules → templates/rust/rules}/rust/core/SKILL.md +0 -0
  496. /package/{rules → templates/rust/rules}/rust/core/references/REFERENCE.md +0 -0
  497. /package/{rules → templates/rust/rules}/rust/core/references/error-handling.md +0 -0
  498. /package/{rules → templates/rust/rules}/rust/diesel-orm/SKILL.md +0 -0
  499. /package/{rules → templates/rust/rules}/rust/diesel-orm/references/REFERENCE.md +0 -0
  500. /package/{rules → templates/rust/rules}/rust/diesel-orm/references/schema-patterns.md +0 -0
  501. /package/{rules → templates/rust/rules}/rust/rocket/SKILL.md +0 -0
  502. /package/{rules → templates/rust/rules}/rust/rocket/references/REFERENCE.md +0 -0
  503. /package/{rules → templates/rust/rules}/rust/rocket/references/handler-patterns.md +0 -0
  504. /package/{rules → templates/rust/rules}/rust/sea-orm/SKILL.md +0 -0
  505. /package/{rules → templates/rust/rules}/rust/sea-orm/references/REFERENCE.md +0 -0
  506. /package/{rules → templates/rust/rules}/rust/sea-orm/references/entity-patterns.md +0 -0
  507. /package/{rules → templates/rust/rules}/rust/serde-serialization/SKILL.md +0 -0
  508. /package/{rules → templates/rust/rules}/rust/serde-serialization/references/REFERENCE.md +0 -0
  509. /package/{rules → templates/rust/rules}/rust/serde-serialization/references/serialization-patterns.md +0 -0
  510. /package/{rules → templates/rust/rules}/rust/sqlx-database/SKILL.md +0 -0
  511. /package/{rules → templates/rust/rules}/rust/sqlx-database/references/REFERENCE.md +0 -0
  512. /package/{rules → templates/rust/rules}/rust/sqlx-database/references/query-patterns.md +0 -0
  513. /package/{rules → templates/rust/rules}/rust/tauri/SKILL.md +0 -0
  514. /package/{rules → templates/rust/rules}/rust/tauri/references/REFERENCE.md +0 -0
  515. /package/{rules → templates/rust/rules}/rust/tauri/references/command-patterns.md +0 -0
  516. /package/{rules → templates/rust/rules}/rust/tokio-runtime/SKILL.md +0 -0
  517. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/REFERENCE.md +0 -0
  518. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/async-patterns.md +0 -0
  519. /package/{rules → templates/rust/rules}/rust/tokio-runtime/references/synchronization.md +0 -0
  520. /package/{rules → templates/rust/rules}/rust/tonic/SKILL.md +0 -0
  521. /package/{rules → templates/rust/rules}/rust/tonic/references/REFERENCE.md +0 -0
  522. /package/{rules → templates/rust/rules}/rust/tonic/references/service-patterns.md +0 -0
  523. /package/{rules → templates/rust/rules}/rust/tracing/SKILL.md +0 -0
  524. /package/{rules → templates/rust/rules}/rust/tracing/references/REFERENCE.md +0 -0
  525. /package/{rules → templates/rust/rules}/rust/tracing/references/instrumentation.md +0 -0
  526. /package/{rules → templates/typescript/rules}/typescript/best-practices/SKILL.md +0 -0
  527. /package/{rules → templates/typescript/rules}/typescript/best-practices/references/REFERENCE.md +0 -0
  528. /package/{rules → templates/typescript/rules}/typescript/language/SKILL.md +0 -0
  529. /package/{rules → templates/typescript/rules}/typescript/language/references/REFERENCE.md +0 -0
  530. /package/{rules → templates/typescript/rules}/typescript/patterns.rule.md +0 -0
  531. /package/{rules → templates/typescript/rules}/typescript/security/SKILL.md +0 -0
  532. /package/{rules → templates/typescript/rules}/typescript/security/references/REFERENCE.md +0 -0
  533. /package/{rules → templates/typescript/rules}/typescript/tooling/SKILL.md +0 -0
  534. /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,14 +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
- } = 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
+ }
21
29
 
22
30
  /**
23
31
  * Parse command line arguments
@@ -25,36 +33,53 @@ const {
25
33
  function parseArgs(args) {
26
34
  const options = {
27
35
  command: null,
36
+ path: null,
37
+ force: false,
38
+ update: false,
39
+ clean: false,
40
+ help: false,
41
+ // Legacy options (deprecated)
28
42
  tool: null,
29
43
  minimal: false,
44
+ lite: false,
30
45
  categories: [],
31
46
  interactive: false,
32
47
  fullSkills: false,
33
- indexOnly: true, // Default: index-only mode
34
- help: false
48
+ indexOnly: true
35
49
  };
36
50
 
37
51
  for (const arg of args) {
38
52
  if (arg === '--help' || arg === '-h') {
39
53
  options.help = true;
40
- } else if (arg === '--minimal' || arg === '-m') {
41
- options.minimal = true;
42
- options.indexOnly = false;
43
- } else if (arg === '--interactive' || arg === '-i') {
44
- options.interactive = true;
45
- } else if (arg === '--full' || arg === '-f') {
46
- options.fullSkills = true;
47
- options.indexOnly = false;
48
- } else if (arg.startsWith('--category=') || arg.startsWith('-c=')) {
49
- const cats = arg.split('=')[1].split(',').map(c => c.trim());
50
- options.categories.push(...cats);
51
- 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];
52
64
  } else if (arg.startsWith('--')) {
53
- // 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
+ }
54
74
  } else if (!options.command) {
55
75
  options.command = arg;
56
- } else if (!options.tool) {
57
- 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
+ }
58
83
  }
59
84
  }
60
85
 
@@ -63,87 +88,187 @@ function parseArgs(args) {
63
88
 
64
89
  function showHelp() {
65
90
  console.log(`
66
- Devkit v${VERSION}
91
+ Devkit v${VERSION} - Per-Project AI Skills
67
92
 
68
93
  USAGE:
69
- devkit <command> [tool] [options]
94
+ devkit <command> [options]
70
95
 
71
96
  COMMANDS:
72
- install Install skills and rules to AI tools
73
- uninstall Remove all installed skills and rules
74
- update Check for updates and reinstall
75
- list List all available skills
76
- categories List available skill categories
77
- version Show version
78
- help Show this help
79
-
80
- TOOLS:
81
- claude Claude Code (~/.claude/)
82
- cursor Cursor (~/.cursor/)
83
- copilot GitHub Copilot (~/.copilot/)
84
- 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.
85
100
 
86
- OPTIONS:
87
- (default) Index-only mode - installs skills index file only
88
- Commands and agents are always fully installed
89
- Best for avoiding context limit issues
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.
106
+
107
+ status Show installation status
90
108
 
91
- --minimal, -m Install ~20 core skills (instead of index)
109
+ uninstall Remove devkit from current project
92
110
 
93
- --category=CATS, -c= Install specific categories
94
- Example: --category=react,typescript,testing
111
+ list List all available skills
95
112
 
96
- --full, -f Install ALL 413+ skills (may cause context limit)
97
- Only use if you need full skill content locally
113
+ help Show this help
98
114
 
99
- --interactive, -i Interactive mode - choose categories
115
+ version Show version
100
116
 
101
- --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
102
122
 
103
123
  EXAMPLES:
104
- devkit install # Index-only (recommended)
105
- devkit install claude # Index-only to Claude Code
106
- devkit install --minimal # Install ~20 core skills
107
- devkit install --category=react # Install React-related skills
108
- devkit install --full # Install all skills (large)
109
- devkit install --interactive # Choose interactively
110
- 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
111
131
 
112
132
  HOW IT WORKS:
113
- By default, devkit installs:
114
- - SKILLS_INDEX.md (29KB summary of 411 skills)
115
- - All commands (/plan, /cook, /brainstorm, etc.)
116
- - All agents (planner, debugger, reviewer, etc.)
117
- - 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
138
+
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
118
144
 
119
- When you need a specific skill, Claude reads it on-demand from
120
- the skills-index.json or loads the full skill file.
145
+ 3. Total size: ~300-500KB (vs 59MB for global install)
121
146
 
122
- This reduces context usage from ~59MB to ~30KB for skills.
147
+ This ensures best practices for your tech stack without
148
+ overwhelming Claude with irrelevant rules.
123
149
 
124
150
  For more info: https://github.com/ngxtm/devkit
125
151
  `);
126
152
  }
127
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
+
128
169
  // Command handlers
129
170
  const commands = {
130
- install: (options) => {
131
- if (options.interactive) {
132
- return interactiveInstall(options.tool);
133
- }
134
- install(options.tool, {
135
- minimal: options.minimal,
136
- categories: options.categories,
137
- fullSkills: options.fullSkills,
138
- 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
178
+ });
179
+ },
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
139
211
  });
140
212
  },
141
- uninstall: (options) => uninstall(options.tool),
142
- update: () => update(),
143
- list: () => listSkills(),
144
- categories: () => listCategories(),
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
145
244
  help: () => showHelp(),
245
+
246
+ // Version
146
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
+ }
147
272
  };
148
273
 
149
274
  // Main execution