create-ai-project 1.16.2 โ†’ 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +4 -3
  2. package/.claude/agents-en/code-reviewer.md +2 -2
  3. package/.claude/agents-en/code-verifier.md +2 -2
  4. package/.claude/agents-en/design-sync.md +2 -2
  5. package/.claude/agents-en/document-reviewer.md +4 -4
  6. package/.claude/agents-en/integration-test-reviewer.md +2 -2
  7. package/.claude/agents-en/investigator.md +2 -2
  8. package/.claude/agents-en/prd-creator.md +4 -2
  9. package/.claude/agents-en/quality-fixer-frontend.md +7 -5
  10. package/.claude/agents-en/quality-fixer.md +3 -3
  11. package/.claude/agents-en/requirement-analyzer.md +2 -2
  12. package/.claude/agents-en/scope-discoverer.md +2 -2
  13. package/.claude/agents-en/skill-creator.md +2 -2
  14. package/.claude/agents-en/skill-reviewer.md +2 -2
  15. package/.claude/agents-en/solver.md +2 -2
  16. package/.claude/agents-en/task-decomposer.md +2 -2
  17. package/.claude/agents-en/task-executor-frontend.md +3 -3
  18. package/.claude/agents-en/task-executor.md +2 -2
  19. package/.claude/agents-en/technical-designer-frontend.md +17 -6
  20. package/.claude/agents-en/technical-designer.md +2 -2
  21. package/.claude/agents-en/ui-spec-designer.md +115 -0
  22. package/.claude/agents-en/verifier.md +2 -2
  23. package/.claude/agents-en/work-planner.md +2 -2
  24. package/.claude/agents-ja/acceptance-test-generator.md +4 -3
  25. package/.claude/agents-ja/code-reviewer.md +2 -2
  26. package/.claude/agents-ja/code-verifier.md +2 -2
  27. package/.claude/agents-ja/design-sync.md +2 -2
  28. package/.claude/agents-ja/document-reviewer.md +4 -4
  29. package/.claude/agents-ja/integration-test-reviewer.md +2 -2
  30. package/.claude/agents-ja/investigator.md +2 -2
  31. package/.claude/agents-ja/prd-creator.md +4 -2
  32. package/.claude/agents-ja/quality-fixer-frontend.md +7 -5
  33. package/.claude/agents-ja/quality-fixer.md +3 -3
  34. package/.claude/agents-ja/requirement-analyzer.md +2 -2
  35. package/.claude/agents-ja/scope-discoverer.md +2 -2
  36. package/.claude/agents-ja/skill-creator.md +2 -2
  37. package/.claude/agents-ja/skill-reviewer.md +2 -2
  38. package/.claude/agents-ja/solver.md +2 -2
  39. package/.claude/agents-ja/task-decomposer.md +2 -2
  40. package/.claude/agents-ja/task-executor-frontend.md +3 -3
  41. package/.claude/agents-ja/task-executor.md +2 -2
  42. package/.claude/agents-ja/technical-designer-frontend.md +17 -6
  43. package/.claude/agents-ja/technical-designer.md +2 -2
  44. package/.claude/agents-ja/ui-spec-designer.md +115 -0
  45. package/.claude/agents-ja/verifier.md +2 -2
  46. package/.claude/agents-ja/work-planner.md +2 -2
  47. package/.claude/commands-en/add-integration-tests.md +1 -1
  48. package/.claude/commands-en/build.md +55 -19
  49. package/.claude/commands-en/create-skill.md +1 -1
  50. package/.claude/commands-en/design.md +1 -1
  51. package/.claude/commands-en/diagnose.md +2 -2
  52. package/.claude/commands-en/front-build.md +40 -20
  53. package/.claude/commands-en/front-design.md +25 -8
  54. package/.claude/commands-en/front-plan.md +17 -9
  55. package/.claude/commands-en/front-review.md +2 -2
  56. package/.claude/commands-en/implement.md +15 -10
  57. package/.claude/commands-en/project-inject.md +1 -1
  58. package/.claude/commands-en/refine-skill.md +1 -1
  59. package/.claude/commands-en/reverse-engineer.md +3 -3
  60. package/.claude/commands-en/review.md +2 -2
  61. package/.claude/commands-en/sync-skills.md +1 -1
  62. package/.claude/commands-en/update-doc.md +2 -2
  63. package/.claude/commands-ja/add-integration-tests.md +1 -1
  64. package/.claude/commands-ja/build.md +56 -18
  65. package/.claude/commands-ja/create-skill.md +1 -1
  66. package/.claude/commands-ja/design.md +1 -1
  67. package/.claude/commands-ja/diagnose.md +2 -2
  68. package/.claude/commands-ja/front-build.md +41 -21
  69. package/.claude/commands-ja/front-design.md +26 -9
  70. package/.claude/commands-ja/front-plan.md +15 -7
  71. package/.claude/commands-ja/front-review.md +2 -2
  72. package/.claude/commands-ja/implement.md +15 -10
  73. package/.claude/commands-ja/project-inject.md +1 -1
  74. package/.claude/commands-ja/refine-skill.md +1 -1
  75. package/.claude/commands-ja/reverse-engineer.md +3 -3
  76. package/.claude/commands-ja/review.md +2 -2
  77. package/.claude/commands-ja/sync-skills.md +1 -1
  78. package/.claude/commands-ja/update-doc.md +2 -2
  79. package/.claude/skills-en/documentation-criteria/SKILL.md +37 -1
  80. package/.claude/skills-en/documentation-criteria/references/design-template.md +24 -0
  81. package/.claude/skills-en/documentation-criteria/references/prd-template.md +10 -0
  82. package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +145 -0
  83. package/.claude/skills-en/{frontend/technical-spec โ†’ frontend-technical-spec}/SKILL.md +5 -5
  84. package/.claude/skills-en/{frontend/typescript-rules โ†’ frontend-typescript-rules}/SKILL.md +1 -1
  85. package/.claude/skills-en/{frontend/typescript-testing โ†’ frontend-typescript-testing}/SKILL.md +9 -2
  86. package/.claude/skills-en/frontend-typescript-testing/references/e2e.md +185 -0
  87. package/.claude/skills-en/integration-e2e-testing/SKILL.md +4 -0
  88. package/.claude/skills-en/integration-e2e-testing/references/e2e-design.md +86 -0
  89. package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +44 -22
  90. package/.claude/skills-en/task-analyzer/references/skills-index.yaml +15 -11
  91. package/.claude/skills-en/technical-spec/SKILL.md +5 -4
  92. package/.claude/skills-ja/documentation-criteria/SKILL.md +37 -1
  93. package/.claude/skills-ja/documentation-criteria/references/design-template.md +24 -0
  94. package/.claude/skills-ja/documentation-criteria/references/prd-template.md +10 -0
  95. package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +145 -0
  96. package/.claude/skills-ja/{frontend/technical-spec โ†’ frontend-technical-spec}/SKILL.md +5 -5
  97. package/.claude/skills-ja/{frontend/typescript-rules โ†’ frontend-typescript-rules}/SKILL.md +1 -1
  98. package/.claude/skills-ja/{frontend/typescript-testing โ†’ frontend-typescript-testing}/SKILL.md +2 -2
  99. package/.claude/skills-ja/frontend-typescript-testing/references/e2e.md +185 -0
  100. package/.claude/skills-ja/integration-e2e-testing/SKILL.md +4 -0
  101. package/.claude/skills-ja/integration-e2e-testing/references/e2e-design.md +86 -0
  102. package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +44 -22
  103. package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +15 -11
  104. package/.claude/skills-ja/technical-spec/SKILL.md +5 -4
  105. package/CHANGELOG.md +67 -0
  106. package/CLAUDE.en.md +2 -2
  107. package/CLAUDE.ja.md +2 -2
  108. package/CLAUDE.md +68 -86
  109. package/README.ja.md +10 -7
  110. package/README.md +10 -7
  111. package/bin/create-project.js +76 -75
  112. package/biome.json +5 -8
  113. package/package.json +11 -24
  114. package/scripts/post-setup.js +54 -57
  115. package/scripts/set-language.js +107 -112
  116. package/scripts/setup-project.js +97 -92
  117. package/scripts/show-coverage.js +36 -22
  118. package/scripts/update-project.js +205 -201
  119. package/scripts/utils.js +19 -21
  120. package/tsconfig.json +3 -3
  121. package/vitest.config.mjs +2 -2
  122. package/.tsprunerc +0 -11
  123. package/scripts/check-unused-exports.js +0 -69
