@glxmart/boss-cli 1.0.0-beta.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 (506) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/assets/claude-folder/agents/.gitkeep +0 -0
  4. package/assets/claude-folder/commands/boss-commands.md +138 -0
  5. package/assets/claude-folder/rules/boss-workflow.md +33 -0
  6. package/assets/claude-folder/rules/code-style.md +23 -0
  7. package/assets/claude-folder/rules/security.md +22 -0
  8. package/assets/claude-folder/rules/testing.md +32 -0
  9. package/assets/claude-folder/settings.local.json +88 -0
  10. package/assets/claude-folder/skills/.gitkeep +0 -0
  11. package/assets/claude-md/docs/container-use.md +140 -0
  12. package/assets/claude-md/docs/github-operations.md +238 -0
  13. package/assets/claude-md/docs/initialization.md +186 -0
  14. package/assets/claude-md/docs/quality-standards.md +15 -0
  15. package/assets/claude-md/docs/spec-kit.md +46 -0
  16. package/assets/claude-md/docs/workers.md +174 -0
  17. package/assets/claude-md/docs/workflow.md +140 -0
  18. package/assets/claude-md/template.md +812 -0
  19. package/assets/docker-compose/docker-compose.yml +52 -0
  20. package/assets/git-hooks/commit-msg.sh +102 -0
  21. package/assets/git-hooks/pre-commit-check.sh +21 -0
  22. package/assets/git-hooks/pre-commit.sh +6 -0
  23. package/assets/git-hooks/pre-push.sh +154 -0
  24. package/assets/git-hooks/security-check.sh +40 -0
  25. package/assets/git-hooks/test-changed.sh +84 -0
  26. package/assets/github-workflows/CODEOWNERS +3 -0
  27. package/assets/github-workflows/boss-ci.yml +40 -0
  28. package/assets/github-workflows/boss-gates.yml +28 -0
  29. package/assets/start-boss-sh/start-boss.sh +471 -0
  30. package/assets/template-docs/api-service-fastify.md +98 -0
  31. package/assets/template-docs/blank.md +91 -0
  32. package/assets/template-docs/nextjs-app-turbo.md +102 -0
  33. package/assets/template-docs/t3-app.md +106 -0
  34. package/assets/template-loader/README.md +28 -0
  35. package/assets/template-loader/eslint.config.node.js +28 -0
  36. package/assets/template-loader/eslint.config.react.js +47 -0
  37. package/assets/template-loader/gitignore +42 -0
  38. package/assets/template-loader/index.test.ts +10 -0
  39. package/assets/template-loader/index.ts +13 -0
  40. package/assets/template-loader/prettierignore +8 -0
  41. package/assets/template-loader/vitest.config.ts +19 -0
  42. package/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
  43. package/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
  44. package/assets/worker-configs/architect/CLAUDE.md +106 -0
  45. package/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
  46. package/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
  47. package/assets/worker-configs/clarifier/CLAUDE.md +112 -0
  48. package/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
  49. package/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
  50. package/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
  51. package/assets/worker-configs/consolidator/CLAUDE.md +114 -0
  52. package/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
  53. package/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
  54. package/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
  55. package/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
  56. package/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
  57. package/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
  58. package/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
  59. package/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
  60. package/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
  61. package/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
  62. package/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
  63. package/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
  64. package/assets/worker-configs/planner/CLAUDE.md +111 -0
  65. package/assets/worker-configs/product-owner/CLAUDE.md +108 -0
  66. package/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
  67. package/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
  68. package/assets/worker-configs/reviewer/CLAUDE.md +110 -0
  69. package/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
  70. package/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
  71. package/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
  72. package/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
  73. package/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
  74. package/assets/worker-configs/tester/CLAUDE.md +110 -0
  75. package/dist/assets/claude-folder/agents/.gitkeep +0 -0
  76. package/dist/assets/claude-folder/commands/boss-commands.md +138 -0
  77. package/dist/assets/claude-folder/rules/boss-workflow.md +33 -0
  78. package/dist/assets/claude-folder/rules/code-style.md +23 -0
  79. package/dist/assets/claude-folder/rules/security.md +22 -0
  80. package/dist/assets/claude-folder/rules/testing.md +32 -0
  81. package/dist/assets/claude-folder/settings.local.json +88 -0
  82. package/dist/assets/claude-folder/skills/.gitkeep +0 -0
  83. package/dist/assets/claude-md/docs/container-use.md +140 -0
  84. package/dist/assets/claude-md/docs/github-operations.md +238 -0
  85. package/dist/assets/claude-md/docs/initialization.md +186 -0
  86. package/dist/assets/claude-md/docs/quality-standards.md +15 -0
  87. package/dist/assets/claude-md/docs/spec-kit.md +46 -0
  88. package/dist/assets/claude-md/docs/workers.md +174 -0
  89. package/dist/assets/claude-md/docs/workflow.md +140 -0
  90. package/dist/assets/claude-md/template.md +812 -0
  91. package/dist/assets/docker-compose/docker-compose.yml +52 -0
  92. package/dist/assets/git-hooks/commit-msg.sh +102 -0
  93. package/dist/assets/git-hooks/pre-commit-check.sh +21 -0
  94. package/dist/assets/git-hooks/pre-commit.sh +6 -0
  95. package/dist/assets/git-hooks/pre-push.sh +154 -0
  96. package/dist/assets/git-hooks/security-check.sh +40 -0
  97. package/dist/assets/git-hooks/test-changed.sh +84 -0
  98. package/dist/assets/github-workflows/CODEOWNERS +3 -0
  99. package/dist/assets/github-workflows/boss-ci.yml +40 -0
  100. package/dist/assets/github-workflows/boss-gates.yml +28 -0
  101. package/dist/assets/start-boss-sh/start-boss.sh +471 -0
  102. package/dist/assets/template-docs/api-service-fastify.md +98 -0
  103. package/dist/assets/template-docs/blank.md +91 -0
  104. package/dist/assets/template-docs/nextjs-app-turbo.md +102 -0
  105. package/dist/assets/template-docs/t3-app.md +106 -0
  106. package/dist/assets/template-loader/README.md +28 -0
  107. package/dist/assets/template-loader/eslint.config.node.js +28 -0
  108. package/dist/assets/template-loader/eslint.config.react.js +47 -0
  109. package/dist/assets/template-loader/gitignore +42 -0
  110. package/dist/assets/template-loader/index.test.ts +10 -0
  111. package/dist/assets/template-loader/index.ts +13 -0
  112. package/dist/assets/template-loader/prettierignore +8 -0
  113. package/dist/assets/template-loader/vitest.config.ts +19 -0
  114. package/dist/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
  115. package/dist/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
  116. package/dist/assets/worker-configs/architect/CLAUDE.md +106 -0
  117. package/dist/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
  118. package/dist/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
  119. package/dist/assets/worker-configs/clarifier/CLAUDE.md +112 -0
  120. package/dist/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
  121. package/dist/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
  122. package/dist/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
  123. package/dist/assets/worker-configs/consolidator/CLAUDE.md +114 -0
  124. package/dist/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
  125. package/dist/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
  126. package/dist/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
  127. package/dist/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
  128. package/dist/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
  129. package/dist/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
  130. package/dist/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
  131. package/dist/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
  132. package/dist/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
  133. package/dist/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
  134. package/dist/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
  135. package/dist/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
  136. package/dist/assets/worker-configs/planner/CLAUDE.md +111 -0
  137. package/dist/assets/worker-configs/product-owner/CLAUDE.md +108 -0
  138. package/dist/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
  139. package/dist/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
  140. package/dist/assets/worker-configs/reviewer/CLAUDE.md +110 -0
  141. package/dist/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
  142. package/dist/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
  143. package/dist/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
  144. package/dist/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
  145. package/dist/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
  146. package/dist/assets/worker-configs/tester/CLAUDE.md +110 -0
  147. package/dist/commands/__tests__/bootstrap.test.d.ts +2 -0
  148. package/dist/commands/__tests__/bootstrap.test.d.ts.map +1 -0
  149. package/dist/commands/__tests__/bootstrap.test.js +379 -0
  150. package/dist/commands/__tests__/bootstrap.test.js.map +1 -0
  151. package/dist/commands/__tests__/doctor.test.d.ts +2 -0
  152. package/dist/commands/__tests__/doctor.test.d.ts.map +1 -0
  153. package/dist/commands/__tests__/doctor.test.js +13 -0
  154. package/dist/commands/__tests__/doctor.test.js.map +1 -0
  155. package/dist/commands/bootstrap.d.ts +3 -0
  156. package/dist/commands/bootstrap.d.ts.map +1 -0
  157. package/dist/commands/bootstrap.js +390 -0
  158. package/dist/commands/bootstrap.js.map +1 -0
  159. package/dist/commands/doctor.d.ts +2 -0
  160. package/dist/commands/doctor.d.ts.map +1 -0
  161. package/dist/commands/doctor.js +171 -0
  162. package/dist/commands/doctor.js.map +1 -0
  163. package/dist/commands/templates.d.ts +2 -0
  164. package/dist/commands/templates.d.ts.map +1 -0
  165. package/dist/commands/templates.js +12 -0
  166. package/dist/commands/templates.js.map +1 -0
  167. package/dist/constants.d.ts +23 -0
  168. package/dist/constants.d.ts.map +1 -0
  169. package/dist/constants.js +23 -0
  170. package/dist/constants.js.map +1 -0
  171. package/dist/generators/__tests__/boss-config.test.d.ts +2 -0
  172. package/dist/generators/__tests__/boss-config.test.d.ts.map +1 -0
  173. package/dist/generators/__tests__/boss-config.test.js +61 -0
  174. package/dist/generators/__tests__/boss-config.test.js.map +1 -0
  175. package/dist/generators/__tests__/claude-folder.test.d.ts +2 -0
  176. package/dist/generators/__tests__/claude-folder.test.d.ts.map +1 -0
  177. package/dist/generators/__tests__/claude-folder.test.js +128 -0
  178. package/dist/generators/__tests__/claude-folder.test.js.map +1 -0
  179. package/dist/generators/__tests__/claude-md.test.d.ts +2 -0
  180. package/dist/generators/__tests__/claude-md.test.d.ts.map +1 -0
  181. package/dist/generators/__tests__/claude-md.test.js +55 -0
  182. package/dist/generators/__tests__/claude-md.test.js.map +1 -0
  183. package/dist/generators/__tests__/container-use-config.test.d.ts +2 -0
  184. package/dist/generators/__tests__/container-use-config.test.d.ts.map +1 -0
  185. package/dist/generators/__tests__/container-use-config.test.js +80 -0
  186. package/dist/generators/__tests__/container-use-config.test.js.map +1 -0
  187. package/dist/generators/__tests__/docker-compose.test.d.ts +2 -0
  188. package/dist/generators/__tests__/docker-compose.test.d.ts.map +1 -0
  189. package/dist/generators/__tests__/docker-compose.test.js +39 -0
  190. package/dist/generators/__tests__/docker-compose.test.js.map +1 -0
  191. package/dist/generators/__tests__/git-hooks.test.d.ts +2 -0
  192. package/dist/generators/__tests__/git-hooks.test.d.ts.map +1 -0
  193. package/dist/generators/__tests__/git-hooks.test.js +118 -0
  194. package/dist/generators/__tests__/git-hooks.test.js.map +1 -0
  195. package/dist/generators/__tests__/github-workflows.test.d.ts +2 -0
  196. package/dist/generators/__tests__/github-workflows.test.d.ts.map +1 -0
  197. package/dist/generators/__tests__/github-workflows.test.js +86 -0
  198. package/dist/generators/__tests__/github-workflows.test.js.map +1 -0
  199. package/dist/generators/__tests__/mcp-config.test.d.ts +2 -0
  200. package/dist/generators/__tests__/mcp-config.test.d.ts.map +1 -0
  201. package/dist/generators/__tests__/mcp-config.test.js +131 -0
  202. package/dist/generators/__tests__/mcp-config.test.js.map +1 -0
  203. package/dist/generators/__tests__/project-structure.test.d.ts +2 -0
  204. package/dist/generators/__tests__/project-structure.test.d.ts.map +1 -0
  205. package/dist/generators/__tests__/project-structure.test.js +40 -0
  206. package/dist/generators/__tests__/project-structure.test.js.map +1 -0
  207. package/dist/generators/__tests__/quality-gates.test.d.ts +2 -0
  208. package/dist/generators/__tests__/quality-gates.test.d.ts.map +1 -0
  209. package/dist/generators/__tests__/quality-gates.test.js +71 -0
  210. package/dist/generators/__tests__/quality-gates.test.js.map +1 -0
  211. package/dist/generators/__tests__/specify-structure.test.d.ts +2 -0
  212. package/dist/generators/__tests__/specify-structure.test.d.ts.map +1 -0
  213. package/dist/generators/__tests__/specify-structure.test.js +63 -0
  214. package/dist/generators/__tests__/specify-structure.test.js.map +1 -0
  215. package/dist/generators/__tests__/start-boss-sh.test.d.ts +2 -0
  216. package/dist/generators/__tests__/start-boss-sh.test.d.ts.map +1 -0
  217. package/dist/generators/__tests__/start-boss-sh.test.js +36 -0
  218. package/dist/generators/__tests__/start-boss-sh.test.js.map +1 -0
  219. package/dist/generators/__tests__/template-docs.test.d.ts +2 -0
  220. package/dist/generators/__tests__/template-docs.test.d.ts.map +1 -0
  221. package/dist/generators/__tests__/template-docs.test.js +92 -0
  222. package/dist/generators/__tests__/template-docs.test.js.map +1 -0
  223. package/dist/generators/__tests__/template-loader.test.d.ts +2 -0
  224. package/dist/generators/__tests__/template-loader.test.d.ts.map +1 -0
  225. package/dist/generators/__tests__/template-loader.test.js +215 -0
  226. package/dist/generators/__tests__/template-loader.test.js.map +1 -0
  227. package/dist/generators/__tests__/worker-configs.test.d.ts +2 -0
  228. package/dist/generators/__tests__/worker-configs.test.d.ts.map +1 -0
  229. package/dist/generators/__tests__/worker-configs.test.js +122 -0
  230. package/dist/generators/__tests__/worker-configs.test.js.map +1 -0
  231. package/dist/generators/boss-config.d.ts +3 -0
  232. package/dist/generators/boss-config.d.ts.map +1 -0
  233. package/dist/generators/boss-config.js +242 -0
  234. package/dist/generators/boss-config.js.map +1 -0
  235. package/dist/generators/claude-folder.d.ts +3 -0
  236. package/dist/generators/claude-folder.d.ts.map +1 -0
  237. package/dist/generators/claude-folder.js +94 -0
  238. package/dist/generators/claude-folder.js.map +1 -0
  239. package/dist/generators/claude-md.d.ts +3 -0
  240. package/dist/generators/claude-md.d.ts.map +1 -0
  241. package/dist/generators/claude-md.js +64 -0
  242. package/dist/generators/claude-md.js.map +1 -0
  243. package/dist/generators/container-use-config.d.ts +13 -0
  244. package/dist/generators/container-use-config.d.ts.map +1 -0
  245. package/dist/generators/container-use-config.js +60 -0
  246. package/dist/generators/container-use-config.js.map +1 -0
  247. package/dist/generators/docker-compose.d.ts +2 -0
  248. package/dist/generators/docker-compose.d.ts.map +1 -0
  249. package/dist/generators/docker-compose.js +8 -0
  250. package/dist/generators/docker-compose.js.map +1 -0
  251. package/dist/generators/git-hooks.d.ts +3 -0
  252. package/dist/generators/git-hooks.d.ts.map +1 -0
  253. package/dist/generators/git-hooks.js +58 -0
  254. package/dist/generators/git-hooks.js.map +1 -0
  255. package/dist/generators/github-workflows.d.ts +3 -0
  256. package/dist/generators/github-workflows.d.ts.map +1 -0
  257. package/dist/generators/github-workflows.js +27 -0
  258. package/dist/generators/github-workflows.js.map +1 -0
  259. package/dist/generators/mcp-config.d.ts +3 -0
  260. package/dist/generators/mcp-config.d.ts.map +1 -0
  261. package/dist/generators/mcp-config.js +183 -0
  262. package/dist/generators/mcp-config.js.map +1 -0
  263. package/dist/generators/project-structure.d.ts +3 -0
  264. package/dist/generators/project-structure.d.ts.map +1 -0
  265. package/dist/generators/project-structure.js +24 -0
  266. package/dist/generators/project-structure.js.map +1 -0
  267. package/dist/generators/quality-gates.d.ts +3 -0
  268. package/dist/generators/quality-gates.d.ts.map +1 -0
  269. package/dist/generators/quality-gates.js +32 -0
  270. package/dist/generators/quality-gates.js.map +1 -0
  271. package/dist/generators/specify-structure.d.ts +2 -0
  272. package/dist/generators/specify-structure.d.ts.map +1 -0
  273. package/dist/generators/specify-structure.js +43 -0
  274. package/dist/generators/specify-structure.js.map +1 -0
  275. package/dist/generators/start-boss-sh.d.ts +2 -0
  276. package/dist/generators/start-boss-sh.d.ts.map +1 -0
  277. package/dist/generators/start-boss-sh.js +10 -0
  278. package/dist/generators/start-boss-sh.js.map +1 -0
  279. package/dist/generators/template-docs.d.ts +3 -0
  280. package/dist/generators/template-docs.d.ts.map +1 -0
  281. package/dist/generators/template-docs.js +19 -0
  282. package/dist/generators/template-docs.js.map +1 -0
  283. package/dist/generators/template-loader.d.ts +3 -0
  284. package/dist/generators/template-loader.d.ts.map +1 -0
  285. package/dist/generators/template-loader.js +308 -0
  286. package/dist/generators/template-loader.js.map +1 -0
  287. package/dist/generators/worker-configs.d.ts +3 -0
  288. package/dist/generators/worker-configs.d.ts.map +1 -0
  289. package/dist/generators/worker-configs.js +119 -0
  290. package/dist/generators/worker-configs.js.map +1 -0
  291. package/dist/index.d.ts +3 -0
  292. package/dist/index.d.ts.map +1 -0
  293. package/dist/index.js +57 -0
  294. package/dist/index.js.map +1 -0
  295. package/dist/presets/__tests__/quality-presets.test.d.ts +2 -0
  296. package/dist/presets/__tests__/quality-presets.test.d.ts.map +1 -0
  297. package/dist/presets/__tests__/quality-presets.test.js +152 -0
  298. package/dist/presets/__tests__/quality-presets.test.js.map +1 -0
  299. package/dist/presets/quality-presets.d.ts +3 -0
  300. package/dist/presets/quality-presets.d.ts.map +1 -0
  301. package/dist/presets/quality-presets.js +65 -0
  302. package/dist/presets/quality-presets.js.map +1 -0
  303. package/dist/types/index.d.ts +42 -0
  304. package/dist/types/index.d.ts.map +1 -0
  305. package/dist/types/index.js +2 -0
  306. package/dist/types/index.js.map +1 -0
  307. package/dist/utils/__tests__/file-system.test.d.ts +2 -0
  308. package/dist/utils/__tests__/file-system.test.d.ts.map +1 -0
  309. package/dist/utils/__tests__/file-system.test.js +83 -0
  310. package/dist/utils/__tests__/file-system.test.js.map +1 -0
  311. package/dist/utils/__tests__/git.test.d.ts +2 -0
  312. package/dist/utils/__tests__/git.test.d.ts.map +1 -0
  313. package/dist/utils/__tests__/git.test.js +79 -0
  314. package/dist/utils/__tests__/git.test.js.map +1 -0
  315. package/dist/utils/__tests__/template-loader.test.d.ts +2 -0
  316. package/dist/utils/__tests__/template-loader.test.d.ts.map +1 -0
  317. package/dist/utils/__tests__/template-loader.test.js +109 -0
  318. package/dist/utils/__tests__/template-loader.test.js.map +1 -0
  319. package/dist/utils/__tests__/validators.test.d.ts +2 -0
  320. package/dist/utils/__tests__/validators.test.d.ts.map +1 -0
  321. package/dist/utils/__tests__/validators.test.js +118 -0
  322. package/dist/utils/__tests__/validators.test.js.map +1 -0
  323. package/dist/utils/file-system.d.ts +8 -0
  324. package/dist/utils/file-system.d.ts.map +1 -0
  325. package/dist/utils/file-system.js +54 -0
  326. package/dist/utils/file-system.js.map +1 -0
  327. package/dist/utils/git.d.ts +7 -0
  328. package/dist/utils/git.d.ts.map +1 -0
  329. package/dist/utils/git.js +98 -0
  330. package/dist/utils/git.js.map +1 -0
  331. package/dist/utils/logger.d.ts +13 -0
  332. package/dist/utils/logger.d.ts.map +1 -0
  333. package/dist/utils/logger.js +42 -0
  334. package/dist/utils/logger.js.map +1 -0
  335. package/dist/utils/prompts.d.ts +18 -0
  336. package/dist/utils/prompts.d.ts.map +1 -0
  337. package/dist/utils/prompts.js +197 -0
  338. package/dist/utils/prompts.js.map +1 -0
  339. package/dist/utils/template-loader.d.ts +18 -0
  340. package/dist/utils/template-loader.d.ts.map +1 -0
  341. package/dist/utils/template-loader.js +92 -0
  342. package/dist/utils/template-loader.js.map +1 -0
  343. package/dist/utils/validators.d.ts +21 -0
  344. package/dist/utils/validators.d.ts.map +1 -0
  345. package/dist/utils/validators.js +50 -0
  346. package/dist/utils/validators.js.map +1 -0
  347. package/package.json +79 -0
  348. package/templates/spec-kit/README.md +17 -0
  349. package/templates/spec-kit/memory/constitution.md +50 -0
  350. package/templates/spec-kit/scripts/bash/check-prerequisites.sh +166 -0
  351. package/templates/spec-kit/scripts/bash/common.sh +156 -0
  352. package/templates/spec-kit/scripts/bash/create-new-feature.sh +297 -0
  353. package/templates/spec-kit/scripts/bash/setup-plan.sh +61 -0
  354. package/templates/spec-kit/scripts/bash/update-agent-context.sh +799 -0
  355. package/templates/spec-kit/scripts/powershell/check-prerequisites.ps1 +148 -0
  356. package/templates/spec-kit/scripts/powershell/common.ps1 +137 -0
  357. package/templates/spec-kit/scripts/powershell/create-new-feature.ps1 +283 -0
  358. package/templates/spec-kit/scripts/powershell/setup-plan.ps1 +61 -0
  359. package/templates/spec-kit/scripts/powershell/update-agent-context.ps1 +448 -0
  360. package/templates/spec-kit/src/specify_cli/__init__.py +1369 -0
  361. package/templates/spec-kit/templates/agent-file-template.md +28 -0
  362. package/templates/spec-kit/templates/checklist-template.md +40 -0
  363. package/templates/spec-kit/templates/commands/analyze.md +187 -0
  364. package/templates/spec-kit/templates/commands/checklist.md +297 -0
  365. package/templates/spec-kit/templates/commands/clarify.md +184 -0
  366. package/templates/spec-kit/templates/commands/constitution.md +82 -0
  367. package/templates/spec-kit/templates/commands/implement.md +138 -0
  368. package/templates/spec-kit/templates/commands/plan.md +95 -0
  369. package/templates/spec-kit/templates/commands/specify.md +261 -0
  370. package/templates/spec-kit/templates/commands/tasks.md +140 -0
  371. package/templates/spec-kit/templates/commands/taskstoissues.md +33 -0
  372. package/templates/spec-kit/templates/plan-template.md +104 -0
  373. package/templates/spec-kit/templates/spec-template.md +115 -0
  374. package/templates/spec-kit/templates/tasks-template.md +251 -0
  375. package/templates/spec-kit/templates/vscode-settings.json +14 -0
  376. package/templates/t3-app/README.md +41 -0
  377. package/templates/t3-app/base/README.md +29 -0
  378. package/templates/t3-app/base/_gitignore +47 -0
  379. package/templates/t3-app/base/next-env.d.ts +5 -0
  380. package/templates/t3-app/base/next.config.js +22 -0
  381. package/templates/t3-app/base/package.json +26 -0
  382. package/templates/t3-app/base/public/favicon.ico +0 -0
  383. package/templates/t3-app/base/src/env.js +40 -0
  384. package/templates/t3-app/base/src/styles/globals.css +16 -0
  385. package/templates/t3-app/base/tsconfig.json +42 -0
  386. package/templates/t3-app/extras/config/_eslint.base.js +45 -0
  387. package/templates/t3-app/extras/config/_eslint.drizzle.js +58 -0
  388. package/templates/t3-app/extras/config/_prettier.config.js +2 -0
  389. package/templates/t3-app/extras/config/_tailwind.prettier.config.js +4 -0
  390. package/templates/t3-app/extras/config/biome.jsonc +69 -0
  391. package/templates/t3-app/extras/config/drizzle-config-mysql.ts +12 -0
  392. package/templates/t3-app/extras/config/drizzle-config-postgres.ts +12 -0
  393. package/templates/t3-app/extras/config/drizzle-config-sqlite.ts +12 -0
  394. package/templates/t3-app/extras/config/next-config-appdir.js +10 -0
  395. package/templates/t3-app/extras/config/postcss.config.js +5 -0
  396. package/templates/t3-app/extras/pnpm/_npmrc +2 -0
  397. package/templates/t3-app/extras/prisma/schema/base-planetscale.prisma +25 -0
  398. package/templates/t3-app/extras/prisma/schema/base.prisma +21 -0
  399. package/templates/t3-app/extras/prisma/schema/with-auth-planetscale.prisma +79 -0
  400. package/templates/t3-app/extras/prisma/schema/with-auth.prisma +75 -0
  401. package/templates/t3-app/extras/prisma/schema/with-better-auth-planetscale.prisma +90 -0
  402. package/templates/t3-app/extras/prisma/schema/with-better-auth.prisma +89 -0
  403. package/templates/t3-app/extras/src/app/_components/post-tw.tsx +50 -0
  404. package/templates/t3-app/extras/src/app/_components/post.tsx +54 -0
  405. package/templates/t3-app/extras/src/app/api/auth/[...all]/route.ts +5 -0
  406. package/templates/t3-app/extras/src/app/api/auth/[...nextauth]/route.ts +3 -0
  407. package/templates/t3-app/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
  408. package/templates/t3-app/extras/src/app/layout/base.tsx +24 -0
  409. package/templates/t3-app/extras/src/app/layout/with-trpc-tw.tsx +29 -0
  410. package/templates/t3-app/extras/src/app/layout/with-trpc.tsx +28 -0
  411. package/templates/t3-app/extras/src/app/layout/with-tw.tsx +25 -0
  412. package/templates/t3-app/extras/src/app/page/base.tsx +39 -0
  413. package/templates/t3-app/extras/src/app/page/with-auth-trpc-tw.tsx +69 -0
  414. package/templates/t3-app/extras/src/app/page/with-auth-trpc.tsx +70 -0
  415. package/templates/t3-app/extras/src/app/page/with-better-auth-trpc-tw.tsx +105 -0
  416. package/templates/t3-app/extras/src/app/page/with-better-auth-trpc.tsx +103 -0
  417. package/templates/t3-app/extras/src/app/page/with-better-auth-tw.tsx +90 -0
  418. package/templates/t3-app/extras/src/app/page/with-better-auth.tsx +88 -0
  419. package/templates/t3-app/extras/src/app/page/with-trpc-tw.tsx +53 -0
  420. package/templates/t3-app/extras/src/app/page/with-trpc.tsx +54 -0
  421. package/templates/t3-app/extras/src/app/page/with-tw.tsx +37 -0
  422. package/templates/t3-app/extras/src/env/with-auth-db-planetscale.js +58 -0
  423. package/templates/t3-app/extras/src/env/with-auth-db.js +52 -0
  424. package/templates/t3-app/extras/src/env/with-auth.js +51 -0
  425. package/templates/t3-app/extras/src/env/with-better-auth-db-planetscale.js +58 -0
  426. package/templates/t3-app/extras/src/env/with-better-auth-db.js +50 -0
  427. package/templates/t3-app/extras/src/env/with-better-auth.js +49 -0
  428. package/templates/t3-app/extras/src/env/with-db-planetscale.js +50 -0
  429. package/templates/t3-app/extras/src/env/with-db.js +44 -0
  430. package/templates/t3-app/extras/src/index.module.css +177 -0
  431. package/templates/t3-app/extras/src/pages/_app/base.tsx +18 -0
  432. package/templates/t3-app/extras/src/pages/_app/with-auth-trpc-tw.tsx +27 -0
  433. package/templates/t3-app/extras/src/pages/_app/with-auth-trpc.tsx +27 -0
  434. package/templates/t3-app/extras/src/pages/_app/with-auth-tw.tsx +25 -0
  435. package/templates/t3-app/extras/src/pages/_app/with-auth.tsx +25 -0
  436. package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc-tw.tsx +20 -0
  437. package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc.tsx +20 -0
  438. package/templates/t3-app/extras/src/pages/_app/with-trpc-tw.tsx +20 -0
  439. package/templates/t3-app/extras/src/pages/_app/with-trpc.tsx +20 -0
  440. package/templates/t3-app/extras/src/pages/_app/with-tw.tsx +18 -0
  441. package/templates/t3-app/extras/src/pages/api/auth/[...all].ts +8 -0
  442. package/templates/t3-app/extras/src/pages/api/trpc/[trpc].ts +19 -0
  443. package/templates/t3-app/extras/src/pages/index/base.tsx +47 -0
  444. package/templates/t3-app/extras/src/pages/index/with-auth-trpc-tw.tsx +81 -0
  445. package/templates/t3-app/extras/src/pages/index/with-auth-trpc.tsx +82 -0
  446. package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc-tw.tsx +99 -0
  447. package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc.tsx +100 -0
  448. package/templates/t3-app/extras/src/pages/index/with-better-auth-tw.tsx +87 -0
  449. package/templates/t3-app/extras/src/pages/index/with-better-auth.tsx +88 -0
  450. package/templates/t3-app/extras/src/pages/index/with-trpc-tw.tsx +52 -0
  451. package/templates/t3-app/extras/src/pages/index/with-trpc.tsx +53 -0
  452. package/templates/t3-app/extras/src/pages/index/with-tw.tsx +45 -0
  453. package/templates/t3-app/extras/src/server/api/root.ts +23 -0
  454. package/templates/t3-app/extras/src/server/api/routers/post/base.ts +40 -0
  455. package/templates/t3-app/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
  456. package/templates/t3-app/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
  457. package/templates/t3-app/extras/src/server/api/routers/post/with-auth.ts +37 -0
  458. package/templates/t3-app/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
  459. package/templates/t3-app/extras/src/server/api/routers/post/with-prisma.ts +31 -0
  460. package/templates/t3-app/extras/src/server/api/trpc-app/base.ts +103 -0
  461. package/templates/t3-app/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
  462. package/templates/t3-app/extras/src/server/api/trpc-app/with-auth.ts +130 -0
  463. package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth-db.ts +134 -0
  464. package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth.ts +131 -0
  465. package/templates/t3-app/extras/src/server/api/trpc-app/with-db.ts +106 -0
  466. package/templates/t3-app/extras/src/server/api/trpc-pages/base.ts +122 -0
  467. package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
  468. package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
  469. package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth-db.ts +168 -0
  470. package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth.ts +166 -0
  471. package/templates/t3-app/extras/src/server/api/trpc-pages/with-db.ts +125 -0
  472. package/templates/t3-app/extras/src/server/auth/config/base.ts +52 -0
  473. package/templates/t3-app/extras/src/server/auth/config/with-drizzle.ts +67 -0
  474. package/templates/t3-app/extras/src/server/auth/config/with-prisma.ts +56 -0
  475. package/templates/t3-app/extras/src/server/auth/index.ts +10 -0
  476. package/templates/t3-app/extras/src/server/better-auth/client.ts +5 -0
  477. package/templates/t3-app/extras/src/server/better-auth/config/base.ts +12 -0
  478. package/templates/t3-app/extras/src/server/better-auth/config/with-drizzle.ts +26 -0
  479. package/templates/t3-app/extras/src/server/better-auth/config/with-prisma.ts +26 -0
  480. package/templates/t3-app/extras/src/server/better-auth/index.ts +1 -0
  481. package/templates/t3-app/extras/src/server/better-auth/server.ts +7 -0
  482. package/templates/t3-app/extras/src/server/db/db-prisma-planetscale.ts +19 -0
  483. package/templates/t3-app/extras/src/server/db/db-prisma.ts +16 -0
  484. package/templates/t3-app/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
  485. package/templates/t3-app/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
  486. package/templates/t3-app/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
  487. package/templates/t3-app/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
  488. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-mysql.ts +26 -0
  489. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-planetscale.ts +26 -0
  490. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-postgres.ts +26 -0
  491. package/templates/t3-app/extras/src/server/db/schema-drizzle/base-sqlite.ts +27 -0
  492. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +111 -0
  493. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +100 -0
  494. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +108 -0
  495. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +105 -0
  496. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-mysql.ts +106 -0
  497. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-planetscale.ts +106 -0
  498. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-postgres.ts +105 -0
  499. package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-sqlite.ts +134 -0
  500. package/templates/t3-app/extras/src/styles/globals.css +6 -0
  501. package/templates/t3-app/extras/src/trpc/query-client.ts +25 -0
  502. package/templates/t3-app/extras/src/trpc/react.tsx +78 -0
  503. package/templates/t3-app/extras/src/trpc/server.ts +30 -0
  504. package/templates/t3-app/extras/src/utils/api.ts +68 -0
  505. package/templates/t3-app/extras/start-database/mysql.sh +86 -0
  506. package/templates/t3-app/extras/start-database/postgres.sh +88 -0
