claude-code-superkit 0.0.0-stage → 1.5.3

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 (353) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +374 -2
  3. package/bin/cli.js +153 -0
  4. package/bin/inject-tokens.js +224 -0
  5. package/bin/measure-tokens.js +17 -0
  6. package/bin/superkit-counts-verify.sh +30 -0
  7. package/lib/codex.js +246 -0
  8. package/lib/docs-scaffold.js +147 -0
  9. package/lib/installer.js +499 -0
  10. package/lib/prompts.js +51 -0
  11. package/lib/settings-builder.js +51 -0
  12. package/lib/superpowers.js +99 -0
  13. package/lib/utils.js +117 -0
  14. package/lib/validator.js +84 -0
  15. package/package.json +49 -4
  16. package/packages/codex/AGENTS.md +396 -0
  17. package/packages/codex/INSTALL.md +342 -0
  18. package/packages/codex/config.toml +22 -0
  19. package/packages/codex/hooks/superkit.mjs +203 -0
  20. package/packages/codex/hooks.json +30 -0
  21. package/packages/codex/legacy-baseline.json +88 -0
  22. package/packages/codex/native-skills.txt +65 -0
  23. package/packages/codex/rules/default.rules +565 -0
  24. package/packages/codex/skills/ai-slop-cleaner/SKILL.md +44 -0
  25. package/packages/codex/skills/api-contract-sync/SKILL.md +96 -0
  26. package/packages/codex/skills/architect/SKILL.md +49 -0
  27. package/packages/codex/skills/audit-backend/SKILL.md +80 -0
  28. package/packages/codex/skills/audit-frontend/SKILL.md +82 -0
  29. package/packages/codex/skills/audit-infra/SKILL.md +87 -0
  30. package/packages/codex/skills/audit-orchestrator/SKILL.md +114 -0
  31. package/packages/codex/skills/behavioral-nudge-engine/SKILL.md +110 -0
  32. package/packages/codex/skills/benchmark/SKILL.md +49 -0
  33. package/packages/codex/skills/bot-reviewer/SKILL.md +94 -0
  34. package/packages/codex/skills/code-reviewer/SKILL.md +67 -0
  35. package/packages/codex/skills/codebase-onboarding-engineer/SKILL.md +46 -0
  36. package/packages/codex/skills/comment-rot-analyzer/SKILL.md +75 -0
  37. package/packages/codex/skills/commit-helper/SKILL.md +101 -0
  38. package/packages/codex/skills/critic/SKILL.md +56 -0
  39. package/packages/codex/skills/database-reviewer/SKILL.md +79 -0
  40. package/packages/codex/skills/debug-observer/SKILL.md +107 -0
  41. package/packages/codex/skills/dependency-checker/SKILL.md +69 -0
  42. package/packages/codex/skills/design-system-reviewer/SKILL.md +121 -0
  43. package/packages/codex/skills/dev-orchestrator/SKILL.md +304 -0
  44. package/packages/codex/skills/docs-reviewer/SKILL.md +86 -0
  45. package/packages/codex/skills/drizzle-orm-expert/SKILL.md +246 -0
  46. package/packages/codex/skills/e2e-test-generator/SKILL.md +95 -0
  47. package/packages/codex/skills/evaluator/SKILL.md +63 -0
  48. package/packages/codex/skills/frontend-perf-reviewer/SKILL.md +95 -0
  49. package/packages/codex/skills/frontend-ui-color-reviewer/SKILL.md +68 -0
  50. package/packages/codex/skills/frontend-ui-design-critic/SKILL.md +99 -0
  51. package/packages/codex/skills/frontend-ui-interaction-reviewer/SKILL.md +102 -0
  52. package/packages/codex/skills/frontend-ui-motion-reviewer/SKILL.md +85 -0
  53. package/packages/codex/skills/frontend-ui-reviewer/SKILL.md +81 -0
  54. package/packages/codex/skills/frontend-ui-typography-reviewer/SKILL.md +62 -0
  55. package/packages/codex/skills/gltf-debugging/SKILL.md +128 -0
  56. package/packages/codex/skills/go-benchmark/SKILL.md +217 -0
  57. package/packages/codex/skills/go-concurrency-reviewer/SKILL.md +113 -0
  58. package/packages/codex/skills/go-error-reviewer/SKILL.md +107 -0
  59. package/packages/codex/skills/go-grpc-patterns/SKILL.md +285 -0
  60. package/packages/codex/skills/go-modernizer/SKILL.md +111 -0
  61. package/packages/codex/skills/go-observability-reviewer/SKILL.md +121 -0
  62. package/packages/codex/skills/go-performance-reviewer/SKILL.md +112 -0
  63. package/packages/codex/skills/go-reviewer/SKILL.md +109 -0
  64. package/packages/codex/skills/go-samber-do/SKILL.md +158 -0
  65. package/packages/codex/skills/go-samber-lo/SKILL.md +178 -0
  66. package/packages/codex/skills/go-samber-oops/SKILL.md +174 -0
  67. package/packages/codex/skills/goal-verifier/SKILL.md +53 -0
  68. package/packages/codex/skills/health-checker/SKILL.md +109 -0
  69. package/packages/codex/skills/html-to-3d-texture/SKILL.md +153 -0
  70. package/packages/codex/skills/impeccable-craft/SKILL.md +101 -0
  71. package/packages/codex/skills/lint-runner/SKILL.md +85 -0
  72. package/packages/codex/skills/migrate/SKILL.md +60 -0
  73. package/packages/codex/skills/migration-reviewer/SKILL.md +88 -0
  74. package/packages/codex/skills/minimal-change-engineer/SKILL.md +44 -0
  75. package/packages/codex/skills/new-migration/SKILL.md +59 -0
  76. package/packages/codex/skills/nextjs-supabase-auth/SKILL.md +227 -0
  77. package/packages/codex/skills/output-enforcement/SKILL.md +71 -0
  78. package/packages/codex/skills/plan-checker/SKILL.md +53 -0
  79. package/packages/codex/skills/postgresql-optimization/SKILL.md +159 -0
  80. package/packages/codex/skills/pre-deploy-validator/SKILL.md +111 -0
  81. package/packages/codex/skills/presentation-reviewer/SKILL.md +88 -0
  82. package/packages/codex/skills/product-3d-lighting/SKILL.md +137 -0
  83. package/packages/codex/skills/project-architecture/SKILL.md +52 -0
  84. package/packages/codex/skills/py-reviewer/SKILL.md +100 -0
  85. package/packages/codex/skills/r3f-scene-reviewer/SKILL.md +88 -0
  86. package/packages/codex/skills/r3f-scroll-driven-3d/SKILL.md +162 -0
  87. package/packages/codex/skills/reality-checker/SKILL.md +61 -0
  88. package/packages/codex/skills/redis-patterns/SKILL.md +260 -0
  89. package/packages/codex/skills/review-orchestrator/SKILL.md +151 -0
  90. package/packages/codex/skills/rs-reviewer/SKILL.md +98 -0
  91. package/packages/codex/skills/ru-text/SKILL.md +132 -0
  92. package/packages/codex/skills/scaffold-endpoint/SKILL.md +44 -0
  93. package/packages/codex/skills/security-scanner/SKILL.md +94 -0
  94. package/packages/codex/skills/silent-failure-hunter/SKILL.md +176 -0
  95. package/packages/codex/skills/telegram-bot-builder/SKILL.md +120 -0
  96. package/packages/codex/skills/test-generator/SKILL.md +79 -0
  97. package/packages/codex/skills/test-runner/SKILL.md +101 -0
  98. package/packages/codex/skills/threejs-color-management/SKILL.md +97 -0
  99. package/packages/codex/skills/tree-generator/SKILL.md +63 -0
  100. package/packages/codex/skills/ts-reviewer/SKILL.md +90 -0
  101. package/packages/codex/skills/ui-design-reviewer/SKILL.md +89 -0
  102. package/packages/codex/skills/ui-reviewer/SKILL.md +103 -0
  103. package/packages/codex/skills/visual-reviewer/SKILL.md +85 -0
  104. package/packages/codex/skills/writing-agents/SKILL.md +165 -0
  105. package/packages/codex/skills/writing-commands/SKILL.md +173 -0
  106. package/packages/core/CLAUDE.md +118 -0
  107. package/packages/core/INTERNAL-FILES +16 -0
  108. package/packages/core/agents/ai-slop-cleaner.md +187 -0
  109. package/packages/core/agents/api-contract-sync.md +127 -0
  110. package/packages/core/agents/architect.md +205 -0
  111. package/packages/core/agents/audit-backend.md +137 -0
  112. package/packages/core/agents/audit-frontend.md +129 -0
  113. package/packages/core/agents/audit-infra.md +182 -0
  114. package/packages/core/agents/behavioral-nudge-engine.md +170 -0
  115. package/packages/core/agents/code-reviewer.md +195 -0
  116. package/packages/core/agents/codebase-onboarding-engineer.md +172 -0
  117. package/packages/core/agents/comment-rot-analyzer.md +115 -0
  118. package/packages/core/agents/critic.md +172 -0
  119. package/packages/core/agents/database-reviewer.md +201 -0
  120. package/packages/core/agents/debug-observer.md +261 -0
  121. package/packages/core/agents/dependency-checker.md +199 -0
  122. package/packages/core/agents/docs-reviewer.md +206 -0
  123. package/packages/core/agents/e2e-test-generator.md +261 -0
  124. package/packages/core/agents/evaluator.md +141 -0
  125. package/packages/core/agents/goal-verifier.md +130 -0
  126. package/packages/core/agents/health-checker.md +194 -0
  127. package/packages/core/agents/migration-reviewer.md +161 -0
  128. package/packages/core/agents/minimal-change-engineer.md +219 -0
  129. package/packages/core/agents/plan-checker.md +139 -0
  130. package/packages/core/agents/pre-deploy-validator.md +189 -0
  131. package/packages/core/agents/reality-checker.md +175 -0
  132. package/packages/core/agents/scaffold-endpoint.md +162 -0
  133. package/packages/core/agents/security-scanner.md +236 -0
  134. package/packages/core/agents/silent-failure-hunter.md +276 -0
  135. package/packages/core/agents/test-generator.md +146 -0
  136. package/packages/core/agents/tree-generator.md +141 -0
  137. package/packages/core/agents/ui-reviewer.md +172 -0
  138. package/packages/core/agents/visual-reviewer.md +211 -0
  139. package/packages/core/commands/audit.md +166 -0
  140. package/packages/core/commands/benchmark.md +130 -0
  141. package/packages/core/commands/commit.md +148 -0
  142. package/packages/core/commands/dev.md +302 -0
  143. package/packages/core/commands/docs-init.md +75 -0
  144. package/packages/core/commands/lint.md +137 -0
  145. package/packages/core/commands/migrate.md +146 -0
  146. package/packages/core/commands/new-migration.md +182 -0
  147. package/packages/core/commands/pair.md +209 -0
  148. package/packages/core/commands/review.md +195 -0
  149. package/packages/core/commands/security-scan.md +142 -0
  150. package/packages/core/commands/superkit-evolve.md +231 -0
  151. package/packages/core/commands/superkit-init.md +274 -0
  152. package/packages/core/commands/test.md +108 -0
  153. package/packages/core/commands/workflow.md +150 -0
  154. package/packages/core/docs/guide/01-getting-started.md +41 -0
  155. package/packages/core/docs-templates/README.md +33 -0
  156. package/packages/core/docs-templates/adr-template.md +62 -0
  157. package/packages/core/docs-templates/architecture/api-contracts.md +26 -0
  158. package/packages/core/docs-templates/architecture/api-reference.md +48 -0
  159. package/packages/core/docs-templates/architecture/auth-and-sessions.md +38 -0
  160. package/packages/core/docs-templates/architecture/backend-layers.md +42 -0
  161. package/packages/core/docs-templates/architecture/data-flow.md +26 -0
  162. package/packages/core/docs-templates/architecture/database-schema.md +51 -0
  163. package/packages/core/docs-templates/architecture/deployment.md +41 -0
  164. package/packages/core/docs-templates/architecture/frontend-state.md +46 -0
  165. package/packages/core/helpers/statusline.cjs +370 -0
  166. package/packages/core/hooks/CHAIN-SEMANTICS.md +84 -0
  167. package/packages/core/hooks/audit-settings-source.sh +98 -0
  168. package/packages/core/hooks/audit-trail.sh +120 -0
  169. package/packages/core/hooks/block-dangerous-git.sh +189 -0
  170. package/packages/core/hooks/bundle-import-check.sh +64 -0
  171. package/packages/core/hooks/compact-state-inject.sh +84 -0
  172. package/packages/core/hooks/config-protection.sh +68 -0
  173. package/packages/core/hooks/console-log-warning.sh +28 -0
  174. package/packages/core/hooks/context-monitor.sh +35 -0
  175. package/packages/core/hooks/dev-edit-counter.sh +59 -0
  176. package/packages/core/hooks/dev-marker-set.sh +55 -0
  177. package/packages/core/hooks/dev-required-on-commit.sh +426 -0
  178. package/packages/core/hooks/doc-check-on-commit.sh +396 -0
  179. package/packages/core/hooks/edit-streak-check.sh +63 -0
  180. package/packages/core/hooks/evolve-check.sh +78 -0
  181. package/packages/core/hooks/gateguard-pre-edit.sh +154 -0
  182. package/packages/core/hooks/gateguard-record-facts.sh +37 -0
  183. package/packages/core/hooks/intake-classifier.py +449 -0
  184. package/packages/core/hooks/lib/profile.sh +141 -0
  185. package/packages/core/hooks/loop-guard.sh +75 -0
  186. package/packages/core/hooks/migration-safety.sh +56 -0
  187. package/packages/core/hooks/plan-completion-gate.sh +61 -0
  188. package/packages/core/hooks/pre-compact-save.sh +89 -0
  189. package/packages/core/hooks/security-patterns.sh +119 -0
  190. package/packages/core/hooks/session-context-restore.sh +76 -0
  191. package/packages/core/hooks/subagent-stop-validate.sh +73 -0
  192. package/packages/core/hooks/superkit-counts-verify.sh +346 -0
  193. package/packages/core/hooks/superkit-update.sh +367 -0
  194. package/packages/core/hooks/tests/README.md +42 -0
  195. package/packages/core/hooks/tests/audit-trail-chain_test.sh +62 -0
  196. package/packages/core/hooks/tests/block-dangerous-git_test.sh +144 -0
  197. package/packages/core/hooks/tests/chain-semantics/h1.sh +11 -0
  198. package/packages/core/hooks/tests/chain-semantics/h2.sh +9 -0
  199. package/packages/core/hooks/tests/chain-semantics/h3.sh +11 -0
  200. package/packages/core/hooks/tests/chain-semantics/run-experiment.sh +65 -0
  201. package/packages/core/hooks/tests/chain-semantics/settings-experiment.json +15 -0
  202. package/packages/core/hooks/tests/counts-verify_test.sh +118 -0
  203. package/packages/core/hooks/tests/dev-required-on-commit_test.sh +207 -0
  204. package/packages/core/hooks/tests/dev-required-wip-on-main_test.sh +20 -0
  205. package/packages/core/hooks/tests/doc-check-on-commit_test.sh +122 -0
  206. package/packages/core/hooks/tests/edit-streak-check_test.sh +106 -0
  207. package/packages/core/hooks/tests/internal-manifest_test.sh +130 -0
  208. package/packages/core/hooks/tests/json-path_test.sh +108 -0
  209. package/packages/core/hooks/tests/mirror-invariants_test.sh +139 -0
  210. package/packages/core/hooks/tests/nudge-throttle_test.sh +95 -0
  211. package/packages/core/hooks/tests/profile-helper_test.sh +21 -0
  212. package/packages/core/hooks/tests/run-all.sh +47 -0
  213. package/packages/core/hooks/tests/session-key-helper_test.sh +17 -0
  214. package/packages/core/hooks/tests/superkit-update_test.sh +311 -0
  215. package/packages/core/hooks/tests/warn-visibility_test.sh +59 -0
  216. package/packages/core/hooks/user-intent-detect.sh +44 -0
  217. package/packages/core/hooks/verify-hooks.sh +69 -0
  218. package/packages/core/rules/auto-commands.md +124 -0
  219. package/packages/core/rules/coding-style.md +68 -0
  220. package/packages/core/rules/dev-workflow.md +77 -0
  221. package/packages/core/rules/documentation.md +106 -0
  222. package/packages/core/rules/frontend-aesthetics.md +53 -0
  223. package/packages/core/rules/git-workflow.md +14 -0
  224. package/packages/core/rules/security.md +29 -0
  225. package/packages/core/rules/superkit-integrity.md +114 -0
  226. package/packages/core/settings.json +229 -0
  227. package/packages/core/skills/drizzle-orm-expert/SKILL.md +260 -0
  228. package/packages/core/skills/nextjs-supabase-auth/SKILL.md +259 -0
  229. package/packages/core/skills/postgresql-optimization/SKILL.md +150 -0
  230. package/packages/core/skills/project-architecture/SKILL.md +31 -0
  231. package/packages/core/skills/project-scanner/SKILL.md +132 -0
  232. package/packages/core/skills/redis-patterns/SKILL.md +261 -0
  233. package/packages/core/skills/ru-text/SKILL.md +156 -0
  234. package/packages/core/skills/telegram-bot-builder/SKILL.md +145 -0
  235. package/packages/core/skills/writing-agents/SKILL.md +220 -0
  236. package/packages/core/skills/writing-commands/SKILL.md +176 -0
  237. package/packages/core/skills/writing-hooks/SKILL.md +335 -0
  238. package/packages/extras/bot-reviewer.md +279 -0
  239. package/packages/extras/design-system-reviewer.md +234 -0
  240. package/packages/extras/red-blue-auditor/README.md +117 -0
  241. package/packages/extras/red-blue-auditor/agent.md +128 -0
  242. package/packages/extras/red-blue-auditor/patterns/agent-config.txt +4 -0
  243. package/packages/extras/red-blue-auditor/patterns/hook-injection.txt +8 -0
  244. package/packages/extras/red-blue-auditor/patterns/mcp-risk.txt +5 -0
  245. package/packages/extras/red-blue-auditor/patterns/permission-abuse.txt +6 -0
  246. package/packages/extras/red-blue-auditor/patterns/secrets.txt +17 -0
  247. package/packages/extras/red-blue-auditor/scan.sh +88 -0
  248. package/packages/extras/skillsmp-search/SKILL.md +134 -0
  249. package/packages/frontend-3d/README.md +62 -0
  250. package/packages/frontend-3d/agents/frontend-perf-reviewer.md +164 -0
  251. package/packages/frontend-3d/agents/presentation-reviewer.md +146 -0
  252. package/packages/frontend-3d/agents/r3f-scene-reviewer.md +128 -0
  253. package/packages/frontend-3d/agents/ui-design-reviewer.md +169 -0
  254. package/packages/frontend-3d/commands/capture-screen.md +166 -0
  255. package/packages/frontend-3d/hooks/bundle-size-warn.sh +93 -0
  256. package/packages/frontend-3d/hooks/gsap-pattern-check.sh +74 -0
  257. package/packages/frontend-3d/hooks/r3f-color-check.sh +76 -0
  258. package/packages/frontend-3d/hooks/tailwind-version-guard.sh +98 -0
  259. package/packages/frontend-3d/rules/frontend-aesthetics-3d.md +81 -0
  260. package/packages/frontend-3d/rules/gsap-conventions.md +129 -0
  261. package/packages/frontend-3d/rules/threejs-conventions.md +116 -0
  262. package/packages/frontend-3d/skills/gltf-debugging/SKILL.md +145 -0
  263. package/packages/frontend-3d/skills/html-to-3d-texture/SKILL.md +183 -0
  264. package/packages/frontend-3d/skills/output-enforcement/SKILL.md +79 -0
  265. package/packages/frontend-3d/skills/product-3d-lighting/SKILL.md +166 -0
  266. package/packages/frontend-3d/skills/r3f-scroll-driven-3d/SKILL.md +209 -0
  267. package/packages/frontend-3d/skills/threejs-color-management/SKILL.md +111 -0
  268. package/packages/frontend-ui/NOTICE.md +99 -0
  269. package/packages/frontend-ui/README.md +59 -0
  270. package/packages/frontend-ui/agents/ui-color-reviewer.md +174 -0
  271. package/packages/frontend-ui/agents/ui-design-critic.md +198 -0
  272. package/packages/frontend-ui/agents/ui-interaction-reviewer.md +259 -0
  273. package/packages/frontend-ui/agents/ui-motion-reviewer.md +266 -0
  274. package/packages/frontend-ui/agents/ui-reviewer.md +251 -0
  275. package/packages/frontend-ui/agents/ui-typography-reviewer.md +222 -0
  276. package/packages/frontend-ui/hooks/tests/ui-animation-easing-check_test.sh +78 -0
  277. package/packages/frontend-ui/hooks/tests/ui-banned-fonts-check_test.sh +77 -0
  278. package/packages/frontend-ui/hooks/tests/ui-color-check_test.sh +75 -0
  279. package/packages/frontend-ui/hooks/ui-animation-easing-check.sh +86 -0
  280. package/packages/frontend-ui/hooks/ui-banned-fonts-check.sh +90 -0
  281. package/packages/frontend-ui/hooks/ui-color-check.sh +102 -0
  282. package/packages/frontend-ui/rules/color-and-contrast.md +230 -0
  283. package/packages/frontend-ui/rules/frontend-design-aesthetics.md +124 -0
  284. package/packages/frontend-ui/rules/interaction-polish.md +335 -0
  285. package/packages/frontend-ui/rules/motion-and-animation.md +283 -0
  286. package/packages/frontend-ui/rules/spatial-and-layout.md +212 -0
  287. package/packages/frontend-ui/rules/typography-guidelines.md +185 -0
  288. package/packages/frontend-ui/rules/ui-anti-patterns.md +309 -0
  289. package/packages/frontend-ui/settings.json +24 -0
  290. package/packages/frontend-ui/skills/impeccable-craft/SKILL.md +187 -0
  291. package/packages/gan/README.md +232 -0
  292. package/packages/gan/agents/gan-evaluator.md +214 -0
  293. package/packages/gan/agents/gan-generator.md +171 -0
  294. package/packages/gan/agents/gan-planner.md +206 -0
  295. package/packages/gan/rubrics/functionality.md +66 -0
  296. package/packages/gan/rubrics/ui-quality.md +77 -0
  297. package/packages/gan/skills/gan-evaluator/SKILL.md +91 -0
  298. package/packages/gan/skills/gan-generator/SKILL.md +72 -0
  299. package/packages/gan/skills/gan-planner/SKILL.md +93 -0
  300. package/packages/stack-agents/go/go-concurrency-reviewer.md +210 -0
  301. package/packages/stack-agents/go/go-error-reviewer.md +187 -0
  302. package/packages/stack-agents/go/go-modernizer.md +160 -0
  303. package/packages/stack-agents/go/go-observability-reviewer.md +185 -0
  304. package/packages/stack-agents/go/go-performance-reviewer.md +160 -0
  305. package/packages/stack-agents/go/go-reviewer.md +277 -0
  306. package/packages/stack-agents/go/references/benchmark-methodology.md +280 -0
  307. package/packages/stack-agents/go/references/channel-patterns.md +384 -0
  308. package/packages/stack-agents/go/references/cli-cobra-viper.md +190 -0
  309. package/packages/stack-agents/go/references/code-style.md +262 -0
  310. package/packages/stack-agents/go/references/context-propagation.md +317 -0
  311. package/packages/stack-agents/go/references/data-structures.md +315 -0
  312. package/packages/stack-agents/go/references/database-patterns.md +334 -0
  313. package/packages/stack-agents/go/references/design-patterns.md +411 -0
  314. package/packages/stack-agents/go/references/di-frameworks.md +146 -0
  315. package/packages/stack-agents/go/references/error-creation.md +251 -0
  316. package/packages/stack-agents/go/references/error-inspection.md +348 -0
  317. package/packages/stack-agents/go/references/error-wrapping.md +230 -0
  318. package/packages/stack-agents/go/references/gopls-driving.md +62 -0
  319. package/packages/stack-agents/go/references/goroutine-lifecycle.md +351 -0
  320. package/packages/stack-agents/go/references/graphql-patterns.md +221 -0
  321. package/packages/stack-agents/go/references/grpc-patterns.md +373 -0
  322. package/packages/stack-agents/go/references/modernize-guide.md +522 -0
  323. package/packages/stack-agents/go/references/module-management.md +191 -0
  324. package/packages/stack-agents/go/references/naming-conventions.md +176 -0
  325. package/packages/stack-agents/go/references/observability-pipeline.md +352 -0
  326. package/packages/stack-agents/go/references/performance-profiling.md +250 -0
  327. package/packages/stack-agents/go/references/refactoring-mechanics.md +127 -0
  328. package/packages/stack-agents/go/references/rest-openapi-patterns.md +160 -0
  329. package/packages/stack-agents/go/references/samber-do.md +201 -0
  330. package/packages/stack-agents/go/references/samber-libraries.md +363 -0
  331. package/packages/stack-agents/go/references/samber-lo.md +260 -0
  332. package/packages/stack-agents/go/references/samber-oops.md +200 -0
  333. package/packages/stack-agents/go/references/security-checklist.md +441 -0
  334. package/packages/stack-agents/go/references/standard-stdlib-now.md +181 -0
  335. package/packages/stack-agents/go/references/stay-updated.md +147 -0
  336. package/packages/stack-agents/go/references/structs-interfaces.md +312 -0
  337. package/packages/stack-agents/go/references/sync-primitives.md +395 -0
  338. package/packages/stack-agents/go/references/testing-patterns.md +483 -0
  339. package/packages/stack-agents/go/references/troubleshooting.md +98 -0
  340. package/packages/stack-agents/python/py-reviewer.md +194 -0
  341. package/packages/stack-agents/rust/rs-reviewer.md +188 -0
  342. package/packages/stack-agents/typescript/ts-reviewer.md +135 -0
  343. package/packages/stack-hooks/go/go-context-check-on-edit.sh +56 -0
  344. package/packages/stack-hooks/go/go-error-check-on-edit.sh +54 -0
  345. package/packages/stack-hooks/go/go-format-on-edit.sh +32 -0
  346. package/packages/stack-hooks/go/go-safety-check-on-edit.sh +54 -0
  347. package/packages/stack-hooks/go/go-vet-on-edit.sh +61 -0
  348. package/packages/stack-hooks/go/golangci-lint-on-edit.sh +54 -0
  349. package/packages/stack-hooks/python/ruff-on-edit.sh +67 -0
  350. package/packages/stack-hooks/rust/cargo-check-on-edit.sh +64 -0
  351. package/packages/stack-hooks/typescript/typecheck-on-edit.sh +76 -0
  352. package/packages/stack-rules/go/go-conventions.md +44 -0
  353. package/packages/stack-rules/go/go-safety.md +35 -0
