@sk8metal/michi-cli 0.2.1 → 0.4.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 (172) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/scripts/config-global.d.ts +10 -0
  3. package/dist/scripts/config-global.d.ts.map +1 -0
  4. package/dist/scripts/config-global.js +111 -0
  5. package/dist/scripts/config-global.js.map +1 -0
  6. package/dist/scripts/confluence-sync.d.ts +22 -4
  7. package/dist/scripts/confluence-sync.d.ts.map +1 -1
  8. package/dist/scripts/confluence-sync.js +22 -12
  9. package/dist/scripts/confluence-sync.js.map +1 -1
  10. package/dist/scripts/jira-sync.d.ts.map +1 -1
  11. package/dist/scripts/jira-sync.js +201 -167
  12. package/dist/scripts/jira-sync.js.map +1 -1
  13. package/dist/scripts/list-projects.js.map +1 -1
  14. package/dist/scripts/multi-project-estimate.js.map +1 -1
  15. package/dist/scripts/phase-runner.d.ts +1 -1
  16. package/dist/scripts/phase-runner.d.ts.map +1 -1
  17. package/dist/scripts/phase-runner.js +295 -522
  18. package/dist/scripts/phase-runner.js.map +1 -1
  19. package/dist/scripts/pre-flight-check.d.ts.map +1 -1
  20. package/dist/scripts/pre-flight-check.js +10 -6
  21. package/dist/scripts/pre-flight-check.js.map +1 -1
  22. package/dist/scripts/resource-dashboard.js.map +1 -1
  23. package/dist/scripts/spec-impl-workflow.js +1 -1
  24. package/dist/scripts/spec-impl-workflow.js.map +1 -1
  25. package/dist/scripts/template/renderer.d.ts +1 -1
  26. package/dist/scripts/template/renderer.d.ts.map +1 -1
  27. package/dist/scripts/test-interactive.d.ts.map +1 -1
  28. package/dist/scripts/test-interactive.js +0 -15
  29. package/dist/scripts/test-interactive.js.map +1 -1
  30. package/dist/scripts/test-new-features.js +6 -3
  31. package/dist/scripts/test-new-features.js.map +1 -1
  32. package/dist/scripts/test-spec-generator.d.ts.map +1 -1
  33. package/dist/scripts/test-spec-generator.js +1 -2
  34. package/dist/scripts/test-spec-generator.js.map +1 -1
  35. package/dist/scripts/utils/config-loader.d.ts +7 -2
  36. package/dist/scripts/utils/config-loader.d.ts.map +1 -1
  37. package/dist/scripts/utils/config-loader.js +79 -8
  38. package/dist/scripts/utils/config-loader.js.map +1 -1
  39. package/dist/scripts/utils/config-sections.d.ts +54 -0
  40. package/dist/scripts/utils/config-sections.d.ts.map +1 -0
  41. package/dist/scripts/utils/config-sections.js +178 -0
  42. package/dist/scripts/utils/config-sections.js.map +1 -0
  43. package/dist/scripts/utils/config-validator.d.ts +4 -0
  44. package/dist/scripts/utils/config-validator.d.ts.map +1 -1
  45. package/dist/scripts/utils/config-validator.js +57 -1
  46. package/dist/scripts/utils/config-validator.js.map +1 -1
  47. package/dist/scripts/utils/confluence-approval.d.ts.map +1 -1
  48. package/dist/scripts/utils/confluence-approval.js +5 -3
  49. package/dist/scripts/utils/confluence-approval.js.map +1 -1
  50. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -1
  51. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -1
  52. package/dist/scripts/utils/interactive-helpers.d.ts +32 -0
  53. package/dist/scripts/utils/interactive-helpers.d.ts.map +1 -0
  54. package/dist/scripts/utils/interactive-helpers.js +92 -0
  55. package/dist/scripts/utils/interactive-helpers.js.map +1 -0
  56. package/dist/scripts/utils/jira-issue-type-fetcher.d.ts.map +1 -1
  57. package/dist/scripts/utils/jira-issue-type-fetcher.js +27 -18
  58. package/dist/scripts/utils/jira-issue-type-fetcher.js.map +1 -1
  59. package/dist/scripts/utils/release-notes-generator.d.ts.map +1 -1
  60. package/dist/scripts/utils/release-notes-generator.js +2 -1
  61. package/dist/scripts/utils/release-notes-generator.js.map +1 -1
  62. package/dist/scripts/utils/spec-updater.d.ts +19 -0
  63. package/dist/scripts/utils/spec-updater.d.ts.map +1 -1
  64. package/dist/scripts/utils/spec-updater.js.map +1 -1
  65. package/dist/scripts/utils/tasks-converter.d.ts.map +1 -1
  66. package/dist/scripts/utils/tasks-converter.js +2 -2
  67. package/dist/scripts/utils/tasks-converter.js.map +1 -1
  68. package/dist/scripts/utils/tasks-format-validator.d.ts.map +1 -1
  69. package/dist/scripts/utils/tasks-format-validator.js +0 -12
  70. package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
  71. package/dist/scripts/utils/test-runner.d.ts.map +1 -1
  72. package/dist/scripts/utils/test-runner.js +3 -2
  73. package/dist/scripts/utils/test-runner.js.map +1 -1
  74. package/dist/scripts/validate-phase.d.ts +1 -1
  75. package/dist/scripts/validate-phase.d.ts.map +1 -1
  76. package/dist/scripts/validate-phase.js +12 -62
  77. package/dist/scripts/validate-phase.js.map +1 -1
  78. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -1
  79. package/dist/scripts/workflow-orchestrator.js +11 -16
  80. package/dist/scripts/workflow-orchestrator.js.map +1 -1
  81. package/dist/src/__tests__/integration/setup/claude.test.js +8 -8
  82. package/dist/src/__tests__/integration/setup/claude.test.js.map +1 -1
  83. package/dist/src/__tests__/integration/setup/init.test.d.ts +5 -0
  84. package/dist/src/__tests__/integration/setup/init.test.d.ts.map +1 -0
  85. package/dist/src/__tests__/integration/setup/init.test.js +352 -0
  86. package/dist/src/__tests__/integration/setup/init.test.js.map +1 -0
  87. package/dist/src/cli.d.ts.map +1 -1
  88. package/dist/src/cli.js +29 -21
  89. package/dist/src/cli.js.map +1 -1
  90. package/dist/src/commands/init.d.ts +28 -0
  91. package/dist/src/commands/init.d.ts.map +1 -0
  92. package/dist/src/commands/init.js +490 -0
  93. package/dist/src/commands/init.js.map +1 -0
  94. package/dist/src/commands/setup-existing.d.ts +1 -1
  95. package/dist/src/commands/setup-existing.d.ts.map +1 -1
  96. package/dist/src/commands/setup-existing.js +49 -3
  97. package/dist/src/commands/setup-existing.js.map +1 -1
  98. package/docs/user-guide/getting-started/new-repository-setup.md +1 -1
  99. package/docs/user-guide/getting-started/setup.md +33 -5
  100. package/docs/user-guide/guides/agent-skills-integration.md +16 -11
  101. package/docs/user-guide/guides/customization.md +64 -11
  102. package/docs/user-guide/guides/workflow.md +35 -21
  103. package/docs/user-guide/hands-on/claude-agent-setup.md +192 -50
  104. package/docs/user-guide/hands-on/claude-setup.md +63 -9
  105. package/docs/user-guide/hands-on/cursor-setup.md +9 -8
  106. package/docs/user-guide/hands-on/verification-checklist.md +4 -3
  107. package/docs/user-guide/hands-on/workflow-walkthrough.md +3 -3
  108. package/docs/user-guide/reference/config.md +30 -5
  109. package/docs/user-guide/reference/quick-reference.md +70 -74
  110. package/docs/user-guide/testing/test-planning-flow.md +4 -0
  111. package/package.json +2 -4
  112. package/scripts/config-global.ts +160 -0
  113. package/scripts/confluence-sync.ts +91 -27
  114. package/scripts/jira-sync.ts +284 -218
  115. package/scripts/list-projects.ts +2 -2
  116. package/scripts/multi-project-estimate.ts +3 -3
  117. package/scripts/phase-runner.ts +391 -594
  118. package/scripts/pre-flight-check.ts +20 -9
  119. package/scripts/pre-publish-check.sh +3 -34
  120. package/scripts/resource-dashboard.ts +4 -4
  121. package/scripts/spec-impl-workflow.ts +1 -1
  122. package/scripts/template/renderer.ts +1 -1
  123. package/scripts/test-interactive.ts +0 -19
  124. package/scripts/test-new-features.ts +10 -7
  125. package/scripts/test-npm-package.sh +3 -34
  126. package/scripts/test-spec-generator.ts +3 -7
  127. package/scripts/utils/config-loader.ts +107 -26
  128. package/scripts/utils/config-sections.ts +316 -0
  129. package/scripts/utils/config-validator.ts +66 -1
  130. package/scripts/utils/confluence-approval.ts +8 -6
  131. package/scripts/utils/confluence-hierarchy.ts +27 -27
  132. package/scripts/utils/interactive-helpers.ts +135 -0
  133. package/scripts/utils/jira-issue-type-fetcher.ts +29 -21
  134. package/scripts/utils/release-notes-generator.ts +3 -2
  135. package/scripts/utils/spec-updater.ts +37 -15
  136. package/scripts/utils/tasks-converter.ts +4 -6
  137. package/scripts/utils/tasks-format-validator.ts +0 -13
  138. package/scripts/utils/test-runner.ts +4 -3
  139. package/scripts/validate-phase.ts +21 -80
  140. package/scripts/workflow-orchestrator.ts +16 -25
  141. package/templates/claude/commands/kiro/kiro-spec-impl.md +4 -0
  142. package/templates/claude/commands/kiro/kiro-spec-tasks.md +3 -1
  143. package/templates/claude/commands/michi/confluence-sync.md +8 -2
  144. package/templates/claude/commands/michi/design-review.md +4 -0
  145. package/templates/claude/commands/michi/e2e-plan.md +4 -0
  146. package/templates/claude/commands/michi/license-check.md +4 -0
  147. package/templates/claude/commands/michi/pr-resolve.md +4 -0
  148. package/templates/claude/commands/michi/project-switch.md +8 -2
  149. package/templates/claude/commands/michi/spec-design.md +78 -0
  150. package/templates/claude/commands/michi/spec-impl.md +716 -0
  151. package/templates/claude/commands/michi/test-planning.md +174 -0
  152. package/templates/claude/commands/michi/validate-design.md +58 -0
  153. package/templates/claude/commands/michi/version-audit.md +4 -0
  154. package/templates/michi/cc-sdd-overrides/README.md +58 -0
  155. package/templates/michi/cc-sdd-overrides/settings/rules/design-review-michi.md +53 -0
  156. package/templates/michi/cc-sdd-overrides/settings/templates/specs/init.json +24 -0
  157. package/templates/michi/cc-sdd-overrides/settings/templates/specs/tasks.md +446 -0
  158. package/dist/scripts/config-interactive.d.ts +0 -10
  159. package/dist/scripts/config-interactive.d.ts.map +0 -1
  160. package/dist/scripts/config-interactive.js +0 -372
  161. package/dist/scripts/config-interactive.js.map +0 -1
  162. package/dist/scripts/setup-existing-project.d.ts +0 -15
  163. package/dist/scripts/setup-existing-project.d.ts.map +0 -1
  164. package/dist/scripts/setup-existing-project.js +0 -455
  165. package/dist/scripts/setup-existing-project.js.map +0 -1
  166. package/dist/scripts/setup-interactive.d.ts +0 -10
  167. package/dist/scripts/setup-interactive.d.ts.map +0 -1
  168. package/dist/scripts/setup-interactive.js +0 -413
  169. package/dist/scripts/setup-interactive.js.map +0 -1
  170. package/scripts/config-interactive.ts +0 -550
  171. package/scripts/setup-existing-project.ts +0 -585
  172. package/scripts/setup-interactive.ts +0 -565