package/README.md CHANGED
@@ -139,10 +139,11 @@ This boilerplate provides the principles used in agentic implementation workflow
139
139
  | `technical-spec` | Architecture, environment, build commands |
140
140
  | `implementation-approach` | Strategy patterns, task decomposition |
141
141
  | `integration-e2e-testing` | Integration/E2E test design, ROI-based selection |
142
+ | `frontend-typescript-rules` | React component design, Props-driven patterns |
143
+ | `frontend-typescript-testing` | React Testing Library, MSW, Playwright E2E |
144
+ | `frontend-technical-spec` | React architecture, environment, data flow |
142
145
  | `project-context` | Project-specific prerequisites for AI accuracy (set via `/project-inject`) |
143
146
 
144
- **Frontend-specific skills** are also available under `frontend/` (e.g., `frontend/typescript-rules`).
145
-
146
147
  ๐Ÿ‘‰ [Learn how Skills work (Claude Code docs)](https://code.claude.com/docs/en/skills)
147
148
 
148
149
  ## ๐ŸŽฏ Built with This Boilerplate
@@ -185,7 +186,7 @@ Essential commands for Claude Code:
185
186
  | `/diagnose` | Root cause analysis workflow | Debugging, troubleshooting |
186
187
  | `/reverse-engineer` | Generate PRD/Design Docs from code | Legacy system documentation |
187
188
 
188
- Frontend equivalents (`/front-design`, `/front-build`, `/front-review`, `/front-plan`) and utility commands (`/add-integration-tests`, `/update-doc`) are also available.
189
+ Frontend equivalents (`/front-design` for UI Spec + Design Doc, `/front-build`, `/front-review`, `/front-plan`) and utility commands (`/add-integration-tests`, `/update-doc`) are also available.
189
190
 
190
191
  [Full command reference โ†’](docs/guides/en/use-cases.md)
191
192
 
@@ -228,7 +229,7 @@ graph TB
228
229
  ### How It Works
229
230
 
230
231
  1. **Requirement Analysis**: `/implement` command analyzes task scale
231
- 2. **Document Generation**: Creates necessary docs (PRD, Design Doc, Work Plan)
232
+ 2. **Document Generation**: Creates necessary docs (PRD, UI Spec, Design Doc, Work Plan)
232
233
  3. **Task Execution**: Specialized agents handle each phase
233
234
  4. **Quality Assurance**: Automatic testing, type checking, and fixes
234
235
  5. **Commit & Continue**: Clean commits for each completed task
@@ -247,7 +248,9 @@ ai-coding-project-boilerplate/
247
248
  โ”‚ โ”œโ”€โ”€ documentation-criteria/
248
249
  โ”‚ โ”œโ”€โ”€ technical-spec/
249
250
  โ”‚ โ”œโ”€โ”€ project-context/
250
- โ”‚ โ””โ”€โ”€ frontend/ # Frontend-specific skills
251
+ โ”‚ โ”œโ”€โ”€ frontend-typescript-rules/
252
+ โ”‚ โ”œโ”€โ”€ frontend-typescript-testing/
253
+ โ”‚ โ””โ”€โ”€ frontend-technical-spec/
251
254
  โ”œโ”€โ”€ docs/
252
255
  โ”‚ โ”œโ”€โ”€ guides/ # User documentation
253
256
  โ”‚ โ”œโ”€โ”€ adr/ # Architecture decisions
@@ -286,7 +289,7 @@ When you change these, Claude Code will recognize them and execute with the appr
286
289
 
287
290
  The above are representative examples. The following scripts are referenced in skills and sub-agent definitions. Update them as needed:
288
291
 
289
- `build`, `build:frontend`, `dev`, `preview`, `type-check`, `test`, `test:coverage`, `test:coverage:fresh`, `test:safe`, `cleanup:processes`, `check`, `check:fix`, `check:code`, `check:unused`, `check:deps`, `check:all`, `format`, `format:check`, `lint`, `lint:fix`
292
+ `build`, `dev`, `type-check`, `test`, `test:coverage`, `test:coverage:fresh`, `test:safe`, `cleanup:processes`, `check`, `check:fix`, `check:code`, `check:unused`, `check:deps`, `check:all`, `format`, `format:check`, `lint`, `lint:fix`
290
293
 
291
294
  ## ๐ŸŒ Multilingual Support
292
295
 
@@ -328,7 +331,7 @@ A: Through context engineering. Each sub-agent runs in its own context window fo
328
331
 
329
332
  ## ๐Ÿค– Sub Agents
330
333
 
331
- 20+ specialized sub-agents covering the full development lifecycle: requirement analysis, design, planning, implementation, quality assurance, code review, debugging, and reverse engineering. Each agent runs in its own context window for focused execution.
334
+ 20+ specialized sub-agents covering the full development lifecycle: requirement analysis, UI specification, design, planning, implementation, quality assurance, code review, debugging, and reverse engineering. Each agent runs in its own context window for focused execution.
332
335
 
333
336
  [Full agent list โ†’](.claude/agents-en/)
334
337
 
@@ -1,34 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const { spawn } = require('child_process');
4
- const path = require('path');
5
- const fs = require('fs');
3
+ import { spawn } from 'node:child_process'
4
+ import fs from 'node:fs'
5
+ import path from 'node:path'
6
+ import { fileURLToPath } from 'node:url'
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url))
6
9
 
