@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,471 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# BOSS Launch Script
|
|
4
|
+
# Launches Claude Code/Cursor with MCP-only tool restrictions
|
|
5
|
+
# MCP servers are configured to use op run automatically (see .mcp.json)
|
|
6
|
+
# See: https://1password.com/blog/securing-mcp-servers-with-1password-stop-credential-exposure-in-your-agent
|
|
7
|
+
|
|
8
|
+
# Configuration
|
|
9
|
+
DEBUG=false
|
|
10
|
+
INIT_PROMPT="Check .boss/project-config.json initialization status. If initialization.stage is not 'ready', automatically complete the initial setup in this EXACT order: 1) Check if GitHub remote exists using 'git remote -v', 2) If no remote exists: create repository if needed using GitHub MCP (GitHub MCP is already authenticated using GITHUB_PERSONAL_ACCESS_TOKEN - use it directly), ask user for preferences (private/public, organization), add remote using HTTPS URL format 'git remote add origin https://github.com/<owner>/<repo>.git' (NEVER use SSH git@github.com format - always use HTTPS), 3) Check current branch using 'git branch --show-current'. If on feature/boss-initial-setup with uncommitted changes: commit them first using 'git add . && git commit -m \"chore: bootstrap files\"' (these are bootstrap files that should be on feature branch). 4) Switch to main branch: 'git checkout main' (if uncommitted changes prevent checkout, commit them to current branch first, then switch). 5) FIRST push empty main branch: 'git push -u origin main' (main is EMPTY - only empty commit, no validation needed, git will use GITHUB_TOKEN from environment automatically, which is set to same value as GITHUB_PERSONAL_ACCESS_TOKEN). The pre-push hook allows empty main push without validation checks. Main branch must be pushed first (empty) before feature branch. 6) Switch back to feature branch: 'git checkout feature/boss-initial-setup' (branch should already exist from bootstrap). 7) CRITICAL - BEFORE pushing feature branch: Verify all validation checks pass by running 'pnpm typecheck', 'pnpm lint', 'bash scripts/security-check.sh', and 'pnpm test:unit' (or npm equivalents). Fix any failures before pushing. 8) Push feature branch: 'git push -u origin feature/boss-initial-setup' (this contains all bootstrap files - git will use GITHUB_TOKEN from environment automatically, which is set to same value as GITHUB_PERSONAL_ACCESS_TOKEN). If push fails due to validation errors, fix the issues and try again. 9) Mark initialization.stage as 'ready' in project-config.json, 10) Commit and push project-config.json changes: 'git add .boss/project-config.json && git commit -m \"chore: update project-config.json\" && git push', 11) FINAL STEP - Create PR from feature/boss-initial-setup to main using GitHub MCP: Use 'github create_pull_request' with title 'chore: BOSS initial setup - bootstrap files' and body 'This PR contains all BOSS bootstrap files and initial project structure. Ready for review and merge.' Set base branch to 'main' and head branch to 'feature/boss-initial-setup'. Do this automatically without asking for confirmation to proceed."
|
|
11
|
+
|
|
12
|
+
# Parse command-line arguments
|
|
13
|
+
for arg in "$@"; do
|
|
14
|
+
case $arg in
|
|
15
|
+
--debug)
|
|
16
|
+
DEBUG=true
|
|
17
|
+
shift
|
|
18
|
+
;;
|
|
19
|
+
*)
|
|
20
|
+
break
|
|
21
|
+
;;
|
|
22
|
+
esac
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
# Debug logging function
|
|
26
|
+
debug_log() {
|
|
27
|
+
if [ "$DEBUG" = true ]; then
|
|
28
|
+
echo "🔍 [DEBUG] $1" >&2
|
|
29
|
+
fi
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# Error logging function
|
|
33
|
+
error_log() {
|
|
34
|
+
echo "❌ Error: $1" >&2
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Warning logging function
|
|
38
|
+
warning_log() {
|
|
39
|
+
echo "⚠️ Warning: $1" >&2
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Info logging function
|
|
43
|
+
info_log() {
|
|
44
|
+
echo "$1"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Detect which IDE is available (Claude Code vs Cursor)
|
|
48
|
+
detect_ide() {
|
|
49
|
+
local ide_dir=""
|
|
50
|
+
|
|
51
|
+
# Check for .claude directory first (Claude Code)
|
|
52
|
+
if [ -d ".claude" ]; then
|
|
53
|
+
ide_dir=".claude"
|
|
54
|
+
debug_log "Detected .claude directory (Claude Code)"
|
|
55
|
+
# Check for .cursor directory
|
|
56
|
+
elif [ -d ".cursor" ]; then
|
|
57
|
+
ide_dir=".cursor"
|
|
58
|
+
debug_log "Detected .cursor directory (Cursor)"
|
|
59
|
+
# Check for CLI commands
|
|
60
|
+
elif command -v claude &> /dev/null || command -v claude-code &> /dev/null; then
|
|
61
|
+
ide_dir=".claude"
|
|
62
|
+
debug_log "Detected Claude Code CLI command"
|
|
63
|
+
elif command -v cursor &> /dev/null; then
|
|
64
|
+
ide_dir=".cursor"
|
|
65
|
+
debug_log "Detected Cursor CLI command"
|
|
66
|
+
else
|
|
67
|
+
# Default to .claude if neither detected
|
|
68
|
+
ide_dir=".claude"
|
|
69
|
+
debug_log "No IDE detected, defaulting to .claude"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
echo "$ide_dir"
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Ensure all necessary directories exist
|
|
76
|
+
ensure_directories() {
|
|
77
|
+
local ide_dir="$1"
|
|
78
|
+
|
|
79
|
+
debug_log "Ensuring directories exist: .boss, $ide_dir, $ide_dir/rules"
|
|
80
|
+
|
|
81
|
+
mkdir -p .boss || {
|
|
82
|
+
error_log "Failed to create .boss directory"
|
|
83
|
+
return 1
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
mkdir -p "$ide_dir" || {
|
|
87
|
+
error_log "Failed to create $ide_dir directory"
|
|
88
|
+
return 1
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
mkdir -p "$ide_dir/rules" || {
|
|
92
|
+
error_log "Failed to create $ide_dir/rules directory"
|
|
93
|
+
return 1
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
debug_log "All directories created successfully"
|
|
97
|
+
return 0
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Get initialization stage from project-config.json
|
|
101
|
+
get_init_stage() {
|
|
102
|
+
local config_file=".boss/project-config.json"
|
|
103
|
+
local stage=""
|
|
104
|
+
|
|
105
|
+
if [ ! -f "$config_file" ]; then
|
|
106
|
+
debug_log "Project config file not found: $config_file"
|
|
107
|
+
echo ""
|
|
108
|
+
return 0
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# Try using jq if available (most reliable)
|
|
112
|
+
if command -v jq &> /dev/null; then
|
|
113
|
+
debug_log "Using jq to parse JSON"
|
|
114
|
+
stage=$(jq -r '.initialization.stage // empty' "$config_file" 2>/dev/null)
|
|
115
|
+
if [ -n "$stage" ] && [ "$stage" != "null" ]; then
|
|
116
|
+
debug_log "Parsed stage with jq: $stage"
|
|
117
|
+
echo "$stage"
|
|
118
|
+
return 0
|
|
119
|
+
fi
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
# Fallback to grep/sed parsing
|
|
123
|
+
debug_log "Using grep/sed to parse JSON (jq not available or failed)"
|
|
124
|
+
|
|
125
|
+
# Try first method: grep with regex
|
|
126
|
+
stage=$(grep -o '"stage":\s*"[^"]*"' "$config_file" 2>/dev/null | head -1 | grep -o '"[^"]*"' | head -1 | tr -d '"' || echo "")
|
|
127
|
+
|
|
128
|
+
if [ -z "$stage" ]; then
|
|
129
|
+
# Try alternative method: sed extraction
|
|
130
|
+
stage=$(grep '"stage"' "$config_file" 2>/dev/null | head -1 | sed 's/.*"stage"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' || echo "")
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# Also try nested path: initialization.stage
|
|
134
|
+
if [ -z "$stage" ]; then
|
|
135
|
+
stage=$(grep -A 5 '"initialization"' "$config_file" 2>/dev/null | grep '"stage"' | head -1 | sed 's/.*"stage"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' || echo "")
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
if [ -n "$stage" ]; then
|
|
139
|
+
debug_log "Parsed stage with grep/sed: $stage"
|
|
140
|
+
else
|
|
141
|
+
debug_log "Could not parse initialization stage from $config_file"
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
echo "$stage"
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Create initialization instruction files
|
|
148
|
+
create_init_files() {
|
|
149
|
+
local stage="$1"
|
|
150
|
+
local ide_dir="$2"
|
|
151
|
+
|
|
152
|
+
if [ -z "$stage" ]; then
|
|
153
|
+
debug_log "No initialization stage provided, skipping file creation"
|
|
154
|
+
return 0
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
info_log "📋 Initial setup needed (stage: $stage)"
|
|
158
|
+
info_log "🚀 BOSS will automatically complete initial setup when it starts."
|
|
159
|
+
|
|
160
|
+
# Ensure directories exist
|
|
161
|
+
if ! ensure_directories "$ide_dir"; then
|
|
162
|
+
error_log "Failed to create directories for init files"
|
|
163
|
+
return 1
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
# 1. Create .boss/init-instruction.txt
|
|
167
|
+
debug_log "Creating .boss/init-instruction.txt"
|
|
168
|
+
echo "$INIT_PROMPT" > .boss/init-instruction.txt || {
|
|
169
|
+
error_log "Failed to create .boss/init-instruction.txt"
|
|
170
|
+
return 1
|
|
171
|
+
}
|
|
172
|
+
info_log "✅ Created .boss/init-instruction.txt"
|
|
173
|
+
|
|
174
|
+
# 2. Create .claude/rules/startup-init.md or .cursor/rules/startup-init.md
|
|
175
|
+
local rules_file="$ide_dir/rules/startup-init.md"
|
|
176
|
+
debug_log "Creating $rules_file"
|
|
177
|
+
cat > "$rules_file" << EOF
|
|
178
|
+
# 🚨🚨🚨 CRITICAL STARTUP INSTRUCTION - EXECUTE IMMEDIATELY 🚨🚨🚨
|
|
179
|
+
|
|
180
|
+
## ⚠️ AUTOMATIC ACTION REQUIRED - DO NOT WAIT FOR USER INPUT ⚠️
|
|
181
|
+
|
|
182
|
+
**The project initialization is NOT complete.**
|
|
183
|
+
|
|
184
|
+
**Current initialization stage:** \`$stage\`
|
|
185
|
+
|
|
186
|
+
**YOU MUST IMMEDIATELY (right now, without waiting):**
|
|
187
|
+
|
|
188
|
+
$INIT_PROMPT
|
|
189
|
+
|
|
190
|
+
**This is a RULE - you MUST execute this automatically when you start.**
|
|
191
|
+
**DO NOT wait for the user to ask you to do this.**
|
|
192
|
+
**DO NOT wait for any confirmation.**
|
|
193
|
+
**START WORKING ON THIS IMMEDIATELY.**
|
|
194
|
+
|
|
195
|
+
**Reference files:**
|
|
196
|
+
- \`.boss/project-config.json\` - Check initialization status here
|
|
197
|
+
- \`.boss/init-instruction.txt\` - Full instruction details
|
|
198
|
+
- \`CLAUDE.md\` - Also contains this instruction at the top
|
|
199
|
+
EOF
|
|
200
|
+
if [ $? -eq 0 ]; then
|
|
201
|
+
info_log "✅ Created $rules_file"
|
|
202
|
+
else
|
|
203
|
+
error_log "Failed to create $rules_file"
|
|
204
|
+
return 1
|
|
205
|
+
fi
|
|
206
|
+
|
|
207
|
+
# 3. Inject into CLAUDE.md if it exists
|
|
208
|
+
if [ -f "CLAUDE.md" ]; then
|
|
209
|
+
inject_claude_md "$stage"
|
|
210
|
+
else
|
|
211
|
+
debug_log "CLAUDE.md not found, skipping injection"
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
return 0
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# Inject initialization instruction into CLAUDE.md
|
|
218
|
+
inject_claude_md() {
|
|
219
|
+
local stage="$1"
|
|
220
|
+
|
|
221
|
+
if [ ! -f "CLAUDE.md" ]; then
|
|
222
|
+
debug_log "CLAUDE.md not found, skipping injection"
|
|
223
|
+
return 0
|
|
224
|
+
fi
|
|
225
|
+
|
|
226
|
+
# Check if instruction is already injected (avoid duplicate injection)
|
|
227
|
+
if grep -q "🚨 STARTUP INSTRUCTION" CLAUDE.md 2>/dev/null; then
|
|
228
|
+
debug_log "Startup instruction already exists in CLAUDE.md, skipping injection"
|
|
229
|
+
return 0
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
debug_log "Injecting startup instruction into CLAUDE.md"
|
|
233
|
+
|
|
234
|
+
# Create backup
|
|
235
|
+
if ! cp CLAUDE.md CLAUDE.md.bak 2>/dev/null; then
|
|
236
|
+
warning_log "Failed to create backup of CLAUDE.md, proceeding anyway"
|
|
237
|
+
else
|
|
238
|
+
debug_log "Created backup: CLAUDE.md.bak"
|
|
239
|
+
fi
|
|
240
|
+
|
|
241
|
+
# Prepend instruction to CLAUDE.md with very prominent formatting
|
|
242
|
+
{
|
|
243
|
+
echo "# 🚨🚨🚨 CRITICAL STARTUP INSTRUCTION - READ THIS FIRST 🚨🚨🚨"
|
|
244
|
+
echo ""
|
|
245
|
+
echo "## ⚠️ AUTOMATIC ACTION REQUIRED - DO NOT WAIT FOR USER INPUT ⚠️"
|
|
246
|
+
echo ""
|
|
247
|
+
echo "**The initialization stage is currently: \`$stage\`**"
|
|
248
|
+
echo ""
|
|
249
|
+
echo "**YOU MUST IMMEDIATELY (without waiting for user input):**"
|
|
250
|
+
echo ""
|
|
251
|
+
echo "$INIT_PROMPT"
|
|
252
|
+
echo ""
|
|
253
|
+
echo "---"
|
|
254
|
+
echo ""
|
|
255
|
+
echo "**This instruction is also available in:**"
|
|
256
|
+
echo "- \`.boss/init-instruction.txt\`"
|
|
257
|
+
echo "- \`.claude/rules/startup-init.md\` (or \`.cursor/rules/startup-init.md\`)"
|
|
258
|
+
echo ""
|
|
259
|
+
echo "---"
|
|
260
|
+
echo ""
|
|
261
|
+
cat CLAUDE.md.bak
|
|
262
|
+
} > CLAUDE.md || {
|
|
263
|
+
error_log "Failed to inject instruction into CLAUDE.md"
|
|
264
|
+
# Restore backup on failure
|
|
265
|
+
if [ -f "CLAUDE.md.bak" ]; then
|
|
266
|
+
mv CLAUDE.md.bak CLAUDE.md
|
|
267
|
+
fi
|
|
268
|
+
return 1
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
info_log "✅ Injected startup instruction into CLAUDE.md"
|
|
272
|
+
return 0
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
# Cleanup initialization files when initialization is complete
|
|
276
|
+
cleanup_init_files() {
|
|
277
|
+
local ide_dir="$1"
|
|
278
|
+
|
|
279
|
+
debug_log "Cleaning up initialization files"
|
|
280
|
+
|
|
281
|
+
# Remove .boss/init-instruction.txt
|
|
282
|
+
if [ -f ".boss/init-instruction.txt" ]; then
|
|
283
|
+
rm -f .boss/init-instruction.txt && info_log "✅ Removed .boss/init-instruction.txt"
|
|
284
|
+
fi
|
|
285
|
+
|
|
286
|
+
# Remove .claude/rules/startup-init.md or .cursor/rules/startup-init.md
|
|
287
|
+
local rules_file="$ide_dir/rules/startup-init.md"
|
|
288
|
+
if [ -f "$rules_file" ]; then
|
|
289
|
+
rm -f "$rules_file" && info_log "✅ Removed $rules_file"
|
|
290
|
+
fi
|
|
291
|
+
|
|
292
|
+
# Also check the other IDE directory
|
|
293
|
+
local other_ide_dir=".claude"
|
|
294
|
+
[ "$ide_dir" = ".claude" ] && other_ide_dir=".cursor"
|
|
295
|
+
local other_rules_file="$other_ide_dir/rules/startup-init.md"
|
|
296
|
+
if [ -f "$other_rules_file" ]; then
|
|
297
|
+
rm -f "$other_rules_file" && info_log "✅ Removed $other_rules_file"
|
|
298
|
+
fi
|
|
299
|
+
|
|
300
|
+
# Restore CLAUDE.md from backup if it exists
|
|
301
|
+
if [ -f "CLAUDE.md.bak" ]; then
|
|
302
|
+
debug_log "Restoring CLAUDE.md from backup"
|
|
303
|
+
|
|
304
|
+
# Remove the startup instruction section if it exists
|
|
305
|
+
if grep -q "🚨 STARTUP INSTRUCTION" CLAUDE.md 2>/dev/null; then
|
|
306
|
+
debug_log "Removing startup instruction section from CLAUDE.md"
|
|
307
|
+
|
|
308
|
+
# Remove everything from "# 🚨 STARTUP INSTRUCTION" to the first "---" separator
|
|
309
|
+
local temp_file=$(mktemp)
|
|
310
|
+
sed '/^# 🚨 STARTUP INSTRUCTION/,/^---$/d' CLAUDE.md > "$temp_file" 2>/dev/null
|
|
311
|
+
|
|
312
|
+
if [ $? -eq 0 ] && [ -s "$temp_file" ]; then
|
|
313
|
+
mv "$temp_file" CLAUDE.md
|
|
314
|
+
|
|
315
|
+
# Remove any leading blank lines (macOS and Linux compatible)
|
|
316
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
317
|
+
sed -i '' '/./,$!d' CLAUDE.md 2>/dev/null || true
|
|
318
|
+
else
|
|
319
|
+
sed -i '/./,$!d' CLAUDE.md 2>/dev/null || true
|
|
320
|
+
fi
|
|
321
|
+
|
|
322
|
+
info_log "✅ Removed startup instruction from CLAUDE.md"
|
|
323
|
+
else
|
|
324
|
+
debug_log "Failed to remove instruction section, will restore from backup"
|
|
325
|
+
rm -f "$temp_file"
|
|
326
|
+
fi
|
|
327
|
+
fi
|
|
328
|
+
|
|
329
|
+
# Verify CLAUDE.md is valid before removing backup
|
|
330
|
+
if [ ! -s "CLAUDE.md" ] || ! grep -q "BOSS" CLAUDE.md 2>/dev/null; then
|
|
331
|
+
warning_log "CLAUDE.md appears corrupted, restoring from backup"
|
|
332
|
+
mv CLAUDE.md.bak CLAUDE.md
|
|
333
|
+
info_log "✅ Restored CLAUDE.md from backup"
|
|
334
|
+
else
|
|
335
|
+
rm -f CLAUDE.md.bak
|
|
336
|
+
debug_log "CLAUDE.md restored successfully, backup removed"
|
|
337
|
+
fi
|
|
338
|
+
fi
|
|
339
|
+
|
|
340
|
+
debug_log "Cleanup completed"
|
|
341
|
+
return 0
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
# Launch the appropriate IDE with MCP restrictions
|
|
345
|
+
launch_ide() {
|
|
346
|
+
local ide_type="$1"
|
|
347
|
+
local init_needed="$2"
|
|
348
|
+
shift 2
|
|
349
|
+
local extra_args=("$@")
|
|
350
|
+
|
|
351
|
+
debug_log "Launching IDE: $ide_type, init_needed: $init_needed"
|
|
352
|
+
|
|
353
|
+
# Try Claude Code first
|
|
354
|
+
if command -v claude &> /dev/null || command -v claude-code &> /dev/null; then
|
|
355
|
+
local claude_cmd="claude"
|
|
356
|
+
command -v claude-code &> /dev/null && claude_cmd="claude-code"
|
|
357
|
+
|
|
358
|
+
if [ "$init_needed" = true ]; then
|
|
359
|
+
info_log "🚀 Launching Claude Code with MCP-only restrictions..."
|
|
360
|
+
info_log "📋 Piping initialization instruction to Claude Code as first message..."
|
|
361
|
+
info_log ""
|
|
362
|
+
info_log "📋 Initial setup instruction has also been placed in:"
|
|
363
|
+
info_log " - .boss/init-instruction.txt"
|
|
364
|
+
info_log " - $ide_type/rules/startup-init.md"
|
|
365
|
+
info_log " - CLAUDE.md (at the very top with prominent formatting)"
|
|
366
|
+
|
|
367
|
+
debug_log "Command: printf '%s\n' '$INIT_PROMPT' | $claude_cmd --allowedTools mcp__container-use__*,mcp__github__*,mcp__knowledge-base__* ${extra_args[*]}"
|
|
368
|
+
|
|
369
|
+
# Pipe the instruction to Claude Code via stdin (don't use exec when piping)
|
|
370
|
+
printf '%s\n' "$INIT_PROMPT" | "$claude_cmd" --allowedTools \
|
|
371
|
+
mcp__container-use__*,\
|
|
372
|
+
mcp__github__*,\
|
|
373
|
+
mcp__knowledge-base__* \
|
|
374
|
+
"${extra_args[@]}"
|
|
375
|
+
else
|
|
376
|
+
info_log "🚀 Launching Claude Code with MCP-only restrictions..."
|
|
377
|
+
debug_log "Command: $claude_cmd --allowedTools mcp__container-use__*,mcp__github__*,mcp__knowledge-base__* ${extra_args[*]}"
|
|
378
|
+
|
|
379
|
+
exec "$claude_cmd" --allowedTools \
|
|
380
|
+
mcp__container-use__*,\
|
|
381
|
+
mcp__github__*,\
|
|
382
|
+
mcp__knowledge-base__* \
|
|
383
|
+
"${extra_args[@]}"
|
|
384
|
+
fi
|
|
385
|
+
# Try Cursor
|
|
386
|
+
elif command -v cursor &> /dev/null; then
|
|
387
|
+
warning_log "Cursor detected. MCP restrictions should be configured in Cursor settings."
|
|
388
|
+
if [ "$init_needed" = true ]; then
|
|
389
|
+
info_log "📋 Initial setup needed. BOSS will automatically check and complete setup when Cursor opens."
|
|
390
|
+
fi
|
|
391
|
+
|
|
392
|
+
info_log "🚀 Launching Cursor..."
|
|
393
|
+
debug_log "Command: cursor ${extra_args[*]}"
|
|
394
|
+
|
|
395
|
+
exec cursor "${extra_args[@]}"
|
|
396
|
+
else
|
|
397
|
+
error_log "Neither 'claude' nor 'cursor' command found in PATH"
|
|
398
|
+
echo "Please install Claude Code or Cursor and ensure it's in your PATH" >&2
|
|
399
|
+
exit 1
|
|
400
|
+
fi
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
# Main execution
|
|
404
|
+
main() {
|
|
405
|
+
info_log "🤖 Starting BOSS with MCP-only operations..."
|
|
406
|
+
|
|
407
|
+
# CRITICAL: Install dependencies before launching Claude
|
|
408
|
+
# This prevents git hook failures due to missing dependencies (e.g., tsc not found)
|
|
409
|
+
if [ -f "package.json" ]; then
|
|
410
|
+
if [ ! -d "node_modules" ] || [ "package.json" -nt "node_modules" ]; then
|
|
411
|
+
info_log "📦 Installing dependencies (required for git hooks)..."
|
|
412
|
+
if command -v pnpm &> /dev/null; then
|
|
413
|
+
pnpm install
|
|
414
|
+
elif command -v npm &> /dev/null; then
|
|
415
|
+
npm install
|
|
416
|
+
else
|
|
417
|
+
warning_log "Neither pnpm nor npm found. Dependencies may not be installed."
|
|
418
|
+
echo " Git hooks may fail if dependencies are missing."
|
|
419
|
+
fi
|
|
420
|
+
fi
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
# Check if .env file exists
|
|
424
|
+
if [ ! -f ".env" ]; then
|
|
425
|
+
warning_log ".env file not found. MCP servers may not have access to secrets."
|
|
426
|
+
echo " Create .env file with op:// references for 1Password secrets."
|
|
427
|
+
fi
|
|
428
|
+
|
|
429
|
+
# Check if op (1Password CLI) is available and signed in (for MCP servers)
|
|
430
|
+
if command -v op &> /dev/null; then
|
|
431
|
+
if ! op account list &> /dev/null; then
|
|
432
|
+
warning_log "1Password CLI (op) is not signed in."
|
|
433
|
+
echo " Run: eval \$(op signin) to sign in"
|
|
434
|
+
echo " MCP servers configured with op:// references will fail without authentication."
|
|
435
|
+
fi
|
|
436
|
+
fi
|
|
437
|
+
|
|
438
|
+
# Detect IDE
|
|
439
|
+
local ide_dir
|
|
440
|
+
ide_dir=$(detect_ide)
|
|
441
|
+
debug_log "Detected IDE directory: $ide_dir"
|
|
442
|
+
|
|
443
|
+
# Check initialization status
|
|
444
|
+
local init_stage
|
|
445
|
+
init_stage=$(get_init_stage)
|
|
446
|
+
debug_log "Initialization stage: '$init_stage'"
|
|
447
|
+
|
|
448
|
+
local init_needed=false
|
|
449
|
+
|
|
450
|
+
if [ -n "$init_stage" ] && [ "$init_stage" != "ready" ]; then
|
|
451
|
+
init_needed=true
|
|
452
|
+
debug_log "Initialization needed (stage: $init_stage)"
|
|
453
|
+
|
|
454
|
+
# Create initialization files
|
|
455
|
+
if ! create_init_files "$init_stage" "$ide_dir"; then
|
|
456
|
+
error_log "Failed to create initialization files"
|
|
457
|
+
exit 1
|
|
458
|
+
fi
|
|
459
|
+
else
|
|
460
|
+
debug_log "Initialization complete or not needed (stage: '$init_stage')"
|
|
461
|
+
|
|
462
|
+
# Cleanup initialization files if they exist
|
|
463
|
+
cleanup_init_files "$ide_dir"
|
|
464
|
+
fi
|
|
465
|
+
|
|
466
|
+
# Launch IDE
|
|
467
|
+
launch_ide "$ide_dir" "$init_needed" "$@"
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
# Run main function
|
|
471
|
+
main "$@"
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Template Documentation: Fastify API Service
|
|
2
|
+
|
|
3
|
+
This project was bootstrapped using the **Fastify API Service** template, which provides a high-performance API server setup.
|
|
4
|
+
|
|
5
|
+
## What Was Included
|
|
6
|
+
|
|
7
|
+
### Core Stack
|
|
8
|
+
- **Fastify** - Fast and low overhead web framework
|
|
9
|
+
- **TypeScript** - Type-safe development
|
|
10
|
+
- **Vitest** - Testing framework
|
|
11
|
+
- **ESLint** - Code linting (ESLint 9 flat config)
|
|
12
|
+
- **Prettier** - Code formatting
|
|
13
|
+
- **tsx** - TypeScript execution for development
|
|
14
|
+
|
|
15
|
+
### Project Structure
|
|
16
|
+
|
|
17
|
+
\`\`\`
|
|
18
|
+
${config.name}/
|
|
19
|
+
├── src/
|
|
20
|
+
│ └── index.ts # API server entry point
|
|
21
|
+
├── tests/ # Test files
|
|
22
|
+
├── docs/ # Documentation
|
|
23
|
+
├── .boss/ # BOSS configuration
|
|
24
|
+
├── .specify/ # Spec-Kit structure
|
|
25
|
+
├── .container-use/ # Container-use config
|
|
26
|
+
├── .claude/ # Claude Code rules
|
|
27
|
+
├── .github/ # GitHub workflows
|
|
28
|
+
├── .husky/ # Git hooks
|
|
29
|
+
├── scripts/ # Utility scripts
|
|
30
|
+
├── package.json # Dependencies and scripts
|
|
31
|
+
├── tsconfig.json # TypeScript configuration
|
|
32
|
+
├── vitest.config.ts # Test configuration
|
|
33
|
+
├── eslint.config.js # ESLint configuration (ESLint 9)
|
|
34
|
+
└── docker-compose.yml # Local infrastructure
|
|
35
|
+
\`\`\`
|
|
36
|
+
|
|
37
|
+
### Available Scripts
|
|
38
|
+
|
|
39
|
+
- \`pnpm dev\` - Start development server with hot reload (tsx watch)
|
|
40
|
+
- \`pnpm build\` - Compile TypeScript to JavaScript
|
|
41
|
+
- \`pnpm start\` - Start production server (runs compiled code)
|
|
42
|
+
- \`pnpm typecheck\` - Type check without emitting files
|
|
43
|
+
- \`pnpm lint\` - Lint code with ESLint
|
|
44
|
+
- \`pnpm test\` - Run tests in watch mode
|
|
45
|
+
- \`pnpm test:unit\` - Run unit tests (excludes e2e/integration)
|
|
46
|
+
- \`pnpm test:coverage\` - Run tests with coverage
|
|
47
|
+
|
|
48
|
+
### Features
|
|
49
|
+
|
|
50
|
+
- **High Performance** - Fastify is one of the fastest Node.js frameworks
|
|
51
|
+
- **Type Safety** - Full TypeScript support
|
|
52
|
+
- **Plugin System** - Extensible via Fastify plugins
|
|
53
|
+
- **JSON Schema Validation** - Built-in request/response validation
|
|
54
|
+
- **Async/Await** - Modern async patterns
|
|
55
|
+
|
|
56
|
+
### Quality Preset: ${config.quality}
|
|
57
|
+
|
|
58
|
+
This project uses the **${config.quality}** quality preset, which defines:
|
|
59
|
+
- Code coverage thresholds
|
|
60
|
+
- Quality gate requirements
|
|
61
|
+
- Testing requirements
|
|
62
|
+
- Linting and type checking rules
|
|
63
|
+
|
|
64
|
+
### Git Hooks
|
|
65
|
+
|
|
66
|
+
The following git hooks are configured:
|
|
67
|
+
|
|
68
|
+
- **pre-commit** - Runs lint-staged (ESLint + Prettier) and tests for changed files
|
|
69
|
+
- **commit-msg** - Validates commit messages follow Conventional Commits v1.0.0
|
|
70
|
+
- **pre-push** - Runs comprehensive validation (typecheck, lint, tests, security checks)
|
|
71
|
+
|
|
72
|
+
### Next Steps
|
|
73
|
+
|
|
74
|
+
1. **Start Development**
|
|
75
|
+
\`\`\`bash
|
|
76
|
+
pnpm install
|
|
77
|
+
pnpm dev
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
2. **Add Routes**
|
|
81
|
+
- Define routes in \`src/index.ts\` or separate route files
|
|
82
|
+
- Use Fastify's plugin system for modular routes
|
|
83
|
+
- Add JSON schema validation for requests/responses
|
|
84
|
+
|
|
85
|
+
3. **Add Middleware**
|
|
86
|
+
- Use Fastify hooks (onRequest, preHandler, etc.)
|
|
87
|
+
- Add authentication/authorization
|
|
88
|
+
- Add logging and error handling
|
|
89
|
+
|
|
90
|
+
4. **Use BOSS**
|
|
91
|
+
- Run \`./start-boss.sh\` to start BOSS orchestration
|
|
92
|
+
- BOSS will help you build features following the Spec-Kit workflow
|
|
93
|
+
|
|
94
|
+
### Documentation
|
|
95
|
+
|
|
96
|
+
- [Fastify Documentation](https://www.fastify.io/docs/latest/)
|
|
97
|
+
- [TypeScript Documentation](https://www.typescriptlang.org/docs)
|
|
98
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Template Documentation: Blank
|
|
2
|
+
|
|
3
|
+
This project was bootstrapped using the **Blank** template, which provides a minimal TypeScript setup with essential tooling.
|
|
4
|
+
|
|
5
|
+
## What Was Included
|
|
6
|
+
|
|
7
|
+
### Core Setup
|
|
8
|
+
- **TypeScript** - Type-safe JavaScript with modern ES2022 features
|
|
9
|
+
- **Vitest** - Fast unit testing framework with coverage support
|
|
10
|
+
- **ESLint** - Code linting with TypeScript support (ESLint 9 flat config)
|
|
11
|
+
- **Prettier** - Code formatting for consistent style
|
|
12
|
+
- **tsx** - TypeScript execution for development
|
|
13
|
+
|
|
14
|
+
### Project Structure
|
|
15
|
+
|
|
16
|
+
\`\`\`
|
|
17
|
+
${config.name}/
|
|
18
|
+
├── src/ # Source code
|
|
19
|
+
│ └── index.ts # Entry point
|
|
20
|
+
├── tests/ # Test files
|
|
21
|
+
│ └── index.test.ts # Example test
|
|
22
|
+
├── docs/ # Documentation
|
|
23
|
+
├── .boss/ # BOSS configuration
|
|
24
|
+
├── .specify/ # Spec-Kit structure
|
|
25
|
+
├── .container-use/ # Container-use config
|
|
26
|
+
├── .claude/ # Claude Code rules
|
|
27
|
+
├── .github/ # GitHub workflows
|
|
28
|
+
├── .husky/ # Git hooks
|
|
29
|
+
├── scripts/ # Utility scripts
|
|
30
|
+
├── package.json # Dependencies and scripts
|
|
31
|
+
├── tsconfig.json # TypeScript configuration
|
|
32
|
+
├── vitest.config.ts # Test configuration
|
|
33
|
+
├── eslint.config.js # ESLint configuration (ESLint 9)
|
|
34
|
+
├── .prettierrc.json # Prettier configuration
|
|
35
|
+
└── docker-compose.yml # Local infrastructure
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
### Available Scripts
|
|
39
|
+
|
|
40
|
+
- \`pnpm typecheck\` - Type check without emitting files
|
|
41
|
+
- \`pnpm lint\` - Lint code with ESLint
|
|
42
|
+
- \`pnpm lint:fix\` - Auto-fix ESLint issues
|
|
43
|
+
- \`pnpm format\` - Format code with Prettier
|
|
44
|
+
- \`pnpm test\` - Run tests in watch mode
|
|
45
|
+
- \`pnpm test:unit\` - Run unit tests (excludes e2e/integration)
|
|
46
|
+
- \`pnpm test:coverage\` - Run tests with coverage
|
|
47
|
+
- \`pnpm test:gates\` - Run all quality gates
|
|
48
|
+
|
|
49
|
+
### Quality Preset: ${config.quality}
|
|
50
|
+
|
|
51
|
+
This project uses the **${config.quality}** quality preset, which defines:
|
|
52
|
+
- Code coverage thresholds
|
|
53
|
+
- Quality gate requirements
|
|
54
|
+
- Testing requirements
|
|
55
|
+
- Linting and type checking rules
|
|
56
|
+
|
|
57
|
+
### Git Hooks
|
|
58
|
+
|
|
59
|
+
The following git hooks are configured:
|
|
60
|
+
|
|
61
|
+
- **pre-commit** - Runs lint-staged (ESLint + Prettier) and tests for changed files
|
|
62
|
+
- **commit-msg** - Validates commit messages follow Conventional Commits v1.0.0
|
|
63
|
+
- **pre-push** - Runs comprehensive validation (typecheck, lint, tests, security checks)
|
|
64
|
+
|
|
65
|
+
### Next Steps
|
|
66
|
+
|
|
67
|
+
1. **Start Development**
|
|
68
|
+
\`\`\`bash
|
|
69
|
+
pnpm install
|
|
70
|
+
pnpm test
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
2. **Add Your Code**
|
|
74
|
+
- Edit \`src/index.ts\` to add your application logic
|
|
75
|
+
- Add tests in \`tests/\` directory
|
|
76
|
+
- Follow the TDD Constitution in \`.specify/memory/constitution.md\`
|
|
77
|
+
|
|
78
|
+
3. **Use BOSS**
|
|
79
|
+
- Run \`./start-boss.sh\` to start BOSS orchestration
|
|
80
|
+
- BOSS will help you build features following the Spec-Kit workflow
|
|
81
|
+
|
|
82
|
+
### Customization
|
|
83
|
+
|
|
84
|
+
This is a blank template - you have full control to:
|
|
85
|
+
- Add your preferred framework or library
|
|
86
|
+
- Configure additional tooling
|
|
87
|
+
- Set up your own project structure
|
|
88
|
+
- Customize BOSS worker configurations
|
|
89
|
+
|
|
90
|
+
The template provides a solid foundation with modern tooling, but doesn't impose any specific framework choices.
|
|
91
|
+
|