@sk8metal/michi-cli 0.3.0 → 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 (157) hide show
  1. package/CHANGELOG.md +43 -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/init.test.d.ts +5 -0
  82. package/dist/src/__tests__/integration/setup/init.test.d.ts.map +1 -0
  83. package/dist/src/__tests__/integration/setup/init.test.js +352 -0
  84. package/dist/src/__tests__/integration/setup/init.test.js.map +1 -0
  85. package/dist/src/cli.d.ts.map +1 -1
  86. package/dist/src/cli.js +28 -20
  87. package/dist/src/cli.js.map +1 -1
  88. package/dist/src/commands/init.d.ts +28 -0
  89. package/dist/src/commands/init.d.ts.map +1 -0
  90. package/dist/src/commands/init.js +490 -0
  91. package/dist/src/commands/init.js.map +1 -0
  92. package/docs/user-guide/getting-started/setup.md +31 -3
  93. package/docs/user-guide/guides/customization.md +64 -11
  94. package/docs/user-guide/guides/workflow.md +35 -21
  95. package/docs/user-guide/reference/config.md +30 -5
  96. package/docs/user-guide/reference/quick-reference.md +68 -74
  97. package/docs/user-guide/testing/test-planning-flow.md +4 -0
  98. package/package.json +2 -4
  99. package/scripts/config-global.ts +160 -0
  100. package/scripts/confluence-sync.ts +91 -27
  101. package/scripts/jira-sync.ts +284 -218
  102. package/scripts/list-projects.ts +2 -2
  103. package/scripts/multi-project-estimate.ts +3 -3
  104. package/scripts/phase-runner.ts +391 -594
  105. package/scripts/pre-flight-check.ts +20 -9
  106. package/scripts/pre-publish-check.sh +3 -34
  107. package/scripts/resource-dashboard.ts +4 -4
  108. package/scripts/spec-impl-workflow.ts +1 -1
  109. package/scripts/template/renderer.ts +1 -1
  110. package/scripts/test-interactive.ts +0 -19
  111. package/scripts/test-new-features.ts +10 -7
  112. package/scripts/test-npm-package.sh +3 -34
  113. package/scripts/test-spec-generator.ts +3 -7
  114. package/scripts/utils/config-loader.ts +107 -26
  115. package/scripts/utils/config-sections.ts +316 -0
  116. package/scripts/utils/config-validator.ts +66 -1
  117. package/scripts/utils/confluence-approval.ts +8 -6
  118. package/scripts/utils/confluence-hierarchy.ts +27 -27
  119. package/scripts/utils/interactive-helpers.ts +135 -0
  120. package/scripts/utils/jira-issue-type-fetcher.ts +29 -21
  121. package/scripts/utils/release-notes-generator.ts +3 -2
  122. package/scripts/utils/spec-updater.ts +37 -15
  123. package/scripts/utils/tasks-converter.ts +4 -6
  124. package/scripts/utils/tasks-format-validator.ts +0 -13
  125. package/scripts/utils/test-runner.ts +4 -3
  126. package/scripts/validate-phase.ts +21 -80
  127. package/scripts/workflow-orchestrator.ts +16 -25
  128. package/templates/claude/commands/kiro/kiro-spec-impl.md +4 -0
  129. package/templates/claude/commands/kiro/kiro-spec-tasks.md +3 -1
  130. package/templates/claude/commands/michi/confluence-sync.md +8 -2
  131. package/templates/claude/commands/michi/design-review.md +4 -0
  132. package/templates/claude/commands/michi/e2e-plan.md +4 -0
  133. package/templates/claude/commands/michi/license-check.md +4 -0
  134. package/templates/claude/commands/michi/pr-resolve.md +4 -0
  135. package/templates/claude/commands/michi/project-switch.md +8 -2
  136. package/templates/claude/commands/michi/spec-design.md +78 -0
  137. package/templates/claude/commands/michi/spec-impl.md +716 -0
  138. package/templates/claude/commands/michi/test-planning.md +174 -0
  139. package/templates/claude/commands/michi/validate-design.md +58 -0
  140. package/templates/claude/commands/michi/version-audit.md +4 -0
  141. package/templates/michi/cc-sdd-overrides/README.md +8 -0
  142. package/templates/michi/cc-sdd-overrides/settings/rules/design-review-michi.md +53 -0
  143. package/dist/scripts/config-interactive.d.ts +0 -10
  144. package/dist/scripts/config-interactive.d.ts.map +0 -1
  145. package/dist/scripts/config-interactive.js +0 -372
  146. package/dist/scripts/config-interactive.js.map +0 -1
  147. package/dist/scripts/setup-existing-project.d.ts +0 -15
  148. package/dist/scripts/setup-existing-project.d.ts.map +0 -1
  149. package/dist/scripts/setup-existing-project.js +0 -455
  150. package/dist/scripts/setup-existing-project.js.map +0 -1
  151. package/dist/scripts/setup-interactive.d.ts +0 -10
  152. package/dist/scripts/setup-interactive.d.ts.map +0 -1
  153. package/dist/scripts/setup-interactive.js +0 -413
  154. package/dist/scripts/setup-interactive.js.map +0 -1
  155. package/scripts/config-interactive.ts +0 -550
  156. package/scripts/setup-existing-project.ts +0 -585
  157. package/scripts/setup-interactive.ts +0 -565
