@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,107 @@
|
|
|
1
|
+
# ${workerName} Worker Instructions
|
|
2
|
+
|
|
3
|
+
This worker is responsible for ${workerRoleDescription}
|
|
4
|
+
|
|
5
|
+
## Worker-Specific Guidelines
|
|
6
|
+
|
|
7
|
+
- Follow the prompt in \`prompt.md\` for detailed role instructions
|
|
8
|
+
- Use container-use environments for all operations
|
|
9
|
+
- Reference \`.claude/commands/\`, \`.claude/skills/\`, and \`.claude/agents/\` for worker-specific resources
|
|
10
|
+
|
|
11
|
+
## Environment Operations
|
|
12
|
+
|
|
13
|
+
All file, code, and shell operations MUST use container-use environments.
|
|
14
|
+
|
|
15
|
+
- DO NOT use git CLI directly
|
|
16
|
+
- All operations must go through container-use MCP
|
|
17
|
+
- Inform user: \`container-use log <env_id>\` AND \`container-use checkout <env_id>\`
|
|
18
|
+
|
|
19
|
+
## Project Status & Configuration
|
|
20
|
+
|
|
21
|
+
**CRITICAL:** Always check `.boss/project-config.json` to understand project state before starting work.
|
|
22
|
+
|
|
23
|
+
**Read project-config.json to understand:**
|
|
24
|
+
- Current branch and workflow stage
|
|
25
|
+
- Active workers and their status
|
|
26
|
+
- Completed tasks
|
|
27
|
+
- Repository information
|
|
28
|
+
- Initialization status
|
|
29
|
+
|
|
30
|
+
**Update project-config.json when:**
|
|
31
|
+
- Starting work: Add your environment ID to `workflow.activeWorkers`
|
|
32
|
+
- Completing work: Add a summary to `workers.summaries` with:
|
|
33
|
+
- Environment ID
|
|
34
|
+
- Tasks completed
|
|
35
|
+
- Artifacts created (API docs, user guides, developer docs)
|
|
36
|
+
- Documentation coverage metrics
|
|
37
|
+
- Any blockers or issues encountered
|
|
38
|
+
- After merging: Remove from `workflow.activeWorkers` and add to `workflow.completedTasks`
|
|
39
|
+
|
|
40
|
+
**Example worker summary format:**
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"envId": "env-abc123",
|
|
44
|
+
"workerType": "${workerName}",
|
|
45
|
+
"completedAt": "2026-01-15T10:30:00Z",
|
|
46
|
+
"tasksCompleted": ["API documentation", "User guide", "Quickstart"],
|
|
47
|
+
"artifactsCreated": ["docs/api.md", "docs/user-guide.md", ".specify/specs/001-feature/quickstart.md"],
|
|
48
|
+
"coverage": "100%",
|
|
49
|
+
"notes": "Created comprehensive documentation for feature"
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**IMPORTANT:**
|
|
54
|
+
- NEVER use git commands to check project status - read project-config.json instead
|
|
55
|
+
- ALWAYS update project-config.json when completing work
|
|
56
|
+
- Keep summaries concise but informative for BOSS to track progress
|
|
57
|
+
|
|
58
|
+
## Git Commit Strategy
|
|
59
|
+
|
|
60
|
+
**IMPORTANT:** Batch related changes into logical commits to reduce overhead and improve workflow efficiency.
|
|
61
|
+
|
|
62
|
+
### Batching Guidelines
|
|
63
|
+
|
|
64
|
+
1. **Group files by feature/fix** (not by file type)
|
|
65
|
+
2. **Aim for 1-3 commits per task** instead of 5-10
|
|
66
|
+
3. **Use meaningful commit messages** following Conventional Commits
|
|
67
|
+
4. **Only commit when reaching a logical checkpoint**
|
|
68
|
+
|
|
69
|
+
### Good Practice ✅
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Create documentation files in one commit
|
|
73
|
+
git add docs/api.md docs/user-guide.md .specify/specs/001-feature/quickstart.md
|
|
74
|
+
git commit -m "docs: add API documentation and user guide"
|
|
75
|
+
|
|
76
|
+
# Or batch complete documentation phase
|
|
77
|
+
git add docs/api.md docs/tutorials/ README.md
|
|
78
|
+
git commit -m "docs: complete feature documentation with API reference and tutorials"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Bad Practice ❌
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Individual commits for related work (too granular)
|
|
85
|
+
git add docs/api.md
|
|
86
|
+
git commit -m "docs: add API docs"
|
|
87
|
+
|
|
88
|
+
git add docs/user-guide.md
|
|
89
|
+
git commit -m "docs: add guide"
|
|
90
|
+
|
|
91
|
+
git add README.md
|
|
92
|
+
git commit -m "docs: update README"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Commit Message Format
|
|
96
|
+
|
|
97
|
+
Follow Conventional Commits:
|
|
98
|
+
- `docs:` - Documentation changes (primary for technical-writer)
|
|
99
|
+
|
|
100
|
+
### Expected Behavior
|
|
101
|
+
|
|
102
|
+
- **Simple task:** 1-2 commits (initial docs + refinements)
|
|
103
|
+
- **Complex task:** 2-3 commits (major documentation phases)
|
|
104
|
+
- **Avoid:** 5-10 commits for small changes
|
|
105
|
+
|
|
106
|
+
This batching strategy reduces git overhead by ~10-15 seconds per task and creates cleaner commit history.
|
|
107
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# ${workerName} Worker Instructions
|
|
2
|
+
|
|
3
|
+
This worker is responsible for ${workerRoleDescription}
|
|
4
|
+
|
|
5
|
+
## Worker-Specific Guidelines
|
|
6
|
+
|
|
7
|
+
- Follow the prompt in \`prompt.md\` for detailed role instructions
|
|
8
|
+
- Use container-use environments for all operations
|
|
9
|
+
- Reference \`.claude/commands/\`, \`.claude/skills/\`, and \`.claude/agents/\` for worker-specific resources
|
|
10
|
+
|
|
11
|
+
## Environment Operations
|
|
12
|
+
|
|
13
|
+
All file, code, and shell operations MUST use container-use environments.
|
|
14
|
+
|
|
15
|
+
- DO NOT use git CLI directly
|
|
16
|
+
- All operations must go through container-use MCP
|
|
17
|
+
- Inform user: \`container-use log <env_id>\` AND \`container-use checkout <env_id>\`
|
|
18
|
+
|
|
19
|
+
## Project Status & Configuration
|
|
20
|
+
|
|
21
|
+
**CRITICAL:** Always check `.boss/project-config.json` to understand project state before starting work.
|
|
22
|
+
|
|
23
|
+
**Read project-config.json to understand:**
|
|
24
|
+
- Current branch and workflow stage
|
|
25
|
+
- Active workers and their status
|
|
26
|
+
- Completed tasks
|
|
27
|
+
- Repository information
|
|
28
|
+
- Initialization status
|
|
29
|
+
|
|
30
|
+
**Update project-config.json when:**
|
|
31
|
+
- Starting work: Add your environment ID to `workflow.activeWorkers`
|
|
32
|
+
- Completing work: Add a summary to `workers.summaries` with:
|
|
33
|
+
- Environment ID
|
|
34
|
+
- Tasks completed
|
|
35
|
+
- Artifacts created (test files, test reports)
|
|
36
|
+
- Test coverage metrics
|
|
37
|
+
- Mutation testing scores
|
|
38
|
+
- Any blockers or issues encountered
|
|
39
|
+
- After merging: Remove from `workflow.activeWorkers` and add to `workflow.completedTasks`
|
|
40
|
+
|
|
41
|
+
**Example worker summary format:**
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"envId": "env-abc123",
|
|
45
|
+
"workerType": "${workerName}",
|
|
46
|
+
"completedAt": "2026-01-15T10:30:00Z",
|
|
47
|
+
"tasksCompleted": ["BDD test suite", "Integration tests"],
|
|
48
|
+
"artifactsCreated": ["tests/feature.test.ts", "tests/integration.test.ts"],
|
|
49
|
+
"testCoverage": "85%",
|
|
50
|
+
"mutationScore": "82%",
|
|
51
|
+
"notes": "Created comprehensive test suite with BDD tests matching spec.md"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**IMPORTANT:**
|
|
56
|
+
- NEVER use git commands to check project status - read project-config.json instead
|
|
57
|
+
- ALWAYS update project-config.json when completing work
|
|
58
|
+
- Keep summaries concise but informative for BOSS to track progress
|
|
59
|
+
|
|
60
|
+
## Git Commit Strategy
|
|
61
|
+
|
|
62
|
+
**IMPORTANT:** Batch related changes into logical commits to reduce overhead and improve workflow efficiency.
|
|
63
|
+
|
|
64
|
+
### Batching Guidelines
|
|
65
|
+
|
|
66
|
+
1. **Group files by feature/fix** (not by file type)
|
|
67
|
+
2. **Aim for 1-3 commits per task** instead of 5-10
|
|
68
|
+
3. **Use meaningful commit messages** following Conventional Commits
|
|
69
|
+
4. **Only commit when reaching a logical checkpoint**
|
|
70
|
+
|
|
71
|
+
### Good Practice ✅
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Create test files in one commit
|
|
75
|
+
git add tests/feature.test.ts tests/integration.test.ts tests/e2e.test.ts
|
|
76
|
+
git commit -m "test: add comprehensive test suite with unit, integration, and e2e tests"
|
|
77
|
+
|
|
78
|
+
# Or batch test implementation with fixtures
|
|
79
|
+
git add tests/api/users.test.ts tests/fixtures/users.ts tests/helpers/auth.ts
|
|
80
|
+
git commit -m "test: implement user API tests with fixtures and helpers"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Bad Practice ❌
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Individual commits for related work (too granular)
|
|
87
|
+
git add tests/feature.test.ts
|
|
88
|
+
git commit -m "test: add unit tests"
|
|
89
|
+
|
|
90
|
+
git add tests/integration.test.ts
|
|
91
|
+
git commit -m "test: add integration tests"
|
|
92
|
+
|
|
93
|
+
git add tests/e2e.test.ts
|
|
94
|
+
git commit -m "test: add e2e tests"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Commit Message Format
|
|
98
|
+
|
|
99
|
+
Follow Conventional Commits:
|
|
100
|
+
- `test:` - Adding/updating tests (primary for tester)
|
|
101
|
+
- `fix:` - Bug fixes found during testing
|
|
102
|
+
|
|
103
|
+
### Expected Behavior
|
|
104
|
+
|
|
105
|
+
- **Simple task:** 1-2 commits (test suite + coverage)
|
|
106
|
+
- **Complex task:** 2-3 commits (major test phases)
|
|
107
|
+
- **Avoid:** 5-10 commits for small changes
|
|
108
|
+
|
|
109
|
+
This batching strategy reduces git overhead by ~10-15 seconds per task and creates cleaner commit history.
|
|
110
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/bootstrap.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { bootstrapCommand } from '../bootstrap.js';
|
|
3
|
+
// Mock all dependencies
|
|
4
|
+
vi.mock('../../utils/logger.js', () => ({
|
|
5
|
+
logger: {
|
|
6
|
+
section: vi.fn(),
|
|
7
|
+
info: vi.fn(),
|
|
8
|
+
success: vi.fn(),
|
|
9
|
+
error: vi.fn(),
|
|
10
|
+
warning: vi.fn(),
|
|
11
|
+
startSpinner: vi.fn(),
|
|
12
|
+
stopSpinner: vi.fn()
|
|
13
|
+
}
|
|
14
|
+
}));
|
|
15
|
+
vi.mock('../../utils/validators.js', () => ({
|
|
16
|
+
validateProjectName: vi.fn((name) => ({ valid: true })),
|
|
17
|
+
validateTemplate: vi.fn((template) => ({ valid: true })),
|
|
18
|
+
validateQualityPreset: vi.fn((quality) => ({ valid: true })),
|
|
19
|
+
validateMCPScope: vi.fn((scope) => ({ valid: true })),
|
|
20
|
+
validateProjectDirectory: vi.fn(async () => ({ valid: true }))
|
|
21
|
+
}));
|
|
22
|
+
vi.mock('../../utils/prompts.js', () => ({
|
|
23
|
+
promptProjectName: vi.fn(async () => 'test-project'),
|
|
24
|
+
promptTemplate: vi.fn(async () => 'nextjs-app-turbo'),
|
|
25
|
+
promptQualityPreset: vi.fn(async () => 'production'),
|
|
26
|
+
promptGitHubConfig: vi.fn(async () => ({ repo: 'test-repo', org: 'test-org' })),
|
|
27
|
+
promptMCPScope: vi.fn(async () => 'both'),
|
|
28
|
+
confirmBootstrap: vi.fn(async () => true),
|
|
29
|
+
TEMPLATES: {
|
|
30
|
+
'nextjs-app-turbo': { name: 'Next.js App', description: 'Test', stack: [] }
|
|
31
|
+
},
|
|
32
|
+
QUALITY_PRESETS: {
|
|
33
|
+
'production': { name: 'Production', description: 'Test', gates: {} }
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
vi.mock('../../utils/git.js', () => ({
|
|
37
|
+
initGitRepository: vi.fn(async () => { }),
|
|
38
|
+
addFiles: vi.fn(async () => { }),
|
|
39
|
+
commit: vi.fn(async () => { }),
|
|
40
|
+
createBranch: vi.fn(async () => { })
|
|
41
|
+
}));
|
|
42
|
+
vi.mock('../../utils/file-system.js', () => ({
|
|
43
|
+
ensureDirectory: vi.fn(async () => { }),
|
|
44
|
+
writeFile: vi.fn(async () => { }),
|
|
45
|
+
readFile: vi.fn(async () => '{}'),
|
|
46
|
+
pathExists: vi.fn(async () => false)
|
|
47
|
+
}));
|
|
48
|
+
vi.mock('../../generators/project-structure.js', () => ({
|
|
49
|
+
generateProjectStructure: vi.fn(async () => { })
|
|
50
|
+
}));
|
|
51
|
+
vi.mock('../../generators/boss-config.js', () => ({
|
|
52
|
+
generateBossConfig: vi.fn(async () => { })
|
|
53
|
+
}));
|
|
54
|
+
vi.mock('../../generators/specify-structure.js', () => ({
|
|
55
|
+
copySpecKitStructure: vi.fn(async () => { })
|
|
56
|
+
}));
|
|
57
|
+
vi.mock('../../generators/container-use-config.js', () => ({
|
|
58
|
+
generateContainerUseConfig: vi.fn(async () => { })
|
|
59
|
+
}));
|
|
60
|
+
vi.mock('../../generators/worker-configs.js', () => ({
|
|
61
|
+
generateWorkerConfigs: vi.fn(async () => { })
|
|
62
|
+
}));
|
|
63
|
+
vi.mock('../../generators/quality-gates.js', () => ({
|
|
64
|
+
generateQualityGates: vi.fn(async () => { })
|
|
65
|
+
}));
|
|
66
|
+
vi.mock('../../generators/mcp-config.js', () => ({
|
|
67
|
+
generateMCPConfig: vi.fn(async () => { })
|
|
68
|
+
}));
|
|
69
|
+
vi.mock('../../generators/github-workflows.js', () => ({
|
|
70
|
+
generateGitHubWorkflows: vi.fn(async () => { })
|
|
71
|
+
}));
|
|
72
|
+
vi.mock('../../generators/git-hooks.js', () => ({
|
|
73
|
+
generateGitHooks: vi.fn(async () => { })
|
|
74
|
+
}));
|
|
75
|
+
vi.mock('../../generators/docker-compose.js', () => ({
|
|
76
|
+
generateDockerCompose: vi.fn(async () => { })
|
|
77
|
+
}));
|
|
78
|
+
vi.mock('../../generators/claude-md.js', () => ({
|
|
79
|
+
generateClaudeMD: vi.fn(async () => { })
|
|
80
|
+
}));
|
|
81
|
+
vi.mock('../../generators/claude-folder.js', () => ({
|
|
82
|
+
generateClaudeFolder: vi.fn(async () => { })
|
|
83
|
+
}));
|
|
84
|
+
vi.mock('../../generators/start-boss-sh.js', () => ({
|
|
85
|
+
generateStartBossScript: vi.fn(async () => { })
|
|
86
|
+
}));
|
|
87
|
+
vi.mock('../../generators/template-loader.js', () => ({
|
|
88
|
+
loadTemplate: vi.fn(async () => { }),
|
|
89
|
+
loadAssetTemplate: vi.fn(async () => 'test content')
|
|
90
|
+
}));
|
|
91
|
+
vi.mock('../../generators/template-docs.js', () => ({
|
|
92
|
+
generateTemplateDocs: vi.fn(async () => { })
|
|
93
|
+
}));
|
|
94
|
+
vi.mock('../../presets/quality-presets.js', () => ({
|
|
95
|
+
applyQualityPreset: vi.fn(async () => { })
|
|
96
|
+
}));
|
|
97
|
+
vi.mock('execa', () => ({
|
|
98
|
+
execa: vi.fn(async (cmd, args) => {
|
|
99
|
+
// Mock git commands
|
|
100
|
+
if (cmd === 'git') {
|
|
101
|
+
if (args[0] === 'ls-files') {
|
|
102
|
+
return { stdout: 'tests/index.test.ts' };
|
|
103
|
+
}
|
|
104
|
+
if (args[0] === 'rev-parse') {
|
|
105
|
+
return { stdout: 'main' };
|
|
106
|
+
}
|
|
107
|
+
return { stdout: '', stderr: '' };
|
|
108
|
+
}
|
|
109
|
+
// Mock npx husky
|
|
110
|
+
if (cmd === 'npx' && args[0] === 'husky') {
|
|
111
|
+
return { stdout: '', stderr: '' };
|
|
112
|
+
}
|
|
113
|
+
return { stdout: '', stderr: '' };
|
|
114
|
+
})
|
|
115
|
+
}));
|
|
116
|
+
// Mock fs-extra
|
|
117
|
+
vi.mock('fs-extra', () => ({
|
|
118
|
+
default: {
|
|
119
|
+
pathExists: vi.fn(async () => false),
|
|
120
|
+
ensureDir: vi.fn(async () => { }),
|
|
121
|
+
readdir: vi.fn(async () => []),
|
|
122
|
+
writeFile: vi.fn(async () => { })
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
describe('bootstrap command', () => {
|
|
126
|
+
let processExitSpy;
|
|
127
|
+
beforeEach(() => {
|
|
128
|
+
vi.clearAllMocks();
|
|
129
|
+
processExitSpy = vi.spyOn(process, 'exit').mockImplementation((() => { }));
|
|
130
|
+
});
|
|
131
|
+
afterEach(() => {
|
|
132
|
+
processExitSpy.mockRestore();
|
|
133
|
+
});
|
|
134
|
+
describe('bootstrapCommand', () => {
|
|
135
|
+
it('should bootstrap project with all options provided (non-interactive)', async () => {
|
|
136
|
+
const options = {
|
|
137
|
+
name: 'test-project',
|
|
138
|
+
template: 'nextjs-app-turbo',
|
|
139
|
+
quality: 'production',
|
|
140
|
+
githubRepo: 'test-repo',
|
|
141
|
+
githubOrg: 'test-org',
|
|
142
|
+
mcpScope: 'both',
|
|
143
|
+
nonInteractive: true
|
|
144
|
+
};
|
|
145
|
+
await bootstrapCommand(options);
|
|
146
|
+
// Verify all generators were called
|
|
147
|
+
const { generateProjectStructure } = await import('../../generators/project-structure.js');
|
|
148
|
+
const { generateBossConfig } = await import('../../generators/boss-config.js');
|
|
149
|
+
const { copySpecKitStructure } = await import('../../generators/specify-structure.js');
|
|
150
|
+
expect(generateProjectStructure).toHaveBeenCalled();
|
|
151
|
+
expect(generateBossConfig).toHaveBeenCalled();
|
|
152
|
+
expect(copySpecKitStructure).toHaveBeenCalled();
|
|
153
|
+
});
|
|
154
|
+
it('should handle user cancellation', async () => {
|
|
155
|
+
const { confirmBootstrap } = await import('../../utils/prompts.js');
|
|
156
|
+
vi.mocked(confirmBootstrap).mockResolvedValueOnce(false);
|
|
157
|
+
const options = {
|
|
158
|
+
name: 'test-project',
|
|
159
|
+
template: 'nextjs-app-turbo',
|
|
160
|
+
quality: 'production',
|
|
161
|
+
nonInteractive: false
|
|
162
|
+
};
|
|
163
|
+
await bootstrapCommand(options);
|
|
164
|
+
const { logger } = await import('../../utils/logger.js');
|
|
165
|
+
expect(logger.info).toHaveBeenCalledWith('Bootstrap cancelled');
|
|
166
|
+
});
|
|
167
|
+
it('should exit on invalid project directory', async () => {
|
|
168
|
+
const { validateProjectDirectory } = await import('../../utils/validators.js');
|
|
169
|
+
vi.mocked(validateProjectDirectory).mockResolvedValueOnce({
|
|
170
|
+
valid: false,
|
|
171
|
+
error: 'Directory is not empty'
|
|
172
|
+
});
|
|
173
|
+
const options = {
|
|
174
|
+
name: 'test-project',
|
|
175
|
+
template: 'nextjs-app-turbo',
|
|
176
|
+
quality: 'production',
|
|
177
|
+
nonInteractive: true
|
|
178
|
+
};
|
|
179
|
+
await bootstrapCommand(options);
|
|
180
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
181
|
+
});
|
|
182
|
+
it('should validate project name when provided', async () => {
|
|
183
|
+
const { validateProjectName } = await import('../../utils/validators.js');
|
|
184
|
+
vi.mocked(validateProjectName).mockReturnValueOnce({
|
|
185
|
+
valid: false,
|
|
186
|
+
error: 'Invalid project name'
|
|
187
|
+
});
|
|
188
|
+
const options = {
|
|
189
|
+
name: 'Invalid Name',
|
|
190
|
+
template: 'nextjs-app-turbo',
|
|
191
|
+
quality: 'production',
|
|
192
|
+
nonInteractive: true
|
|
193
|
+
};
|
|
194
|
+
await bootstrapCommand(options);
|
|
195
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
196
|
+
});
|
|
197
|
+
it('should validate template when provided', async () => {
|
|
198
|
+
const { validateTemplate } = await import('../../utils/validators.js');
|
|
199
|
+
vi.mocked(validateTemplate).mockReturnValueOnce({
|
|
200
|
+
valid: false,
|
|
201
|
+
error: 'Invalid template'
|
|
202
|
+
});
|
|
203
|
+
const options = {
|
|
204
|
+
name: 'test-project',
|
|
205
|
+
template: 'invalid-template',
|
|
206
|
+
quality: 'production',
|
|
207
|
+
nonInteractive: true
|
|
208
|
+
};
|
|
209
|
+
await bootstrapCommand(options);
|
|
210
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
211
|
+
});
|
|
212
|
+
it('should validate quality preset when provided', async () => {
|
|
213
|
+
const { validateQualityPreset } = await import('../../utils/validators.js');
|
|
214
|
+
vi.mocked(validateQualityPreset).mockReturnValueOnce({
|
|
215
|
+
valid: false,
|
|
216
|
+
error: 'Invalid quality preset'
|
|
217
|
+
});
|
|
218
|
+
const options = {
|
|
219
|
+
name: 'test-project',
|
|
220
|
+
template: 'nextjs-app-turbo',
|
|
221
|
+
quality: 'invalid-quality',
|
|
222
|
+
nonInteractive: true
|
|
223
|
+
};
|
|
224
|
+
await bootstrapCommand(options);
|
|
225
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
226
|
+
});
|
|
227
|
+
it('should validate MCP scope when provided', async () => {
|
|
228
|
+
const { validateMCPScope } = await import('../../utils/validators.js');
|
|
229
|
+
vi.mocked(validateMCPScope).mockReturnValueOnce({
|
|
230
|
+
valid: false,
|
|
231
|
+
error: 'Invalid MCP scope'
|
|
232
|
+
});
|
|
233
|
+
const options = {
|
|
234
|
+
name: 'test-project',
|
|
235
|
+
template: 'nextjs-app-turbo',
|
|
236
|
+
quality: 'production',
|
|
237
|
+
mcpScope: 'invalid-scope',
|
|
238
|
+
nonInteractive: true
|
|
239
|
+
};
|
|
240
|
+
await bootstrapCommand(options);
|
|
241
|
+
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
242
|
+
});
|
|
243
|
+
it('should use interactive prompts when options missing', async () => {
|
|
244
|
+
const { promptProjectName, promptTemplate, promptQualityPreset, promptGitHubConfig } = await import('../../utils/prompts.js');
|
|
245
|
+
const options = {
|
|
246
|
+
nonInteractive: false
|
|
247
|
+
};
|
|
248
|
+
await bootstrapCommand(options);
|
|
249
|
+
expect(promptProjectName).toHaveBeenCalled();
|
|
250
|
+
expect(promptTemplate).toHaveBeenCalled();
|
|
251
|
+
expect(promptQualityPreset).toHaveBeenCalled();
|
|
252
|
+
expect(promptGitHubConfig).toHaveBeenCalled();
|
|
253
|
+
});
|
|
254
|
+
it('should initialize git repository', async () => {
|
|
255
|
+
const { initGitRepository } = await import('../../utils/git.js');
|
|
256
|
+
const options = {
|
|
257
|
+
name: 'test-project',
|
|
258
|
+
template: 'nextjs-app-turbo',
|
|
259
|
+
quality: 'production',
|
|
260
|
+
nonInteractive: true
|
|
261
|
+
};
|
|
262
|
+
await bootstrapCommand(options);
|
|
263
|
+
expect(initGitRepository).toHaveBeenCalled();
|
|
264
|
+
});
|
|
265
|
+
it('should generate all required configurations', async () => {
|
|
266
|
+
const { generateWorkerConfigs } = await import('../../generators/worker-configs.js');
|
|
267
|
+
const { generateQualityGates } = await import('../../generators/quality-gates.js');
|
|
268
|
+
const { generateMCPConfig } = await import('../../generators/mcp-config.js');
|
|
269
|
+
const { generateGitHubWorkflows } = await import('../../generators/github-workflows.js');
|
|
270
|
+
const options = {
|
|
271
|
+
name: 'test-project',
|
|
272
|
+
template: 'nextjs-app-turbo',
|
|
273
|
+
quality: 'production',
|
|
274
|
+
nonInteractive: true
|
|
275
|
+
};
|
|
276
|
+
await bootstrapCommand(options);
|
|
277
|
+
expect(generateWorkerConfigs).toHaveBeenCalled();
|
|
278
|
+
expect(generateQualityGates).toHaveBeenCalled();
|
|
279
|
+
expect(generateMCPConfig).toHaveBeenCalled();
|
|
280
|
+
expect(generateGitHubWorkflows).toHaveBeenCalled();
|
|
281
|
+
});
|
|
282
|
+
it('should create initial setup branch', async () => {
|
|
283
|
+
const { createBranch } = await import('../../utils/git.js');
|
|
284
|
+
const options = {
|
|
285
|
+
name: 'test-project',
|
|
286
|
+
template: 'nextjs-app-turbo',
|
|
287
|
+
quality: 'production',
|
|
288
|
+
nonInteractive: true
|
|
289
|
+
};
|
|
290
|
+
await bootstrapCommand(options);
|
|
291
|
+
expect(createBranch).toHaveBeenCalledWith(expect.any(String), 'feature/boss-initial-setup');
|
|
292
|
+
});
|
|
293
|
+
it('should commit bootstrap files', async () => {
|
|
294
|
+
const { addFiles, commit } = await import('../../utils/git.js');
|
|
295
|
+
const options = {
|
|
296
|
+
name: 'test-project',
|
|
297
|
+
template: 'nextjs-app-turbo',
|
|
298
|
+
quality: 'production',
|
|
299
|
+
nonInteractive: true
|
|
300
|
+
};
|
|
301
|
+
await bootstrapCommand(options);
|
|
302
|
+
expect(addFiles).toHaveBeenCalledWith(expect.any(String), ['.']);
|
|
303
|
+
expect(commit).toHaveBeenCalledWith(expect.any(String), 'chore: BOSS bootstrap - initial project structure');
|
|
304
|
+
});
|
|
305
|
+
it('should handle bootstrap errors', async () => {
|
|
306
|
+
const { generateProjectStructure } = await import('../../generators/project-structure.js');
|
|
307
|
+
vi.mocked(generateProjectStructure).mockRejectedValueOnce(new Error('Generation failed'));
|
|
308
|
+
const options = {
|
|
309
|
+
name: 'test-project',
|
|
310
|
+
template: 'nextjs-app-turbo',
|
|
311
|
+
quality: 'production',
|
|
312
|
+
nonInteractive: true
|
|
313
|
+
};
|
|
314
|
+
await expect(bootstrapCommand(options)).rejects.toThrow('Generation failed');
|
|
315
|
+
});
|
|
316
|
+
it('should apply quality preset', async () => {
|
|
317
|
+
const { applyQualityPreset } = await import('../../presets/quality-presets.js');
|
|
318
|
+
const options = {
|
|
319
|
+
name: 'test-project',
|
|
320
|
+
template: 'nextjs-app-turbo',
|
|
321
|
+
quality: 'production',
|
|
322
|
+
nonInteractive: true
|
|
323
|
+
};
|
|
324
|
+
await bootstrapCommand(options);
|
|
325
|
+
expect(applyQualityPreset).toHaveBeenCalledWith(expect.any(String), 'production');
|
|
326
|
+
});
|
|
327
|
+
it('should load template', async () => {
|
|
328
|
+
const { loadTemplate } = await import('../../generators/template-loader.js');
|
|
329
|
+
const options = {
|
|
330
|
+
name: 'test-project',
|
|
331
|
+
template: 'nextjs-app-turbo',
|
|
332
|
+
quality: 'production',
|
|
333
|
+
nonInteractive: true
|
|
334
|
+
};
|
|
335
|
+
await bootstrapCommand(options);
|
|
336
|
+
expect(loadTemplate).toHaveBeenCalledWith(expect.any(String), 'nextjs-app-turbo', expect.objectContaining({
|
|
337
|
+
name: 'test-project',
|
|
338
|
+
template: 'nextjs-app-turbo',
|
|
339
|
+
quality: 'production'
|
|
340
|
+
}));
|
|
341
|
+
});
|
|
342
|
+
it('should use project scope for MCP when specified', async () => {
|
|
343
|
+
const { generateMCPConfig } = await import('../../generators/mcp-config.js');
|
|
344
|
+
const options = {
|
|
345
|
+
name: 'test-project',
|
|
346
|
+
template: 'nextjs-app-turbo',
|
|
347
|
+
quality: 'production',
|
|
348
|
+
mcpScope: 'project',
|
|
349
|
+
nonInteractive: true
|
|
350
|
+
};
|
|
351
|
+
await bootstrapCommand(options);
|
|
352
|
+
expect(generateMCPConfig).toHaveBeenCalledWith(expect.any(String), 'project');
|
|
353
|
+
});
|
|
354
|
+
it('should use user scope for MCP when specified', async () => {
|
|
355
|
+
const { generateMCPConfig } = await import('../../generators/mcp-config.js');
|
|
356
|
+
const options = {
|
|
357
|
+
name: 'test-project',
|
|
358
|
+
template: 'nextjs-app-turbo',
|
|
359
|
+
quality: 'production',
|
|
360
|
+
mcpScope: 'user',
|
|
361
|
+
nonInteractive: true
|
|
362
|
+
};
|
|
363
|
+
await bootstrapCommand(options);
|
|
364
|
+
expect(generateMCPConfig).toHaveBeenCalledWith(expect.any(String), 'user');
|
|
365
|
+
});
|
|
366
|
+
it('should prompt for MCP scope in interactive mode when not provided', async () => {
|
|
367
|
+
const { promptMCPScope } = await import('../../utils/prompts.js');
|
|
368
|
+
const options = {
|
|
369
|
+
name: 'test-project',
|
|
370
|
+
template: 'nextjs-app-turbo',
|
|
371
|
+
quality: 'production',
|
|
372
|
+
nonInteractive: false
|
|
373
|
+
};
|
|
374
|
+
await bootstrapCommand(options);
|
|
375
|
+
expect(promptMCPScope).toHaveBeenCalled();
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
//# sourceMappingURL=bootstrap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/bootstrap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/doctor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
// Mock execa
|
|
3
|
+
vi.mock('execa');
|
|
4
|
+
describe('doctor command', () => {
|
|
5
|
+
it('should be importable', async () => {
|
|
6
|
+
const { doctorCommand } = await import('../doctor.js');
|
|
7
|
+
expect(doctorCommand).toBeDefined();
|
|
8
|
+
expect(typeof doctorCommand).toBe('function');
|
|
9
|
+
});
|
|
10
|
+
// Note: Full integration tests would require actual system tools
|
|
11
|
+
// These are tested in manual testing scenarios
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=doctor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/doctor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGlD,aAAa;AACb,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEjB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACvD,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,iEAAiE;IACjE,+CAA+C;AACjD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,mBAAmB,CAAC;AAqBzE,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoL/E"}
|