@sk8metal/michi-cli 0.0.1

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 (99) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +465 -0
  3. package/dist/scripts/config/config-schema.d.ts +707 -0
  4. package/dist/scripts/config/config-schema.d.ts.map +1 -0
  5. package/dist/scripts/config/config-schema.js +100 -0
  6. package/dist/scripts/config/config-schema.js.map +1 -0
  7. package/dist/scripts/config-interactive.d.ts +10 -0
  8. package/dist/scripts/config-interactive.d.ts.map +1 -0
  9. package/dist/scripts/config-interactive.js +357 -0
  10. package/dist/scripts/config-interactive.js.map +1 -0
  11. package/dist/scripts/confluence-sync.d.ts +54 -0
  12. package/dist/scripts/confluence-sync.d.ts.map +1 -0
  13. package/dist/scripts/confluence-sync.js +407 -0
  14. package/dist/scripts/confluence-sync.js.map +1 -0
  15. package/dist/scripts/create-project.d.ts +12 -0
  16. package/dist/scripts/create-project.d.ts.map +1 -0
  17. package/dist/scripts/create-project.js +244 -0
  18. package/dist/scripts/create-project.js.map +1 -0
  19. package/dist/scripts/jira-sync.d.ts +39 -0
  20. package/dist/scripts/jira-sync.d.ts.map +1 -0
  21. package/dist/scripts/jira-sync.js +549 -0
  22. package/dist/scripts/jira-sync.js.map +1 -0
  23. package/dist/scripts/list-projects.d.ts +7 -0
  24. package/dist/scripts/list-projects.d.ts.map +1 -0
  25. package/dist/scripts/list-projects.js +61 -0
  26. package/dist/scripts/list-projects.js.map +1 -0
  27. package/dist/scripts/markdown-to-confluence.d.ts +19 -0
  28. package/dist/scripts/markdown-to-confluence.d.ts.map +1 -0
  29. package/dist/scripts/markdown-to-confluence.js +121 -0
  30. package/dist/scripts/markdown-to-confluence.js.map +1 -0
  31. package/dist/scripts/multi-project-estimate.d.ts +27 -0
  32. package/dist/scripts/multi-project-estimate.d.ts.map +1 -0
  33. package/dist/scripts/multi-project-estimate.js +202 -0
  34. package/dist/scripts/multi-project-estimate.js.map +1 -0
  35. package/dist/scripts/phase-runner.d.ts +19 -0
  36. package/dist/scripts/phase-runner.d.ts.map +1 -0
  37. package/dist/scripts/phase-runner.js +260 -0
  38. package/dist/scripts/phase-runner.js.map +1 -0
  39. package/dist/scripts/pr-automation.d.ts +12 -0
  40. package/dist/scripts/pr-automation.d.ts.map +1 -0
  41. package/dist/scripts/pr-automation.js +45 -0
  42. package/dist/scripts/pr-automation.js.map +1 -0
  43. package/dist/scripts/pre-flight-check.d.ts +15 -0
  44. package/dist/scripts/pre-flight-check.d.ts.map +1 -0
  45. package/dist/scripts/pre-flight-check.js +244 -0
  46. package/dist/scripts/pre-flight-check.js.map +1 -0
  47. package/dist/scripts/resource-dashboard.d.ts +7 -0
  48. package/dist/scripts/resource-dashboard.d.ts.map +1 -0
  49. package/dist/scripts/resource-dashboard.js +100 -0
  50. package/dist/scripts/resource-dashboard.js.map +1 -0
  51. package/dist/scripts/setup-existing-project.d.ts +13 -0
  52. package/dist/scripts/setup-existing-project.d.ts.map +1 -0
  53. package/dist/scripts/setup-existing-project.js +334 -0
  54. package/dist/scripts/setup-existing-project.js.map +1 -0
  55. package/dist/scripts/utils/config-loader.d.ts +20 -0
  56. package/dist/scripts/utils/config-loader.d.ts.map +1 -0
  57. package/dist/scripts/utils/config-loader.js +291 -0
  58. package/dist/scripts/utils/config-loader.js.map +1 -0
  59. package/dist/scripts/utils/config-validator.d.ts +34 -0
  60. package/dist/scripts/utils/config-validator.d.ts.map +1 -0
  61. package/dist/scripts/utils/config-validator.js +286 -0
  62. package/dist/scripts/utils/config-validator.js.map +1 -0
  63. package/dist/scripts/utils/confluence-hierarchy.d.ts +47 -0
  64. package/dist/scripts/utils/confluence-hierarchy.d.ts.map +1 -0
  65. package/dist/scripts/utils/confluence-hierarchy.js +516 -0
  66. package/dist/scripts/utils/confluence-hierarchy.js.map +1 -0
  67. package/dist/scripts/utils/feature-name-validator.d.ts +25 -0
  68. package/dist/scripts/utils/feature-name-validator.d.ts.map +1 -0
  69. package/dist/scripts/utils/feature-name-validator.js +113 -0
  70. package/dist/scripts/utils/feature-name-validator.js.map +1 -0
  71. package/dist/scripts/utils/project-meta.d.ts +23 -0
  72. package/dist/scripts/utils/project-meta.d.ts.map +1 -0
  73. package/dist/scripts/utils/project-meta.js +50 -0
  74. package/dist/scripts/utils/project-meta.js.map +1 -0
  75. package/dist/scripts/validate-phase.d.ts +17 -0
  76. package/dist/scripts/validate-phase.d.ts.map +1 -0
  77. package/dist/scripts/validate-phase.js +234 -0
  78. package/dist/scripts/validate-phase.js.map +1 -0
  79. package/dist/scripts/workflow-orchestrator.d.ts +35 -0
  80. package/dist/scripts/workflow-orchestrator.d.ts.map +1 -0
  81. package/dist/scripts/workflow-orchestrator.js +130 -0
  82. package/dist/scripts/workflow-orchestrator.js.map +1 -0
  83. package/dist/src/cli.d.ts +11 -0
  84. package/dist/src/cli.d.ts.map +1 -0
  85. package/dist/src/cli.js +229 -0
  86. package/dist/src/cli.js.map +1 -0
  87. package/docs/config-reference.md +666 -0
  88. package/docs/customization-guide.md +432 -0
  89. package/docs/multi-project.md +233 -0
  90. package/docs/new-project-setup.md +576 -0
  91. package/docs/phase-automation.md +361 -0
  92. package/docs/quick-reference.md +291 -0
  93. package/docs/setup.md +404 -0
  94. package/docs/tasks-template.md +550 -0
  95. package/docs/testing.md +202 -0
  96. package/docs/workflow.md +342 -0
  97. package/env.example +44 -0
  98. package/mcp.json.example +14 -0
  99. package/package.json +97 -0
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * 新規プロジェクト自動セットアップスクリプト
4
+ *
5
+ * 使い方:
6
+ * npm run create-project -- \
7
+ * --name "customer-a-service-1" \
8
+ * --project-name "A社 サービス1" \
9
+ * --jira-key "PRJA"
10
+ */
11
+ import { execSync } from 'child_process';
12
+ import { writeFileSync, mkdirSync, cpSync, existsSync } from 'fs';
13
+ import { resolve, join, dirname } from 'path';
14
+ import { fileURLToPath } from 'url';
15
+ import { config as loadDotenv } from 'dotenv';
16
+ // ESモジュール対応: __dirnameの代替
17
+ const __filename = fileURLToPath(import.meta.url);
18
+ const __dirname = dirname(__filename);
19
+ loadDotenv();
20
+ function parseArgs() {
21
+ const args = process.argv.slice(2);
22
+ const config = {};
23
+ for (let i = 0; i < args.length; i += 2) {
24
+ const key = args[i].replace(/^--/, '');
25
+ const value = args[i + 1];
26
+ switch (key) {
27
+ case 'name':
28
+ config.name = value;
29
+ break;
30
+ case 'project-name':
31
+ config.projectName = value;
32
+ break;
33
+ case 'jira-key':
34
+ config.jiraKey = value;
35
+ break;
36
+ case 'org':
37
+ config.org = value;
38
+ break;
39
+ case 'labels':
40
+ // カンマ区切りでラベル配列に変換
41
+ config.labels = value.split(',').map(l => l.trim());
42
+ break;
43
+ }
44
+ }
45
+ // 必須フィールドチェック
46
+ if (!config.name || !config.projectName || !config.jiraKey) {
47
+ console.error('Missing required parameters');
48
+ console.error('Usage: npm run create-project -- --name <name> --project-name <display> --jira-key <key>');
49
+ process.exit(1);
50
+ }
51
+ return config;
52
+ }
53
+ async function createProject(config) {
54
+ const org = config.org || process.env.GITHUB_ORG;
55
+ if (!org) {
56
+ console.error('❌ GitHub organization not specified');
57
+ console.error(' Set GITHUB_ORG in .env or use --org parameter');
58
+ process.exit(1);
59
+ }
60
+ const repoName = config.name;
61
+ const repoUrl = `https://github.com/${org}/${repoName}`;
62
+ const projectDir = resolve(`../${repoName}`);
63
+ console.log(`🚀 Creating new project: ${config.projectName}`);
64
+ console.log(` Repository: ${org}/${repoName}`);
65
+ console.log(` JIRA: ${config.jiraKey}`);
66
+ console.log('');
67
+ // Step 1: GitHubリポジトリ作成
68
+ console.log('📦 Step 1: Creating GitHub repository...');
69
+ try {
70
+ execSync(`gh repo create ${org}/${repoName} --private --description "${config.projectName}"`, { stdio: 'inherit' });
71
+ console.log(' ✅ Repository created');
72
+ }
73
+ catch (error) {
74
+ console.log(' ⚠️ Repository may already exist');
75
+ }
76
+ // Step 2: リポジトリクローン
77
+ console.log('\n📥 Step 2: Cloning repository...');
78
+ try {
79
+ execSync(`jj git clone ${repoUrl} ${projectDir}`, { stdio: 'inherit' });
80
+ console.log(' ✅ Repository cloned');
81
+ }
82
+ catch (error) {
83
+ console.log(' ⚠️ Clone failed, checking if directory exists...');
84
+ }
85
+ // Step 3: ディレクトリ存在確認と移動
86
+ if (!existsSync(projectDir)) {
87
+ console.error(' ❌ Project directory does not exist. Clone may have failed.');
88
+ console.error(` Expected directory: ${projectDir}`);
89
+ process.exit(1);
90
+ }
91
+ process.chdir(projectDir);
92
+ console.log(` 📂 Working directory: ${projectDir}`);
93
+ // Step 4: cc-sdd導入
94
+ console.log('\n⚙️ Step 4: Installing cc-sdd...');
95
+ execSync('npx cc-sdd@latest --cursor --lang ja --yes', { stdio: 'inherit' });
96
+ console.log(' ✅ cc-sdd installed');
97
+ // Step 5: .kiro/project.json 作成
98
+ console.log('\n📝 Step 5: Creating project metadata...');
99
+ mkdirSync('.kiro', { recursive: true });
100
+ // ラベル生成(安全なフォールバック付き)
101
+ const labels = config.labels || (() => {
102
+ // プロジェクトIDからプロジェクトラベル生成
103
+ const projectLabel = repoName.toLowerCase().replace(/[^a-z0-9-]/g, '');
104
+ const labelSet = new Set([`project:${projectLabel}`]);
105
+ // ハイフンが存在する場合のみサービスラベルを生成
106
+ if (repoName.includes('-')) {
107
+ const parts = repoName.split('-');
108
+ const servicePart = parts[parts.length - 1];
109
+ const serviceLabel = servicePart.toLowerCase().replace(/[^a-z0-9-]/g, '');
110
+ // サービスラベルがプロジェクトラベルと異なる場合のみ追加
111
+ if (serviceLabel !== projectLabel) {
112
+ labelSet.add(`service:${serviceLabel}`);
113
+ }
114
+ }
115
+ return Array.from(labelSet);
116
+ })();
117
+ const projectJson = {
118
+ projectId: repoName,
119
+ projectName: config.projectName,
120
+ jiraProjectKey: config.jiraKey,
121
+ confluenceLabels: labels,
122
+ status: 'active',
123
+ team: [],
124
+ stakeholders: ['@企画', '@部長'],
125
+ repository: repoUrl,
126
+ description: `${config.projectName}の開発`
127
+ };
128
+ writeFileSync('.kiro/project.json', JSON.stringify(projectJson, null, 2));
129
+ console.log(' ✅ project.json created');
130
+ // Step 6: Michiから共通ファイルをコピー
131
+ console.log('\n📋 Step 6: Copying common files from Michi...');
132
+ const michiPath = resolve(__dirname, '..');
133
+ // コピー先ディレクトリを事前に作成
134
+ mkdirSync('.cursor/rules', { recursive: true });
135
+ mkdirSync('.cursor/commands/kiro', { recursive: true });
136
+ mkdirSync('.kiro/steering', { recursive: true });
137
+ mkdirSync('.kiro/settings/templates', { recursive: true });
138
+ mkdirSync('scripts/utils', { recursive: true });
139
+ // ルールファイル
140
+ const rulesToCopy = [
141
+ 'multi-project.mdc',
142
+ 'github-ssot.mdc',
143
+ 'atlassian-mcp.mdc'
144
+ ];
145
+ for (const rule of rulesToCopy) {
146
+ const src = join(michiPath, '.cursor/rules', rule);
147
+ const dest = join(projectDir, '.cursor/rules', rule);
148
+ if (existsSync(src)) {
149
+ cpSync(src, dest);
150
+ console.log(` ✅ Copied: .cursor/rules/${rule}`);
151
+ }
152
+ }
153
+ // カスタムコマンド
154
+ const commandsToCopy = [
155
+ 'confluence-sync.md',
156
+ 'project-switch.md'
157
+ ];
158
+ for (const cmd of commandsToCopy) {
159
+ const src = join(michiPath, '.cursor/commands/kiro', cmd);
160
+ const dest = join(projectDir, '.cursor/commands/kiro', cmd);
161
+ if (existsSync(src)) {
162
+ cpSync(src, dest);
163
+ console.log(` ✅ Copied: .cursor/commands/kiro/${cmd}`);
164
+ }
165
+ }
166
+ // Steering
167
+ const steeringDir = join(michiPath, '.kiro/steering');
168
+ if (existsSync(steeringDir)) {
169
+ mkdirSync('.kiro/steering', { recursive: true });
170
+ cpSync(steeringDir, '.kiro/steering', { recursive: true });
171
+ console.log(' ✅ Copied: .kiro/steering/');
172
+ }
173
+ // Scripts(必要なスクリプトのみコピー)
174
+ const scriptsDir = join(michiPath, 'scripts');
175
+ if (existsSync(scriptsDir)) {
176
+ const scriptsToCopy = [
177
+ 'confluence-sync.ts',
178
+ 'jira-sync.ts',
179
+ 'pr-automation.ts',
180
+ 'markdown-to-confluence.ts',
181
+ 'workflow-orchestrator.ts',
182
+ 'list-projects.ts',
183
+ 'resource-dashboard.ts',
184
+ 'multi-project-estimate.ts',
185
+ 'utils/project-meta.ts'
186
+ ];
187
+ for (const script of scriptsToCopy) {
188
+ const src = join(scriptsDir, script);
189
+ const dest = join(projectDir, 'scripts', script);
190
+ if (existsSync(src)) {
191
+ // ディレクトリが必要な場合は作成
192
+ const destDir = dirname(dest);
193
+ mkdirSync(destDir, { recursive: true });
194
+ cpSync(src, dest);
195
+ console.log(` ✅ Copied: scripts/${script}`);
196
+ }
197
+ }
198
+ }
199
+ // package.json, tsconfig.json
200
+ ['package.json', 'tsconfig.json'].forEach(file => {
201
+ const src = join(michiPath, file);
202
+ if (existsSync(src)) {
203
+ cpSync(src, file);
204
+ console.log(` ✅ Copied: ${file}`);
205
+ }
206
+ });
207
+ // Step 7: .env テンプレート作成
208
+ console.log('\n🔐 Step 7: Creating .env template...');
209
+ execSync('npm run setup:env', { stdio: 'inherit' });
210
+ console.log(' ✅ .env created');
211
+ // Step 8: npm install
212
+ console.log('\n📦 Step 8: Installing dependencies...');
213
+ execSync('npm install', { stdio: 'inherit' });
214
+ console.log(' ✅ Dependencies installed');
215
+ // Step 9: 初期コミット
216
+ console.log('\n💾 Step 9: Creating initial commit...');
217
+ execSync(`jj commit -m "chore: プロジェクト初期化
218
+
219
+ - cc-sdd導入
220
+ - プロジェクトメタデータ設定(${config.jiraKey})
221
+ - 自動化スクリプト追加
222
+ - Confluence/JIRA連携設定"`, { stdio: 'inherit' });
223
+ execSync('jj bookmark create main -r "@-"', { stdio: 'inherit' });
224
+ console.log(' ✅ Initial commit created');
225
+ // 完了メッセージ
226
+ console.log('\n');
227
+ console.log('🎉 プロジェクトセットアップ完了!');
228
+ console.log('');
229
+ console.log('次のステップ:');
230
+ console.log(` 1. cd ${projectDir}`);
231
+ console.log(' 2. .env ファイルを編集して認証情報を設定');
232
+ console.log(' 3. jj git push --bookmark main --allow-new');
233
+ console.log(' 4. Cursor で開く: cursor .');
234
+ console.log(' 5. /kiro:spec-init <機能説明> で開発開始');
235
+ console.log('');
236
+ console.log('詳細: docs/new-project-setup.md');
237
+ }
238
+ // 実行
239
+ const config = parseArgs();
240
+ createProject(config).catch(error => {
241
+ console.error('❌ Error:', error.message);
242
+ process.exit(1);
243
+ });
244
+ //# sourceMappingURL=create-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../scripts/create-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * JIRA連携スクリプト
3
+ * tasks.md から JIRA Epic/Story/Subtask を自動作成
4
+ *
5
+ * 【重要】Epic Link について:
6
+ * JIRA Cloud では Story を Epic に紐付けるには、Epic Link カスタムフィールド
7
+ * (通常 customfield_10014)を使用する必要があります。
8
+ *
9
+ * 現在の実装では parent フィールドを使用していますが、これは Subtask 専用です。
10
+ * Story 作成時に 400 エラーが発生する可能性があります。
11
+ *
12
+ * 対処方法:
13
+ * 1. JIRA 管理画面で Epic Link のカスタムフィールドIDを確認
14
+ * 2. 環境変数 JIRA_EPIC_LINK_FIELD に設定(例: customfield_10014)
15
+ * 3. または、Story 作成後に手動で Epic Link を設定
16
+ *
17
+ * 参考: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-post
18
+ */
19
+ interface JIRAConfig {
20
+ url: string;
21
+ email: string;
22
+ apiToken: string;
23
+ }
24
+ declare class JIRAClient {
25
+ private baseUrl;
26
+ private auth;
27
+ private requestDelay;
28
+ constructor(config: JIRAConfig);
29
+ /**
30
+ * JQL検索でIssueを検索
31
+ * @throws 検索エラー時は例外を再スロー(呼び出し元で処理)
32
+ */
33
+ searchIssues(jql: string): Promise<any[]>;
34
+ createIssue(payload: any): Promise<any>;
35
+ updateIssue(issueKey: string, payload: any): Promise<void>;
36
+ }
37
+ declare function syncTasksToJIRA(featureName: string): Promise<void>;
38
+ export { syncTasksToJIRA, JIRAClient };
39
+ //# sourceMappingURL=jira-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-sync.d.ts","sourceRoot":"","sources":["../../scripts/jira-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAiPH,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,cAAM,UAAU;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,UAAU;IAM9B;;;OAGG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAmBzC,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAavC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAWjE;AAED,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+RjE;AAmBD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC"}