@@ -17,6 +17,56 @@ import { updateSpecJsonAfterConfluenceSync, loadSpecJson } from './utils/spec-up
17
17
  // 環境変数読み込み
18
18
  config();
19
19
 
20
+ /**
21
+ * Confluence APIページレスポンス
22
+ */
23
+ export interface ConfluencePage {
24
+ id: string;
25
+ title: string;
26
+ type: string;
27
+ version?: {
28
+ number: number;
29
+ };
30
+ _links?: {
31
+ webui: string;
32
+ };
33
+ ancestors?: Array<{ id: string }>;
34
+ results?: ConfluencePage[];
35
+ }
36
+
37
+ /**
38
+ * Confluenceエラーオブジェクト
39
+ */
40
+ interface ConfluenceError extends Error {
41
+ response?: {
42
+ status: number;
43
+ data: unknown;
44
+ };
45
+ config?: {
46
+ url?: string;
47
+ params?: unknown;
48
+ };
49
+ }
50
+
51
+ /**
52
+ * Confluenceページ作成ペイロード
53
+ */
54
+ interface ConfluenceCreatePagePayload {
55
+ type: 'page';
56
+ title: string;
57
+ space: { key: string };
58
+ body: {
59
+ storage: {
60
+ value: string;
61
+ representation: 'storage';
62
+ };
63
+ };
64
+ metadata: {
65
+ labels: Array<{ name: string }>;
66
+ };
67
+ ancestors?: Array<{ id: string }>;
68
+ }
69
+
20
70
  /**
21
71
  * リクエスト間のスリープ処理(レートリミット対策)
22
72
  */