@@ -0,0 +1,499 @@
1
+ import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync, readFileSync, chmodSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, dirname, basename } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { info, warn, fail, bold, copyFile, copyDir, copySkills, countFiles, countSkills, isInsideGitRepo, getGitRoot, commandExists } from './utils.js';
5
+ import { confirm, select, multiConfirm, closeRL } from './prompts.js';
6
+ import { writeSettings } from './settings-builder.js';
7
+ import { checkAndInstallSuperpowers } from './superpowers.js';
8
+ import { scaffoldDocs } from './docs-scaffold.js';
9
+ import { installCodex } from './codex.js';
10
+ import { validate } from './validator.js';
11
+
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const PACKAGES_DIR = join(__dirname, '..', 'packages');
14
+
15
+ // ── Internal-file manifest (single source of truth) ──────────────────────
16
+ // packages/core/INTERNAL-FILES lists repo-only files that must NEVER ship into
17
+ // a consumer's .claude/. We derive the per-category skip lists from it so this
18
+ // installer, superkit-counts-verify.sh, and superkit-update.sh can never drift.
19
+ // Returns { hooks: [...basenames], rules: [...basenames] } keyed by each entry's
20
+ // dirname. FALLBACK: if the manifest is missing/unreadable/empty we return the
21
+ // previous hard-coded values — a broken installer is worse than a stale list.
22
+ // The literals below live ONLY inside this clearly-marked fallback.
23
+ function readInternalManifest() {
24
+ const FALLBACK = { hooks: ['superkit-counts-verify.sh', 'verify-hooks.sh'], rules: ['superkit-integrity.md'] }; // FALLBACK — sole hard-coded copy
25
+ try {
26
+ const raw = readFileSync(join(PACKAGES_DIR, 'core', 'INTERNAL-FILES'), 'utf8');
27
+ const hooks = [];
28
+ const rules = [];
29
+ for (const line of raw.split('\n')) {
30
+ const entry = line.trim();
31
+ if (!entry || entry.startsWith('#')) continue;
32
+ const dir = dirname(entry);
33
+ const base = basename(entry);
34
+ if (dir === 'hooks') hooks.push(base);
35
+ else if (dir === 'rules') rules.push(base);
36
+ }
37
+ if (hooks.length === 0 && rules.length === 0) return FALLBACK; // FALLBACK — empty/garbled manifest
38
+ return { hooks, rules };
39
+ } catch {
40
+ return FALLBACK; // FALLBACK — manifest missing/unreadable
41
+ }
42
+ }
43
+
44
+ export async function install(opts) {
45
+ const version = opts.version;
46
+ const useDefaults = opts.defaults;
47
+
48
+ console.log('');
49
+ console.log(`🚀 claude-code-superkit v${version}`);
50
+ console.log('');
51
+
52
+ // ── Prerequisites ────────────────────────────────────────
53
+ if (!commandExists('git')) {
54
+ fail('git is required but not found. Install git first.');
55
+ }
56
+
57
+ if (!isInsideGitRepo()) {
58
+ fail('Not inside a git repository. Run from your project root: cd /path/to/your-project && git init');
59
+ }
60
+
61
+ const projectDir = getGitRoot();
62
+ if (opts.codexOnly) {
63
+ installCodex(projectDir, PACKAGES_DIR);
64
+ info('Codex installation complete!');
65
+ console.log(' Start Codex in your project and review AGENTS.md and .codex/config.toml.');
66
+ console.log(' Re-run this command to update pristine Superkit skills; review any preserved conflicts.');
67
+ closeRL();
68
+ return;
69
+ }
70
+
71
+ if (!commandExists('claude')) {
72
+ warn('Claude Code CLI not found. Install: npm install -g @anthropic-ai/claude-code');
73
+ warn('Superkit requires Claude Code to function. Continuing setup anyway...');
74
+ }
75
+
76
+ const claudeDir = join(projectDir, '.claude');
77
+
78
+ // ── Superpowers ──────────────────────────────────────────
79
+ if (!opts.noSuperpowers) {
80
+ await checkAndInstallSuperpowers(useDefaults);
81
+ }
82
+
83
+ // ── Handle existing .claude/ ─────────────────────────────
84
+ let mode;
85
+ if (existsSync(claudeDir)) {
86
+ if (useDefaults) {
87
+ mode = 'merge';
88
+ } else {
89
+ console.log('');
90
+ warn('Existing .claude/ directory found.');
91
+ mode = await select('', [
92
+ { key: 'm', label: 'Merge — add new files, skip existing', value: 'merge' },
93
+ { key: 'o', label: 'Overwrite — backup to .claude.bak/ and replace', value: 'overwrite' },
94
+ { key: 'a', label: 'Abort', value: 'abort' }
95
+ ], 'merge', false);
96
+ }
97
+
98
+ if (mode === 'abort') {
99
+ console.log('Aborted.');
100
+ closeRL();
101
+ return;
102
+ }
103
+
104
+ if (mode === 'overwrite') {
105
+ const bakDir = claudeDir + '.bak';
106
+ if (existsSync(bakDir)) rmSync(bakDir, { recursive: true });
107
+ renameSync(claudeDir, bakDir);
108
+ info('Backed up to .claude.bak/');
109
+ }
110
+ } else {
111
+ mode = 'fresh';
112
+ }
113
+
114
+ // ── [1/4] Stack Selection ────────────────────────────────
115
+ let stacks;
116
+ if (opts.stacks) {
117
+ stacks = opts.stacks;
118
+ } else {
119
+ stacks = await multiConfirm('[1/4] Select your stacks:', [
120
+ { label: 'Go? [y/N]', value: 'go' },
121
+ { label: 'TypeScript? [y/N]', value: 'typescript' },
122
+ { label: 'Python? [y/N]', value: 'python' },
123
+ { label: 'Rust? [y/N]', value: 'rust' },
124
+ { label: 'Frontend 3D? [y/N]', value: 'frontend-3d' },
125
+ { label: 'Frontend UI? [y/N]', value: 'frontend-ui' }
126
+ ], useDefaults);
127
+ }
128
+
129
+ // ── [2/4] Extras Selection ───────────────────────────────
130
+ let extras;
131
+ if (opts.extras) {
132
+ extras = opts.extras;
133
+ } else {
134
+ extras = await multiConfirm('[2/4] Select extras:', [
135
+ { label: 'Bot reviewer (Telegram/Discord/Slack)? [y/N]', value: 'bot-reviewer' },
136
+ { label: 'Design system reviewer? [y/N]', value: 'design-system-reviewer' }
137
+ ], useDefaults);
138
+ }
139
+
140
+ // ── [3/4] Profile Selection ──────────────────────────────
141
+ let profile;
142
+ if (opts.profile) {
143
+ profile = opts.profile;
144
+ } else {
145
+ profile = await select('[3/4] Select hook profile:', [
146
+ { key: 'f', label: 'fast — minimal checks, maximum speed', value: 'fast' },
147
+ { key: 's', label: 'standard — balanced (default)', value: 'standard' },
148
+ { key: 'x', label: 'strict — everything including vet/check on each edit', value: 'strict' }
149
+ ], 'standard', useDefaults);
150
+ }
151
+
152
+ // ── [4/4] Plugin Selection ───────────────────────────────
153
+ console.log('');
154
+ console.log('[4/4] Claude Code plugins:');
155
+ console.log('');
156
+ console.log(' Base plugins (always enabled):');
157
+ console.log(' ✓ superpowers — TDD, brainstorming, debugging, verification');
158
+ console.log(' ✓ github — PR comments, issue tracking (/review --comment)');
159
+ console.log(' ✓ context7 — library documentation lookup');
160
+ console.log(' ✓ code-review — enhanced code review workflows');
161
+ console.log('');
162
+ console.log(' Optional plugins:');
163
+
164
+ let optionalPlugins;
165
+ if (opts.plugins) {
166
+ optionalPlugins = opts.plugins;
167
+ } else {
168
+ const pluginItems = [
169
+ { label: 'code-simplifier (code cleanup/refactoring)? [y/N]', value: 'code-simplifier' },
170
+ { label: 'playwright (browser automation, e2e tests)? [y/N]', value: 'playwright' }
171
+ ];
172
+
173
+ if (stacks.includes('typescript')) {
174
+ pluginItems.push({
175
+ label: 'frontend-design (UI/design assistance)? [Y/n]',
176
+ value: 'frontend-design',
177
+ defaultYes: true
178
+ });
179
+ } else {
180
+ pluginItems.push({
181
+ label: 'frontend-design (UI/design assistance)? [y/N]',
182
+ value: 'frontend-design'
183
+ });
184
+ }
185
+
186
+ optionalPlugins = await multiConfirm('', pluginItems, useDefaults);
187
+ }
188
+
189
+ // ── Install ──────────────────────────────────────────────
190
+ console.log('');
191
+ console.log('Installing...');
192
+
193
+ // Core agents
194
+ const agentCount = copyDir(
195
+ join(PACKAGES_DIR, 'core', 'agents'),
196
+ join(claudeDir, 'agents'),
197
+ mode, '.md'
198
+ );
199
+ info(`Copied ${agentCount} agents → .claude/agents/`);
200
+
201
+ // Core commands
202
+ const cmdCount = copyDir(
203
+ join(PACKAGES_DIR, 'core', 'commands'),
204
+ join(claudeDir, 'commands'),
205
+ mode, '.md'
206
+ );
207
+ info(`Copied ${cmdCount} commands → .claude/commands/`);
208
+
209
+ // Core hooks + rules: exclude superkit-internal files (repo-only tooling that
210
+ // never ships). Both skip lists derive from the packages/core/INTERNAL-FILES
211
+ // manifest so this installer stays in sync with the other two consumers.
212
+ const { hooks: SUPERKIT_INTERNAL_HOOKS, rules: SUPERKIT_INTERNAL_RULES } = readInternalManifest();
213
+ const hooksDir = join(claudeDir, 'scripts', 'hooks');
214
+ mkdirSync(hooksDir, { recursive: true });
215
+ let hookCount = 0;
216
+ const coreHooksDir = join(PACKAGES_DIR, 'core', 'hooks');
217
+ if (existsSync(coreHooksDir)) {
218
+ for (const file of readdirSync(coreHooksDir)) {
219
+ if (!file.endsWith('.sh') && !file.endsWith('.py')) continue;
220
+ if (SUPERKIT_INTERNAL_HOOKS.includes(file)) continue;
221
+ if (copyFile(join(coreHooksDir, file), join(hooksDir, file), mode)) hookCount++;
222
+ }
223
+ }
224
+
225
+ // Shared hook library (profile.sh — unified profile + disable helper)
226
+ const coreHookLibDir = join(coreHooksDir, 'lib');
227
+ if (existsSync(coreHookLibDir)) {
228
+ const destLibDir = join(hooksDir, 'lib');
229
+ mkdirSync(destLibDir, { recursive: true });
230
+ for (const file of readdirSync(coreHookLibDir)) {
231
+ if (!file.endsWith('.sh')) continue;
232
+ copyFile(join(coreHookLibDir, file), join(destLibDir, file), mode);
233
+ }
234
+ }
235
+
236
+ // Core rules (exclude superkit-internal rules that reference packages/core/;
237
+ // SUPERKIT_INTERNAL_RULES was derived from the manifest above)
238
+ const coreRuleCount = copyDir(join(PACKAGES_DIR, 'core', 'rules'), join(claudeDir, 'rules'), mode, '.md', SUPERKIT_INTERNAL_RULES);
239
+
240
+ // Core skills
241
+ const coreSkillCount = copySkills(join(PACKAGES_DIR, 'core', 'skills'), join(claudeDir, 'skills'), mode);
242
+
243
+ // Stack agents
244
+ let stackAgentCount = 0;
245
+ for (const stack of stacks) {
246
+ const stackAgentDir = join(PACKAGES_DIR, 'stack-agents', stack);
247
+ if (existsSync(stackAgentDir)) {
248
+ stackAgentCount += copyDir(stackAgentDir, join(claudeDir, 'agents'), mode, '.md');
249
+ // Copy references/ subdirectory if present (on-demand knowledge docs for agents)
250
+ const refsDir = join(stackAgentDir, 'references');
251
+ if (existsSync(refsDir)) {
252
+ const destRefsDir = join(claudeDir, 'agents', 'references');
253
+ mkdirSync(destRefsDir, { recursive: true });
254
+ let refCount = 0;
255
+ for (const refFile of readdirSync(refsDir)) {
256
+ if (!refFile.endsWith('.md')) continue;
257
+ if (copyFile(join(refsDir, refFile), join(destRefsDir, refFile), mode)) refCount++;
258
+ }
259
+ if (refCount > 0) info(` Copied ${refCount} reference docs → .claude/agents/references/`);
260
+ }
261
+ }
262
+ }
263
+
264
+ // Stack hooks
265
+ let stackHookCount = 0;
266
+ for (const stack of stacks) {
267
+ const stackHookDir = join(PACKAGES_DIR, 'stack-hooks', stack);
268
+ if (existsSync(stackHookDir)) {
269
+ for (const file of readdirSync(stackHookDir)) {
270
+ if (!file.endsWith('.sh')) continue;
271
+ if (copyFile(join(stackHookDir, file), join(hooksDir, file), mode)) stackHookCount++;
272
+ }
273
+ }
274
+ }
275
+
276
+ // Note: totalHooks computed after self-contained packages to include all hooks
277
+
278
+ // Stack rules
279
+ let stackRuleCount = 0;
280
+ for (const stack of stacks) {
281
+ const stackRuleDir = join(PACKAGES_DIR, 'stack-rules', stack);
282
+ if (existsSync(stackRuleDir)) {
283
+ stackRuleCount += copyDir(stackRuleDir, join(claudeDir, 'rules'), mode, '.md');
284
+ }
285
+ }
286
+ if (stackRuleCount > 0) info(`Copied ${stackRuleCount} stack rules → .claude/rules/`);
287
+
288
+ // Self-contained packages (frontend-3d / frontend-ui have agents, hooks, skills, rules, commands in one dir)
289
+ const SELF_CONTAINED_PACKAGES = ['frontend-3d', 'frontend-ui'];
290
+ let packageSkillCount = 0;
291
+ let packageCmdCount = 0;
292
+ for (const stack of stacks) {
293
+ if (!SELF_CONTAINED_PACKAGES.includes(stack)) continue;
294
+ const pkgDir = join(PACKAGES_DIR, stack);
295
+ if (!existsSync(pkgDir)) continue;
296
+
297
+ // Package agents
298
+ const pkgAgentDir = join(pkgDir, 'agents');
299
+ if (existsSync(pkgAgentDir)) {
300
+ stackAgentCount += copyDir(pkgAgentDir, join(claudeDir, 'agents'), mode, '.md');
301
+ }
302
+
303
+ // Package hooks
304
+ const pkgHookDir = join(pkgDir, 'hooks');
305
+ if (existsSync(pkgHookDir)) {
306
+ for (const file of readdirSync(pkgHookDir)) {
307
+ if (!file.endsWith('.sh')) continue;
308
+ if (copyFile(join(pkgHookDir, file), join(hooksDir, file), mode)) stackHookCount++;
309
+ }
310
+ }
311
+
312
+ // Package skills
313
+ const pkgSkillDir = join(pkgDir, 'skills');
314
+ if (existsSync(pkgSkillDir)) {
315
+ packageSkillCount += copySkills(pkgSkillDir, join(claudeDir, 'skills'), mode);
316
+ }
317
+
318
+ // Package rules
319
+ const pkgRuleDir = join(pkgDir, 'rules');
320
+ if (existsSync(pkgRuleDir)) {
321
+ stackRuleCount += copyDir(pkgRuleDir, join(claudeDir, 'rules'), mode, '.md');
322
+ }
323
+
324
+ // Package commands
325
+ const pkgCmdDir = join(pkgDir, 'commands');
326
+ if (existsSync(pkgCmdDir)) {
327
+ packageCmdCount += copyDir(pkgCmdDir, join(claudeDir, 'commands'), mode, '.md');
328
+ }
329
+ }
330
+ if (packageSkillCount > 0) info(`Copied ${packageSkillCount} package skills → .claude/skills/`);
331
+ if (packageCmdCount > 0) info(`Copied ${packageCmdCount} package commands → .claude/commands/`);
332
+
333
+ // Hook count summary (after all sources: core + stack + self-contained)
334
+ const totalHooks = hookCount + stackHookCount;
335
+ info(`Copied ${totalHooks} hooks → .claude/scripts/hooks/ (${hookCount} core + ${stackHookCount} stack)`);
336
+
337
+ // Extras
338
+ let extraCount = 0;
339
+ for (const extra of extras) {
340
+ const extraFile = join(PACKAGES_DIR, 'extras', `${extra}.md`);
341
+ if (existsSync(extraFile)) {
342
+ if (copyFile(extraFile, join(claudeDir, 'agents', `${extra}.md`), mode)) extraCount++;
343
+ }
344
+ }
345
+ if (extraCount > 0) info(`Copied ${extraCount} extras → .claude/agents/`);
346
+ if (stackAgentCount > 0) info(`Copied ${stackAgentCount} stack agents → .claude/agents/`);
347
+
348
+ // Make hooks executable (Unix only)
349
+ if (process.platform !== 'win32' && existsSync(hooksDir)) {
350
+ for (const file of readdirSync(hooksDir)) {
351
+ if (!file.endsWith('.sh') && !file.endsWith('.py')) continue;
352
+ try {
353
+ chmodSync(join(hooksDir, file), 0o755);
354
+ } catch { /* skip */ }
355
+ }
356
+ // Shared library helpers under .claude/scripts/hooks/lib/
357
+ const libDir = join(hooksDir, 'lib');
358
+ if (existsSync(libDir)) {
359
+ for (const file of readdirSync(libDir)) {
360
+ if (!file.endsWith('.sh')) continue;
361
+ try {
362
+ chmodSync(join(libDir, file), 0o755);
363
+ } catch { /* skip */ }
364
+ }
365
+ }
366
+ }
367
+
368
+ // Statusline helper
369
+ const statuslineSrc = join(PACKAGES_DIR, 'core', 'helpers', 'statusline.cjs');
370
+ const scriptsDir = join(claudeDir, 'scripts');
371
+ mkdirSync(scriptsDir, { recursive: true });
372
+ if (existsSync(statuslineSrc)) {
373
+ copyFile(statuslineSrc, join(scriptsDir, 'statusline.cjs'), mode);
374
+ info('Copied statusline → .claude/scripts/statusline.cjs');
375
+ }
376
+
377
+ // ── Build settings.json ──────────────────────────────────
378
+ const settingsResult = writeSettings(
379
+ join(PACKAGES_DIR, 'core', 'settings.json'),
380
+ join(claudeDir, 'settings.json'),
381
+ PACKAGES_DIR,
382
+ stacks,
383
+ optionalPlugins
384
+ );
385
+ info(`Built settings.json with ${profile} profile hooks + ${settingsResult.pluginCount} plugins`);
386
+
387
+ // ── CLAUDE.md template ──────────────────────────────────
388
+ const claudeMdDst = join(projectDir, 'CLAUDE.md');
389
+ if (!existsSync(claudeMdDst) || mode !== 'merge') {
390
+ copyFile(join(PACKAGES_DIR, 'core', 'CLAUDE.md'), claudeMdDst, 'fresh');
391
+ info('Created CLAUDE.md template');
392
+ } else {
393
+ warn('CLAUDE.md already exists — skipped (merge mode)');
394
+ }
395
+
396
+ // ── ADR template (unconditional, idempotent) ─────────────
397
+ // dev.md Phase 2 and superkit-init.md reference docs-templates/adr-template.md
398
+ // at the PROJECT root. Install it always — even when the docs scaffold below is
399
+ // declined — so the nudge never dangles. NEVER overwrite an existing copy:
400
+ // it's a doc template consumers legitimately edit.
401
+ const adrSrc = join(PACKAGES_DIR, 'core', 'docs-templates', 'adr-template.md');
402
+ const adrDst = join(projectDir, 'docs-templates', 'adr-template.md');
403
+ if (existsSync(adrSrc) && !existsSync(adrDst)) {
404
+ copyFile(adrSrc, adrDst, 'fresh');
405
+ info('Copied ADR template → docs-templates/adr-template.md');
406
+ }
407
+
408
+ // ── Documentation scaffolding ────────────────────────────
409
+ if (!opts.noDocs) {
410
+ console.log('');
411
+ console.log(' All agents use Phase 0 — they read docs/architecture/ before reviewing.');
412
+ console.log(' Without these docs, agents work blind and produce less accurate reviews.');
413
+ console.log(' This step creates architecture templates (fill TODOs later) and a project tree.');
414
+ console.log('');
415
+
416
+ const createDocs = await confirm('Initialize documentation structure? (recommended)', true, useDefaults);
417
+ if (createDocs) {
418
+ scaffoldDocs(projectDir, PACKAGES_DIR, mode);
419
+ }
420
+ }
421
+
422
+ // ── Codex CLI ────────────────────────────────────────────
423
+ let codexInstalled = false;
424
+ let codexSkillCount = 0;
425
+ console.log('');
426
+ const installCodexFlag = opts.codex ?? await confirm('Also install for Codex CLI?', false, useDefaults);
427
+ if (installCodexFlag) {
428
+ codexSkillCount = installCodex(projectDir, PACKAGES_DIR);
429
+ codexInstalled = true;
430
+ }
431
+
432
+ // ── Validation ───────────────────────────────────────────
433
+ console.log('');
434
+ const validationOk = validate(claudeDir, projectDir);
435
+ console.log('');
436
+ if (validationOk) {
437
+ info('All validation checks passed');
438
+ } else {
439
+ warn('Some validation checks failed — review warnings above');
440
+ }
441
+
442
+ // ── Save superkit meta ───────────────────────────────────
443
+ const metaPath = join(claudeDir, '.superkit-meta');
444
+ const scriptDir = join(__dirname, '..');
445
+ const metaContent = [
446
+ `SUPERKIT_SOURCE="${scriptDir}"`,
447
+ `SUPERKIT_VERSION="${version}"`,
448
+ `SUPERKIT_STACKS="${stacks.join(' ')}"`,
449
+ `SUPERKIT_EXTRAS="${extras.join(' ')}"`,
450
+ `SUPERKIT_PROFILE="${profile}"`,
451
+ `SUPERKIT_INSTALLED="${new Date().toISOString()}"`,
452
+ ''
453
+ ].join('\n');
454
+ writeFileSync(metaPath, metaContent);
455
+ info('Saved superkit source path for auto-updates → .claude/.superkit-meta');
456
+
457
+ // ── Summary ──────────────────────────────────────────────
458
+ const totalAgents = agentCount + stackAgentCount + extraCount;
459
+ console.log('');
460
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
461
+ info('Installation complete!');
462
+ console.log('');
463
+ console.log(' Claude Code:');
464
+ console.log(` Agents: ${totalAgents} (${agentCount} core + ${stackAgentCount} stack + ${extraCount} extras)`);
465
+ console.log(` Commands: ${cmdCount + packageCmdCount}`);
466
+ console.log(` Hooks: ${totalHooks} + Stop prompt`);
467
+ console.log(` Rules: ${coreRuleCount + stackRuleCount}`);
468
+ console.log(` Skills: ${coreSkillCount + packageSkillCount}`);
469
+ console.log(` Plugins: ${settingsResult.pluginCount}`);
470
+ console.log(` Profile: ${profile}`);
471
+
472
+ if (codexInstalled) {
473
+ console.log('');
474
+ console.log(' Codex CLI:');
475
+ console.log(` Skills: ${codexSkillCount} (copied to .codex/skills/)`);
476
+ console.log(' Template defaults: gpt-6-astra/high; subagent gpt-5.6-sol/medium');
477
+ console.log(' Config: .codex/config.toml');
478
+ console.log(' Docs: AGENTS.md');
479
+ }
480
+
481
+ console.log('');
482
+ console.log(' Next steps:');
483
+ console.log(' 1. Run: claude');
484
+ console.log(' 2. Run: /superkit-init ← intelligent project setup (auto-fills docs!)');
485
+ console.log(' 3. Install plugins: /plugins → install missing');
486
+ console.log(' 4. Try: /review or /audit');
487
+ console.log('');
488
+ console.log(' 💡 /superkit-init scans your code and generates FILLED docs —');
489
+ console.log(' no more manual TODO filling! Use --non-interactive for quick setup.');
490
+ console.log('');
491
+ console.log(' ⚠ Plugins are ENABLED in settings.json but may need to be');
492
+ console.log(' installed first. Open Claude Code → /plugins → install:');
493
+
494
+ const allPlugins = ['superpowers', 'github', 'context7', 'code-review', ...optionalPlugins];
495
+ console.log(` ${allPlugins.join(', ')}`);
496
+ console.log('');
497
+
498
+ closeRL();
499
+ }
package/lib/prompts.js ADDED
@@ -0,0 +1,51 @@
1
+ import * as readline from 'node:readline/promises';
2
+ import { stdin as input, stdout as output } from 'node:process';
3
+
4
+ let rl = null;
5
+
6
+ function getRL() {
7
+ if (!rl) {
8
+ rl = readline.createInterface({ input, output });
9
+ }
10
+ return rl;
11
+ }
12
+
13
+ export function closeRL() {
14
+ if (rl) {
15
+ rl.close();
16
+ rl = null;
17
+ }
18
+ }
19
+
20
+ export async function confirm(question, defaultYes = false, useDefaults = false) {
21
+ if (useDefaults) return defaultYes;
22
+ const hint = defaultYes ? '[Y/n]' : '[y/N]';
23
+ const answer = await getRL().question(`${question} ${hint} `);
24
+ if (!answer.trim()) return defaultYes;
25
+ return /^y(es)?$/i.test(answer.trim());
26
+ }
27
+
28
+ export async function select(prompt, options, defaultValue, useDefaults = false) {
29
+ if (useDefaults) return defaultValue;
30
+
31
+ console.log(`\n${prompt}`);
32
+ for (const opt of options) {
33
+ const marker = opt.value === defaultValue ? ' (default)' : '';
34
+ console.log(` [${opt.key}] ${opt.label}${marker}`);
35
+ }
36
+
37
+ const answer = await getRL().question(' Choice: ');
38
+ const trimmed = answer.trim().toLowerCase();
39
+ const match = options.find(o => o.key.toLowerCase() === trimmed);
40
+ return match ? match.value : defaultValue;
41
+ }
42
+
43
+ export async function multiConfirm(header, items, useDefaults = false) {
44
+ if (header) console.log(`\n${header}`);
45
+ const selected = [];
46
+ for (const item of items) {
47
+ const yes = await confirm(` ${item.label}`, item.defaultYes || false, useDefaults);
48
+ if (yes) selected.push(item.value);
49
+ }
50
+ return selected;
51
+ }
@@ -0,0 +1,51 @@
1
+ import { readFileSync, writeFileSync, readdirSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+
4
+ export function buildSettings(baseSettings, stackHookFiles, optionalPlugins) {
5
+ const settings = JSON.parse(JSON.stringify(baseSettings));
6
+
7
+ const existingCommands = new Set(
8
+ settings.hooks.PostToolUse[0].hooks.map(h => h.command)
9
+ );
10
+ for (const hookFile of [...new Set(stackHookFiles)]) {
11
+ const command = `"$CLAUDE_PROJECT_DIR"/.claude/scripts/hooks/${hookFile}`;
12
+ if (existingCommands.has(command)) continue;
13
+ existingCommands.add(command);
14
+ settings.hooks.PostToolUse[0].hooks.push({ type: 'command', command });
15
+ }
16
+
17
+ for (const plugin of optionalPlugins) {
18
+ settings.enabledPlugins[`${plugin}@claude-plugins-official`] = true;
19
+ }
20
+
21
+ return settings;
22
+ }
23
+
24
+ export function collectStackHooks(packagesDir, stacks) {
25
+ const hooks = [];
26
+ for (const stack of stacks) {
27
+ // Standard pattern: packages/stack-hooks/{stack}/
28
+ const standardDir = join(packagesDir, 'stack-hooks', stack);
29
+ // Self-contained pattern: packages/{stack}/hooks/
30
+ const packageDir = join(packagesDir, stack, 'hooks');
31
+
32
+ for (const hookDir of [standardDir, packageDir]) {
33
+ if (!existsSync(hookDir)) continue;
34
+ for (const file of readdirSync(hookDir)) {
35
+ if (file.endsWith('.sh')) hooks.push(file);
36
+ }
37
+ }
38
+ }
39
+ return hooks;
40
+ }
41
+
42
+ export function writeSettings(baseSettingsPath, destPath, packagesDir, stacks, optionalPlugins) {
43
+ const base = JSON.parse(readFileSync(baseSettingsPath, 'utf8'));
44
+ const stackHooks = collectStackHooks(packagesDir, stacks);
45
+ const settings = buildSettings(base, stackHooks, optionalPlugins);
46
+ writeFileSync(destPath, JSON.stringify(settings, null, 2) + '\n');
47
+ return {
48
+ pluginCount: Object.keys(settings.enabledPlugins).length,
49
+ stackHookCount: stackHooks.length
50
+ };
51
+ }