7
10
  // Parse command line arguments
8
- const args = process.argv.slice(2);
11
+ const args = process.argv.slice(2)
9
12
 
10
13
  // Route to update subcommand
11
14
  if (args[0] === 'update') {
12
- const updateScript = path.join(__dirname, '..', 'scripts', 'update-project.js');
13
- const updateArgs = args.slice(1);
15
+ const updateScript = path.join(__dirname, '..', 'scripts', 'update-project.js')
16
+ const updateArgs = args.slice(1)
14
17
  const updateProcess = spawn('node', [updateScript, ...updateArgs], {
15
18
  stdio: 'inherit',
16
- cwd: process.cwd()
17
- });
19
+ cwd: process.cwd(),
20
+ })
18
21
 
19
22
  updateProcess.on('close', (code) => {
20
- process.exit(code || 0);
21
- });
23
+ process.exit(code || 0)
24
+ })
22
25
 
23
26
  updateProcess.on('error', (err) => {
24
- console.error(`\nโŒ Failed to execute update script: ${err.message}`);
25
- process.exit(1);
26
- });
27
-
28
- return;
29
- }
30
-
31
- if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
27
+ console.error(`\nโŒ Failed to execute update script: ${err.message}`)
28
+ process.exit(1)
29
+ })
30
+ } else if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
32
31
  console.log(`
33
32
  ๐Ÿš€ AI Coding Project Boilerplate
34
33
 
@@ -55,65 +54,67 @@ Examples:
55
54
  npx create-ai-project update
56
55
  npx create-ai-project update --dry-run
57
56
  npx create-ai-project update --ignore skills project-context
58
- `);
59
- process.exit(0);
60
- }
61
-
62
- const projectName = args[0];
63
- const options = args.slice(1);
64
-
65
- // Parse language option
66
- let language = 'en'; // default
67
- for (const opt of options) {
68
- if (opt.startsWith('--lang=')) {
69
- language = opt.split('=')[1];
70
- if (!['ja', 'en'].includes(language)) {
71
- console.error(`โŒ Invalid language: ${language}. Supported languages are: ja, en`);
72
- process.exit(1);
57
+ `)
58
+ process.exit(0)
59
+ } else {
60
+ const projectName = args[0]
61
+ const options = args.slice(1)
62
+
63
+ // Parse language option
64
+ let language = 'en' // default
65
+ for (const opt of options) {
66
+ if (opt.startsWith('--lang=')) {
67
+ language = opt.split('=')[1]
68
+ if (!['ja', 'en'].includes(language)) {
69
+ console.error(`โŒ Invalid language: ${language}. Supported languages are: ja, en`)
70
+ process.exit(1)
71
+ }
73
72
  }
74
73
  }
75
- }
76
-
77
- // Validate project name
78
- const validNamePattern = /^[a-z0-9-._]+$/;
79
- if (!validNamePattern.test(projectName)) {
80
- console.error(`โŒ Invalid project name: ${projectName}`);
81
- console.error(' Project name must contain only lowercase letters, numbers, hyphens, dots, and underscores.');
82
- process.exit(1);
83
- }
84
74
 
85
- // Check if directory already exists
86
- const projectPath = path.resolve(process.cwd(), projectName);
87
- if (fs.existsSync(projectPath)) {
88
- console.error(`โŒ Directory already exists: ${projectPath}`);
89
- process.exit(1);
90
- }
75
+ // Validate project name
76
+ const validNamePattern = /^[a-z0-9-._]+$/
77
+ if (!validNamePattern.test(projectName)) {
78
+ console.error(`โŒ Invalid project name: ${projectName}`)
79
+ console.error(
80
+ ' Project name must contain only lowercase letters, numbers, hyphens, dots, and underscores.'
81
+ )
82
+ process.exit(1)
83
+ }
91
84
 
92
- console.log(`\n๐ŸŽ‰ Creating new AI coding project: ${projectName}`);
93
- console.log(`๐Ÿ“ Location: ${projectPath}`);
94
- console.log(`๐ŸŒ Language: ${language}\n`);
95
-
96
- // Run setup script
97
- const setupScript = path.join(__dirname, '..', 'scripts', 'setup-project.js');
98
- const setupProcess = spawn('node', [setupScript, projectName, language], {
99
- stdio: 'inherit',
100
- cwd: process.cwd() // ็พๅœจใฎไฝœๆฅญใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ไฝฟ็”จ
101
- });
102
-
103
- setupProcess.on('close', (code) => {
104
- if (code !== 0) {
105
- console.error(`\nโŒ Setup failed with exit code ${code}`);
106
- process.exit(code);
85
+ // Check if directory already exists
86
+ const projectPath = path.resolve(process.cwd(), projectName)
87
+ if (fs.existsSync(projectPath)) {
88
+ console.error(`โŒ Directory already exists: ${projectPath}`)
89
+ process.exit(1)
107
90
  }
108
-
109
- console.log(`\nโœ… Project created successfully!`);
110
- console.log(`\n๐Ÿ“– Next steps:`);
111
- console.log(` cd ${projectName}`);
112
- console.log(` npm install`);
113
- console.log(` npm run dev\n`);
114
- });
115
-
116
- setupProcess.on('error', (err) => {
117
- console.error(`\nโŒ Failed to execute setup script: ${err.message}`);
118
- process.exit(1);
119
- });
91
+
92
+ console.log(`\n๐ŸŽ‰ Creating new AI coding project: ${projectName}`)
93
+ console.log(`๐Ÿ“ Location: ${projectPath}`)
94
+ console.log(`๐ŸŒ Language: ${language}\n`)
95
+
96
+ // Run setup script
97
+ const setupScript = path.join(__dirname, '..', 'scripts', 'setup-project.js')
98
+ const setupProcess = spawn('node', [setupScript, projectName, language], {
99
+ stdio: 'inherit',
100
+ cwd: process.cwd(),
101
+ })
102
+
103
+ setupProcess.on('close', (code) => {
104
+ if (code !== 0) {
105
+ console.error(`\nโŒ Setup failed with exit code ${code}`)
106
+ process.exit(code)
107
+ }
108
+
109
+ console.log(`\nโœ… Project created successfully!`)
110
+ console.log(`\n๐Ÿ“– Next steps:`)
111
+ console.log(` cd ${projectName}`)
112
+ console.log(` npm install`)
113
+ console.log(` npm run dev\n`)
114
+ })
115
+
116
+ setupProcess.on('error', (err) => {
117
+ console.error(`\nโŒ Failed to execute setup script: ${err.message}`)
118
+ process.exit(1)
119
+ })
120
+ }
package/biome.json CHANGED
@@ -1,8 +1,6 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "organizeImports": {
4
- "enabled": true
5
- },
2
+ "$schema": "https://biomejs.dev/schemas/2.4.6/schema.json",
3
+ "assist": { "actions": { "source": { "organizeImports": "on" } } },
6
4
  "formatter": {
7
5
  "enabled": true,
8
6
  "formatWithErrors": false,
@@ -27,7 +25,7 @@
27
25
  },
28
26
  "overrides": [
29
27
  {
30
- "include": ["**/__tests__/**/*.ts", "**/*.test.ts", "**/*.spec.ts"],
28
+ "includes": ["**/__tests__/**/*.ts", "**/*.test.ts", "**/*.spec.ts"],
31
29
  "linter": {
32
30
  "rules": {
33
31
  "suspicious": {
@@ -45,7 +43,6 @@
45
43
  }
46
44
  },
47
45
  "files": {
48
- "include": ["src/**/*.ts", "src/**/*.js"],
49
- "ignore": ["node_modules/**", "dist/**"]
46
+ "includes": ["**/src/**/*.ts", "**/src/**/*.js", "!**/node_modules/**", "!**/dist/**"]
50
47
  }
51
- }
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-ai-project",
3
- "version": "1.16.2",
3
+ "version": "1.17.0",
4
4
  "packageManager": "npm@10.8.2",
5
5
  "description": "TypeScript boilerplate with skills and sub-agents for Claude Code. Prevents context exhaustion through role-based task splitting.",
6
6
  "keywords": [
@@ -22,6 +22,7 @@
22
22
  ],
23
23
  "author": "Shinsuke Kagawa",
24
24
  "license": "MIT",
25
+ "type": "module",
25
26
  "repository": {
26
27
  "type": "git",
27
28
  "url": "https://github.com/shinpr/ai-coding-project-boilerplate.git"
@@ -32,11 +33,8 @@
32
33
  "scripts": {
33
34
  "build": "tsc && tsc-alias",
34
35
  "build:backend": "tsc && tsc-alias",
35
- "build:frontend": "vite build",
36
36
  "dev": "tsx src/index.ts",
37
- "dev:frontend": "vite",
38
37
  "watch": "tsx watch src/index.ts",
39
- "preview": "vite preview",
40
38
  "type-check": "tsc --noEmit",
41
39
  "test": "vitest run",
42
40
  "test:ui": "vitest --ui",
@@ -51,8 +49,7 @@
51
49
  "lint:fix": "biome lint --write src",
52
50
  "check": "biome check src",
53
51
  "check:fix": "biome check --write src",
54
- "check:unused": "node scripts/check-unused-exports.js",
55
- "check:unused:all": "ts-prune --project tsconfig.json --ignore 'src/index.ts|__tests__|test|vitest'",
52
+ "check:unused": "knip --include exports",
56
53
  "check:deps": "madge --circular --extensions ts src",
57
54
  "check:deps:graph": "madge --extensions ts --image graph.svg src",
58
55
  "check:code": "npm run check && npm run check:unused && npm run check:deps && npm run build",
@@ -66,30 +63,20 @@
66
63
  "prepare": "husky"
67
64
  },
68
65
  "devDependencies": {
69
- "@biomejs/biome": "^1.9.4",
70
- "@testing-library/jest-dom": "^6.6.3",
71
- "@testing-library/react": "^16.0.0",
72
- "@types/node": "^20.0.0",
73
- "@types/react": "^18.0.0",
74
- "@types/react-dom": "^18.0.0",
75
- "@vitejs/plugin-react": "^4.0.0",
76
- "@vitest/coverage-v8": "^3.2.4",
77
- "@vitest/ui": "^3.2.4",
78
- "c8": "^10.1.3",
79
- "fast-check": "^4.3.0",
66
+ "@biomejs/biome": "^2.4.6",
67
+ "@types/node": "^22.0.0",
68
+ "@vitest/coverage-v8": "^4.0.0",
69
+ "@vitest/ui": "^4.0.0",
70
+ "fast-check": "^3.23.2",
80
71
  "husky": "^9.1.7",
81
- "jsdom": "^25.0.0",
72
+ "knip": "^5.0.0",
82
73
  "lint-staged": "^16.1.0",
83
74
  "madge": "^8.0.0",
84
- "react": "^18.0.0",
85
- "react-dom": "^18.0.0",
86
- "ts-node": "^10.9.1",
87
- "ts-prune": "^0.10.3",
88
75
  "tsc-alias": "^1.8.7",
89
76
  "tsx": "^4.19.4",
90
77
  "typescript": "^5.0.0",
91
- "vite": "^5.0.0",
92
- "vitest": "^3.2.4"
78
+ "vite": "^6.0.0",
79
+ "vitest": "^4.0.0"
93
80
  },
94
81
  "engines": {
95
82
  "node": ">=20"
@@ -1,25 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const fs = require('fs');
4
- const path = require('path');
5
- const { execSync } = require('child_process');
3
+ import { execSync } from 'node:child_process'
4
+ import fs from 'node:fs'
5
+ import path from 'node:path'
6
6
 
7
7
  /**
8
8
  * Initialize git repository
9
9
  */
10
10
  function initGit() {
11
11
  try {
12
- console.log('๐Ÿ”ง Initializing git repository...');
13
- execSync('git init', { stdio: 'inherit' });
14
-
15
- console.log('๐Ÿ“ Creating initial commit...');
16
- execSync('git add -A', { stdio: 'inherit' });
17
- execSync('git commit -m "Initial commit from AI Coding Project Boilerplate"', { stdio: 'inherit' });
18
-
19
- return true;
20
- } catch (error) {
21
- console.warn('โš ๏ธ Git initialization skipped (git might not be installed)');
22
- return false;
12
+ console.log('๐Ÿ”ง Initializing git repository...')
13
+ execSync('git init', { stdio: 'inherit' })
14
+
15
+ console.log('๐Ÿ“ Creating initial commit...')
16
+ execSync('git add -A', { stdio: 'inherit' })
17
+ execSync('git commit -m "Initial commit from AI Coding Project Boilerplate"', {
18
+ stdio: 'inherit',
19
+ })
20
+
21
+ return true
22
+ } catch (_error) {
23
+ console.warn('โš ๏ธ Git initialization skipped (git might not be installed)')
24
+ return false
23
25
  }
24
26
  }
25
27
 
@@ -27,35 +29,32 @@ function initGit() {
27
29
  * Clean up files that shouldn't be in the user's project
28
30
  */
29
31
  function cleanupFiles() {
30
- console.log('๐Ÿงน Cleaning up setup files...');
31
-
32
+ console.log('๐Ÿงน Cleaning up setup files...')
33
+
32
34
  const filesToRemove = [
33
35
  'bin/create-project.js',
34
36
  'templates/.gitignore.template',
35
37
  'scripts/setup-project.js',
36
- 'scripts/post-setup.js'
37
- ];
38
-
39
- const dirsToRemove = [
40
- 'bin',
41
- 'templates'
42
- ];
43
-
38
+ 'scripts/post-setup.js',
39
+ ]
40
+
41
+ const dirsToRemove = ['bin', 'templates']
42
+
44
43
  // Remove files
45
44
  for (const file of filesToRemove) {
46
- const filePath = path.join(process.cwd(), file);
45
+ const filePath = path.join(process.cwd(), file)
47
46
  if (fs.existsSync(filePath)) {
48
- fs.unlinkSync(filePath);
47
+ fs.unlinkSync(filePath)
49
48
  }
50
49
  }
51
-
50
+
52
51
  // Remove empty directories
53
52
  for (const dir of dirsToRemove) {
54
- const dirPath = path.join(process.cwd(), dir);
53
+ const dirPath = path.join(process.cwd(), dir)
55
54
  if (fs.existsSync(dirPath)) {
56
55
  try {
57
- fs.rmdirSync(dirPath);
58
- } catch (e) {
56
+ fs.rmdirSync(dirPath)
57
+ } catch (_e) {
59
58
  // Directory might not be empty, ignore
60
59
  }
61
60
  }
@@ -66,23 +65,23 @@ function cleanupFiles() {
66
65
  * Show next steps to the user
67
66
  */
68
67
  function showNextSteps() {
69
- const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
70
- const projectName = packageJson.name;
71
-
72
- console.log('\n๐ŸŽ‰ Project setup completed successfully!\n');
73
- console.log('๐Ÿ“‹ Next steps:\n');
74
- console.log(` cd ${projectName}`);
75
- console.log(' npm install');
76
- console.log(' npm run dev\n');
77
- console.log('๐ŸŒ Language switching:\n');
78
- console.log(' npm run lang:ja # Switch to Japanese');
79
- console.log(' npm run lang:en # Switch to English\n');
80
- console.log('๐Ÿ“– Available commands:\n');
81
- console.log(' npm run dev # Start development');
82
- console.log(' npm run build # Build for production');
83
- console.log(' npm run test # Run tests');
84
- console.log(' npm run check:all # Run all quality checks\n');
85
- console.log('Happy coding! ๐Ÿš€\n');
68
+ const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'))
69
+ const projectName = packageJson.name
70
+
71
+ console.log('\n๐ŸŽ‰ Project setup completed successfully!\n')
72
+ console.log('๐Ÿ“‹ Next steps:\n')
73
+ console.log(` cd ${projectName}`)
74
+ console.log(' npm install')
75
+ console.log(' npm run dev\n')
76
+ console.log('๐ŸŒ Language switching:\n')
77
+ console.log(' npm run lang:ja # Switch to Japanese')
78
+ console.log(' npm run lang:en # Switch to English\n')
79
+ console.log('๐Ÿ“– Available commands:\n')
80
+ console.log(' npm run dev # Start development')
81
+ console.log(' npm run build # Build for production')
82
+ console.log(' npm run test # Run tests')
83
+ console.log(' npm run check:all # Run all quality checks\n')
84
+ console.log('Happy coding! ๐Ÿš€\n')
86
85
  }
87
86
 
88
87
  /**
@@ -91,20 +90,18 @@ function showNextSteps() {
91
90
  function main() {
92
91
  try {
93
92
  // Initialize git repository
94
- initGit();
95
-
93
+ initGit()
94
+
96
95
  // Clean up setup-specific files
97
- cleanupFiles();
98
-
96
+ cleanupFiles()
97
+
99
98
  // Show next steps
100
- showNextSteps();
99
+ showNextSteps()
101
100
  } catch (error) {
102
- console.error(`โŒ Post-setup failed: ${error.message}`);
103
- process.exit(1);
101
+ console.error(`โŒ Post-setup failed: ${error.message}`)
102
+ process.exit(1)
104
103
  }
105
104
  }
106
105
 
107
106
  // Run post-setup
108
- if (require.main === module) {
109
- main();
110
- }
107
+ main()