@einja/dev-cli 0.1.20 → 0.1.21

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 (25) hide show
  1. package/dist/commands/task-loop/lib/issue-validator.d.ts +36 -0
  2. package/dist/commands/task-loop/lib/issue-validator.d.ts.map +1 -0
  3. package/dist/commands/task-loop/lib/issue-validator.js +367 -0
  4. package/dist/commands/task-loop/lib/issue-validator.js.map +1 -0
  5. package/package.json +1 -1
  6. package/presets/default/.claude/agents/einja/backend-architect.md +3 -1
  7. package/presets/default/.claude/agents/einja/design-engineer.md +3 -1
  8. package/presets/default/.claude/agents/einja/docs/docs-updater.md +1 -1
  9. package/presets/default/.claude/agents/einja/frontend-architect.md +3 -1
  10. package/presets/default/.claude/agents/einja/frontend-coder.md +3 -1
  11. package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +133 -176
  12. package/presets/default/.claude/agents/einja/specs/spec-tasks-validator.md +150 -0
  13. package/presets/default/.claude/agents/einja/task/task-executer.md +19 -11
  14. package/presets/default/.claude/commands/einja/spec-create.md +85 -14
  15. package/presets/default/.claude/skills/einja-general-context-loader/SKILL.md +1 -1
  16. package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +4 -4
  17. package/scaffolds/instructions/deployment-setup.md +43 -2
  18. package/scaffolds/instructions/environment-setup.md +6 -18
  19. package/scaffolds/instructions/task-execute.md +31 -31
  20. package/scaffolds/instructions/task-vibe-kanban-loop.md +5 -5
  21. package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +1 -1
  22. package/scaffolds/steering/development-workflow.md +21 -21
  23. package/scaffolds/steering/infrastructure/deployment.md +18 -7
  24. package/scaffolds/steering/infrastructure/environment-variables.md +11 -8
  25. package/scaffolds/steering/task-management.md +131 -7
