@sk8metal/michi-cli 0.0.7 → 0.0.9

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 (175) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +205 -11
  3. package/dist/scripts/__tests__/create-project.test.d.ts +2 -0
  4. package/dist/scripts/__tests__/create-project.test.d.ts.map +1 -0
  5. package/dist/scripts/__tests__/create-project.test.js +247 -0
  6. package/dist/scripts/__tests__/create-project.test.js.map +1 -0
  7. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts +2 -0
  8. package/dist/scripts/__tests__/multi-project-estimate.test.d.ts.map +1 -0
  9. package/dist/scripts/__tests__/multi-project-estimate.test.js +119 -0
  10. package/dist/scripts/__tests__/multi-project-estimate.test.js.map +1 -0
  11. package/dist/scripts/__tests__/setup-existing-project.test.d.ts +2 -0
  12. package/dist/scripts/__tests__/setup-existing-project.test.d.ts.map +1 -0
  13. package/dist/scripts/__tests__/setup-existing-project.test.js +129 -0
  14. package/dist/scripts/__tests__/setup-existing-project.test.js.map +1 -0
  15. package/dist/scripts/__tests__/setup-interactive.test.d.ts +2 -0
  16. package/dist/scripts/__tests__/setup-interactive.test.d.ts.map +1 -0
  17. package/dist/scripts/__tests__/setup-interactive.test.js +160 -0
  18. package/dist/scripts/__tests__/setup-interactive.test.js.map +1 -0
  19. package/dist/scripts/config/default-config.json +57 -0
  20. package/dist/scripts/confluence-sync.d.ts +4 -0
  21. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  22. package/dist/scripts/confluence-sync.js +12 -23
  23. package/dist/scripts/confluence-sync.js.map +1 -1
  24. package/dist/scripts/constants/__tests__/environments.test.d.ts +2 -0
  25. package/dist/scripts/constants/__tests__/environments.test.d.ts.map +1 -0
  26. package/dist/scripts/constants/__tests__/environments.test.js +91 -0
  27. package/dist/scripts/constants/__tests__/environments.test.js.map +1 -0
  28. package/dist/scripts/constants/__tests__/languages.test.d.ts +2 -0
  29. package/dist/scripts/constants/__tests__/languages.test.d.ts.map +1 -0
  30. package/dist/scripts/constants/__tests__/languages.test.js +82 -0
  31. package/dist/scripts/constants/__tests__/languages.test.js.map +1 -0
  32. package/dist/scripts/constants/environments.d.ts +33 -0
  33. package/dist/scripts/constants/environments.d.ts.map +1 -0
  34. package/dist/scripts/constants/environments.js +49 -0
  35. package/dist/scripts/constants/environments.js.map +1 -0
  36. package/dist/scripts/constants/languages.d.ts +23 -0
  37. package/dist/scripts/constants/languages.d.ts.map +1 -0
  38. package/dist/scripts/constants/languages.js +53 -0
  39. package/dist/scripts/constants/languages.js.map +1 -0
  40. package/dist/scripts/create-project.d.ts +4 -0
  41. package/dist/scripts/create-project.d.ts.map +1 -1
  42. package/dist/scripts/create-project.js +227 -137
  43. package/dist/scripts/create-project.js.map +1 -1
  44. package/dist/scripts/jira-sync.d.ts.map +1 -1
  45. package/dist/scripts/jira-sync.js +15 -0
  46. package/dist/scripts/jira-sync.js.map +1 -1
  47. package/dist/scripts/list-projects.d.ts.map +1 -1
  48. package/dist/scripts/list-projects.js +42 -15
  49. package/dist/scripts/list-projects.js.map +1 -1
  50. package/dist/scripts/multi-project-estimate.d.ts.map +1 -1
  51. package/dist/scripts/multi-project-estimate.js +56 -21
  52. package/dist/scripts/multi-project-estimate.js.map +1 -1
  53. package/dist/scripts/resource-dashboard.d.ts.map +1 -1
  54. package/dist/scripts/resource-dashboard.js +74 -17
  55. package/dist/scripts/resource-dashboard.js.map +1 -1
  56. package/dist/scripts/setup-existing-project.d.ts +3 -1
  57. package/dist/scripts/setup-existing-project.d.ts.map +1 -1
  58. package/dist/scripts/setup-existing-project.js +306 -217
  59. package/dist/scripts/setup-existing-project.js.map +1 -1
  60. package/dist/scripts/setup-interactive.d.ts +10 -0
  61. package/dist/scripts/setup-interactive.d.ts.map +1 -0
  62. package/dist/scripts/setup-interactive.js +413 -0
  63. package/dist/scripts/setup-interactive.js.map +1 -0
  64. package/dist/scripts/template/__tests__/renderer.test.d.ts +2 -0
  65. package/dist/scripts/template/__tests__/renderer.test.d.ts.map +1 -0
  66. package/dist/scripts/template/__tests__/renderer.test.js +165 -0
  67. package/dist/scripts/template/__tests__/renderer.test.js.map +1 -0
  68. package/dist/scripts/template/renderer.d.ts +70 -0
  69. package/dist/scripts/template/renderer.d.ts.map +1 -0
  70. package/dist/scripts/template/renderer.js +99 -0
  71. package/dist/scripts/template/renderer.js.map +1 -0
  72. package/dist/scripts/utils/__tests__/config-validator.test.js +5 -0
  73. package/dist/scripts/utils/__tests__/config-validator.test.js.map +1 -1
  74. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts +5 -0
  75. package/dist/scripts/utils/__tests__/spec-updater.test.d.ts.map +1 -0
  76. package/dist/scripts/utils/__tests__/spec-updater.test.js +158 -0
  77. package/dist/scripts/utils/__tests__/spec-updater.test.js.map +1 -0
  78. package/dist/scripts/utils/confluence-hierarchy.d.ts +2 -1
  79. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
  80. package/dist/scripts/utils/confluence-hierarchy.js +5 -0
  81. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  82. package/dist/scripts/utils/project-finder.d.ts +30 -0
  83. package/dist/scripts/utils/project-finder.d.ts.map +1 -0
  84. package/dist/scripts/utils/project-finder.js +147 -0
  85. package/dist/scripts/utils/project-finder.js.map +1 -0
  86. package/dist/scripts/utils/spec-updater.d.ts +72 -0
  87. package/dist/scripts/utils/spec-updater.d.ts.map +1 -0
  88. package/dist/scripts/utils/spec-updater.js +141 -0
  89. package/dist/scripts/utils/spec-updater.js.map +1 -0
  90. package/dist/scripts/utils/template-finder.d.ts +37 -0
  91. package/dist/scripts/utils/template-finder.d.ts.map +1 -0
  92. package/dist/scripts/utils/template-finder.js +63 -0
  93. package/dist/scripts/utils/template-finder.js.map +1 -0
  94. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts +5 -0
  95. package/dist/src/__tests__/integration/setup/claude-agent.test.d.ts.map +1 -0
  96. package/dist/src/__tests__/integration/setup/claude-agent.test.js +125 -0
  97. package/dist/src/__tests__/integration/setup/claude-agent.test.js.map +1 -0
  98. package/dist/src/__tests__/integration/setup/claude.test.d.ts +5 -0
  99. package/dist/src/__tests__/integration/setup/claude.test.d.ts.map +1 -0
  100. package/dist/src/__tests__/integration/setup/claude.test.js +111 -0
  101. package/dist/src/__tests__/integration/setup/claude.test.js.map +1 -0
  102. package/dist/src/__tests__/integration/setup/cursor.test.d.ts +5 -0
  103. package/dist/src/__tests__/integration/setup/cursor.test.d.ts.map +1 -0
  104. package/dist/src/__tests__/integration/setup/cursor.test.js +162 -0
  105. package/dist/src/__tests__/integration/setup/cursor.test.js.map +1 -0
  106. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts +32 -0
  107. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.d.ts.map +1 -0
  108. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js +72 -0
  109. package/dist/src/__tests__/integration/setup/helpers/fs-assertions.js.map +1 -0
  110. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts +38 -0
  111. package/dist/src/__tests__/integration/setup/helpers/test-project.d.ts.map +1 -0
  112. package/dist/src/__tests__/integration/setup/helpers/test-project.js +83 -0
  113. package/dist/src/__tests__/integration/setup/helpers/test-project.js.map +1 -0
  114. package/dist/src/__tests__/integration/setup/validation.test.d.ts +5 -0
  115. package/dist/src/__tests__/integration/setup/validation.test.d.ts.map +1 -0
  116. package/dist/src/__tests__/integration/setup/validation.test.js +318 -0
  117. package/dist/src/__tests__/integration/setup/validation.test.js.map +1 -0
  118. package/dist/src/cli.d.ts.map +1 -1
  119. package/dist/src/cli.js +20 -0
  120. package/dist/src/cli.js.map +1 -1
  121. package/dist/src/commands/setup-existing.d.ts +22 -0
  122. package/dist/src/commands/setup-existing.d.ts.map +1 -0
  123. package/dist/src/commands/setup-existing.js +408 -0
  124. package/dist/src/commands/setup-existing.js.map +1 -0
  125. package/dist/vitest.config.d.ts.map +1 -1
  126. package/dist/vitest.config.js +9 -6
  127. package/dist/vitest.config.js.map +1 -1
  128. package/docs/README.md +2 -2
  129. package/docs/contributing/development.md +37 -0
  130. package/docs/getting-started/{new-project-setup.md → new-repository-setup.md} +165 -38
  131. package/docs/getting-started/quick-start.md +57 -6
  132. package/docs/getting-started/setup.md +551 -180
  133. package/docs/guides/customization.md +4 -4
  134. package/docs/guides/multi-project.md +12 -9
  135. package/docs/reference/quick-reference.md +27 -18
  136. package/docs/testing/integration-tests.md +297 -0
  137. package/docs/testing-strategy.md +87 -0
  138. package/package.json +23 -6
  139. package/scripts/__tests__/create-project.test.ts +292 -0
  140. package/scripts/__tests__/multi-project-estimate.test.ts +145 -0
  141. package/scripts/__tests__/setup-existing-project.test.ts +147 -0
  142. package/scripts/__tests__/setup-interactive.test.ts +199 -0
  143. package/scripts/confluence-sync.ts +17 -29
  144. package/scripts/constants/__tests__/environments.test.ts +110 -0
  145. package/scripts/constants/__tests__/languages.test.ts +100 -0
  146. package/scripts/constants/environments.ts +61 -0
  147. package/scripts/constants/languages.ts +70 -0
  148. package/scripts/copy-static-assets.js +50 -0
  149. package/scripts/create-project.ts +251 -158
  150. package/scripts/jira-sync.ts +16 -1
  151. package/scripts/list-projects.ts +51 -24
  152. package/scripts/multi-project-estimate.ts +58 -22
  153. package/scripts/resource-dashboard.ts +91 -26
  154. package/scripts/setup-existing-project.ts +350 -230
  155. package/scripts/setup-existing.sh +159 -25
  156. package/scripts/setup-interactive.ts +565 -0
  157. package/scripts/template/__tests__/renderer.test.ts +207 -0
  158. package/scripts/template/renderer.ts +133 -0
  159. package/scripts/utils/__tests__/config-validator.test.ts +6 -0
  160. package/scripts/utils/__tests__/spec-updater.test.ts +220 -0
  161. package/scripts/utils/confluence-hierarchy.ts +7 -1
  162. package/scripts/utils/project-finder.ts +184 -0
  163. package/scripts/utils/spec-updater.ts +212 -0
  164. package/scripts/utils/template-finder.ts +75 -0
  165. package/templates/claude/commands/michi/confluence-sync.md +38 -0
  166. package/templates/claude/commands/michi/project-switch.md +36 -0
  167. package/templates/claude/rules/atlassian-integration.md +35 -0
  168. package/templates/claude/rules/michi-core.md +54 -0
  169. package/templates/claude-agent/README.md +25 -0
  170. package/templates/cursor/commands/michi/confluence-sync.md +76 -0
  171. package/templates/cursor/commands/michi/project-switch.md +69 -0
  172. package/templates/cursor/rules/atlassian-mcp.mdc +188 -0
  173. package/templates/cursor/rules/github-ssot.mdc +151 -0
  174. package/templates/cursor/rules/multi-project.mdc +81 -0
  175. package/scripts/setup-env.sh +0 -52
