@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.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/assets/claude-folder/agents/.gitkeep +0 -0
- package/assets/claude-folder/commands/boss-commands.md +138 -0
- package/assets/claude-folder/rules/boss-workflow.md +33 -0
- package/assets/claude-folder/rules/code-style.md +23 -0
- package/assets/claude-folder/rules/security.md +22 -0
- package/assets/claude-folder/rules/testing.md +32 -0
- package/assets/claude-folder/settings.local.json +88 -0
- package/assets/claude-folder/skills/.gitkeep +0 -0
- package/assets/claude-md/docs/container-use.md +140 -0
- package/assets/claude-md/docs/github-operations.md +238 -0
- package/assets/claude-md/docs/initialization.md +186 -0
- package/assets/claude-md/docs/quality-standards.md +15 -0
- package/assets/claude-md/docs/spec-kit.md +46 -0
- package/assets/claude-md/docs/workers.md +174 -0
- package/assets/claude-md/docs/workflow.md +140 -0
- package/assets/claude-md/template.md +812 -0
- package/assets/docker-compose/docker-compose.yml +52 -0
- package/assets/git-hooks/commit-msg.sh +102 -0
- package/assets/git-hooks/pre-commit-check.sh +21 -0
- package/assets/git-hooks/pre-commit.sh +6 -0
- package/assets/git-hooks/pre-push.sh +154 -0
- package/assets/git-hooks/security-check.sh +40 -0
- package/assets/git-hooks/test-changed.sh +84 -0
- package/assets/github-workflows/CODEOWNERS +3 -0
- package/assets/github-workflows/boss-ci.yml +40 -0
- package/assets/github-workflows/boss-gates.yml +28 -0
- package/assets/start-boss-sh/start-boss.sh +471 -0
- package/assets/template-docs/api-service-fastify.md +98 -0
- package/assets/template-docs/blank.md +91 -0
- package/assets/template-docs/nextjs-app-turbo.md +102 -0
- package/assets/template-docs/t3-app.md +106 -0
- package/assets/template-loader/README.md +28 -0
- package/assets/template-loader/eslint.config.node.js +28 -0
- package/assets/template-loader/eslint.config.react.js +47 -0
- package/assets/template-loader/gitignore +42 -0
- package/assets/template-loader/index.test.ts +10 -0
- package/assets/template-loader/index.ts +13 -0
- package/assets/template-loader/prettierignore +8 -0
- package/assets/template-loader/vitest.config.ts +19 -0
- package/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
- package/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
- package/assets/worker-configs/architect/CLAUDE.md +106 -0
- package/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/clarifier/CLAUDE.md +112 -0
- package/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
- package/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/consolidator/CLAUDE.md +114 -0
- package/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
- package/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
- package/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
- package/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
- package/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/planner/CLAUDE.md +111 -0
- package/assets/worker-configs/product-owner/CLAUDE.md +108 -0
- package/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/reviewer/CLAUDE.md +110 -0
- package/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
- package/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
- package/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
- package/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
- package/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
- package/assets/worker-configs/tester/CLAUDE.md +110 -0
- package/dist/assets/claude-folder/agents/.gitkeep +0 -0
- package/dist/assets/claude-folder/commands/boss-commands.md +138 -0
- package/dist/assets/claude-folder/rules/boss-workflow.md +33 -0
- package/dist/assets/claude-folder/rules/code-style.md +23 -0
- package/dist/assets/claude-folder/rules/security.md +22 -0
- package/dist/assets/claude-folder/rules/testing.md +32 -0
- package/dist/assets/claude-folder/settings.local.json +88 -0
- package/dist/assets/claude-folder/skills/.gitkeep +0 -0
- package/dist/assets/claude-md/docs/container-use.md +140 -0
- package/dist/assets/claude-md/docs/github-operations.md +238 -0
- package/dist/assets/claude-md/docs/initialization.md +186 -0
- package/dist/assets/claude-md/docs/quality-standards.md +15 -0
- package/dist/assets/claude-md/docs/spec-kit.md +46 -0
- package/dist/assets/claude-md/docs/workers.md +174 -0
- package/dist/assets/claude-md/docs/workflow.md +140 -0
- package/dist/assets/claude-md/template.md +812 -0
- package/dist/assets/docker-compose/docker-compose.yml +52 -0
- package/dist/assets/git-hooks/commit-msg.sh +102 -0
- package/dist/assets/git-hooks/pre-commit-check.sh +21 -0
- package/dist/assets/git-hooks/pre-commit.sh +6 -0
- package/dist/assets/git-hooks/pre-push.sh +154 -0
- package/dist/assets/git-hooks/security-check.sh +40 -0
- package/dist/assets/git-hooks/test-changed.sh +84 -0
- package/dist/assets/github-workflows/CODEOWNERS +3 -0
- package/dist/assets/github-workflows/boss-ci.yml +40 -0
- package/dist/assets/github-workflows/boss-gates.yml +28 -0
- package/dist/assets/start-boss-sh/start-boss.sh +471 -0
- package/dist/assets/template-docs/api-service-fastify.md +98 -0
- package/dist/assets/template-docs/blank.md +91 -0
- package/dist/assets/template-docs/nextjs-app-turbo.md +102 -0
- package/dist/assets/template-docs/t3-app.md +106 -0
- package/dist/assets/template-loader/README.md +28 -0
- package/dist/assets/template-loader/eslint.config.node.js +28 -0
- package/dist/assets/template-loader/eslint.config.react.js +47 -0
- package/dist/assets/template-loader/gitignore +42 -0
- package/dist/assets/template-loader/index.test.ts +10 -0
- package/dist/assets/template-loader/index.ts +13 -0
- package/dist/assets/template-loader/prettierignore +8 -0
- package/dist/assets/template-loader/vitest.config.ts +19 -0
- package/dist/assets/worker-configs/architect/.claude/commands/.gitkeep +0 -0
- package/dist/assets/worker-configs/architect/.claude/skills/.gitkeep +0 -0
- package/dist/assets/worker-configs/architect/CLAUDE.md +106 -0
- package/dist/assets/worker-configs/clarifier/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/clarifier/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/clarifier/CLAUDE.md +112 -0
- package/dist/assets/worker-configs/code-reviewer/CLAUDE.md +113 -0
- package/dist/assets/worker-configs/consolidator/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/consolidator/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/consolidator/CLAUDE.md +114 -0
- package/dist/assets/worker-configs/developer-backend/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-backend/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-backend/CLAUDE.md +116 -0
- package/dist/assets/worker-configs/developer-frontend/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-frontend/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-frontend/CLAUDE.md +116 -0
- package/dist/assets/worker-configs/developer-fullstack/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-fullstack/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/developer-fullstack/CLAUDE.md +116 -0
- package/dist/assets/worker-configs/devops-engineer/CLAUDE.md +111 -0
- package/dist/assets/worker-configs/planner/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/planner/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/planner/CLAUDE.md +111 -0
- package/dist/assets/worker-configs/product-owner/CLAUDE.md +108 -0
- package/dist/assets/worker-configs/reviewer/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/reviewer/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/reviewer/CLAUDE.md +110 -0
- package/dist/assets/worker-configs/security-engineer/CLAUDE.md +109 -0
- package/dist/assets/worker-configs/spec-writer/.claude/commands/.gitkeep +1 -0
- package/dist/assets/worker-configs/spec-writer/.claude/skills/.gitkeep +1 -0
- package/dist/assets/worker-configs/spec-writer/CLAUDE.md +110 -0
- package/dist/assets/worker-configs/technical-writer/CLAUDE.md +107 -0
- package/dist/assets/worker-configs/tester/CLAUDE.md +110 -0
- package/dist/commands/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/commands/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/commands/__tests__/bootstrap.test.js +379 -0
- package/dist/commands/__tests__/bootstrap.test.js.map +1 -0
- package/dist/commands/__tests__/doctor.test.d.ts +2 -0
- package/dist/commands/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/commands/__tests__/doctor.test.js +13 -0
- package/dist/commands/__tests__/doctor.test.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +3 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +390 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +171 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/templates.d.ts +2 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +12 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/constants.d.ts +23 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/generators/__tests__/boss-config.test.d.ts +2 -0
- package/dist/generators/__tests__/boss-config.test.d.ts.map +1 -0
- package/dist/generators/__tests__/boss-config.test.js +61 -0
- package/dist/generators/__tests__/boss-config.test.js.map +1 -0
- package/dist/generators/__tests__/claude-folder.test.d.ts +2 -0
- package/dist/generators/__tests__/claude-folder.test.d.ts.map +1 -0
- package/dist/generators/__tests__/claude-folder.test.js +128 -0
- package/dist/generators/__tests__/claude-folder.test.js.map +1 -0
- package/dist/generators/__tests__/claude-md.test.d.ts +2 -0
- package/dist/generators/__tests__/claude-md.test.d.ts.map +1 -0
- package/dist/generators/__tests__/claude-md.test.js +55 -0
- package/dist/generators/__tests__/claude-md.test.js.map +1 -0
- package/dist/generators/__tests__/container-use-config.test.d.ts +2 -0
- package/dist/generators/__tests__/container-use-config.test.d.ts.map +1 -0
- package/dist/generators/__tests__/container-use-config.test.js +80 -0
- package/dist/generators/__tests__/container-use-config.test.js.map +1 -0
- package/dist/generators/__tests__/docker-compose.test.d.ts +2 -0
- package/dist/generators/__tests__/docker-compose.test.d.ts.map +1 -0
- package/dist/generators/__tests__/docker-compose.test.js +39 -0
- package/dist/generators/__tests__/docker-compose.test.js.map +1 -0
- package/dist/generators/__tests__/git-hooks.test.d.ts +2 -0
- package/dist/generators/__tests__/git-hooks.test.d.ts.map +1 -0
- package/dist/generators/__tests__/git-hooks.test.js +118 -0
- package/dist/generators/__tests__/git-hooks.test.js.map +1 -0
- package/dist/generators/__tests__/github-workflows.test.d.ts +2 -0
- package/dist/generators/__tests__/github-workflows.test.d.ts.map +1 -0
- package/dist/generators/__tests__/github-workflows.test.js +86 -0
- package/dist/generators/__tests__/github-workflows.test.js.map +1 -0
- package/dist/generators/__tests__/mcp-config.test.d.ts +2 -0
- package/dist/generators/__tests__/mcp-config.test.d.ts.map +1 -0
- package/dist/generators/__tests__/mcp-config.test.js +131 -0
- package/dist/generators/__tests__/mcp-config.test.js.map +1 -0
- package/dist/generators/__tests__/project-structure.test.d.ts +2 -0
- package/dist/generators/__tests__/project-structure.test.d.ts.map +1 -0
- package/dist/generators/__tests__/project-structure.test.js +40 -0
- package/dist/generators/__tests__/project-structure.test.js.map +1 -0
- package/dist/generators/__tests__/quality-gates.test.d.ts +2 -0
- package/dist/generators/__tests__/quality-gates.test.d.ts.map +1 -0
- package/dist/generators/__tests__/quality-gates.test.js +71 -0
- package/dist/generators/__tests__/quality-gates.test.js.map +1 -0
- package/dist/generators/__tests__/specify-structure.test.d.ts +2 -0
- package/dist/generators/__tests__/specify-structure.test.d.ts.map +1 -0
- package/dist/generators/__tests__/specify-structure.test.js +63 -0
- package/dist/generators/__tests__/specify-structure.test.js.map +1 -0
- package/dist/generators/__tests__/start-boss-sh.test.d.ts +2 -0
- package/dist/generators/__tests__/start-boss-sh.test.d.ts.map +1 -0
- package/dist/generators/__tests__/start-boss-sh.test.js +36 -0
- package/dist/generators/__tests__/start-boss-sh.test.js.map +1 -0
- package/dist/generators/__tests__/template-docs.test.d.ts +2 -0
- package/dist/generators/__tests__/template-docs.test.d.ts.map +1 -0
- package/dist/generators/__tests__/template-docs.test.js +92 -0
- package/dist/generators/__tests__/template-docs.test.js.map +1 -0
- package/dist/generators/__tests__/template-loader.test.d.ts +2 -0
- package/dist/generators/__tests__/template-loader.test.d.ts.map +1 -0
- package/dist/generators/__tests__/template-loader.test.js +215 -0
- package/dist/generators/__tests__/template-loader.test.js.map +1 -0
- package/dist/generators/__tests__/worker-configs.test.d.ts +2 -0
- package/dist/generators/__tests__/worker-configs.test.d.ts.map +1 -0
- package/dist/generators/__tests__/worker-configs.test.js +122 -0
- package/dist/generators/__tests__/worker-configs.test.js.map +1 -0
- package/dist/generators/boss-config.d.ts +3 -0
- package/dist/generators/boss-config.d.ts.map +1 -0
- package/dist/generators/boss-config.js +242 -0
- package/dist/generators/boss-config.js.map +1 -0
- package/dist/generators/claude-folder.d.ts +3 -0
- package/dist/generators/claude-folder.d.ts.map +1 -0
- package/dist/generators/claude-folder.js +94 -0
- package/dist/generators/claude-folder.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +64 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/container-use-config.d.ts +13 -0
- package/dist/generators/container-use-config.d.ts.map +1 -0
- package/dist/generators/container-use-config.js +60 -0
- package/dist/generators/container-use-config.js.map +1 -0
- package/dist/generators/docker-compose.d.ts +2 -0
- package/dist/generators/docker-compose.d.ts.map +1 -0
- package/dist/generators/docker-compose.js +8 -0
- package/dist/generators/docker-compose.js.map +1 -0
- package/dist/generators/git-hooks.d.ts +3 -0
- package/dist/generators/git-hooks.d.ts.map +1 -0
- package/dist/generators/git-hooks.js +58 -0
- package/dist/generators/git-hooks.js.map +1 -0
- package/dist/generators/github-workflows.d.ts +3 -0
- package/dist/generators/github-workflows.d.ts.map +1 -0
- package/dist/generators/github-workflows.js +27 -0
- package/dist/generators/github-workflows.js.map +1 -0
- package/dist/generators/mcp-config.d.ts +3 -0
- package/dist/generators/mcp-config.d.ts.map +1 -0
- package/dist/generators/mcp-config.js +183 -0
- package/dist/generators/mcp-config.js.map +1 -0
- package/dist/generators/project-structure.d.ts +3 -0
- package/dist/generators/project-structure.d.ts.map +1 -0
- package/dist/generators/project-structure.js +24 -0
- package/dist/generators/project-structure.js.map +1 -0
- package/dist/generators/quality-gates.d.ts +3 -0
- package/dist/generators/quality-gates.d.ts.map +1 -0
- package/dist/generators/quality-gates.js +32 -0
- package/dist/generators/quality-gates.js.map +1 -0
- package/dist/generators/specify-structure.d.ts +2 -0
- package/dist/generators/specify-structure.d.ts.map +1 -0
- package/dist/generators/specify-structure.js +43 -0
- package/dist/generators/specify-structure.js.map +1 -0
- package/dist/generators/start-boss-sh.d.ts +2 -0
- package/dist/generators/start-boss-sh.d.ts.map +1 -0
- package/dist/generators/start-boss-sh.js +10 -0
- package/dist/generators/start-boss-sh.js.map +1 -0
- package/dist/generators/template-docs.d.ts +3 -0
- package/dist/generators/template-docs.d.ts.map +1 -0
- package/dist/generators/template-docs.js +19 -0
- package/dist/generators/template-docs.js.map +1 -0
- package/dist/generators/template-loader.d.ts +3 -0
- package/dist/generators/template-loader.d.ts.map +1 -0
- package/dist/generators/template-loader.js +308 -0
- package/dist/generators/template-loader.js.map +1 -0
- package/dist/generators/worker-configs.d.ts +3 -0
- package/dist/generators/worker-configs.d.ts.map +1 -0
- package/dist/generators/worker-configs.js +119 -0
- package/dist/generators/worker-configs.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/presets/__tests__/quality-presets.test.d.ts +2 -0
- package/dist/presets/__tests__/quality-presets.test.d.ts.map +1 -0
- package/dist/presets/__tests__/quality-presets.test.js +152 -0
- package/dist/presets/__tests__/quality-presets.test.js.map +1 -0
- package/dist/presets/quality-presets.d.ts +3 -0
- package/dist/presets/quality-presets.d.ts.map +1 -0
- package/dist/presets/quality-presets.js +65 -0
- package/dist/presets/quality-presets.js.map +1 -0
- package/dist/types/index.d.ts +42 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/__tests__/file-system.test.d.ts +2 -0
- package/dist/utils/__tests__/file-system.test.d.ts.map +1 -0
- package/dist/utils/__tests__/file-system.test.js +83 -0
- package/dist/utils/__tests__/file-system.test.js.map +1 -0
- package/dist/utils/__tests__/git.test.d.ts +2 -0
- package/dist/utils/__tests__/git.test.d.ts.map +1 -0
- package/dist/utils/__tests__/git.test.js +79 -0
- package/dist/utils/__tests__/git.test.js.map +1 -0
- package/dist/utils/__tests__/template-loader.test.d.ts +2 -0
- package/dist/utils/__tests__/template-loader.test.d.ts.map +1 -0
- package/dist/utils/__tests__/template-loader.test.js +109 -0
- package/dist/utils/__tests__/template-loader.test.js.map +1 -0
- package/dist/utils/__tests__/validators.test.d.ts +2 -0
- package/dist/utils/__tests__/validators.test.d.ts.map +1 -0
- package/dist/utils/__tests__/validators.test.js +118 -0
- package/dist/utils/__tests__/validators.test.js.map +1 -0
- package/dist/utils/file-system.d.ts +8 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +54 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/git.d.ts +7 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +98 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +42 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prompts.d.ts +18 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +197 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/template-loader.d.ts +18 -0
- package/dist/utils/template-loader.d.ts.map +1 -0
- package/dist/utils/template-loader.js +92 -0
- package/dist/utils/template-loader.js.map +1 -0
- package/dist/utils/validators.d.ts +21 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +50 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +79 -0
- package/templates/spec-kit/README.md +17 -0
- package/templates/spec-kit/memory/constitution.md +50 -0
- package/templates/spec-kit/scripts/bash/check-prerequisites.sh +166 -0
- package/templates/spec-kit/scripts/bash/common.sh +156 -0
- package/templates/spec-kit/scripts/bash/create-new-feature.sh +297 -0
- package/templates/spec-kit/scripts/bash/setup-plan.sh +61 -0
- package/templates/spec-kit/scripts/bash/update-agent-context.sh +799 -0
- package/templates/spec-kit/scripts/powershell/check-prerequisites.ps1 +148 -0
- package/templates/spec-kit/scripts/powershell/common.ps1 +137 -0
- package/templates/spec-kit/scripts/powershell/create-new-feature.ps1 +283 -0
- package/templates/spec-kit/scripts/powershell/setup-plan.ps1 +61 -0
- package/templates/spec-kit/scripts/powershell/update-agent-context.ps1 +448 -0
- package/templates/spec-kit/src/specify_cli/__init__.py +1369 -0
- package/templates/spec-kit/templates/agent-file-template.md +28 -0
- package/templates/spec-kit/templates/checklist-template.md +40 -0
- package/templates/spec-kit/templates/commands/analyze.md +187 -0
- package/templates/spec-kit/templates/commands/checklist.md +297 -0
- package/templates/spec-kit/templates/commands/clarify.md +184 -0
- package/templates/spec-kit/templates/commands/constitution.md +82 -0
- package/templates/spec-kit/templates/commands/implement.md +138 -0
- package/templates/spec-kit/templates/commands/plan.md +95 -0
- package/templates/spec-kit/templates/commands/specify.md +261 -0
- package/templates/spec-kit/templates/commands/tasks.md +140 -0
- package/templates/spec-kit/templates/commands/taskstoissues.md +33 -0
- package/templates/spec-kit/templates/plan-template.md +104 -0
- package/templates/spec-kit/templates/spec-template.md +115 -0
- package/templates/spec-kit/templates/tasks-template.md +251 -0
- package/templates/spec-kit/templates/vscode-settings.json +14 -0
- package/templates/t3-app/README.md +41 -0
- package/templates/t3-app/base/README.md +29 -0
- package/templates/t3-app/base/_gitignore +47 -0
- package/templates/t3-app/base/next-env.d.ts +5 -0
- package/templates/t3-app/base/next.config.js +22 -0
- package/templates/t3-app/base/package.json +26 -0
- package/templates/t3-app/base/public/favicon.ico +0 -0
- package/templates/t3-app/base/src/env.js +40 -0
- package/templates/t3-app/base/src/styles/globals.css +16 -0
- package/templates/t3-app/base/tsconfig.json +42 -0
- package/templates/t3-app/extras/config/_eslint.base.js +45 -0
- package/templates/t3-app/extras/config/_eslint.drizzle.js +58 -0
- package/templates/t3-app/extras/config/_prettier.config.js +2 -0
- package/templates/t3-app/extras/config/_tailwind.prettier.config.js +4 -0
- package/templates/t3-app/extras/config/biome.jsonc +69 -0
- package/templates/t3-app/extras/config/drizzle-config-mysql.ts +12 -0
- package/templates/t3-app/extras/config/drizzle-config-postgres.ts +12 -0
- package/templates/t3-app/extras/config/drizzle-config-sqlite.ts +12 -0
- package/templates/t3-app/extras/config/next-config-appdir.js +10 -0
- package/templates/t3-app/extras/config/postcss.config.js +5 -0
- package/templates/t3-app/extras/pnpm/_npmrc +2 -0
- package/templates/t3-app/extras/prisma/schema/base-planetscale.prisma +25 -0
- package/templates/t3-app/extras/prisma/schema/base.prisma +21 -0
- package/templates/t3-app/extras/prisma/schema/with-auth-planetscale.prisma +79 -0
- package/templates/t3-app/extras/prisma/schema/with-auth.prisma +75 -0
- package/templates/t3-app/extras/prisma/schema/with-better-auth-planetscale.prisma +90 -0
- package/templates/t3-app/extras/prisma/schema/with-better-auth.prisma +89 -0
- package/templates/t3-app/extras/src/app/_components/post-tw.tsx +50 -0
- package/templates/t3-app/extras/src/app/_components/post.tsx +54 -0
- package/templates/t3-app/extras/src/app/api/auth/[...all]/route.ts +5 -0
- package/templates/t3-app/extras/src/app/api/auth/[...nextauth]/route.ts +3 -0
- package/templates/t3-app/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
- package/templates/t3-app/extras/src/app/layout/base.tsx +24 -0
- package/templates/t3-app/extras/src/app/layout/with-trpc-tw.tsx +29 -0
- package/templates/t3-app/extras/src/app/layout/with-trpc.tsx +28 -0
- package/templates/t3-app/extras/src/app/layout/with-tw.tsx +25 -0
- package/templates/t3-app/extras/src/app/page/base.tsx +39 -0
- package/templates/t3-app/extras/src/app/page/with-auth-trpc-tw.tsx +69 -0
- package/templates/t3-app/extras/src/app/page/with-auth-trpc.tsx +70 -0
- package/templates/t3-app/extras/src/app/page/with-better-auth-trpc-tw.tsx +105 -0
- package/templates/t3-app/extras/src/app/page/with-better-auth-trpc.tsx +103 -0
- package/templates/t3-app/extras/src/app/page/with-better-auth-tw.tsx +90 -0
- package/templates/t3-app/extras/src/app/page/with-better-auth.tsx +88 -0
- package/templates/t3-app/extras/src/app/page/with-trpc-tw.tsx +53 -0
- package/templates/t3-app/extras/src/app/page/with-trpc.tsx +54 -0
- package/templates/t3-app/extras/src/app/page/with-tw.tsx +37 -0
- package/templates/t3-app/extras/src/env/with-auth-db-planetscale.js +58 -0
- package/templates/t3-app/extras/src/env/with-auth-db.js +52 -0
- package/templates/t3-app/extras/src/env/with-auth.js +51 -0
- package/templates/t3-app/extras/src/env/with-better-auth-db-planetscale.js +58 -0
- package/templates/t3-app/extras/src/env/with-better-auth-db.js +50 -0
- package/templates/t3-app/extras/src/env/with-better-auth.js +49 -0
- package/templates/t3-app/extras/src/env/with-db-planetscale.js +50 -0
- package/templates/t3-app/extras/src/env/with-db.js +44 -0
- package/templates/t3-app/extras/src/index.module.css +177 -0
- package/templates/t3-app/extras/src/pages/_app/base.tsx +18 -0
- package/templates/t3-app/extras/src/pages/_app/with-auth-trpc-tw.tsx +27 -0
- package/templates/t3-app/extras/src/pages/_app/with-auth-trpc.tsx +27 -0
- package/templates/t3-app/extras/src/pages/_app/with-auth-tw.tsx +25 -0
- package/templates/t3-app/extras/src/pages/_app/with-auth.tsx +25 -0
- package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc-tw.tsx +20 -0
- package/templates/t3-app/extras/src/pages/_app/with-better-auth-trpc.tsx +20 -0
- package/templates/t3-app/extras/src/pages/_app/with-trpc-tw.tsx +20 -0
- package/templates/t3-app/extras/src/pages/_app/with-trpc.tsx +20 -0
- package/templates/t3-app/extras/src/pages/_app/with-tw.tsx +18 -0
- package/templates/t3-app/extras/src/pages/api/auth/[...all].ts +8 -0
- package/templates/t3-app/extras/src/pages/api/trpc/[trpc].ts +19 -0
- package/templates/t3-app/extras/src/pages/index/base.tsx +47 -0
- package/templates/t3-app/extras/src/pages/index/with-auth-trpc-tw.tsx +81 -0
- package/templates/t3-app/extras/src/pages/index/with-auth-trpc.tsx +82 -0
- package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc-tw.tsx +99 -0
- package/templates/t3-app/extras/src/pages/index/with-better-auth-trpc.tsx +100 -0
- package/templates/t3-app/extras/src/pages/index/with-better-auth-tw.tsx +87 -0
- package/templates/t3-app/extras/src/pages/index/with-better-auth.tsx +88 -0
- package/templates/t3-app/extras/src/pages/index/with-trpc-tw.tsx +52 -0
- package/templates/t3-app/extras/src/pages/index/with-trpc.tsx +53 -0
- package/templates/t3-app/extras/src/pages/index/with-tw.tsx +45 -0
- package/templates/t3-app/extras/src/server/api/root.ts +23 -0
- package/templates/t3-app/extras/src/server/api/routers/post/base.ts +40 -0
- package/templates/t3-app/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
- package/templates/t3-app/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
- package/templates/t3-app/extras/src/server/api/routers/post/with-auth.ts +37 -0
- package/templates/t3-app/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
- package/templates/t3-app/extras/src/server/api/routers/post/with-prisma.ts +31 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/base.ts +103 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/with-auth.ts +130 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth-db.ts +134 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/with-better-auth.ts +131 -0
- package/templates/t3-app/extras/src/server/api/trpc-app/with-db.ts +106 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/base.ts +122 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth-db.ts +168 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/with-better-auth.ts +166 -0
- package/templates/t3-app/extras/src/server/api/trpc-pages/with-db.ts +125 -0
- package/templates/t3-app/extras/src/server/auth/config/base.ts +52 -0
- package/templates/t3-app/extras/src/server/auth/config/with-drizzle.ts +67 -0
- package/templates/t3-app/extras/src/server/auth/config/with-prisma.ts +56 -0
- package/templates/t3-app/extras/src/server/auth/index.ts +10 -0
- package/templates/t3-app/extras/src/server/better-auth/client.ts +5 -0
- package/templates/t3-app/extras/src/server/better-auth/config/base.ts +12 -0
- package/templates/t3-app/extras/src/server/better-auth/config/with-drizzle.ts +26 -0
- package/templates/t3-app/extras/src/server/better-auth/config/with-prisma.ts +26 -0
- package/templates/t3-app/extras/src/server/better-auth/index.ts +1 -0
- package/templates/t3-app/extras/src/server/better-auth/server.ts +7 -0
- package/templates/t3-app/extras/src/server/db/db-prisma-planetscale.ts +19 -0
- package/templates/t3-app/extras/src/server/db/db-prisma.ts +16 -0
- package/templates/t3-app/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
- package/templates/t3-app/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
- package/templates/t3-app/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
- package/templates/t3-app/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/base-mysql.ts +26 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/base-planetscale.ts +26 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/base-postgres.ts +26 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/base-sqlite.ts +27 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +111 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +100 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +108 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +105 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-mysql.ts +106 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-planetscale.ts +106 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-postgres.ts +105 -0
- package/templates/t3-app/extras/src/server/db/schema-drizzle/with-better-auth-sqlite.ts +134 -0
- package/templates/t3-app/extras/src/styles/globals.css +6 -0
- package/templates/t3-app/extras/src/trpc/query-client.ts +25 -0
- package/templates/t3-app/extras/src/trpc/react.tsx +78 -0
- package/templates/t3-app/extras/src/trpc/server.ts +30 -0
- package/templates/t3-app/extras/src/utils/api.ts +68 -0
- package/templates/t3-app/extras/start-database/mysql.sh +86 -0
- package/templates/t3-app/extras/start-database/postgres.sh +88 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { copyDirectory, writeFile, readFile } from '../utils/file-system.js';
|
|
3
|
+
import { loadTemplate as loadAssetTemplate } from '../utils/template-loader.js';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname } from 'path';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
export async function loadTemplate(projectPath, template, config) {
|
|
9
|
+
const templatePath = path.join(__dirname, '../../templates', template);
|
|
10
|
+
const fs = await import('fs-extra');
|
|
11
|
+
if (await fs.pathExists(templatePath)) {
|
|
12
|
+
// Special handling for T3 template (has base/ and extras/ structure)
|
|
13
|
+
if (template === 't3-app') {
|
|
14
|
+
await loadT3Template(projectPath, templatePath, config);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// Copy template files directly
|
|
18
|
+
await copyDirectory(templatePath, projectPath);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Create minimal template structure
|
|
23
|
+
await createMinimalTemplate(projectPath, template, config);
|
|
24
|
+
}
|
|
25
|
+
// Ensure .env is always in .gitignore (for all templates)
|
|
26
|
+
await ensureEnvInGitignore(projectPath);
|
|
27
|
+
}
|
|
28
|
+
async function loadT3Template(projectPath, templatePath, config) {
|
|
29
|
+
const fs = await import('fs-extra');
|
|
30
|
+
// Copy base template
|
|
31
|
+
const basePath = path.join(templatePath, 'base');
|
|
32
|
+
if (await fs.pathExists(basePath)) {
|
|
33
|
+
// Copy base files, handling special files
|
|
34
|
+
const baseFiles = await fs.readdir(basePath);
|
|
35
|
+
for (const file of baseFiles) {
|
|
36
|
+
const srcPath = path.join(basePath, file);
|
|
37
|
+
const destPath = path.join(projectPath, file.startsWith('_') ? file.slice(1) : file);
|
|
38
|
+
const stat = await fs.stat(srcPath);
|
|
39
|
+
if (stat.isDirectory()) {
|
|
40
|
+
await copyDirectory(srcPath, destPath);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
await fs.copy(srcPath, destPath);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Copy extras (T3 optional features) - include all for BOSS
|
|
48
|
+
const extrasPath = path.join(templatePath, 'extras');
|
|
49
|
+
if (await fs.pathExists(extrasPath)) {
|
|
50
|
+
// Copy config files
|
|
51
|
+
const configPath = path.join(extrasPath, 'config');
|
|
52
|
+
if (await fs.pathExists(configPath)) {
|
|
53
|
+
const configFiles = await fs.readdir(configPath);
|
|
54
|
+
for (const file of configFiles) {
|
|
55
|
+
if (file.startsWith('_')) {
|
|
56
|
+
// Files starting with _ are optional, copy without underscore
|
|
57
|
+
const srcPath = path.join(configPath, file);
|
|
58
|
+
const destPath = path.join(projectPath, file.slice(1));
|
|
59
|
+
await fs.copy(srcPath, destPath);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const srcPath = path.join(configPath, file);
|
|
63
|
+
const destPath = path.join(projectPath, file);
|
|
64
|
+
await fs.copy(srcPath, destPath);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Copy src files (merge with existing src/)
|
|
69
|
+
const extrasSrcPath = path.join(extrasPath, 'src');
|
|
70
|
+
if (await fs.pathExists(extrasSrcPath)) {
|
|
71
|
+
await copyDirectory(extrasSrcPath, path.join(projectPath, 'src'));
|
|
72
|
+
}
|
|
73
|
+
// Copy prisma schemas
|
|
74
|
+
const prismaPath = path.join(extrasPath, 'prisma');
|
|
75
|
+
if (await fs.pathExists(prismaPath)) {
|
|
76
|
+
await fs.ensureDir(path.join(projectPath, 'prisma'));
|
|
77
|
+
await copyDirectory(prismaPath, path.join(projectPath, 'prisma'));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Update package.json with project name and pnpm configuration
|
|
81
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
82
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
83
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
84
|
+
packageJson.name = config.name;
|
|
85
|
+
// Add pnpm configuration to approve esbuild build scripts (prevents warning)
|
|
86
|
+
if (!packageJson.pnpm) {
|
|
87
|
+
packageJson.pnpm = {};
|
|
88
|
+
}
|
|
89
|
+
if (!packageJson.pnpm.onlyBuiltDependencies) {
|
|
90
|
+
packageJson.pnpm.onlyBuiltDependencies = [];
|
|
91
|
+
}
|
|
92
|
+
if (!packageJson.pnpm.onlyBuiltDependencies.includes('esbuild')) {
|
|
93
|
+
packageJson.pnpm.onlyBuiltDependencies.push('esbuild');
|
|
94
|
+
}
|
|
95
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function createMinimalTemplate(projectPath, template, config) {
|
|
99
|
+
// Create package.json
|
|
100
|
+
const packageJson = getPackageJsonForTemplate(template, config);
|
|
101
|
+
await writeFile(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
102
|
+
// Create tsconfig.json
|
|
103
|
+
const tsconfig = {
|
|
104
|
+
compilerOptions: {
|
|
105
|
+
target: 'ES2022',
|
|
106
|
+
module: 'ESNext',
|
|
107
|
+
lib: ['ES2022'],
|
|
108
|
+
moduleResolution: 'bundler',
|
|
109
|
+
outDir: './dist',
|
|
110
|
+
rootDir: './src',
|
|
111
|
+
strict: true,
|
|
112
|
+
esModuleInterop: true,
|
|
113
|
+
skipLibCheck: true,
|
|
114
|
+
forceConsistentCasingInFileNames: true,
|
|
115
|
+
resolveJsonModule: true
|
|
116
|
+
},
|
|
117
|
+
include: ['src/**/*'],
|
|
118
|
+
exclude: ['node_modules', 'dist']
|
|
119
|
+
};
|
|
120
|
+
await writeFile(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
|
|
121
|
+
// Create vitest.config.ts
|
|
122
|
+
const coverageThreshold = config.quality === 'startup' ? 60 : config.quality === 'production' ? 80 : 90;
|
|
123
|
+
const vitestConfig = await loadAssetTemplate('template-loader/vitest.config.ts', {
|
|
124
|
+
coverageThreshold
|
|
125
|
+
});
|
|
126
|
+
await writeFile(path.join(projectPath, 'vitest.config.ts'), vitestConfig);
|
|
127
|
+
// Create ESLint configuration (ESLint 9 flat config format)
|
|
128
|
+
const eslintTemplate = template === 'nextjs-app-turbo'
|
|
129
|
+
? 'template-loader/eslint.config.react.js'
|
|
130
|
+
: 'template-loader/eslint.config.node.js';
|
|
131
|
+
const eslintConfigContent = await loadAssetTemplate(eslintTemplate);
|
|
132
|
+
await writeFile(path.join(projectPath, 'eslint.config.js'), eslintConfigContent);
|
|
133
|
+
// Create Prettier configuration
|
|
134
|
+
const prettierConfig = {
|
|
135
|
+
semi: true,
|
|
136
|
+
singleQuote: true,
|
|
137
|
+
tabWidth: 2,
|
|
138
|
+
trailingComma: 'es5',
|
|
139
|
+
printWidth: 100,
|
|
140
|
+
arrowParens: 'always',
|
|
141
|
+
endOfLine: 'lf'
|
|
142
|
+
};
|
|
143
|
+
await writeFile(path.join(projectPath, '.prettierrc.json'), JSON.stringify(prettierConfig, null, 2));
|
|
144
|
+
// Create Prettier ignore file
|
|
145
|
+
const prettierIgnore = await loadAssetTemplate('template-loader/prettierignore');
|
|
146
|
+
await writeFile(path.join(projectPath, '.prettierignore'), prettierIgnore);
|
|
147
|
+
// Create .gitignore
|
|
148
|
+
const gitignore = await loadAssetTemplate('template-loader/gitignore');
|
|
149
|
+
await writeFile(path.join(projectPath, '.gitignore'), gitignore);
|
|
150
|
+
// Create src directory structure
|
|
151
|
+
const fs = await import('fs-extra');
|
|
152
|
+
await fs.ensureDir(path.join(projectPath, 'src'));
|
|
153
|
+
await fs.ensureDir(path.join(projectPath, 'tests'));
|
|
154
|
+
// Create basic index.ts file
|
|
155
|
+
const indexTs = await loadAssetTemplate('template-loader/index.ts', { config });
|
|
156
|
+
await writeFile(path.join(projectPath, 'src', 'index.ts'), indexTs);
|
|
157
|
+
// Create basic test file
|
|
158
|
+
const testFile = await loadAssetTemplate('template-loader/index.test.ts', { config });
|
|
159
|
+
await writeFile(path.join(projectPath, 'tests', 'index.test.ts'), testFile);
|
|
160
|
+
// Create README
|
|
161
|
+
const readme = await loadAssetTemplate('template-loader/README.md', { config, template });
|
|
162
|
+
await writeFile(path.join(projectPath, 'README.md'), readme);
|
|
163
|
+
}
|
|
164
|
+
async function ensureEnvInGitignore(projectPath) {
|
|
165
|
+
const fs = await import('fs-extra');
|
|
166
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
167
|
+
// If .gitignore doesn't exist, create it with .env
|
|
168
|
+
if (!(await fs.pathExists(gitignorePath))) {
|
|
169
|
+
await writeFile(gitignorePath, '# Environment variables (1Password secret references)\n.env\n.env.local\n.env.*.local\n');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Read existing .gitignore
|
|
173
|
+
let content = await readFile(gitignorePath);
|
|
174
|
+
// Check if .env patterns are already present (more specific check)
|
|
175
|
+
// Look for .env on its own line (not as part of another word)
|
|
176
|
+
const hasEnvPattern = /^\.env$/m.test(content) || /^\.env\*$/m.test(content) || /^\.env\./m.test(content);
|
|
177
|
+
// If .env is not in gitignore, add it
|
|
178
|
+
if (!hasEnvPattern) {
|
|
179
|
+
// Add .env patterns if they don't exist
|
|
180
|
+
const envSection = '\n# Environment variables (1Password secret references)\n.env\n.env.local\n.env.*.local\n';
|
|
181
|
+
const updatedContent = content.trimEnd() + envSection;
|
|
182
|
+
await writeFile(gitignorePath, updatedContent);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function getPackageJsonForTemplate(template, config) {
|
|
186
|
+
const base = {
|
|
187
|
+
name: config.name,
|
|
188
|
+
version: '0.1.0',
|
|
189
|
+
type: 'module',
|
|
190
|
+
scripts: {
|
|
191
|
+
'prepare': 'husky',
|
|
192
|
+
'typecheck': 'tsc --noEmit',
|
|
193
|
+
'lint': 'eslint src',
|
|
194
|
+
'lint:fix': 'eslint src --fix',
|
|
195
|
+
'format': 'prettier --write "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
196
|
+
'format:check': 'prettier --check "src/**/*.{ts,tsx,js,jsx,json,md}"',
|
|
197
|
+
'test': 'vitest',
|
|
198
|
+
'test:unit': 'vitest run --exclude "**/tests/{e2e,integration}/**" --exclude "**/*.{e2e,integration}.test.{ts,tsx}"',
|
|
199
|
+
'test:coverage': 'vitest --coverage',
|
|
200
|
+
'test:gates': 'vitest --coverage && npm run typecheck && npm run lint',
|
|
201
|
+
'check:unused': 'tsc --noEmit --noUnusedLocals --noUnusedParameters || true',
|
|
202
|
+
'lint-staged': 'lint-staged'
|
|
203
|
+
},
|
|
204
|
+
'lint-staged': {
|
|
205
|
+
'*.{ts,tsx,js,jsx}': [
|
|
206
|
+
'eslint --fix',
|
|
207
|
+
'prettier --write'
|
|
208
|
+
],
|
|
209
|
+
'*.{json,md,yml,yaml}': [
|
|
210
|
+
'prettier --write'
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
pnpm: {
|
|
214
|
+
onlyBuiltDependencies: ['esbuild']
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
if (template === 't3-app') {
|
|
218
|
+
// T3 template has its own package.json, so we'll use that
|
|
219
|
+
return null; // Signal to use template's package.json as-is
|
|
220
|
+
}
|
|
221
|
+
if (template === 'nextjs-app-turbo') {
|
|
222
|
+
return {
|
|
223
|
+
...base,
|
|
224
|
+
scripts: {
|
|
225
|
+
...base.scripts,
|
|
226
|
+
'dev': 'next dev',
|
|
227
|
+
'build': 'next build',
|
|
228
|
+
'start': 'next start'
|
|
229
|
+
},
|
|
230
|
+
dependencies: {
|
|
231
|
+
'next': '^15.0.0',
|
|
232
|
+
'react': '^18.0.0',
|
|
233
|
+
'react-dom': '^18.0.0'
|
|
234
|
+
},
|
|
235
|
+
devDependencies: {
|
|
236
|
+
'@eslint/js': '^9.39.2',
|
|
237
|
+
'@types/node': '^20.0.0',
|
|
238
|
+
'@types/react': '^18.0.0',
|
|
239
|
+
'@types/react-dom': '^18.0.0',
|
|
240
|
+
'@typescript-eslint/eslint-plugin': '^8.51.0',
|
|
241
|
+
'@typescript-eslint/parser': '^8.51.0',
|
|
242
|
+
'@vitest/coverage-v8': '^4.0.16',
|
|
243
|
+
'@vitejs/plugin-react': '^4.2.0',
|
|
244
|
+
'eslint': '^9.39.2',
|
|
245
|
+
'eslint-plugin-react': '^7.37.2',
|
|
246
|
+
'eslint-plugin-react-hooks': '^5.1.0',
|
|
247
|
+
'globals': '^15.14.0',
|
|
248
|
+
'husky': '^9.0.0',
|
|
249
|
+
'lint-staged': '^16.2.7',
|
|
250
|
+
'prettier': '^3.7.4',
|
|
251
|
+
'typescript': '^5.9.3',
|
|
252
|
+
'typescript-eslint': '^8.51.0',
|
|
253
|
+
'vitest': '^4.0.16'
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (template === 'api-service-fastify') {
|
|
258
|
+
return {
|
|
259
|
+
...base,
|
|
260
|
+
scripts: {
|
|
261
|
+
...base.scripts,
|
|
262
|
+
'dev': 'tsx watch src/index.ts',
|
|
263
|
+
'build': 'tsc',
|
|
264
|
+
'start': 'node dist/index.js'
|
|
265
|
+
},
|
|
266
|
+
dependencies: {
|
|
267
|
+
'fastify': '^4.24.0'
|
|
268
|
+
},
|
|
269
|
+
devDependencies: {
|
|
270
|
+
'@eslint/js': '^9.39.2',
|
|
271
|
+
'@types/node': '^20.0.0',
|
|
272
|
+
'@typescript-eslint/eslint-plugin': '^8.51.0',
|
|
273
|
+
'@typescript-eslint/parser': '^8.51.0',
|
|
274
|
+
'@vitest/coverage-v8': '^4.0.16',
|
|
275
|
+
'eslint': '^9.39.2',
|
|
276
|
+
'globals': '^15.14.0',
|
|
277
|
+
'husky': '^9.0.0',
|
|
278
|
+
'lint-staged': '^16.2.7',
|
|
279
|
+
'prettier': '^3.7.4',
|
|
280
|
+
'typescript': '^5.9.3',
|
|
281
|
+
'typescript-eslint': '^8.51.0',
|
|
282
|
+
'tsx': '^4.21.0',
|
|
283
|
+
'vitest': '^4.0.16'
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
// blank template
|
|
288
|
+
return {
|
|
289
|
+
...base,
|
|
290
|
+
devDependencies: {
|
|
291
|
+
'@eslint/js': '^9.39.2',
|
|
292
|
+
'@types/node': '^20.0.0',
|
|
293
|
+
'@typescript-eslint/eslint-plugin': '^8.51.0',
|
|
294
|
+
'@typescript-eslint/parser': '^8.51.0',
|
|
295
|
+
'@vitest/coverage-v8': '^4.0.16',
|
|
296
|
+
'eslint': '^9.39.2',
|
|
297
|
+
'globals': '^15.14.0',
|
|
298
|
+
'husky': '^9.0.0',
|
|
299
|
+
'lint-staged': '^16.2.7',
|
|
300
|
+
'prettier': '^3.7.4',
|
|
301
|
+
'typescript': '^5.9.3',
|
|
302
|
+
'typescript-eslint': '^8.51.0',
|
|
303
|
+
'tsx': '^4.21.0',
|
|
304
|
+
'vitest': '^4.0.16'
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=template-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-loader.js","sourceRoot":"","sources":["../../src/generators/template-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,QAAkB,EAClB,MAAqB;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,qEAAqE;QACrE,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,MAAM,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,0DAA0D;IAC1D,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,WAAmB,EACnB,YAAoB,EACpB,MAAqB;IAErB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpC,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,0CAA0C;QAC1C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAErF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,8DAA8D;oBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvD,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAC9C,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrD,MAAM,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3E,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,6EAA6E;QAC7E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,WAAmB,EACnB,QAAkB,EAClB,MAAqB;IAErB,sBAAsB;IACtB,MAAM,WAAW,GAAG,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CACrC,CAAC;IAEF,uBAAuB;IACvB,MAAM,QAAQ,GAAG;QACf,eAAe,EAAE;YACf,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,CAAC,QAAQ,CAAC;YACf,gBAAgB,EAAE,SAAS;YAC3B,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,gCAAgC,EAAE,IAAI;YACtC,iBAAiB,EAAE,IAAI;SACxB;QACD,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAClC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,kCAAkC,EAAE;QAC/E,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;IAE1E,4DAA4D;IAC5D,MAAM,cAAc,GAAG,QAAQ,KAAK,kBAAkB;QACpD,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,uCAAuC,CAAC;IAC5C,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAC1C,mBAAmB,CACpB,CAAC;IAEF,gCAAgC;IAChC,MAAM,cAAc,GAAG;QACrB,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,IAAI;KAChB,CAAC;IACF,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CACxC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IACjF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,cAAc,CAAC,CAAC;IAE3E,oBAAoB;IACpB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;IACvE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAEjE,iCAAiC;IACjC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAEpE,yBAAyB;IACzB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE5E,gBAAgB;IAChB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IACrD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAE3D,mDAAmD;IACnD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,CAAC,aAAa,EAAE,yFAAyF,CAAC,CAAC;QAC1H,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE5C,mEAAmE;IACnE,8DAA8D;IAC9D,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE1G,sCAAsC;IACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,wCAAwC;QACxC,MAAM,UAAU,GAAG,2FAA2F,CAAC;QAC/G,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;QACtD,MAAM,SAAS,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAkB,EAAE,MAAqB;IAC1E,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,cAAc;YAC3B,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,kBAAkB;YAC9B,QAAQ,EAAE,qDAAqD;YAC/D,cAAc,EAAE,qDAAqD;YACrE,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,uGAAuG;YACpH,eAAe,EAAE,mBAAmB;YACpC,YAAY,EAAE,wDAAwD;YACtE,cAAc,EAAE,4DAA4D;YAC5E,aAAa,EAAE,aAAa;SAC7B;QACD,aAAa,EAAE;YACb,mBAAmB,EAAE;gBACnB,cAAc;gBACd,kBAAkB;aACnB;YACD,sBAAsB,EAAE;gBACtB,kBAAkB;aACnB;SACF;QACD,IAAI,EAAE;YACJ,qBAAqB,EAAE,CAAC,SAAS,CAAC;SACnC;KACF,CAAC;IAEF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,OAAO,IAAI,CAAC,CAAC,8CAA8C;IAC7D,CAAC;IAED,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QACpC,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,YAAY;aACtB;YACD,YAAY,EAAE;gBACZ,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,SAAS;gBAClB,WAAW,EAAE,SAAS;aACvB;YACD,eAAe,EAAE;gBACf,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,SAAS;gBACxB,cAAc,EAAE,SAAS;gBACzB,kBAAkB,EAAE,SAAS;gBAC7B,kCAAkC,EAAE,SAAS;gBAC7C,2BAA2B,EAAE,SAAS;gBACtC,qBAAqB,EAAE,SAAS;gBAChC,sBAAsB,EAAE,QAAQ;gBAChC,QAAQ,EAAE,SAAS;gBACnB,qBAAqB,EAAE,SAAS;gBAChC,2BAA2B,EAAE,QAAQ;gBACrC,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,QAAQ;gBACjB,aAAa,EAAE,SAAS;gBACxB,UAAU,EAAE,QAAQ;gBACpB,YAAY,EAAE,QAAQ;gBACtB,mBAAmB,EAAE,SAAS;gBAC9B,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO;gBACf,KAAK,EAAE,wBAAwB;gBAC/B,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,oBAAoB;aAC9B;YACD,YAAY,EAAE;gBACZ,SAAS,EAAE,SAAS;aACrB;YACD,eAAe,EAAE;gBACf,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,SAAS;gBACxB,kCAAkC,EAAE,SAAS;gBAC7C,2BAA2B,EAAE,SAAS;gBACtC,qBAAqB,EAAE,SAAS;gBAChC,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,QAAQ;gBACjB,aAAa,EAAE,SAAS;gBACxB,UAAU,EAAE,QAAQ;gBACpB,YAAY,EAAE,QAAQ;gBACtB,mBAAmB,EAAE,SAAS;gBAC9B,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,OAAO;QACL,GAAG,IAAI;QACP,eAAe,EAAE;YACf,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,SAAS;YACxB,kCAAkC,EAAE,SAAS;YAC7C,2BAA2B,EAAE,SAAS;YACtC,qBAAqB,EAAE,SAAS;YAChC,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,QAAQ;YACtB,mBAAmB,EAAE,SAAS;YAC9B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,SAAS;SACpB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-configs.d.ts","sourceRoot":"","sources":["../../src/generators/worker-configs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { promises as fsPromises } from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
import { writeFile, ensureDirectory } from '../utils/file-system.js';
|
|
6
|
+
import { loadTemplate, discoverWorkers, getAssetPath } from '../utils/template-loader.js';
|
|
7
|
+
// NOTE: Worker phases and metadata are now defined in conductor-mcp/worker-configs/*/metadata.json
|
|
8
|
+
// Boss-cli only generates worker-specific CLAUDE.md and IDE folders
|
|
9
|
+
export async function generateWorkerConfigs(projectPath, config) {
|
|
10
|
+
// Dynamically discover workers from assets/worker-configs/
|
|
11
|
+
const workers = await discoverWorkers();
|
|
12
|
+
for (const worker of workers) {
|
|
13
|
+
const workerPath = path.join(projectPath, '.boss', 'workers', worker);
|
|
14
|
+
await ensureDirectory(workerPath);
|
|
15
|
+
// NOTE: prompt.md, container-config.json, and metadata.json are conductor's responsibility
|
|
16
|
+
// They live in conductor-mcp/worker-configs/ and are read by conductor when spawning workers
|
|
17
|
+
// Generate CLAUDE.md (worker-specific instructions)
|
|
18
|
+
await generateWorkerClaudeMD(workerPath, worker, config);
|
|
19
|
+
// Generate .claude folder for worker-specific configuration
|
|
20
|
+
// NOTE: Both Claude Code and Cursor accept .claude configuration (CLAUDE.md, commands, skills)
|
|
21
|
+
// No need for separate .cursor folder - Cursor is compatible with Claude config format
|
|
22
|
+
await generateWorkerIDEFolder(workerPath, worker, '.claude');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// NOTE: Worker role descriptions and artifact requirements are now defined in conductor-mcp/worker-configs/*/metadata.json
|
|
26
|
+
// These functions are no longer needed as conductor owns the worker specifications
|
|
27
|
+
async function generateWorkerClaudeMD(workerPath, workerName, config) {
|
|
28
|
+
// Worker-specific CLAUDE.md with minimal templating
|
|
29
|
+
const claudeMD = await loadTemplate(`worker-configs/${workerName}/CLAUDE.md`, {
|
|
30
|
+
workerName,
|
|
31
|
+
config
|
|
32
|
+
});
|
|
33
|
+
await writeFile(path.join(workerPath, 'CLAUDE.md'), claudeMD);
|
|
34
|
+
}
|
|
35
|
+
async function copyRelevantSpecKitCommands(idePath, workerName) {
|
|
36
|
+
// Copy ONLY the spec-kit commands relevant to this worker
|
|
37
|
+
// Based on primaryCommand field in worker's metadata.json
|
|
38
|
+
// NOTE: BOSS-specific commands (boss-commands.md) stay with BOSS only
|
|
39
|
+
const fs = await import('fs-extra');
|
|
40
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
41
|
+
const __dirname = dirname(__filename);
|
|
42
|
+
// Load worker metadata to get primaryCommand
|
|
43
|
+
const conductorMetadataPath = path.join(__dirname, '../../../conductor-mcp/worker-configs', workerName, 'metadata.json');
|
|
44
|
+
let primaryCommands = [];
|
|
45
|
+
try {
|
|
46
|
+
const metadataContent = await fsPromises.readFile(conductorMetadataPath, 'utf-8');
|
|
47
|
+
const metadata = JSON.parse(metadataContent);
|
|
48
|
+
if (metadata.primaryCommand) {
|
|
49
|
+
// Handle both string and array formats
|
|
50
|
+
primaryCommands = Array.isArray(metadata.primaryCommand)
|
|
51
|
+
? metadata.primaryCommand
|
|
52
|
+
: [metadata.primaryCommand];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// If metadata doesn't exist or has no primaryCommand, this worker gets no spec-kit commands
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (primaryCommands.length === 0) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Map /speckit.XXX to XXX.md
|
|
63
|
+
const commandFiles = primaryCommands.map(cmd => {
|
|
64
|
+
const match = cmd.match(/\/speckit\.(\w+)/);
|
|
65
|
+
return match ? `${match[1]}.md` : null;
|
|
66
|
+
}).filter(Boolean);
|
|
67
|
+
// Copy only the relevant spec-kit command files
|
|
68
|
+
const specKitCommandsPath = path.join(__dirname, '../../templates/spec-kit/templates/commands');
|
|
69
|
+
for (const commandFile of commandFiles) {
|
|
70
|
+
const sourceFile = path.join(specKitCommandsPath, commandFile);
|
|
71
|
+
const destFile = path.join(idePath, 'commands', commandFile);
|
|
72
|
+
if (await fs.pathExists(sourceFile)) {
|
|
73
|
+
await fs.copy(sourceFile, destFile);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function generateWorkerIDEFolder(workerPath, workerName, folderName) {
|
|
78
|
+
const idePath = path.join(workerPath, folderName);
|
|
79
|
+
await ensureDirectory(path.join(idePath, 'commands'));
|
|
80
|
+
await ensureDirectory(path.join(idePath, 'skills'));
|
|
81
|
+
// NOTE: No 'agents' folder - workers are already isolated agents running in containers
|
|
82
|
+
// The worker itself IS the agent, so agent-specific config is redundant
|
|
83
|
+
const fs = await import('fs-extra');
|
|
84
|
+
// Step 1: Copy only relevant Spec-Kit commands for this worker
|
|
85
|
+
// Based on primaryCommand field in worker's metadata.json
|
|
86
|
+
// BOSS-specific commands (boss-commands.md) are NOT copied to workers
|
|
87
|
+
await copyRelevantSpecKitCommands(idePath, workerName);
|
|
88
|
+
// Step 2: Copy worker-specific configuration files from assets (if they exist)
|
|
89
|
+
// Both Claude Code and Cursor use .claude configuration format
|
|
90
|
+
const assetClaudePath = getAssetPath(`worker-configs/${workerName}/.claude`);
|
|
91
|
+
if (await fs.pathExists(assetClaudePath)) {
|
|
92
|
+
// Copy commands and skills files if they exist
|
|
93
|
+
// (No agents folder - workers are already isolated agents)
|
|
94
|
+
for (const subfolder of ['commands', 'skills']) {
|
|
95
|
+
const assetSubfolder = path.join(assetClaudePath, subfolder);
|
|
96
|
+
const destSubfolder = path.join(idePath, subfolder);
|
|
97
|
+
if (await fs.pathExists(assetSubfolder)) {
|
|
98
|
+
const files = await fsPromises.readdir(assetSubfolder);
|
|
99
|
+
for (const file of files) {
|
|
100
|
+
if (file !== '.gitkeep' && file !== '.DS_Store') {
|
|
101
|
+
const assetFilePath = path.join(assetSubfolder, file);
|
|
102
|
+
const stat = await fsPromises.stat(assetFilePath);
|
|
103
|
+
if (stat.isFile()) {
|
|
104
|
+
try {
|
|
105
|
+
const content = await loadTemplate(`worker-configs/${workerName}/.claude/${subfolder}/${file}`, { workerName });
|
|
106
|
+
await writeFile(path.join(destSubfolder, file), content);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
// If template loading fails, just copy the file directly
|
|
110
|
+
await fs.copy(assetFilePath, path.join(destSubfolder, file));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=worker-configs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-configs.js","sourceRoot":"","sources":["../../src/generators/worker-configs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { bootstrapCommand } from './commands/bootstrap.js';
|
|
4
|
+
import { doctorCommand } from './commands/doctor.js';
|
|
5
|
+
import { templatesCommand } from './commands/templates.js';
|
|
6
|
+
import { logger } from './utils/logger.js';
|
|
7
|
+
const program = new Command();
|
|
8
|
+
program
|
|
9
|
+
.name('boss')
|
|
10
|
+
.description('BOSS Bootstrap CLI - Scaffold new BOSS projects')
|
|
11
|
+
.version('1.0.0');
|
|
12
|
+
program
|
|
13
|
+
.command('bootstrap')
|
|
14
|
+
.description('Bootstrap a new BOSS project')
|
|
15
|
+
.option('-t, --template <template>', 'Template to use (nextjs-app-turbo, api-service-fastify, blank)')
|
|
16
|
+
.option('-q, --quality <preset>', 'Quality preset (startup, production, enterprise)')
|
|
17
|
+
.option('-n, --name <name>', 'Project name')
|
|
18
|
+
.option('--org <org>', 'Organization name')
|
|
19
|
+
.option('--github-repo <repo>', 'GitHub repository name')
|
|
20
|
+
.option('--github-org <org>', 'GitHub organization')
|
|
21
|
+
.option('--mcp-scope <scope>', 'MCP config scope: user (global IDE), project (project directory), or both (default: both)')
|
|
22
|
+
.option('--non-interactive', 'Skip confirmation prompts (useful for scripts)')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
try {
|
|
25
|
+
await bootstrapCommand(options);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
logger.error(`Bootstrap failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
program
|
|
33
|
+
.command('doctor')
|
|
34
|
+
.description('Check prerequisites and system health')
|
|
35
|
+
.action(async () => {
|
|
36
|
+
try {
|
|
37
|
+
await doctorCommand();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger.error(`Doctor check failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
program
|
|
45
|
+
.command('templates')
|
|
46
|
+
.description('List available templates')
|
|
47
|
+
.action(async () => {
|
|
48
|
+
try {
|
|
49
|
+
await templatesCommand();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger.error(`Failed to list templates: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
program.parse();
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,2BAA2B,EAAE,gEAAgE,CAAC;KACrG,MAAM,CAAC,wBAAwB,EAAE,kDAAkD,CAAC;KACpF,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;KAC3C,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;KACxD,MAAM,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;KACnD,MAAM,CAAC,qBAAqB,EAAE,2FAA2F,CAAC;KAC1H,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-presets.test.d.ts","sourceRoot":"","sources":["../../../src/presets/__tests__/quality-presets.test.ts"],"names":[],"mappings":""}
|