@@ -0,0 +1,390 @@
1
+ import path from 'path';
2
+ import { logger } from '../utils/logger.js';
3
+ import { promptProjectName, promptTemplate, promptQualityPreset, promptGitHubConfig, promptMCPScope, confirmBootstrap } from '../utils/prompts.js';
4
+ import { validateProjectName, validateTemplate, validateQualityPreset, validateMCPScope } from '../utils/validators.js';
5
+ import { validateProjectDirectory } from '../utils/validators.js';
6
+ import { initGitRepository } from '../utils/git.js';
7
+ import { generateProjectStructure } from '../generators/project-structure.js';
8
+ import { generateBossConfig } from '../generators/boss-config.js';
9
+ import { copySpecKitStructure } from '../generators/specify-structure.js';
10
+ import { generateContainerUseConfig } from '../generators/container-use-config.js';
11
+ import { generateWorkerConfigs } from '../generators/worker-configs.js';
12
+ import { generateQualityGates } from '../generators/quality-gates.js';
13
+ import { generateMCPConfig } from '../generators/mcp-config.js';
14
+ import { generateGitHubWorkflows } from '../generators/github-workflows.js';
15
+ import { generateGitHooks } from '../generators/git-hooks.js';
16
+ import { generateDockerCompose } from '../generators/docker-compose.js';
17
+ import { generateClaudeMD } from '../generators/claude-md.js';
18
+ import { generateClaudeFolder } from '../generators/claude-folder.js';
19
+ import { generateStartBossScript } from '../generators/start-boss-sh.js';
20
+ import { loadTemplate } from '../generators/template-loader.js';
21
+ import { generateTemplateDocs } from '../generators/template-docs.js';
22
+ import { applyQualityPreset } from '../presets/quality-presets.js';
23
+ import { addFiles, commit, createBranch } from '../utils/git.js';
24
+ import { execa } from 'execa';
25
+ export async function bootstrapCommand(options) {
26
+ logger.section('🤖 BOSS Bootstrap');
27
+ // Collect configuration
28
+ const config = await collectConfiguration(options);
29
+ // Validate project directory
30
+ const projectPath = options.projectPath || path.resolve(process.cwd(), config.name);
31
+ const dirValidation = await validateProjectDirectory(projectPath);
32
+ if (!dirValidation.valid) {
33
+ logger.error(dirValidation.error || 'Invalid project directory');
34
+ process.exit(1);
35
+ }
36
+ // Confirm before proceeding
37
+ const confirmed = await confirmBootstrap(config, options.nonInteractive || false);
38
+ if (!confirmed) {
39
+ logger.info('Bootstrap cancelled');
40
+ return;
41
+ }
42
+ // Create project directory
43
+ logger.startSpinner('Creating project directory...');
44
+ const { ensureDirectory } = await import('../utils/file-system.js');
45
+ await ensureDirectory(projectPath);
46
+ logger.stopSpinner(true, 'Project directory created');
47
+ try {
48
+ // Initialize git repository
49
+ await initGitRepository(projectPath);
50
+ // Copy Spec-Kit from CLI bundle
51
+ logger.startSpinner('Copying Spec-Kit structure...');
52
+ await copySpecKitStructure(projectPath);
53
+ logger.stopSpinner(true, 'Spec-Kit structure copied');
54
+ // Generate project structure
55
+ logger.startSpinner('Generating project structure...');
56
+ await generateProjectStructure(projectPath, config);
57
+ logger.stopSpinner(true, 'Project structure generated');
58
+ // Generate BOSS config
59
+ logger.startSpinner('Generating BOSS configuration...');
60
+ await generateBossConfig(projectPath, config);
61
+ logger.stopSpinner(true, 'BOSS configuration generated');
62
+ // Generate container-use config
63
+ logger.startSpinner('Generating container-use configuration...');
64
+ await generateContainerUseConfig(projectPath);
65
+ logger.stopSpinner(true, 'Container-use configuration generated');
66
+ // Generate worker configs
67
+ logger.startSpinner('Generating worker configurations...');
68
+ await generateWorkerConfigs(projectPath, config);
69
+ logger.stopSpinner(true, 'Worker configurations generated');
70
+ // Apply quality preset
71
+ logger.startSpinner('Applying quality preset...');
72
+ await applyQualityPreset(projectPath, config.quality);
73
+ logger.stopSpinner(true, 'Quality preset applied');
74
+ // Generate quality gates
75
+ logger.startSpinner('Generating quality gates...');
76
+ await generateQualityGates(projectPath, config.quality);
77
+ logger.stopSpinner(true, 'Quality gates generated');
78
+ // Generate MCP config
79
+ logger.startSpinner('Generating MCP configuration...');
80
+ let mcpScope = 'both';
81
+ if (options.mcpScope) {
82
+ const validation = validateMCPScope(options.mcpScope);
83
+ if (!validation.valid) {
84
+ logger.error(validation.error || 'Invalid MCP scope');
85
+ process.exit(1);
86
+ }
87
+ mcpScope = options.mcpScope;
88
+ }
89
+ else if (!options.nonInteractive) {
90
+ mcpScope = await promptMCPScope();
91
+ }
92
+ await generateMCPConfig(projectPath, mcpScope);
93
+ logger.stopSpinner(true, 'MCP configuration generated');
94
+ // Generate GitHub workflows
95
+ logger.startSpinner('Generating GitHub workflows...');
96
+ await generateGitHubWorkflows(projectPath, config);
97
+ logger.stopSpinner(true, 'GitHub workflows generated');
98
+ // Generate git hooks (creates .husky/ directory and hook files)
99
+ logger.startSpinner('Generating git hooks...');
100
+ await generateGitHooks(projectPath, config.quality);
101
+ logger.stopSpinner(true, 'Git hooks generated');
102
+ // Generate Docker Compose
103
+ logger.startSpinner('Generating Docker Compose...');
104
+ await generateDockerCompose(projectPath);
105
+ logger.stopSpinner(true, 'Docker Compose generated');
106
+ // Generate critical files
107
+ logger.startSpinner('Generating critical files...');
108
+ await generateClaudeMD(projectPath, config);
109
+ await generateClaudeFolder(projectPath, config);
110
+ await generateStartBossScript(projectPath);
111
+ logger.stopSpinner(true, 'Critical files generated');
112
+ // Load and apply template (includes package.json with husky dependency and prepare script)
113
+ logger.startSpinner(`Loading template: ${config.template}...`);
114
+ await loadTemplate(projectPath, config.template, config);
115
+ logger.stopSpinner(true, 'Template applied');
116
+ // Initialize Husky after package.json exists (package.json has husky and prepare script)
117
+ logger.startSpinner('Initializing Husky git hooks...');
118
+ await initializeHuskyAfterPackageJson(projectPath);
119
+ logger.stopSpinner(true, 'Husky initialized');
120
+ // Generate template documentation
121
+ logger.startSpinner('Generating template documentation...');
122
+ await generateTemplateDocs(projectPath, config);
123
+ logger.stopSpinner(true, 'Template documentation generated');
124
+ // CRITICAL: Commit empty main branch FIRST (before any files)
125
+ // Main branch must be pushed empty first, then all files go via feature branch/PR
126
+ logger.startSpinner('Creating empty initial commit on main branch...');
127
+ const gitEnv = {
128
+ ...process.env,
129
+ GIT_AUTHOR_NAME: 'The BOSS',
130
+ GIT_AUTHOR_EMAIL: 'boss@glxmart.com',
131
+ GIT_COMMITTER_NAME: 'The BOSS',
132
+ GIT_COMMITTER_EMAIL: 'boss@glxmart.com'
133
+ };
134
+ // Use --no-verify to skip hooks (dependencies aren't installed yet)
135
+ await execa('git', ['commit', '--allow-empty', '-m', 'chore: initial empty commit', '--no-verify'], {
136
+ cwd: projectPath,
137
+ env: gitEnv
138
+ });
139
+ logger.stopSpinner(true, 'Empty main branch committed');
140
+ // CRITICAL: Create feature/boss-initial-setup branch BEFORE committing files
141
+ // All bootstrap files will be committed to feature branch, not main
142
+ logger.startSpinner('Creating feature/boss-initial-setup branch...');
143
+ await createInitialSetupBranch(projectPath);
144
+ logger.stopSpinner(true, 'Feature branch created');
145
+ // CRITICAL: Ensure test file exists (required for pre-push hook on feature branch)
146
+ logger.startSpinner('Ensuring test file exists...');
147
+ await ensureTestFileExists(projectPath, config);
148
+ logger.stopSpinner(true, 'Test file ensured');
149
+ // CRITICAL: Commit ALL bootstrap files to feature branch (NOT main)
150
+ // Main branch stays empty - all files go via feature branch/PR
151
+ logger.startSpinner('Committing all bootstrap files to feature branch...');
152
+ await addFiles(projectPath, ['.']);
153
+ // Verify test file is included before committing
154
+ const { stdout: testFileCheck } = await execa('git', ['ls-files'], { cwd: projectPath });
155
+ const hasTestFile = /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(testFileCheck);
156
+ if (!hasTestFile) {
157
+ logger.warning('No test files found in staged files. Re-checking...');
158
+ // Re-ensure test file exists
159
+ await ensureTestFileExists(projectPath, config);
160
+ await addFiles(projectPath, ['tests/']);
161
+ }
162
+ await commit(projectPath, 'chore: BOSS bootstrap - initial project structure');
163
+ logger.stopSpinner(true, 'All bootstrap files committed to feature branch');
164
+ // Success message
165
+ logger.section('✅ Bootstrap Complete!');
166
+ logger.success(`Project "${config.name}" has been bootstrapped successfully!`);
167
+ logger.info(`\nNext steps:`);
168
+ logger.info(` 1. cd ${config.name}`);
169
+ logger.info(` 2. pnpm install (installs dependencies and initializes Husky via prepare script)`);
170
+ logger.info(` 3. docker-compose up -d`);
171
+ logger.info(` 4. Open project in Claude Code/Cursor`);
172
+ logger.info(` 5. Run: ./start-boss.sh`);
173
+ logger.info(` 6. BOSS will complete initial setup (GitHub repo, remote, branch protection, etc.)`);
174
+ }
175
+ catch (error) {
176
+ logger.error(`Bootstrap failed: ${error instanceof Error ? error.message : String(error)}`);
177
+ throw error;
178
+ }
179
+ }
180
+ async function initializeHuskyAfterPackageJson(projectPath) {
181
+ try {
182
+ // Run husky to set up git hooks in .git/hooks directory (husky v9+ uses 'husky' instead of 'husky install')
183
+ // This works even if husky isn't installed yet (npx downloads it temporarily)
184
+ // After pnpm install, the prepare script will ensure husky is properly installed
185
+ await execa('npx', ['husky'], {
186
+ cwd: projectPath,
187
+ stdio: 'pipe'
188
+ });
189
+ // Husky initialized successfully (silent success)
190
+ }
191
+ catch (error) {
192
+ // If husky is not available, log warning but continue
193
+ // The hooks are in .husky/ directory and prepare script will install them when dependencies are installed
194
+ logger.warning('Husky initialization skipped (husky not available via npx).');
195
+ logger.warning('Hooks are in .husky/ directory. Run "pnpm install" to activate hooks (prepare script will run husky).');
196
+ }
197
+ }
198
+ async function ensureTestFileExists(projectPath, config) {
199
+ // NOTE: Dynamic import of fs-extra requires accessing .default
200
+ // See: docs/common-issues.md for details
201
+ const fsModule = await import('fs-extra');
202
+ const fs = fsModule.default;
203
+ const { writeFile } = await import('../utils/file-system.js');
204
+ const { loadTemplate: loadAssetTemplate } = await import('../utils/template-loader.js');
205
+ // Check if any test files exist
206
+ const testsDir = path.join(projectPath, 'tests');
207
+ let hasTestFile = false;
208
+ if (await fs.pathExists(testsDir)) {
209
+ const files = await fs.readdir(testsDir, { recursive: true });
210
+ hasTestFile = files.some((f) => {
211
+ return /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f);
212
+ });
213
+ }
214
+ // Also check root and src directories
215
+ if (!hasTestFile) {
216
+ try {
217
+ const rootFiles = await fs.readdir(projectPath);
218
+ hasTestFile = rootFiles.some((f) => {
219
+ return /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f);
220
+ });
221
+ }
222
+ catch {
223
+ // Ignore errors
224
+ }
225
+ }
226
+ if (!hasTestFile) {
227
+ const srcDir = path.join(projectPath, 'src');
228
+ if (await fs.pathExists(srcDir)) {
229
+ try {
230
+ const srcFiles = await fs.readdir(srcDir, { recursive: true });
231
+ hasTestFile = srcFiles.some((f) => {
232
+ return /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(f);
233
+ });
234
+ }
235
+ catch {
236
+ // Ignore errors
237
+ }
238
+ }
239
+ }
240
+ // If no test file exists, create a minimal one
241
+ if (!hasTestFile) {
242
+ await fs.ensureDir(testsDir);
243
+ try {
244
+ // Try to load the template test file
245
+ const testFile = await loadAssetTemplate('template-loader/index.test.ts', { config });
246
+ await writeFile(path.join(testsDir, 'index.test.ts'), testFile);
247
+ }
248
+ catch {
249
+ // If template doesn't exist, create a minimal test file
250
+ const minimalTest = `import { describe, it, expect } from 'vitest';
251
+
252
+ describe('Bootstrap Test', () => {
253
+ it('should pass initial test', () => {
254
+ expect(true).toBe(true);
255
+ });
256
+ });
257
+ `;
258
+ await writeFile(path.join(testsDir, 'index.test.ts'), minimalTest);
259
+ }
260
+ }
261
+ }
262
+ async function createInitialSetupBranch(projectPath) {
263
+ // NOTE: Dynamic import of fs-extra requires accessing .default
264
+ // See: docs/common-issues.md for details
265
+ const fsModule = await import('fs-extra');
266
+ const fs = fsModule.default;
267
+ const { readFile, writeFile } = await import('../utils/file-system.js');
268
+ const projectConfigPath = path.join(projectPath, '.boss', 'project-config.json');
269
+ // CRITICAL: Verify we're on main branch before creating feature branch
270
+ const { execa } = await import('execa');
271
+ const { stdout: currentBranch } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: projectPath });
272
+ if (currentBranch.trim() !== 'main' && currentBranch.trim() !== 'master') {
273
+ logger.warning(`Expected to be on main branch, but on ${currentBranch.trim()}. Switching to main...`);
274
+ await execa('git', ['checkout', 'main'], { cwd: projectPath });
275
+ }
276
+ // Create and switch to feature/boss-initial-setup branch
277
+ // This happens BEFORE committing bootstrap files - all files will go to feature branch
278
+ await createBranch(projectPath, 'feature/boss-initial-setup');
279
+ // Early return if project-config.json doesn't exist
280
+ const configExists = await fs.pathExists(projectConfigPath);
281
+ if (!configExists) {
282
+ return;
283
+ }
284
+ const projectConfigContent = await readFile(projectConfigPath);
285
+ const projectConfig = JSON.parse(projectConfigContent);
286
+ const now = new Date().toISOString();
287
+ // Update branch information
288
+ projectConfig.currentBranch = 'feature/boss-initial-setup';
289
+ if (projectConfig.repository?.branches) {
290
+ projectConfig.repository.branches['feature/boss-initial-setup'] = {
291
+ exists: true,
292
+ lastCommit: null
293
+ };
294
+ }
295
+ // Update initialization status
296
+ projectConfig.initialization.stage = 'remote-setup';
297
+ projectConfig.initialization.status = 'in-progress';
298
+ // Mark branch creation operation as completed
299
+ const branchOp = projectConfig.initialization.operationsRequired?.find((op) => op.operation === 'create-initial-setup-branch');
300
+ if (branchOp) {
301
+ branchOp.status = 'completed';
302
+ branchOp.completedAt = now;
303
+ }
304
+ // Update current workflow
305
+ projectConfig.currentWorkflow = {
306
+ stage: 'initialization',
307
+ phase: 'remote-setup',
308
+ status: 'awaiting-remote-creation'
309
+ };
310
+ // Update metadata
311
+ if (projectConfig.metadata) {
312
+ projectConfig.metadata.lastUpdated = now;
313
+ projectConfig.metadata.notes = 'Initial setup branch created. All bootstrap files will be committed to feature branch. Ready for remote repository setup.';
314
+ }
315
+ await writeFile(projectConfigPath, JSON.stringify(projectConfig, null, 2));
316
+ // Note: project-config.json will be committed with all other bootstrap files
317
+ // No need to commit separately - it will be included in the main bootstrap commit
318
+ }
319
+ async function collectConfiguration(options) {
320
+ let name = options.name;
321
+ let template = options.template;
322
+ let quality = options.quality;
323
+ let githubRepo = options.githubRepo;
324
+ let githubOrg = options.githubOrg;
325
+ // Interactive mode if flags omitted
326
+ if (!name || !template || !quality) {
327
+ logger.info('Running in interactive mode...\n');
328
+ if (!name) {
329
+ name = await promptProjectName();
330
+ }
331
+ else {
332
+ const validation = validateProjectName(name);
333
+ if (!validation.valid) {
334
+ logger.error(validation.error || 'Invalid project name');
335
+ process.exit(1);
336
+ }
337
+ }
338
+ if (!template) {
339
+ template = await promptTemplate();
340
+ }
341
+ else {
342
+ const validation = validateTemplate(template);
343
+ if (!validation.valid) {
344
+ logger.error(validation.error || 'Invalid template');
345
+ process.exit(1);
346
+ }
347
+ }
348
+ if (!quality) {
349
+ quality = await promptQualityPreset();
350
+ }
351
+ else {
352
+ const validation = validateQualityPreset(quality);
353
+ if (!validation.valid) {
354
+ logger.error(validation.error || 'Invalid quality preset');
355
+ process.exit(1);
356
+ }
357
+ }
358
+ if (!githubRepo || !githubOrg) {
359
+ const githubConfig = await promptGitHubConfig();
360
+ githubRepo = githubConfig.repo || githubRepo;
361
+ githubOrg = githubConfig.org || githubOrg;
362
+ }
363
+ }
364
+ else {
365
+ // Validate provided options
366
+ const nameValidation = validateProjectName(name);
367
+ if (!nameValidation.valid) {
368
+ logger.error(nameValidation.error || 'Invalid project name');
369
+ process.exit(1);
370
+ }
371
+ const templateValidation = validateTemplate(template);
372
+ if (!templateValidation.valid) {
373
+ logger.error(templateValidation.error || 'Invalid template');
374
+ process.exit(1);
375
+ }
376
+ const qualityValidation = validateQualityPreset(quality);
377
+ if (!qualityValidation.valid) {
378
+ logger.error(qualityValidation.error || 'Invalid quality preset');
379
+ process.exit(1);
380
+ }
381
+ }
382
+ return {
383
+ name: name,
384
+ template: template,
385
+ quality: quality,
386
+ githubRepo,
387
+ githubOrg
388
+ };
389
+ }
390
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function doctorCommand(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDnD"}
@@ -0,0 +1,171 @@
1
+ import { execa } from 'execa';
2
+ import { logger } from '../utils/logger.js';
3
+ export async function doctorCommand() {
4
+ logger.section('🏥 BOSS Doctor - System Health Check');
5
+ const checks = [];
6
+ // Check Docker
7
+ checks.push(await checkDocker());
8
+ // Check Node.js
9
+ checks.push(await checkNode());
10
+ // Check pnpm
11
+ checks.push(await checkPnpm());
12
+ // Check 1Password CLI
13
+ checks.push(await check1Password());
14
+ // Check Container-Use CLI
15
+ checks.push(await checkContainerUse());
16
+ // Check Claude Code/Cursor
17
+ checks.push(await checkClaudeCode());
18
+ // Check Git
19
+ checks.push(await checkGit());
20
+ // Check ports
21
+ checks.push(await checkPort(5432, 'PostgreSQL'));
22
+ checks.push(await checkPort(6333, 'Qdrant'));
23
+ checks.push(await checkPort(8080, 'Embeddings Service'));
24
+ // Check MCP configs
25
+ checks.push(await checkMCPConfig());
26
+ // Display results
27
+ console.log('\n');
28
+ for (const check of checks) {
29
+ const icon = check.status === 'pass' ? '✓' : check.status === 'fail' ? '✗' : '⚠';
30
+ const color = check.status === 'pass' ? 'green' : check.status === 'fail' ? 'red' : 'yellow';
31
+ logger[check.status === 'pass' ? 'success' : check.status === 'fail' ? 'error' : 'warning'](`${icon} ${check.name}: ${check.message}`);
32
+ }
33
+ const failed = checks.filter(c => c.status === 'fail').length;
34
+ const warnings = checks.filter(c => c.status === 'warning').length;
35
+ console.log('\n');
36
+ if (failed === 0 && warnings === 0) {
37
+ logger.success('All checks passed! ✅');
38
+ }
39
+ else {
40
+ logger.warning(`${failed} failed, ${warnings} warnings`);
41
+ if (failed > 0) {
42
+ process.exit(1);
43
+ }
44
+ }
45
+ }
46
+ async function checkDocker() {
47
+ try {
48
+ await execa('docker', ['--version']);
49
+ try {
50
+ await execa('docker', ['ps']);
51
+ return { name: 'Docker', status: 'pass', message: 'Running' };
52
+ }
53
+ catch {
54
+ return { name: 'Docker', status: 'warning', message: 'Installed but not running' };
55
+ }
56
+ }
57
+ catch {
58
+ return { name: 'Docker', status: 'fail', message: 'Not installed or not in PATH' };
59
+ }
60
+ }
61
+ async function checkNode() {
62
+ try {
63
+ const { stdout } = await execa('node', ['--version']);
64
+ const version = stdout.replace('v', '');
65
+ const major = parseInt(version.split('.')[0], 10);
66
+ if (major >= 22) {
67
+ return { name: 'Node.js', status: 'pass', message: `v${version} (>= 22 required)` };
68
+ }
69
+ else {
70
+ return { name: 'Node.js', status: 'fail', message: `v${version} (>= 22 required)` };
71
+ }
72
+ }
73
+ catch {
74
+ return { name: 'Node.js', status: 'fail', message: 'Not installed or not in PATH' };
75
+ }
76
+ }
77
+ async function checkPnpm() {
78
+ try {
79
+ const { stdout } = await execa('pnpm', ['--version']);
80
+ return { name: 'pnpm', status: 'pass', message: `v${stdout}` };
81
+ }
82
+ catch {
83
+ return { name: 'pnpm', status: 'fail', message: 'Not installed or not in PATH' };
84
+ }
85
+ }
86
+ async function check1Password() {
87
+ try {
88
+ await execa('op', ['--version']);
89
+ try {
90
+ await execa('op', ['account', 'list']);
91
+ return { name: '1Password CLI', status: 'pass', message: 'Installed and authenticated' };
92
+ }
93
+ catch {
94
+ return { name: '1Password CLI', status: 'warning', message: 'Installed but not authenticated (run: op signin)' };
95
+ }
96
+ }
97
+ catch {
98
+ return { name: '1Password CLI', status: 'fail', message: 'Not installed or not in PATH' };
99
+ }
100
+ }
101
+ async function checkContainerUse() {
102
+ try {
103
+ const { stdout } = await execa('container-use', ['--version']);
104
+ return { name: 'Container-Use CLI', status: 'pass', message: `v${stdout.trim()}` };
105
+ }
106
+ catch {
107
+ return { name: 'Container-Use CLI', status: 'fail', message: 'Not installed (run: npm install -g container-use)' };
108
+ }
109
+ }
110
+ async function checkClaudeCode() {
111
+ try {
112
+ await execa('claude', ['--version']);
113
+ return { name: 'Claude Code', status: 'pass', message: 'Installed' };
114
+ }
115
+ catch {
116
+ try {
117
+ await execa('cursor', ['--version']);
118
+ return { name: 'Cursor', status: 'pass', message: 'Installed' };
119
+ }
120
+ catch {
121
+ return { name: 'Claude Code/Cursor', status: 'warning', message: 'Not found in PATH (may be installed but not in PATH)' };
122
+ }
123
+ }
124
+ }
125
+ async function checkGit() {
126
+ try {
127
+ const { stdout } = await execa('git', ['--version']);
128
+ return { name: 'Git', status: 'pass', message: stdout.trim() };
129
+ }
130
+ catch {
131
+ return { name: 'Git', status: 'fail', message: 'Not installed or not in PATH' };
132
+ }
133
+ }
134
+ async function checkPort(port, service) {
135
+ try {
136
+ const { execa } = await import('execa');
137
+ // Try to check if port is in use (platform-specific)
138
+ if (process.platform === 'darwin' || process.platform === 'linux') {
139
+ try {
140
+ await execa('lsof', ['-i', `:${port}`]);
141
+ return { name: `Port ${port} (${service})`, status: 'warning', message: 'Port is in use' };
142
+ }
143
+ catch {
144
+ return { name: `Port ${port} (${service})`, status: 'pass', message: 'Available' };
145
+ }
146
+ }
147
+ else {
148
+ return { name: `Port ${port} (${service})`, status: 'warning', message: 'Port check not available on this platform' };
149
+ }
150
+ }
151
+ catch {
152
+ return { name: `Port ${port} (${service})`, status: 'warning', message: 'Unable to check port' };
153
+ }
154
+ }
155
+ async function checkMCPConfig() {
156
+ const os = await import('os');
157
+ const path = await import('path');
158
+ const fs = await import('fs-extra');
159
+ // Check Claude Code first (default/preferred)
160
+ const claudeCodePath = path.join(os.homedir(), '.config', 'claude-code', 'mcp-servers.json');
161
+ if (await fs.pathExists(claudeCodePath)) {
162
+ return { name: 'MCP Config', status: 'pass', message: `Found: ${claudeCodePath}` };
163
+ }
164
+ // Fall back to Cursor
165
+ const cursorPath = path.join(os.homedir(), '.cursor', 'mcp-servers.json');
166
+ if (await fs.pathExists(cursorPath)) {
167
+ return { name: 'MCP Config', status: 'pass', message: `Found: ${cursorPath}` };
168
+ }
169
+ return { name: 'MCP Config', status: 'warning', message: 'Not found (will be created during bootstrap - defaults to Claude Code)' };
170
+ }
171
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function templatesCommand(): Promise<void>;
2
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/commands/templates.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUtD"}
@@ -0,0 +1,12 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { TEMPLATES } from '../utils/prompts.js';
3
+ export async function templatesCommand() {
4
+ logger.section('📋 Available Templates');
5
+ for (const [key, template] of Object.entries(TEMPLATES)) {
6
+ console.log(`\n${template.name} (${key})`);
7
+ console.log(` ${template.description}`);
8
+ console.log(` Stack: ${template.stack.join(', ')}`);
9
+ }
10
+ console.log('\n');
11
+ }
12
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/commands/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEzC,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC"}