@@ -0,0 +1,408 @@
1
+ /**
2
+ * setup-existing command
3
+ * 既存プロジェクトにMichiワークフローを追加するコマンド
4
+ *
5
+ * 使い方:
6
+ * npx @sk8metal/michi-cli setup-existing --cursor --lang ja
7
+ * npm run michi:setup:cursor
8
+ */
9
+ import { cpSync, existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, chmodSync } from 'fs';
10
+ import { join, basename, dirname } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ import { execSync } from 'child_process';
13
+ import { findRepositoryRoot } from '../../scripts/utils/project-finder.js';
14
+ import { getEnvironmentConfig } from '../../scripts/constants/environments.js';
15
+ import { isSupportedLanguage } from '../../scripts/constants/languages.js';
16
+ import { createTemplateContext, renderTemplate } from '../../scripts/template/renderer.js';
17
+ import * as readline from 'readline';
18
+ // ES module で __dirname を取得
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+ /**
22
+ * プロジェクト名のバリデーション
23
+ */
24
+ function validateProjectName(name) {
25
+ const trimmed = name.trim();
26
+ // 長さチェック
27
+ if (!trimmed || trimmed.length === 0) {
28
+ throw new Error('プロジェクト名が空です');
29
+ }
30
+ if (trimmed.length > 100) {
31
+ throw new Error('プロジェクト名が長すぎます(最大100文字)');
32
+ }
33
+ // パストラバーサル対策
34
+ if (/[/\\]/.test(trimmed)) {
35
+ throw new Error('プロジェクト名にパス区切り文字(/ または \\)は使用できません');
36
+ }
37
+ // 相対パス攻撃対策
38
+ if (/^\.\.?$|^\.\.?\//.test(trimmed)) {
39
+ throw new Error('プロジェクト名に相対パス(. または ..)は使用できません');
40
+ }
41
+ // 制御文字対策
42
+ // eslint-disable-next-line no-control-regex
43
+ if (/[\x00-\x1F\x7F]/.test(trimmed)) {
44
+ throw new Error('プロジェクト名に制御文字は使用できません');
45
+ }
46
+ return trimmed;
47
+ }
48
+ /**
49
+ * JIRAキーのバリデーション
50
+ */
51
+ function validateJiraKey(key) {
52
+ const trimmed = key.trim().toUpperCase();
53
+ // JIRAキー形式: 2-10文字の大文字英字
54
+ if (!/^[A-Z]{2,10}$/.test(trimmed)) {
55
+ throw new Error('JIRAキーの形式が不正です(2-10文字の大文字英字のみ、例: PRJA)');
56
+ }
57
+ return trimmed;
58
+ }
59
+ /**
60
+ * 対話的にユーザー入力を取得
61
+ */
62
+ async function prompt(question) {
63
+ const rl = readline.createInterface({
64
+ input: process.stdin,
65
+ output: process.stdout
66
+ });
67
+ try {
68
+ return await new Promise((resolve) => {
69
+ rl.question(question, (answer) => {
70
+ resolve(answer.trim());
71
+ });
72
+ });
73
+ }
74
+ finally {
75
+ rl.close();
76
+ }
77
+ }
78
+ /**
79
+ * 環境を決定(オプションまたは対話的)
80
+ */
81
+ async function determineEnvironment(options) {
82
+ if (options.cursor)
83
+ return 'cursor';
84
+ if (options.claude)
85
+ return 'claude';
86
+ if (options.claudeAgent)
87
+ return 'claude-agent';
88
+ console.log('');
89
+ console.log('環境を選択してください:');
90
+ console.log(' 1) Cursor IDE (推奨)');
91
+ console.log(' 2) Claude Code');
92
+ console.log(' 3) Claude Code Subagents');
93
+ console.log('');
94
+ const choice = await prompt('選択 [1-3] (デフォルト: 1): ');
95
+ switch (choice || '1') {
96
+ case '1':
97
+ return 'cursor';
98
+ case '2':
99
+ return 'claude';
100
+ case '3':
101
+ return 'claude-agent';
102
+ default:
103
+ console.log('無効な選択です。Cursor IDEを使用します。');
104
+ return 'cursor';
105
+ }
106
+ }
107
+ /**
108
+ * オプションから設定を構築(対話的プロンプトを含む)
109
+ */
110
+ async function buildConfig(options) {
111
+ // 環境を決定
112
+ const environment = await determineEnvironment(options);
113
+ // 言語コード
114
+ const langCode = (options.lang || 'ja');
115
+ if (!isSupportedLanguage(langCode)) {
116
+ throw new Error(`Unsupported language: ${langCode}`);
117
+ }
118
+ // プロジェクト名(対話的プロンプト)
119
+ let projectName = options.projectName;
120
+ if (!projectName) {
121
+ console.log('');
122
+ projectName = await prompt('プロジェクト名(例: プロジェクトA): ');
123
+ }
124
+ // バリデーション
125
+ try {
126
+ projectName = validateProjectName(projectName);
127
+ }
128
+ catch (error) {
129
+ throw new Error(`プロジェクト名が不正です: ${error instanceof Error ? error.message : error}`);
130
+ }
131
+ // JIRAキー(対話的プロンプト)
132
+ let jiraKey = options.jiraKey;
133
+ if (!jiraKey) {
134
+ jiraKey = await prompt('JIRAプロジェクトキー(例: PRJA): ');
135
+ }
136
+ // バリデーション
137
+ try {
138
+ jiraKey = validateJiraKey(jiraKey);
139
+ }
140
+ catch (error) {
141
+ throw new Error(`JIRAキーが不正です: ${error instanceof Error ? error.message : error}`);
142
+ }
143
+ // 確認
144
+ console.log('');
145
+ console.log('✅ 設定:');
146
+ console.log(` プロジェクト名: ${projectName}`);
147
+ console.log(` JIRA: ${jiraKey}`);
148
+ console.log(` 環境: ${environment}`);
149
+ console.log(` 言語: ${langCode}`);
150
+ console.log('');
151
+ const confirm = await prompt('この設定で続行しますか? [Y/n]: ');
152
+ if (confirm.toLowerCase() === 'n') {
153
+ throw new Error('ユーザーによりキャンセルされました');
154
+ }
155
+ return {
156
+ projectName,
157
+ jiraKey,
158
+ environment,
159
+ langCode
160
+ };
161
+ }
162
+ /**
163
+ * テンプレートディレクトリのパスを解決
164
+ */
165
+ function resolveTemplatesDir() {
166
+ const candidates = [
167
+ {
168
+ path: join(__dirname, '..', '..', '..', 'templates'),
169
+ description: 'Production (compiled)'
170
+ },
171
+ {
172
+ path: join(__dirname, '..', '..', 'templates'),
173
+ description: 'Development (source)'
174
+ }
175
+ ];
176
+ for (const candidate of candidates) {
177
+ if (existsSync(candidate.path)) {
178
+ if (process.env.DEBUG) {
179
+ console.log(`📋 Template path resolved: ${candidate.path} (${candidate.description})`);
180
+ }
181
+ return candidate.path;
182
+ }
183
+ }
184
+ // エラー時は試行したパスを表示
185
+ const triedPaths = candidates.map(c => ` - ${c.path} (${c.description})`).join('\n');
186
+ throw new Error(`Templates directory not found. Tried:\n${triedPaths}`);
187
+ }
188
+ /**
189
+ * テンプレートをコピーしてレンダリング
190
+ */
191
+ function copyAndRenderTemplates(sourceDir, destDir, context) {
192
+ const entries = readdirSync(sourceDir, { withFileTypes: true });
193
+ for (const entry of entries) {
194
+ const sourcePath = join(sourceDir, entry.name);
195
+ const destPath = join(destDir, entry.name);
196
+ if (entry.isDirectory()) {
197
+ mkdirSync(destPath, { recursive: true });
198
+ copyAndRenderTemplates(sourcePath, destPath, context);
199
+ }
200
+ else if (entry.isFile()) {
201
+ const content = readFileSync(sourcePath, 'utf-8');
202
+ const rendered = renderTemplate(content, context);
203
+ writeFileSync(destPath, rendered, 'utf-8');
204
+ }
205
+ }
206
+ }
207
+ /**
208
+ * setup-existing コマンドのメイン処理
209
+ */
210
+ export async function setupExisting(options) {
211
+ console.log('🚀 既存プロジェクトにMichiワークフローを追加');
212
+ console.log('');
213
+ // 設定を構築(対話的プロンプトを含む)
214
+ const config = await buildConfig(options);
215
+ const currentDir = process.cwd();
216
+ const projectId = basename(currentDir);
217
+ console.log(`📁 現在のディレクトリ: ${currentDir}`);
218
+ console.log(`📦 プロジェクトID: ${projectId}`);
219
+ console.log('');
220
+ // リポジトリルートを検出
221
+ const repoRoot = findRepositoryRoot(currentDir);
222
+ console.log(`📁 リポジトリルート: ${repoRoot}`);
223
+ // repoRootの安全性を検証
224
+ if (!repoRoot || !existsSync(repoRoot)) {
225
+ throw new Error('リポジトリルートが見つかりません');
226
+ }
227
+ const gitDir = join(repoRoot, '.git');
228
+ if (!existsSync(gitDir)) {
229
+ throw new Error(`Gitリポジトリではありません: ${repoRoot}`);
230
+ }
231
+ // テンプレートディレクトリを解決
232
+ const templatesDir = resolveTemplatesDir();
233
+ console.log(`📋 テンプレート: ${templatesDir}`);
234
+ console.log('');
235
+ // .kiro ディレクトリ作成
236
+ console.log('📁 Step 1: Creating .kiro directory structure...');
237
+ mkdirSync('.kiro/settings/templates', { recursive: true });
238
+ mkdirSync('.kiro/steering', { recursive: true });
239
+ mkdirSync('.kiro/specs', { recursive: true });
240
+ console.log(' ✅ Directory structure created');
241
+ // プロジェクトメタデータ作成
242
+ console.log('\n📝 Step 2: Creating project metadata...');
243
+ // GitHub URLを取得
244
+ let repoUrl = '';
245
+ try {
246
+ repoUrl = execSync('git config --get remote.origin.url', {
247
+ encoding: 'utf-8',
248
+ cwd: repoRoot,
249
+ stdio: ['ignore', 'pipe', 'pipe']
250
+ }).trim();
251
+ if (repoUrl.startsWith('git@github.com:')) {
252
+ repoUrl = repoUrl.replace('git@github.com:', 'https://github.com/').replace('.git', '');
253
+ }
254
+ else if (repoUrl.endsWith('.git')) {
255
+ repoUrl = repoUrl.replace('.git', '');
256
+ }
257
+ }
258
+ catch (error) {
259
+ console.warn('⚠️ Warning: Could not retrieve Git remote URL');
260
+ console.warn(` Using placeholder: https://github.com/org/${projectId}`);
261
+ if (error instanceof Error && error.message) {
262
+ console.warn(` Reason: ${error.message}`);
263
+ }
264
+ repoUrl = `https://github.com/org/${projectId}`;
265
+ }
266
+ // Confluenceラベル生成
267
+ const labels = (() => {
268
+ const projectLabel = projectId.toLowerCase().replace(/[^a-z0-9-]/g, '');
269
+ const labelSet = new Set([`project:${projectLabel}`]);
270
+ if (projectId.includes('-')) {
271
+ const parts = projectId.split('-');
272
+ const servicePart = parts[parts.length - 1];
273
+ const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
274
+ if (serviceLabel !== projectLabel) {
275
+ labelSet.add(`service:${serviceLabel}`);
276
+ }
277
+ }
278
+ return Array.from(labelSet);
279
+ })();
280
+ const projectJson = {
281
+ projectId,
282
+ projectName: config.projectName,
283
+ language: config.langCode,
284
+ jiraProjectKey: config.jiraKey,
285
+ confluenceLabels: labels,
286
+ status: 'active',
287
+ team: [],
288
+ stakeholders: ['@企画', '@部長'],
289
+ repository: repoUrl,
290
+ description: `${config.projectName}の開発`
291
+ };
292
+ try {
293
+ writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2), 'utf-8');
294
+ console.log(' ✅ project.json created');
295
+ }
296
+ catch (error) {
297
+ throw new Error(`Failed to write project.json: ${error instanceof Error ? error.message : error}`);
298
+ }
299
+ // 環境別テンプレートのコピーとレンダリング
300
+ console.log('\n📋 Step 3: Copying and rendering templates...');
301
+ const envConfig = getEnvironmentConfig(config.environment);
302
+ const templateContext = createTemplateContext(config.langCode, '.kiro', envConfig.rulesDir.startsWith('.') ? envConfig.rulesDir.substring(1, envConfig.rulesDir.indexOf('/', 1)) : envConfig.rulesDir.split('/')[0]);
303
+ const templateSourceDir = join(templatesDir, envConfig.templateSource);
304
+ if (!existsSync(templateSourceDir)) {
305
+ console.log(` ⚠️ Template source not found: ${templateSourceDir}`);
306
+ }
307
+ else {
308
+ // rulesディレクトリ
309
+ const rulesTemplateDir = join(templateSourceDir, 'rules');
310
+ const rulesDestDir = join(currentDir, envConfig.rulesDir);
311
+ if (existsSync(rulesTemplateDir)) {
312
+ mkdirSync(rulesDestDir, { recursive: true });
313
+ copyAndRenderTemplates(rulesTemplateDir, rulesDestDir, templateContext);
314
+ console.log(` ✅ Rules copied to ${envConfig.rulesDir}`);
315
+ }
316
+ // commandsディレクトリ
317
+ const commandsTemplateDir = join(templateSourceDir, 'commands');
318
+ const commandsDestDir = join(currentDir, envConfig.commandsDir);
319
+ if (existsSync(commandsTemplateDir)) {
320
+ mkdirSync(commandsDestDir, { recursive: true });
321
+ copyAndRenderTemplates(commandsTemplateDir, commandsDestDir, templateContext);
322
+ console.log(` ✅ Commands copied to ${envConfig.commandsDir}`);
323
+ }
324
+ }
325
+ // Steeringテンプレートをコピー(Michiリポジトリから)
326
+ console.log('\n📚 Step 4: Copying steering templates...');
327
+ const michiSteeringDir = join(templatesDir, '..', '.kiro', 'steering');
328
+ if (existsSync(michiSteeringDir)) {
329
+ try {
330
+ cpSync(michiSteeringDir, join(currentDir, '.kiro/steering'), { recursive: true });
331
+ console.log(' ✅ Steering templates copied');
332
+ }
333
+ catch (error) {
334
+ throw new Error(`Failed to copy steering templates: ${error instanceof Error ? error.message : error}`);
335
+ }
336
+ }
337
+ else {
338
+ console.log(' ⚠️ Steering templates not found (skipped)');
339
+ }
340
+ // Specテンプレートをコピー
341
+ console.log('\n📄 Step 5: Copying spec templates...');
342
+ const michiSpecTemplatesDir = join(templatesDir, '..', '.kiro', 'settings', 'templates');
343
+ if (existsSync(michiSpecTemplatesDir)) {
344
+ try {
345
+ cpSync(michiSpecTemplatesDir, join(currentDir, '.kiro/settings/templates'), { recursive: true });
346
+ console.log(' ✅ Spec templates copied');
347
+ }
348
+ catch (error) {
349
+ throw new Error(`Failed to copy spec templates: ${error instanceof Error ? error.message : error}`);
350
+ }
351
+ }
352
+ else {
353
+ console.log(' ⚠️ Spec templates not found (skipped)');
354
+ }
355
+ // .env テンプレート作成
356
+ console.log('\n🔐 Step 6: Creating .env template...');
357
+ const envTemplate = `# Atlassian設定(MCP + REST API共通)
358
+ ATLASSIAN_URL=https://your-domain.atlassian.net
359
+ ATLASSIAN_EMAIL=your-email@company.com
360
+ ATLASSIAN_API_TOKEN=your-token-here
361
+
362
+ # GitHub設定
363
+ GITHUB_ORG=your-org
364
+ GITHUB_TOKEN=ghp_xxx
365
+ GITHUB_REPO=${repoUrl.replace('https://github.com/', '')}
366
+
367
+ # Confluence共有スペース
368
+ CONFLUENCE_PRD_SPACE=PRD
369
+ CONFLUENCE_QA_SPACE=QA
370
+ CONFLUENCE_RELEASE_SPACE=RELEASE
371
+
372
+ # JIRAプロジェクトキー
373
+ JIRA_PROJECT_KEYS=${config.jiraKey}
374
+
375
+ # JIRA Issue Type IDs(JIRAインスタンス固有 - 必須)
376
+ JIRA_ISSUE_TYPE_STORY=10036
377
+ JIRA_ISSUE_TYPE_SUBTASK=10037
378
+ `;
379
+ if (!existsSync('.env')) {
380
+ try {
381
+ writeFileSync('.env', envTemplate, 'utf-8');
382
+ // セキュリティ: .envファイルの権限を600に設定(所有者のみ読み書き可能)
383
+ chmodSync('.env', 0o600);
384
+ console.log(' ✅ .env template created (permissions: 600)');
385
+ }
386
+ catch (error) {
387
+ throw new Error(`Failed to write .env template: ${error instanceof Error ? error.message : error}`);
388
+ }
389
+ }
390
+ else {
391
+ console.log(' ℹ️ .env already exists (kept)');
392
+ console.log(' ⚠️ Warning: Please verify .env file permissions (recommended: 600)');
393
+ console.log(' Run: chmod 600 .env');
394
+ }
395
+ // 完了メッセージ
396
+ console.log('\n');
397
+ console.log('🎉 セットアップ完了!');
398
+ console.log('');
399
+ console.log('次のステップ:');
400
+ console.log(' 1. .env ファイルを編集して認証情報を設定');
401
+ console.log(' 2. npm install で依存関係をインストール(リポジトリルートで実行)');
402
+ console.log(' 3. Cursor で開く: cursor .');
403
+ console.log(' 4. /kiro:spec-init <機能説明> で開発開始');
404
+ console.log('');
405
+ console.log('詳細: https://github.com/sk8metalme/michi');
406
+ console.log('');
407
+ }
408
+ //# sourceMappingURL=setup-existing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-existing.js","sourceRoot":"","sources":["../../../src/commands/setup-existing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBA8BG"}
1
+ {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAiCG"}
@@ -18,14 +18,17 @@ export default defineConfig({
18
18
  '**/*.config.ts',
19
19
  '**/scripts/setup-*.ts',
20
20
  '**/scripts/setup-*.sh',
21
+ '**/scripts/setup-interactive.ts',
21
22
  ],
22
23
  thresholds: {
23
- // 段階的に引き上げる計画(Phase 1: 10%, Phase 2: 60%, Phase 3: 80%)
24
- // Vitest 4移行後、一時的に10%に下げる(CI失敗を防ぐため)
25
- lines: 10,
26
- functions: 10,
27
- branches: 15, // Vitest 4移行後、一時的に15%に下げる
28
- statements: 10,
24
+ // 段階的に引き上げる計画(Phase 1: 10% Phase 2: 30% Phase 3: 60% → Phase 4: 80%)
25
+ // 主要機能のテスト追加により30%を目標
26
+ // 新機能追加時は一時的に閾値を下げる(Issue #33, #38対応)
27
+ // Issue #38: setup-existing.ts追加により一時的に15%に調整(テスト追加はIssue #54で対応予定)
28
+ lines: 15,
29
+ functions: 15,
30
+ branches: 15,
31
+ statements: 15,
29
32
  },
30
33
  },
31
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM;QACnB,8BAA8B;QAC9B,OAAO,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,qCAAqC,CAAC;QACpF,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1C,OAAO,EAAE;gBACP,eAAe;gBACf,OAAO;gBACP,cAAc;gBACd,cAAc;gBACd,iBAAiB;gBACjB,WAAW;gBACX,gBAAgB;gBAChB,uBAAuB;gBACvB,uBAAuB;aACxB;YACD,UAAU,EAAE;gBACV,wDAAwD;gBACxD,qCAAqC;gBACrC,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE,EAAE,0BAA0B;gBACxC,UAAU,EAAE,EAAE;aACf;SACF;KACF;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM;QACnB,8BAA8B;QAC9B,OAAO,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,qCAAqC,CAAC;QACpF,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1C,OAAO,EAAE;gBACP,eAAe;gBACf,OAAO;gBACP,cAAc;gBACd,cAAc;gBACd,iBAAiB;gBACjB,WAAW;gBACX,gBAAgB;gBAChB,uBAAuB;gBACvB,uBAAuB;gBACvB,iCAAiC;aAClC;YACD,UAAU,EAAE;gBACV,yEAAyE;gBACzE,sBAAsB;gBACtB,sCAAsC;gBACtC,oEAAoE;gBACpE,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;aACf;SACF;KACF;CACF,CAAC,CAAC"}
package/docs/README.md CHANGED
@@ -14,7 +14,7 @@ Michiのドキュメントは、目的別に以下のカテゴリに整理され
14
14
  |------------|------|
15
15
  | [セットアップガイド](./getting-started/setup.md) | Michiのインストールと設定手順 |
16
16
  | [クイックスタート](./getting-started/quick-start.md) | 5分で始めるMichi |
17
- | [新規プロジェクト作成](./getting-started/new-project-setup.md) | 他のリポジトリでMichiを使い始める方法 |
17
+ | [新規リポジトリ作成](./getting-started/new-repository-setup.md) | 新規リポジトリを作成してMichiを使い始める方法 |
18
18
 
19
19
  ### 📖 実践ガイド ([guides/](./guides/))
20
20
 
@@ -61,7 +61,7 @@ Michiプロジェクトに貢献したい開発者向けのガイドです。
61
61
 
62
62
  ### Michiを別のプロジェクトで使う場合
63
63
 
64
- 1. [新規プロジェクト作成](./getting-started/new-project-setup.md) - 他のリポジトリでの始め方
64
+ 1. [新規リポジトリ作成](./getting-started/new-repository-setup.md) - 新規リポジトリでの始め方
65
65
  2. [クイックリファレンス](./reference/quick-reference.md) - コマンド一覧を確認
66
66
 
67
67
  ### Confluence/JIRAの設定をカスタマイズする場合
@@ -174,6 +174,43 @@ npm run lint:fix
174
174
  npm run format
175
175
  ```
176
176
 
177
+ ## 8-1. Pre-commitフック(自動リント・テスト)
178
+
179
+ このプロジェクトでは、**husky**と**lint-staged**を使用して、コミット前に自動的にリントとテストを実行します。
180
+
181
+ ### 動作
182
+
183
+ コミットを実行すると、以下の処理が自動的に実行されます:
184
+
185
+ 1. **lint-staged**: ステージングされたファイルに対して自動リント・フォーマット
186
+ - TypeScript/JavaScriptファイル: ESLint自動修正 + Prettierフォーマット
187
+ - JSON/Markdown/YAMLファイル: Prettierフォーマット
188
+ 2. **テスト実行**: すべてのテストを実行(`npm run test:run`)
189
+
190
+ ### フックをスキップする場合(非推奨)
191
+
192
+ 緊急時のみ、以下の方法でフックをスキップできます:
193
+
194
+ ```bash
195
+ # Gitの場合
196
+ git commit --no-verify -m "緊急修正"
197
+
198
+ # Jujutsuの場合
199
+ jj commit --no-verify -m "緊急修正"
200
+ ```
201
+
202
+ **注意**: フックをスキップしたコミットは、CI/CDで失敗する可能性があります。
203
+
204
+ ### フックの設定確認
205
+
206
+ ```bash
207
+ # pre-commitフックの内容を確認
208
+ cat .husky/pre-commit
209
+
210
+ # lint-stagedの設定を確認
211
+ cat package.json | grep -A 10 "lint-staged"
212
+ ```
213
+
177
214
  ## 9. ビルドとパッケージング
178
215
 
179
216
  ### TypeScriptビルド