@@ -75,7 +125,7 @@ class ConfluenceClient {
75
125
  * @param title ページタイトル
76
126
  * @param parentId 親ページID(オプション)。指定された場合、その親ページの子ページのみを検索
77
127
  */
78
- async searchPage(spaceKey: string, title: string, parentId?: string): Promise<any | null> {
128
+ async searchPage(spaceKey: string, title: string, parentId?: string): Promise<ConfluencePage | null> {
79
129
  // レートリミット対策: リクエスト前に待機
80
130
  await sleep(this.requestDelay);
81
131
 
@@ -129,27 +179,34 @@ class ConfluenceClient {
129
179
  }
130
180
 
131
181
  return null;
132
- } catch (error: any) {
182
+ } catch (error: unknown) {
183
+ const isAxiosError = axios.isAxiosError(error);
184
+
133
185
  // 404エラーは既存ページがないことを意味するので、nullを返す
134
- if (error.response?.status === 404) {
186
+ if (isAxiosError && error.response?.status === 404) {
135
187
  return null;
136
188
  }
137
-
189
+
138
190
  // その他のエラーは詳細をログ出力
139
- console.error('Error searching page:', error.message);
140
- if (error.response) {
191
+ const message = error instanceof Error ? error.message : String(error);
192
+ console.error('Error searching page:', message);
193
+
194
+ if (isAxiosError && error.response) {
141
195
  console.error(' Status:', error.response.status);
142
196
  console.error(' Data:', JSON.stringify(error.response.data, null, 2));
143
197
  }
144
-
198
+
145
199
  // 404以外のエラーは再スロー(認証、権限、ネットワーク、サーバーエラーなど)
146
200
  // エラーの詳細情報を含めて再スロー
147
- if (error.response) {
201
+ if (isAxiosError && error.response) {
148
202
  // HTTPレスポンスがある場合(4xx/5xxエラー)
149
- const enhancedError = new Error(
150
- `Confluence API error: ${error.message} (status: ${error.response.status})`
203
+ const enhancedError: ConfluenceError = new Error(
204
+ `Confluence API error: ${message} (status: ${error.response.status})`
151
205
  );
152
- (enhancedError as any).response = error.response;
206
+ enhancedError.response = {
207
+ status: error.response.status,
208
+ data: error.response.data
209
+ };
153
210
  throw enhancedError;
154
211
  } else {
155
212
  // ネットワークエラーなど、レスポンスがない場合
@@ -161,11 +218,11 @@ class ConfluenceClient {
161
218
  /**
162
219
  * ページを作成
163
220
  */
164
- async createPage(spaceKey: string, title: string, content: string, labels: string[] = [], parentId?: string): Promise<any> {
221
+ async createPage(spaceKey: string, title: string, content: string, labels: string[] = [], parentId?: string): Promise<ConfluencePage> {
165
222
  // レートリミット対策: リクエスト前に待機
166
223
  await sleep(this.requestDelay);
167
-
168
- const payload: any = {
224
+
225
+ const payload: ConfluenceCreatePagePayload = {
169
226
  type: 'page',
170
227
  title,
171
228
  space: { key: spaceKey },
@@ -204,14 +261,14 @@ class ConfluenceClient {
204
261
  content: string,
205
262
  labels: string[] = [],
206
263
  parentId: string
207
- ): Promise<any> {
264
+ ): Promise<ConfluencePage> {
208
265
  return this.createPage(spaceKey, title, content, labels, parentId);
209
266
  }
210
267
 
211
268
  /**
212
269
  * ページを更新
213
270
  */
214
- async updatePage(pageId: string, title: string, content: string, version: number): Promise<any> {
271
+ async updatePage(pageId: string, title: string, content: string, version: number): Promise<ConfluencePage> {
215
272
  // レートリミット対策: リクエスト前に待機
216
273
  await sleep(this.requestDelay);
217
274
 
@@ -264,25 +321,32 @@ class ConfluenceClient {
264
321
  }
265
322
 
266
323
  return null; // ルートページ
267
- } catch (error: any) {
324
+ } catch (error: unknown) {
325
+ const isAxiosError = axios.isAxiosError(error);
326
+
268
327
  // 404エラーはページが存在しないことを意味する
269
- if (error.response?.status === 404) {
328
+ if (isAxiosError && error.response?.status === 404) {
270
329
  return null;
271
330
  }
272
-
331
+
273
332
  // その他のエラーは詳細をログ出力
274
- console.error('Error getting page parent:', error.message);
275
- if (error.response) {
333
+ const message = error instanceof Error ? error.message : String(error);
334
+ console.error('Error getting page parent:', message);
335
+
336
+ if (isAxiosError && error.response) {
276
337
  console.error(' Status:', error.response.status);
277
338
  console.error(' Data:', JSON.stringify(error.response.data, null, 2));
278
339
  }
279
-
340
+
280
341
  // 404以外のエラーは再スロー
281
- if (error.response) {
282
- const enhancedError = new Error(
283
- `Confluence API error: ${error.message} (status: ${error.response.status})`
342
+ if (isAxiosError && error.response) {
343
+ const enhancedError: ConfluenceError = new Error(
344
+ `Confluence API error: ${message} (status: ${error.response.status})`
284
345
  );
285
- (enhancedError as any).response = error.response;
346
+ enhancedError.response = {
347
+ status: error.response.status,
348
+ data: error.response.data
349
+ };
286
350
  throw enhancedError;
287
351
  } else {
288
352
  throw error;
@@ -454,7 +518,7 @@ if (import.meta.url === `file://${process.argv[1]}`) {
454
518
  }
455
519
 
456
520
  const featureName = args[0];
457
- const docType = (args[1] as any) || 'requirements';
521
+ const docType = (args[1] as 'requirements' | 'design' | 'tasks' | undefined) || 'requirements';
458
522
 
459
523
  syncToConfluence(featureName, docType)
460
524
  .then(() => {