@@ -0,0 +1,490 @@
1
+ /**
2
+ * init command
3
+ * プロジェクト初期設定を統合したコマンド
4
+ *
5
+ * 使い方:
6
+ * michi init [options]
7
+ */
8
+ import { cpSync, existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, chmodSync, } from 'fs';
9
+ import { join, basename, dirname } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { execSync } from 'child_process';
12
+ import { findRepositoryRoot } from '../../scripts/utils/project-finder.js';
13
+ import { getEnvironmentConfig, } from '../../scripts/constants/environments.js';
14
+ import { isSupportedLanguage, } from '../../scripts/constants/languages.js';
15
+ import { createTemplateContext, renderTemplate, } from '../../scripts/template/renderer.js';
16
+ import * as readline from 'readline';
17
+ import { getConfluenceConfig, getJiraConfig, getWorkflowConfig, } from '../../scripts/utils/config-sections.js';
18
+ import { getGlobalConfigPath } from '../../scripts/utils/config-loader.js';
19
+ // ES module で __dirname を取得
20
+ const __filename = fileURLToPath(import.meta.url);
21
+ const __dirname = dirname(__filename);
22
+ /**
23
+ * プロジェクトIDのバリデーション
24
+ */
25
+ function validateProjectId(projectId) {
26
+ if (!projectId.trim() || /^\s+$/.test(projectId)) {
27
+ return false;
28
+ }
29
+ if (projectId.includes('..') || projectId.includes('/') || projectId.includes('\\')) {
30
+ return false;
31
+ }
32
+ return /^[A-Za-z0-9_-]+$/.test(projectId);
33
+ }
34
+ /**
35
+ * プロジェクト名のバリデーション
36
+ */
37
+ function validateProjectName(name) {
38
+ const trimmed = name.trim();
39
+ if (!trimmed || trimmed.length === 0) {
40
+ throw new Error('プロジェクト名が空です');
41
+ }
42
+ if (trimmed.length > 100) {
43
+ throw new Error('プロジェクト名が長すぎます(最大100文字)');
44
+ }
45
+ if (/[/\\]/.test(trimmed)) {
46
+ throw new Error('プロジェクト名にパス区切り文字(/ または \\)は使用できません');
47
+ }
48
+ if (/^\.\.?$|^\.\.?\//.test(trimmed)) {
49
+ throw new Error('プロジェクト名に相対パス(. または ..)は使用できません');
50
+ }
51
+ // eslint-disable-next-line no-control-regex
52
+ if (/[\x00-\x1F\x7F]/.test(trimmed)) {
53
+ throw new Error('プロジェクト名に制御文字は使用できません');
54
+ }
55
+ return trimmed;
56
+ }
57
+ /**
58
+ * JIRAキーのバリデーション
59
+ */
60
+ function validateJiraKey(key) {
61
+ const trimmed = key.trim().toUpperCase();
62
+ if (!/^[A-Z]{2,10}$/.test(trimmed)) {
63
+ throw new Error('JIRAキーの形式が不正です(2-10文字の大文字英字のみ、例: PRJA)');
64
+ }
65
+ return trimmed;
66
+ }
67
+ /**
68
+ * 対話的にユーザー入力を取得
69
+ */
70
+ async function prompt(question) {
71
+ const rl = readline.createInterface({
72
+ input: process.stdin,
73
+ output: process.stdout,
74
+ });
75
+ try {
76
+ return await new Promise((resolve) => {
77
+ rl.question(question, (answer) => {
78
+ resolve(answer.trim());
79
+ });
80
+ });
81
+ }
82
+ finally {
83
+ rl.close();
84
+ }
85
+ }
86
+ /**
87
+ * 環境を決定(オプションまたは対話的)
88
+ */
89
+ async function determineEnvironment(options) {
90
+ if (options.cursor)
91
+ return 'cursor';
92
+ if (options.claude)
93
+ return 'claude';
94
+ if (options.claudeAgent)
95
+ return 'claude-agent';
96
+ if (options.gemini)
97
+ return 'gemini';
98
+ if (options.codex)
99
+ return 'codex';
100
+ if (options.cline)
101
+ return 'cline';
102
+ console.log('');
103
+ console.log('環境を選択してください:');
104
+ console.log(' 1) Cursor IDE (推奨)');
105
+ console.log(' 2) Claude Code');
106
+ console.log(' 3) Claude Code Subagents');
107
+ console.log(' 4) Gemini CLI');
108
+ console.log(' 5) Codex CLI');
109
+ console.log(' 6) Cline');
110
+ console.log('');
111
+ const choice = await prompt('選択 [1-6] (デフォルト: 1): ');
112
+ switch (choice || '1') {
113
+ case '1':
114
+ return 'cursor';
115
+ case '2':
116
+ return 'claude';
117
+ case '3':
118
+ return 'claude-agent';
119
+ case '4':
120
+ return 'gemini';
121
+ case '5':
122
+ return 'codex';
123
+ case '6':
124
+ return 'cline';
125
+ default:
126
+ console.log('無効な選択です。Cursor IDEを使用します。');
127
+ return 'cursor';
128
+ }
129
+ }
130
+ /**
131
+ * オプションから設定を構築(対話的プロンプトを含む)
132
+ */
133
+ async function buildConfig(options, currentDir) {
134
+ // 環境を決定
135
+ const environment = await determineEnvironment(options);
136
+ // 言語コード
137
+ const langCode = (options.lang || 'ja');
138
+ if (!isSupportedLanguage(langCode)) {
139
+ throw new Error(`Unsupported language: ${langCode}`);
140
+ }
141
+ const projectIdDefault = options.name || basename(currentDir);
142
+ // プロジェクトID
143
+ let projectId = options.name;
144
+ if (!projectId && !options.yes) {
145
+ console.log('');
146
+ projectId = await prompt(`プロジェクトID [${projectIdDefault}]: `);
147
+ }
148
+ projectId = projectId || projectIdDefault;
149
+ if (!validateProjectId(projectId)) {
150
+ throw new Error('無効なプロジェクトIDです。英数字、ハイフン、アンダースコアのみ使用できます。');
151
+ }
152
+ // プロジェクト名
153
+ let projectName = options.projectName;
154
+ if (!projectName && !options.yes) {
155
+ projectName = await prompt('プロジェクト名(例: プロジェクトA): ');
156
+ }
157
+ if (!projectName) {
158
+ throw new Error('プロジェクト名は必須です');
159
+ }
160
+ projectName = validateProjectName(projectName);
161
+ // JIRAキー
162
+ let jiraKey = options.jiraKey;
163
+ if (!jiraKey && !options.yes) {
164
+ jiraKey = await prompt('JIRAプロジェクトキー(例: PRJA): ');
165
+ }
166
+ if (!jiraKey) {
167
+ throw new Error('JIRAプロジェクトキーは必須です');
168
+ }
169
+ jiraKey = validateJiraKey(jiraKey);
170
+ // 確認
171
+ if (!options.yes) {
172
+ console.log('');
173
+ console.log('✅ 設定:');
174
+ console.log(` プロジェクトID: ${projectId}`);
175
+ console.log(` プロジェクト名: ${projectName}`);
176
+ console.log(` JIRA: ${jiraKey}`);
177
+ console.log(` 環境: ${environment}`);
178
+ console.log(` 言語: ${langCode}`);
179
+ console.log('');
180
+ const confirm = await prompt('この設定で続行しますか? [Y/n]: ');
181
+ if (confirm.toLowerCase() === 'n') {
182
+ throw new Error('ユーザーによりキャンセルされました');
183
+ }
184
+ }
185
+ return {
186
+ projectId,
187
+ projectName,
188
+ jiraKey,
189
+ michiPath: options.michiPath,
190
+ environment,
191
+ langCode,
192
+ skipWorkflowConfig: options.skipConfig || false,
193
+ interactive: !options.yes,
194
+ };
195
+ }
196
+ /**
197
+ * テンプレートディレクトリのパスを解決
198
+ */
199
+ function resolveTemplatesDir(michiPath) {
200
+ if (michiPath && existsSync(join(michiPath, 'templates'))) {
201
+ return join(michiPath, 'templates');
202
+ }
203
+ const candidates = [
204
+ {
205
+ path: join(__dirname, '..', '..', '..', 'templates'),
206
+ description: 'Production (compiled)',
207
+ },
208
+ {
209
+ path: join(__dirname, '..', '..', 'templates'),
210
+ description: 'Development (source)',
211
+ },
212
+ ];
213
+ for (const candidate of candidates) {
214
+ if (existsSync(candidate.path)) {
215
+ return candidate.path;
216
+ }
217
+ }
218
+ const triedPaths = candidates
219
+ .map((c) => ` - ${c.path} (${c.description})`)
220
+ .join('\n');
221
+ throw new Error(`Templates directory not found. Tried:\n${triedPaths}`);
222
+ }
223
+ /**
224
+ * テンプレートをコピーしてレンダリング
225
+ */
226
+ function copyAndRenderTemplates(sourceDir, destDir, context) {
227
+ const entries = readdirSync(sourceDir, { withFileTypes: true });
228
+ for (const entry of entries) {
229
+ const sourcePath = join(sourceDir, entry.name);
230
+ const destPath = join(destDir, entry.name);
231
+ if (entry.isDirectory()) {
232
+ mkdirSync(destPath, { recursive: true });
233
+ copyAndRenderTemplates(sourcePath, destPath, context);
234
+ }
235
+ else if (entry.isFile()) {
236
+ const content = readFileSync(sourcePath, 'utf-8');
237
+ const rendered = renderTemplate(content, context);
238
+ writeFileSync(destPath, rendered, 'utf-8');
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * ワークフロー設定を作成
244
+ */
245
+ async function setupWorkflowConfig(config, repoRoot) {
246
+ const globalConfigPath = getGlobalConfigPath();
247
+ const projectConfigPath = join(repoRoot, '.michi', 'config.json');
248
+ // グローバル設定が存在する場合
249
+ if (existsSync(globalConfigPath)) {
250
+ mkdirSync(dirname(projectConfigPath), { recursive: true });
251
+ cpSync(globalConfigPath, projectConfigPath);
252
+ console.log(' ✅ グローバル設定をコピーしました: ~/.michi/config.json → .michi/config.json');
253
+ console.log(' プロジェクト固有のカスタマイズが必要な場合は .michi/config.json を編集してください。');
254
+ return;
255
+ }
256
+ // グローバル設定がない場合
257
+ console.log(' ℹ️ グローバル設定が見つかりません。');
258
+ if (config.interactive) {
259
+ // 対話的に設定を作成
260
+ console.log(' 対話的に設定を作成します。');
261
+ const rl = readline.createInterface({
262
+ input: process.stdin,
263
+ output: process.stdout,
264
+ });
265
+ try {
266
+ const confluenceConfig = await getConfluenceConfig(rl);
267
+ const jiraConfig = await getJiraConfig(rl);
268
+ const workflowConfig = await getWorkflowConfig(rl);
269
+ const projectConfig = {
270
+ confluence: confluenceConfig,
271
+ jira: jiraConfig,
272
+ workflow: workflowConfig,
273
+ };
274
+ mkdirSync(dirname(projectConfigPath), { recursive: true });
275
+ writeFileSync(projectConfigPath, JSON.stringify(projectConfig, null, 2) + '\n', 'utf-8');
276
+ console.log(' ✅ .michi/config.json created');
277
+ }
278
+ finally {
279
+ rl.close();
280
+ }
281
+ }
282
+ else {
283
+ // デフォルト設定で作成
284
+ const defaultConfig = {
285
+ confluence: {
286
+ pageCreationGranularity: 'single',
287
+ },
288
+ jira: {
289
+ createEpic: true,
290
+ storyCreationGranularity: 'all',
291
+ storyPoints: 'auto',
292
+ },
293
+ workflow: {
294
+ enabledPhases: ['requirements', 'design', 'tasks'],
295
+ },
296
+ };
297
+ mkdirSync(dirname(projectConfigPath), { recursive: true });
298
+ writeFileSync(projectConfigPath, JSON.stringify(defaultConfig, null, 2) + '\n', 'utf-8');
299
+ console.log(' ✅ .michi/config.json created (default settings)');
300
+ }
301
+ }
302
+ /**
303
+ * init コマンドのメイン処理
304
+ */
305
+ export async function initProject(options) {
306
+ console.log('🚀 プロジェクト初期設定');
307
+ console.log('');
308
+ const currentDir = process.cwd();
309
+ // 設定を構築(対話的プロンプトを含む)
310
+ const config = await buildConfig(options, currentDir);
311
+ console.log(`📁 現在のディレクトリ: ${currentDir}`);
312
+ console.log(`📦 プロジェクトID: ${config.projectId}`);
313
+ console.log('');
314
+ // リポジトリルートを検出
315
+ const repoRoot = findRepositoryRoot(currentDir);
316
+ console.log(`📁 リポジトリルート: ${repoRoot}`);
317
+ if (!repoRoot || !existsSync(repoRoot)) {
318
+ throw new Error('リポジトリルートが見つかりません');
319
+ }
320
+ // Step 1: .kiro ディレクトリ作成
321
+ console.log('\n📁 Step 1: Creating .kiro directory structure...');
322
+ mkdirSync('.kiro/settings/templates', { recursive: true });
323
+ mkdirSync('.kiro/steering', { recursive: true });
324
+ mkdirSync('.kiro/specs', { recursive: true });
325
+ console.log(' ✅ Directory structure created');
326
+ // Step 2: プロジェクトメタデータ作成
327
+ console.log('\n📝 Step 2: Creating project metadata...');
328
+ // GitHub URLを取得
329
+ let repoUrl = '';
330
+ try {
331
+ repoUrl = execSync('git config --get remote.origin.url', {
332
+ encoding: 'utf-8',
333
+ cwd: repoRoot,
334
+ stdio: ['ignore', 'pipe', 'pipe'],
335
+ }).trim();
336
+ if (repoUrl.startsWith('git@github.com:')) {
337
+ repoUrl = repoUrl
338
+ .replace('git@github.com:', 'https://github.com/')
339
+ .replace('.git', '');
340
+ }
341
+ else if (repoUrl.endsWith('.git')) {
342
+ repoUrl = repoUrl.replace('.git', '');
343
+ }
344
+ }
345
+ catch {
346
+ repoUrl = `https://github.com/org/${config.projectId}`;
347
+ }
348
+ // Confluenceラベル生成
349
+ const labels = (() => {
350
+ const projectLabel = config.projectId.toLowerCase().replace(/[^a-z0-9-]/g, '');
351
+ const labelSet = new Set([`project:${projectLabel}`]);
352
+ if (config.projectId.includes('-')) {
353
+ const parts = config.projectId.split('-');
354
+ const servicePart = parts[parts.length - 1];
355
+ const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
356
+ if (serviceLabel !== projectLabel) {
357
+ labelSet.add(`service:${serviceLabel}`);
358
+ }
359
+ }
360
+ return Array.from(labelSet);
361
+ })();
362
+ const projectJson = {
363
+ projectId: config.projectId,
364
+ projectName: config.projectName,
365
+ language: config.langCode,
366
+ jiraProjectKey: config.jiraKey,
367
+ confluenceLabels: labels,
368
+ status: 'active',
369
+ team: [],
370
+ stakeholders: ['@企画', '@部長'],
371
+ repository: repoUrl,
372
+ description: `${config.projectName}の開発`,
373
+ };
374
+ writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2) + '\n', 'utf-8');
375
+ console.log(' ✅ project.json created');
376
+ // Step 3: .env テンプレート作成
377
+ console.log('\n🔐 Step 3: Creating .env template...');
378
+ const envTemplate = `# Atlassian設定(MCP + REST API共通)
379
+ ATLASSIAN_URL=https://your-domain.atlassian.net
380
+ ATLASSIAN_EMAIL=your-email@company.com
381
+ ATLASSIAN_API_TOKEN=your-token-here
382
+
383
+ # GitHub設定
384
+ GITHUB_ORG=your-org
385
+ GITHUB_TOKEN=ghp_xxx
386
+ GITHUB_REPO=${repoUrl.replace('https://github.com/', '')}
387
+
388
+ # Confluence共有スペース
389
+ CONFLUENCE_PRD_SPACE=PRD
390
+ CONFLUENCE_QA_SPACE=QA
391
+ CONFLUENCE_RELEASE_SPACE=RELEASE
392
+
393
+ # JIRAプロジェクトキー
394
+ JIRA_PROJECT_KEYS=${config.jiraKey}
395
+
396
+ # JIRA Issue Type IDs(JIRAインスタンス固有 - 必須)
397
+ JIRA_ISSUE_TYPE_STORY=10036
398
+ JIRA_ISSUE_TYPE_SUBTASK=10037
399
+ `;
400
+ if (!existsSync('.env')) {
401
+ writeFileSync('.env', envTemplate, 'utf-8');
402
+ chmodSync('.env', 0o600);
403
+ console.log(' ✅ .env template created (permissions: 600)');
404
+ }
405
+ else {
406
+ console.log(' ℹ️ .env already exists (skipped)');
407
+ }
408
+ // Step 4: テンプレート/ルールのコピー(--michi-path 指定時のみ)
409
+ if (config.michiPath) {
410
+ console.log('\n📋 Step 4: Copying templates and rules...');
411
+ const templatesDir = resolveTemplatesDir(config.michiPath);
412
+ const envConfig = getEnvironmentConfig(config.environment);
413
+ const templateContext = createTemplateContext(config.langCode, '.kiro', envConfig.rulesDir.startsWith('.')
414
+ ? envConfig.rulesDir.substring(1, envConfig.rulesDir.indexOf('/', 1))
415
+ : envConfig.rulesDir.split('/')[0]);
416
+ const templateSourceDir = join(templatesDir, envConfig.templateSource);
417
+ if (existsSync(templateSourceDir)) {
418
+ // rulesディレクトリ
419
+ const templateDirName = config.environment === 'claude-agent' ? 'agents' : 'rules';
420
+ const rulesTemplateDir = join(templateSourceDir, templateDirName);
421
+ const rulesDestDir = join(currentDir, envConfig.rulesDir);
422
+ if (existsSync(rulesTemplateDir)) {
423
+ mkdirSync(rulesDestDir, { recursive: true });
424
+ copyAndRenderTemplates(rulesTemplateDir, rulesDestDir, templateContext);
425
+ console.log(` ✅ Rules copied to ${envConfig.rulesDir}`);
426
+ }
427
+ // commandsディレクトリ
428
+ const commandsTemplateDir = join(templateSourceDir, 'commands');
429
+ const commandsDestDir = join(currentDir, envConfig.commandsDir);
430
+ if (existsSync(commandsTemplateDir)) {
431
+ mkdirSync(commandsDestDir, { recursive: true });
432
+ copyAndRenderTemplates(commandsTemplateDir, commandsDestDir, templateContext);
433
+ console.log(` ✅ Commands copied to ${envConfig.commandsDir}`);
434
+ }
435
+ // Steeringテンプレート
436
+ const michiSteeringDir = join(templatesDir, '..', '.kiro', 'steering');
437
+ if (existsSync(michiSteeringDir)) {
438
+ cpSync(michiSteeringDir, join(currentDir, '.kiro/steering'), {
439
+ recursive: true,
440
+ });
441
+ console.log(' ✅ Steering templates copied');
442
+ }
443
+ // Specテンプレート
444
+ const michiSpecTemplatesDir = join(templatesDir, '..', '.kiro', 'settings', 'templates');
445
+ if (existsSync(michiSpecTemplatesDir)) {
446
+ cpSync(michiSpecTemplatesDir, join(currentDir, '.kiro/settings/templates'), { recursive: true });
447
+ console.log(' ✅ Spec templates copied');
448
+ }
449
+ }
450
+ }
451
+ else {
452
+ console.log('\n⚠️ Step 4: Skipped (--michi-path not specified)');
453
+ console.log(' テンプレートをコピーするには --michi-path オプションを指定してください');
454
+ }
455
+ // Step 5: ワークフロー設定
456
+ if (!config.skipWorkflowConfig) {
457
+ console.log('\n⚙️ Step 5: Setting up workflow configuration...');
458
+ await setupWorkflowConfig(config, repoRoot);
459
+ }
460
+ else {
461
+ console.log('\n⚠️ Step 5: Skipped (--skip-config specified)');
462
+ }
463
+ // 完了メッセージ
464
+ console.log('\n');
465
+ console.log('🎉 セットアップ完了!');
466
+ console.log('');
467
+ console.log('次のステップ:');
468
+ console.log(' 1. .env ファイルの内容を確認・編集');
469
+ if (!config.skipWorkflowConfig) {
470
+ console.log(' 2. .michi/config.json の内容を確認(必要に応じて編集)');
471
+ }
472
+ switch (config.environment) {
473
+ case 'cursor':
474
+ console.log(' 3. Cursor で開く: cursor .');
475
+ console.log(' 4. /kiro:spec-init <機能説明> で開発開始');
476
+ break;
477
+ case 'claude':
478
+ case 'claude-agent':
479
+ console.log(' 3. Claude Code で開く');
480
+ console.log(' 4. /kiro:spec-init <機能説明> で開発開始');
481
+ break;
482
+ default:
483
+ console.log(' 3. AI開発環境で開く');
484
+ console.log(' 4. 開発開始');
485
+ }
486
+ console.log('');
487
+ console.log('詳細: https://github.com/sk8metalme/michi');
488
+ console.log('');
489
+ }
490
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ interface SetupOptions {
16
16
  lang?: string;
17
17
  projectName?: string;
18
18
  jiraKey?: string;
19
- withAgentSkills?: boolean;
19
+ agentSkills?: boolean;
20
20
  }
21
21
  /**
22
22
  * setup-existing コマンドのメイン処理
@@ -1 +1 @@
1
- {"version":3,"file":"setup-existing.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-existing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA6OD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkpBxE"}
1
+ {"version":3,"file":"setup-existing.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-existing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqRD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyqBxE"}
@@ -211,6 +211,40 @@ function copyAndRenderTemplates(sourceDir, destDir, context) {
211
211
  }
212
212
  }
213
213
  }
214
+ /**
215
+ * cc-sdd-overridesディレクトリからオーバーライドを適用
216
+ * @param sourceDir オーバーライドソースディレクトリ
217
+ * @param destDir 上書き先ディレクトリ
218
+ * @param context テンプレートコンテキスト
219
+ */
220
+ function applyOverrides(sourceDir, destDir, context) {
221
+ if (!existsSync(sourceDir)) {
222
+ return;
223
+ }
224
+ const entries = readdirSync(sourceDir, { withFileTypes: true });
225
+ for (const entry of entries) {
226
+ const sourcePath = join(sourceDir, entry.name);
227
+ const destPath = join(destDir, entry.name);
228
+ if (entry.isDirectory()) {
229
+ mkdirSync(destPath, { recursive: true });
230
+ applyOverrides(sourcePath, destPath, context);
231
+ }
232
+ else if (entry.isFile()) {
233
+ // テンプレートレンダリングを適用(.md, .jsonファイル)
234
+ if (entry.name.endsWith('.md') || entry.name.endsWith('.json')) {
235
+ const content = readFileSync(sourcePath, 'utf-8');
236
+ const rendered = renderTemplate(content, context);
237
+ writeFileSync(destPath, rendered, 'utf-8');
238
+ if (process.env.DEBUG) {
239
+ console.log(` 📄 Override applied: ${entry.name}`);
240
+ }
241
+ }
242
+ else {
243
+ cpSync(sourcePath, destPath);
244
+ }
245
+ }
246
+ }
247
+ }
214
248
  /**
215
249
  * setup-existing コマンドのメイン処理
216
250
  */
@@ -469,8 +503,20 @@ export async function setupExisting(options) {
469
503
  else {
470
504
  console.log(' ⚠️ Spec rules not found (skipped)');
471
505
  }
506
+ // cc-sdd-overridesによる上書き
507
+ const ccSddOverridesDir = join(templatesDir, 'michi', 'cc-sdd-overrides', 'settings');
508
+ if (existsSync(ccSddOverridesDir)) {
509
+ console.log('\n📋 Step 5.1: Applying Michi cc-sdd overrides...');
510
+ try {
511
+ applyOverrides(ccSddOverridesDir, join(currentDir, '.kiro/settings'), templateContext);
512
+ console.log(' ✅ cc-sdd overrides applied');
513
+ }
514
+ catch (error) {
515
+ throw new Error(`Failed to apply cc-sdd overrides: ${error instanceof Error ? error.message : error}`);
516
+ }
517
+ }
472
518
  // kiro-spec-tasksテンプレートを上書き(cc-sddのAI-DLC形式をMichiワークフロー形式に置換)
473
- console.log('\n📋 Step 5.1: Overriding kiro-spec-tasks template...');
519
+ console.log('\n📋 Step 5.2: Overriding kiro-spec-tasks command template...');
474
520
  const kiroSpecTasksSource = join(templatesDir, envConfig.templateSource, 'commands', 'kiro', 'kiro-spec-tasks.md');
475
521
  const kiroSpecTasksDest = join(currentDir, '.kiro', 'commands', 'kiro');
476
522
  if (existsSync(kiroSpecTasksSource)) {
@@ -616,8 +662,8 @@ JIRA_ISSUE_TYPE_SUBTASK=10037
616
662
  else {
617
663
  console.log(' ℹ️ .gitignore already contains .env entries');
618
664
  }
619
- // スキル/サブエージェントのインストール(オプション)
620
- if (options.withAgentSkills &&
665
+ // スキル/サブエージェントのインストール(デフォルト有効)
666
+ if (options.agentSkills !== false &&
621
667
  (config.environment === 'claude' || config.environment === 'claude-agent')) {
622
668
  console.log('\n🎯 Step 7.5: Installing skills and agents...');
623
669
  const homeDir = process.env.HOME || process.env.USERPROFILE;