@@ -0,0 +1,36 @@
1
+ /**
2
+ * GitHub Issue タスク一覧バリデーター
3
+ *
4
+ * タスク管理ガイドラインに基づいてフォーマットを検証
5
+ */
6
+ import type { ParsedIssue } from "./types.js";
7
+ /** バリデーションエラー種別 */
8
+ export type ValidationErrorType = "phase_number_discontinuous" | "invalid_task_group_id" | "invalid_task_id" | "missing_metadata" | "invalid_dependency_format" | "missing_dependency_target" | "invalid_indent" | "too_many_phases" | "horizontal_split_detected";
9
+ /** バリデーションエラー */
10
+ export interface ValidationError {
11
+ type: ValidationErrorType;
12
+ taskId?: string;
13
+ taskGroupId?: string;
14
+ phaseNumber?: number;
15
+ line?: number;
16
+ message: string;
17
+ fixSuggestion: string;
18
+ }
19
+ /** バリデーション結果 */
20
+ export interface ValidationResult {
21
+ isValid: boolean;
22
+ errors: ValidationError[];
23
+ }
24
+ /**
25
+ * Issue本文をバリデーション
26
+ */
27
+ export declare function validateIssueBody(body: string): ValidationResult;
28
+ /**
29
+ * 解析済みIssueをバリデーション
30
+ */
31
+ export declare function validateParsedIssue(parsedIssue: ParsedIssue): ValidationResult;
32
+ /**
33
+ * エラーをMarkdown形式でフォーマット
34
+ */
35
+ export declare function formatValidationErrors(result: ValidationResult, retryCount: number, maxRetries: number): string;
36
+ //# sourceMappingURL=issue-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-validator.d.ts","sourceRoot":"","sources":["../../../../src/commands/task-loop/lib/issue-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,mBAAmB;AACnB,MAAM,MAAM,mBAAmB,GAC3B,4BAA4B,GAC5B,uBAAuB,GACvB,iBAAiB,GACjB,kBAAkB,GAClB,2BAA2B,GAC3B,2BAA2B,GAC3B,gBAAgB,GAChB,iBAAiB,GACjB,2BAA2B,CAAC;AAEhC,iBAAiB;AACjB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,gBAAgB;AAChB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAWD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAmBhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,GACvB,gBAAgB,CAqFlB;AAyOD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAqDR"}
@@ -0,0 +1,367 @@
1
+ /**
2
+ * GitHub Issue タスク一覧バリデーター
3
+ *
4
+ * タスク管理ガイドラインに基づいてフォーマットを検証
5
+ */
6
+ /** 必須メタデータ一覧 */
7
+ const REQUIRED_METADATA = [
8
+ "要件",
9
+ "依存関係",
10
+ "完了条件",
11
+ "対応設計",
12
+ "シナリオテスト",
13
+ ];
14
+ /**
15
+ * Issue本文をバリデーション
16
+ */
17
+ export function validateIssueBody(body) {
18
+ const errors = [];
19
+ // Phase検証
20
+ errors.push(...validatePhaseStructure(body));
21
+ // インデント検証
22
+ errors.push(...validateIndentation(body));
23
+ // メタデータ検証
24
+ errors.push(...validateMetadata(body));
25
+ // 依存関係検証
26
+ errors.push(...validateDependencies(body));
27
+ return {
28
+ isValid: errors.length === 0,
29
+ errors,
30
+ };
31
+ }
32
+ /**
33
+ * 解析済みIssueをバリデーション
34
+ */
35
+ export function validateParsedIssue(parsedIssue) {
36
+ const errors = [];
37
+ // Phase番号の連番チェック
38
+ const phaseNumbers = parsedIssue.phases
39
+ .map((p) => p.number)
40
+ .sort((a, b) => a - b);
41
+ for (let i = 0; i < phaseNumbers.length; i++) {
42
+ const expected = i + 1;
43
+ const actual = phaseNumbers[i];
44
+ // Phase 99 はドキュメント反映専用なので例外
45
+ if (actual !== expected && actual !== 99) {
46
+ errors.push({
47
+ type: "phase_number_discontinuous",
48
+ phaseNumber: actual,
49
+ message: `Phase番号が不連続です: 期待=${expected}, 実際=${actual}`,
50
+ fixSuggestion: `Phase ${actual} を Phase ${expected} に変更してください`,
51
+ });
52
+ }
53
+ }
54
+ // Phase数チェック(99を除く)
55
+ const regularPhases = parsedIssue.phases.filter((p) => p.number !== 99);
56
+ if (regularPhases.length > 3) {
57
+ errors.push({
58
+ type: "too_many_phases",
59
+ message: `Phase数が多すぎます: ${regularPhases.length}個(推奨: 2-3個)`,
60
+ fixSuggestion: "関連するPhaseを統合してください",
61
+ });
62
+ }
63
+ // タスクグループID形式チェック
64
+ for (const phase of parsedIssue.phases) {
65
+ for (const taskGroup of phase.taskGroups) {
66
+ if (!isValidTaskGroupId(taskGroup.id)) {
67
+ errors.push({
68
+ type: "invalid_task_group_id",
69
+ taskGroupId: taskGroup.id,
70
+ phaseNumber: phase.number,
71
+ message: `タスクグループIDが不正です: ${taskGroup.id}`,
72
+ fixSuggestion: "X.Y 形式(例: 1.1, 2.3)で記述してください",
73
+ });
74
+ }
75
+ // タスクID形式チェック
76
+ for (const task of taskGroup.tasks) {
77
+ if (!isValidTaskId(task.id, taskGroup.id)) {
78
+ errors.push({
79
+ type: "invalid_task_id",
80
+ taskId: task.id,
81
+ taskGroupId: taskGroup.id,
82
+ message: `タスクIDが不正です: ${task.id}`,
83
+ fixSuggestion: `${taskGroup.id}.N 形式(例: ${taskGroup.id}.1)で記述してください`,
84
+ });
85
+ }
86
+ }
87
+ }
88
+ }
89
+ // 依存関係の参照先チェック
90
+ const allTaskGroupIds = getAllTaskGroupIds(parsedIssue);
91
+ for (const phase of parsedIssue.phases) {
92
+ for (const taskGroup of phase.taskGroups) {
93
+ for (const dep of taskGroup.dependencies) {
94
+ // "Phase X完了" 形式はスキップ
95
+ if (dep.startsWith("Phase "))
96
+ continue;
97
+ // Issue参照 (#123) はスキップ
98
+ if (dep.startsWith("#"))
99
+ continue;
100
+ if (!allTaskGroupIds.has(dep)) {
101
+ errors.push({
102
+ type: "missing_dependency_target",
103
+ taskGroupId: taskGroup.id,
104
+ message: `存在しない依存関係: ${dep}(タスクグループ ${taskGroup.id})`,
105
+ fixSuggestion: `依存先 ${dep} が存在するか確認してください`,
106
+ });
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ isValid: errors.length === 0,
113
+ errors,
114
+ };
115
+ }
116
+ /**
117
+ * Phase構造を検証
118
+ */
119
+ function validatePhaseStructure(body) {
120
+ const errors = [];
121
+ const phasePattern = /^###\s*Phase\s*(\d+):/gim;
122
+ const matches = [...body.matchAll(phasePattern)];
123
+ const phaseNumbers = matches
124
+ .map((m) => Number.parseInt(m[1], 10))
125
+ .sort((a, b) => a - b);
126
+ for (let i = 0; i < phaseNumbers.length; i++) {
127
+ const expected = i + 1;
128
+ const actual = phaseNumbers[i];
129
+ if (actual !== expected && actual !== 99) {
130
+ errors.push({
131
+ type: "phase_number_discontinuous",
132
+ phaseNumber: actual,
133
+ message: `Phase番号が不連続です: 期待=${expected}, 実際=${actual}`,
134
+ fixSuggestion: `Phase ${actual} を Phase ${expected} に変更してください`,
135
+ });
136
+ }
137
+ }
138
+ return errors;
139
+ }
140
+ /**
141
+ * インデント検証
142
+ */
143
+ function validateIndentation(body) {
144
+ const errors = [];
145
+ const lines = body.split("\n");
146
+ for (let i = 0; i < lines.length; i++) {
147
+ const line = lines[i];
148
+ if (!line)
149
+ continue;
150
+ // タスク行の検証(X.Y.Z 形式)
151
+ const taskMatch = line.match(/^(\s*)-\s*(\d+\.\d+\.\d+)\s/);
152
+ if (taskMatch) {
153
+ const indent = taskMatch[1].length;
154
+ if (indent !== 2) {
155
+ errors.push({
156
+ type: "invalid_indent",
157
+ line: i + 1,
158
+ message: `タスクのインデントが不正です(期待: 2スペース、実際: ${indent}スペース)`,
159
+ fixSuggestion: "タスク行は2スペースでインデントしてください",
160
+ });
161
+ }
162
+ }
163
+ // メタデータ行の検証(**要件**: など)
164
+ const metadataMatch = line.match(/^(\s*)-?\s*\*\*(要件|依存関係|完了条件|対応設計|シナリオテスト)\*\*:/);
165
+ if (metadataMatch) {
166
+ const indent = metadataMatch[1].length;
167
+ if (indent !== 4) {
168
+ errors.push({
169
+ type: "invalid_indent",
170
+ line: i + 1,
171
+ message: `メタデータのインデントが不正です(期待: 4スペース、実際: ${indent}スペース)`,
172
+ fixSuggestion: "メタデータ行は4スペースでインデントしてください",
173
+ });
174
+ }
175
+ }
176
+ }
177
+ return errors;
178
+ }
179
+ /**
180
+ * メタデータ検証
181
+ */
182
+ function validateMetadata(body) {
183
+ const errors = [];
184
+ const lines = body.split("\n");
185
+ // タスク(X.Y.Z)ごとにメタデータをチェック
186
+ let currentTaskId = null;
187
+ let currentTaskMetadata = new Set();
188
+ let taskStartLine = 0;
189
+ for (let i = 0; i < lines.length; i++) {
190
+ const line = lines[i];
191
+ if (!line)
192
+ continue;
193
+ // 新しいタスク行の検出
194
+ const taskMatch = line.match(/^\s*-\s*(\d+\.\d+\.\d+)\s/);
195
+ if (taskMatch) {
196
+ // 前のタスクのメタデータをチェック
197
+ if (currentTaskId) {
198
+ const missing = REQUIRED_METADATA.filter((m) => !currentTaskMetadata.has(m));
199
+ for (const m of missing) {
200
+ errors.push({
201
+ type: "missing_metadata",
202
+ taskId: currentTaskId,
203
+ line: taskStartLine,
204
+ message: `タスク ${currentTaskId} に必須メタデータがありません: ${m}`,
205
+ fixSuggestion: `**${m}**: [内容] を追加してください`,
206
+ });
207
+ }
208
+ }
209
+ currentTaskId = taskMatch[1];
210
+ currentTaskMetadata = new Set();
211
+ taskStartLine = i + 1;
212
+ }
213
+ // メタデータ行の検出
214
+ const metadataMatch = line.match(/\*\*(要件|依存関係|完了条件|対応設計|シナリオテスト)\*\*:/);
215
+ if (metadataMatch && currentTaskId) {
216
+ currentTaskMetadata.add(metadataMatch[1]);
217
+ }
218
+ // タスクグループ行(新しいセクション)の検出
219
+ const taskGroupMatch = line.match(/^-\s*\[[ xX]\]\s*\d+\.\d+\s/);
220
+ if (taskGroupMatch && currentTaskId) {
221
+ // 前のタスクのメタデータをチェック
222
+ const missing = REQUIRED_METADATA.filter((m) => !currentTaskMetadata.has(m));
223
+ for (const m of missing) {
224
+ errors.push({
225
+ type: "missing_metadata",
226
+ taskId: currentTaskId,
227
+ line: taskStartLine,
228
+ message: `タスク ${currentTaskId} に必須メタデータがありません: ${m}`,
229
+ fixSuggestion: `**${m}**: [内容] を追加してください`,
230
+ });
231
+ }
232
+ currentTaskId = null;
233
+ currentTaskMetadata = new Set();
234
+ }
235
+ }
236
+ // 最後のタスクのチェック
237
+ if (currentTaskId) {
238
+ const missing = REQUIRED_METADATA.filter((m) => !currentTaskMetadata.has(m));
239
+ for (const m of missing) {
240
+ errors.push({
241
+ type: "missing_metadata",
242
+ taskId: currentTaskId,
243
+ line: taskStartLine,
244
+ message: `タスク ${currentTaskId} に必須メタデータがありません: ${m}`,
245
+ fixSuggestion: `**${m}**: [内容] を追加してください`,
246
+ });
247
+ }
248
+ }
249
+ return errors;
250
+ }
251
+ /**
252
+ * 依存関係検証
253
+ */
254
+ function validateDependencies(body) {
255
+ const errors = [];
256
+ const lines = body.split("\n");
257
+ for (let i = 0; i < lines.length; i++) {
258
+ const line = lines[i];
259
+ if (!line)
260
+ continue;
261
+ const depMatch = line.match(/\*\*依存関係\*\*:\s*(.+)$/);
262
+ if (depMatch) {
263
+ const depText = depMatch[1].trim();
264
+ if (depText === "なし" || depText === "-")
265
+ continue;
266
+ const deps = depText.split(/[,、]/).map((d) => d.trim());
267
+ for (const dep of deps) {
268
+ // 無効な形式をチェック
269
+ if (dep.match(/^\d+\.\d+完了$/)) {
270
+ errors.push({
271
+ type: "invalid_dependency_format",
272
+ line: i + 1,
273
+ message: `依存関係の書式が不正です: "${dep}"(task:loop非互換)`,
274
+ fixSuggestion: `"${dep}" → "${dep.replace("完了", "")}" に変更してください`,
275
+ });
276
+ }
277
+ if (dep.match(/^タスク\d+\.\d+$/)) {
278
+ errors.push({
279
+ type: "invalid_dependency_format",
280
+ line: i + 1,
281
+ message: `依存関係の書式が不正です: "${dep}"(task:loop非互換)`,
282
+ fixSuggestion: `"${dep}" → "${dep.replace("タスク", "")}" に変更してください`,
283
+ });
284
+ }
285
+ }
286
+ }
287
+ }
288
+ return errors;
289
+ }
290
+ /**
291
+ * タスクグループIDの形式チェック
292
+ */
293
+ function isValidTaskGroupId(id) {
294
+ return /^\d+\.\d+$/.test(id);
295
+ }
296
+ /**
297
+ * タスクIDの形式チェック
298
+ */
299
+ function isValidTaskId(taskId, taskGroupId) {
300
+ const pattern = new RegExp(`^${taskGroupId.replace(".", "\\.")}\\.\\d+$`);
301
+ return pattern.test(taskId);
302
+ }
303
+ /**
304
+ * 全タスクグループIDを取得
305
+ */
306
+ function getAllTaskGroupIds(parsedIssue) {
307
+ const ids = new Set();
308
+ for (const phase of parsedIssue.phases) {
309
+ for (const taskGroup of phase.taskGroups) {
310
+ ids.add(taskGroup.id);
311
+ }
312
+ }
313
+ return ids;
314
+ }
315
+ /**
316
+ * エラーをMarkdown形式でフォーマット
317
+ */
318
+ export function formatValidationErrors(result, retryCount, maxRetries) {
319
+ if (result.isValid) {
320
+ return `## バリデーション結果: SUCCESS
321
+
322
+ タスク一覧のフォーマットは正しいです。
323
+ 次のフェーズに進んでください。`;
324
+ }
325
+ const errorList = result.errors
326
+ .map((error, index) => {
327
+ const location = error.taskId
328
+ ? `**タスク ${error.taskId}**`
329
+ : error.taskGroupId
330
+ ? `**タスクグループ ${error.taskGroupId}**`
331
+ : error.line
332
+ ? `**行 ${error.line}**`
333
+ : `**Phase ${error.phaseNumber}**`;
334
+ return `${index + 1}. ${location} - ${error.type}
335
+ - 問題: ${error.message}
336
+ - 修正案: ${error.fixSuggestion}`;
337
+ })
338
+ .join("\n\n");
339
+ const remaining = maxRetries - retryCount;
340
+ if (remaining <= 0) {
341
+ return `## バリデーション結果: MAX_RETRIES_EXCEEDED
342
+
343
+ ${maxRetries}回の試行で検証に合格しませんでした。
344
+
345
+ ### 最終エラー一覧
346
+
347
+ ${errorList}
348
+
349
+ ### 次のアクション
350
+ ユーザーに手動での修正を依頼してください。
351
+ 自動修正では解決できない構造的な問題がある可能性があります。`;
352
+ }
353
+ return `## バリデーション結果: FAILURE
354
+
355
+ ### エラー一覧
356
+
357
+ ${errorList}
358
+
359
+ ### リトライ情報
360
+ - 現在の試行回数: ${retryCount}
361
+ - 最大試行回数: ${maxRetries}
362
+ - 残り試行回数: ${remaining}
363
+
364
+ ### 次のアクション
365
+ spec-tasks-generator に差し戻し、上記エラーを修正した新しいタスク一覧を生成してください。`;
366
+ }
367
+ //# sourceMappingURL=issue-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-validator.js","sourceRoot":"","sources":["../../../../src/commands/task-loop/lib/issue-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@einja/dev-cli",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Einja CLI - .claude設定とテンプレート同期をnpxでインストール",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -3,11 +3,13 @@ name: backend-architect
3
3
  description: バックエンドアーキテクチャ設計の専門家。4層アーキテクチャ、Repository/Mapper/Result型パターン、API設計、DB設計、テスト設計方針を担当します。技術選定、アーキテクチャ決定、スケーラブルな設計パターンの提案に特化しています。<example>Context: バックエンド機能のアーキテクチャを設計したい場合。user: "投稿管理APIのアーキテクチャを設計して" assistant: "backend-architectエージェントを使用して、4層アーキテクチャ、Repository設計、API設計、テスト方針を策定します" <commentary>バックエンドアーキテクチャ設計が必要なため、backend-architectエージェントを起動します。</commentary></example> <example>Context: 既存バックエンドアーキテクチャの改善提案が必要な場合。user: "現在のRepository実装を改善して" assistant: "backend-architectエージェントを起動して、Repository/Mapper設計、Result型パターン、エラーハンドリングの観点から設計改善を提案します" <commentary>アーキテクチャレビューと改善提案が必要なため、backend-architectエージェントに依頼します。</commentary></example>
4
4
  model: sonnet
5
5
  color: orange
6
+ skills:
7
+ - output-format
6
8
  ---
7
9
 
8
10
  ## ✅ 最重要: 出力形式
9
11
 
10
- **@.claude/skills/einja-output-format/SKILL.md の「backend-architect」テンプレートに従って報告すること。この形式から逸脱しないこと。**
12
+ **「backend-architect」テンプレートに従って報告すること。この形式から逸脱しないこと。**
11
13
 
12
14
  ---
13
15
 
@@ -3,11 +3,13 @@ name: design-engineer
3
3
  description: Figmaデザインとデザインシステムを完璧に理解し、Panda CSSで高品質なスタイリングを実装する専門エージェント。Figma MCPを駆使してデザイントークン、コンポーネント仕様、レスポンシブレイアウトを抽出し、デザインに100%忠実な実装を行います。<example>Context: FigmaデザインをPanda CSSで実装したい場合。user: "Figmaのダッシュボードデザインを実装して" assistant: "design-engineerエージェントを使用して、Figmaからデザイントークンとコンポーネント仕様を抽出し、Panda CSSで完璧に再現します" <commentary>Figmaデザインの実装が必要なため、design-engineerエージェントを起動してデザインシステムを分析・実装します。</commentary></example> <example>Context: デザインシステムのトークンを更新したい場合。user: "Figmaのデザイントークンをプロジェクトに反映して" assistant: "design-engineerエージェントを起動して、Figmaからカラー、タイポグラフィ、スペーシングのトークンを抽出し、Panda CSS設定に反映します" <commentary>デザインシステムの同期が必要なため、design-engineerエージェントに依頼します。</commentary></example>
4
4
  model: sonnet
5
5
  color: pink
6
+ skills:
7
+ - output-format
6
8
  ---
7
9
 
8
10
  ## ✅ 最重要: 出力形式
9
11
 
10
- **@.claude/skills/einja-output-format/SKILL.md の「design-engineer」テンプレートに従って報告すること。この形式から逸脱しないこと。**
12
+ **「design-engineer」テンプレートに従って報告すること。この形式から逸脱しないこと。**
11
13
 
12
14
  ---
13
15
 
@@ -153,7 +153,7 @@ color: purple
153
153
 
154
154
  このエージェントは以下から呼び出されます:
155
155
  - `task-exec` コマンドでPhase 99タスク(`99.*.*`)実行時
156
- - `/update-docs-by-task-specs` コマンド直接呼び出し時
156
+ - `/einja:update-docs-by-task-specs` コマンド直接呼び出し時
157
157
 
158
158
  ## 連携エージェント
159
159
 
@@ -3,11 +3,13 @@ name: frontend-architect
3
3
  description: フロントエンドアーキテクチャ設計の専門家。コンポーネント設計、状態管理戦略、データフロー設計、パフォーマンス設計を担当します。技術選定、アーキテクチャ決定、スケーラブルな設計パターンの提案に特化しています。<example>Context: 新しい機能のアーキテクチャを設計したい場合。user: "ダッシュボード機能のアーキテクチャを設計して" assistant: "architectエージェントを使用して、コンポーネント構造、状態管理、データフローの設計を行います" <commentary>アーキテクチャ設計が必要なため、architectエージェントを起動します。</commentary></example> <example>Context: 既存アーキテクチャの改善提案が必要な場合。user: "現在のコンポーネント構造を改善して" assistant: "architectエージェントを起動して、コンポーネントの責務分離、再利用性、保守性の観点から設計改善を提案します" <commentary>アーキテクチャレビューと改善提案が必要なため、architectエージェントに依頼します。</commentary></example>
4
4
  model: sonnet
5
5
  color: purple
6
+ skills:
7
+ - output-format
6
8
  ---
7
9
 
8
10
  ## ✅ 最重要: 出力形式
9
11
 
10
- **@.claude/skills/einja-output-format/SKILL.md の「frontend-architect」テンプレートに従って報告すること。この形式から逸脱しないこと。**
12
+ **「frontend-architect」テンプレートに従って報告すること。この形式から逸脱しないこと。**
11
13
 
12
14
  ---
13
15
 
@@ -3,11 +3,13 @@ name: frontend-coder
3
3
  description: フロントエンド実装を担当する専門エージェント。Next.js、React、Panda CSS、shadcn/uiを使用したコンポーネント実装、状態管理、UI/UX実装に特化しています。<example>Context: ユーザーがログインフォームコンポーネントを実装したい場合。user: "ログインフォームコンポーネントを実装して" assistant: "frontend-coderエージェントを使用して、NextAuthと連携したログインフォームを実装します" <commentary>フロントエンド実装が必要なため、frontend-coderエージェントを起動してコンポーネントを実装します。</commentary></example> <example>Context: ダッシュボード画面のレイアウトとチャート表示を実装する場合。user: "ダッシュボード画面を作って" assistant: "frontend-coderエージェントを起動して、レスポンシブなダッシュボードレイアウトとチャートコンポーネントを実装します" <commentary>複雑なUIの実装が必要なため、frontend-coderエージェントに実装を依頼します。</commentary></example>
4
4
  model: sonnet
5
5
  color: blue
6
+ skills:
7
+ - output-format
6
8
  ---
7
9
 
8
10
  ## ✅ 最重要: 出力形式
9
11
 
10
- **@.claude/skills/einja-output-format/SKILL.md の「frontend-coder」テンプレートに従って報告すること。この形式から逸脱しないこと。**
12
+ **「frontend-coder」テンプレートに従って報告すること。この形式から逸脱しないこと。**
11
13
 
12
14
  ---
13
15