@einja/dev-cli 0.1.41 → 0.1.44
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.
- package/dist/commands/task-loop/lib/github-client.test.js.map +1 -1
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
- package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
- package/dist/lib/preset-update/file-copier.js +3 -3
- package/dist/lib/preset-update/file-copier.js.map +1 -1
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/metadata-manager.js +1 -1
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +3 -2
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -1
- package/dist/lib/sync/project-private-synchronizer.js +5 -1
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -1
- package/package.json +1 -1
- package/presets/default/.claude/agents/einja/backend-architect.md +17 -1
- package/presets/default/.claude/agents/einja/codex-agent.md +1 -1
- package/presets/default/.claude/agents/einja/design-engineer.md +1 -1
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +3 -93
- package/presets/default/.claude/agents/einja/frontend-architect.md +17 -1
- package/presets/default/.claude/agents/einja/frontend-coder.md +1 -1
- package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +12 -7
- package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +6 -4
- package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +5 -5
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +13 -14
- package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +9 -9
- package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
- package/presets/default/.claude/agents/einja/task/task-executer.md +9 -3
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +2 -2
- package/presets/default/.claude/agents/einja/task/task-qa.md +3 -3
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +13 -1
- package/presets/default/.claude/commands/einja/einja-sync.md +119 -44
- package/presets/default/.claude/commands/einja/issue-exec.md +29 -19
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +6 -6
- package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +58 -58
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
- package/presets/default/.claude/settings.json +14 -4
- package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +2 -2
- package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +1 -1
- package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
- package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +5 -5
- package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
- package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +1 -1
- package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
- package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
- package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +47 -24
- package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
- package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
- package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
- package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +68 -12
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +368 -121
- package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +14 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +2 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +263 -183
- package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
- package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
- package/presets/default/.claude/skills/einja-task-commit/SKILL.md +7 -7
- package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +3 -78
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -4
- package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
- package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
- package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
- package/presets/default/CLAUDE.md.template +21 -6
- package/presets/default/docs/einja/instructions/deployment-setup.md +1 -1
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +11 -11
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +1 -1
- package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
- package/presets/default/docs/einja/instructions/task-execute.md +42 -42
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +1 -1
- package/presets/default/docs/einja/steering/branch-strategy.md +1 -1
- package/presets/default/docs/einja/steering/development-workflow.md +93 -25
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +107 -0
- package/presets/default/docs/einja/steering/task-management.md +9 -13
- package/presets/default/scripts/ensure-serena.sh +2 -2
- package/presets/default/scripts/env-rotate-secrets.ts +66 -6
- package/presets/default/scripts/init-github.ts +363 -0
- package/presets/default/scripts/init.sh +11 -5
- package/presets/default/scripts/setup-dev.ts +16 -1
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -152
- package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -39
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: einja-skill-first
|
|
3
|
+
description: >
|
|
4
|
+
タスク着手前にSkillを先に作るべきかを自動評価するメタSkill。Plan mode進入時やeinja-issue-spec-create実行時に自動起動し、既存Skillのギャップ分析とROI評価を行い、Skill作成の必要性を構造化して提案する。「Skill作るべき?」「Skill化」「skill-first」「Skill-first」等のキーワードでも直接呼び出し可能。
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Grep
|
|
8
|
+
- Glob
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<!-- ベース: .claude/skills/einja-skill-creator/SKILL.md -->
|
|
12
|
+
|
|
13
|
+
# einja-skill-first: Skill作成事前評価メタSkill
|
|
14
|
+
|
|
15
|
+
タスク着手前に「Skillを先に作るべきか」を評価し、必要ならSkill作成をTODOの先頭に積むメタSkill。
|
|
16
|
+
|
|
17
|
+
Plan mode 内でも動作する(Read / Grep / Glob のみ使用)。Skill作成自体は `einja-skill-creator` に委譲する。
|
|
18
|
+
|
|
19
|
+
## einja-skill-creator との責務分離
|
|
20
|
+
|
|
21
|
+
| 責務 | einja-skill-first | einja-skill-creator |
|
|
22
|
+
|------|:---:|:---:|
|
|
23
|
+
| ギャップ分析・ROI評価 | ○ | - |
|
|
24
|
+
| Skill仕様ドラフト(概要) | ○ | - |
|
|
25
|
+
| SKILL.md 作成 | - | ○ |
|
|
26
|
+
| テスト・eval | - | ○ |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 起動方式(3系統)
|
|
31
|
+
|
|
32
|
+
### 1. Plan mode 進入時(自動)
|
|
33
|
+
|
|
34
|
+
CLAUDE.md の必須フロー Step2(修正計画作成)→ Step3(ユーザー承認)の間で自動実行する。計画を提示する前に、Skill作成の必要性を評価する。
|
|
35
|
+
|
|
36
|
+
### 2. einja-issue-spec-create 実行時(自動)
|
|
37
|
+
|
|
38
|
+
einja-issue-spec-create の Phase 0 で自動実行する。仕様書作成の前にSkillギャップを分析し、Skill-first アプローチの要否を判定する。
|
|
39
|
+
|
|
40
|
+
### 3. 明示起動(手動)
|
|
41
|
+
|
|
42
|
+
以下のキーワードで直接呼び出し可能:
|
|
43
|
+
- 「Skill作るべき?」
|
|
44
|
+
- 「Skill化」
|
|
45
|
+
- 「skill-first」
|
|
46
|
+
- 「Skill-first」
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## スキップ基準(即座に「不要」判定)
|
|
51
|
+
|
|
52
|
+
以下に該当する場合は評価自体を省略し、即座に「不要」と判定する:
|
|
53
|
+
|
|
54
|
+
- **単発の小規模修正**: バグ修正、typo、設定値変更
|
|
55
|
+
- **既存キーワードトリガー一致**: CLAUDE.md のキーワードトリガーに既に一致するタスク
|
|
56
|
+
- **具体的かつ限定的な作業指示**: 「ファイルXのY行をZに変更」等
|
|
57
|
+
- **明らかに1回限りの作業**: 特定バグの調査、特定ファイルのリファクタ等
|
|
58
|
+
|
|
59
|
+
スキップ時は以下を出力して終了:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
## Skill作成評価結果
|
|
63
|
+
### 判定: ⚪不要(スキップ基準に該当)
|
|
64
|
+
- 理由: {該当するスキップ基準}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 評価フロー(4ステップ)
|
|
70
|
+
|
|
71
|
+
### ステップ1: 作業パターン分析
|
|
72
|
+
|
|
73
|
+
1. **作業カテゴリ特定**: FE / BE / インフラ / ドキュメント / リファクタ等に分類する
|
|
74
|
+
2. **反復性評価**: 今後も繰り返す作業か判定する
|
|
75
|
+
a. `docs/einja/memory/patterns.md` を Read で参照し、類似パターンの記録がないか確認する
|
|
76
|
+
b. patterns.md に記録がない場合、`docs/plans/` からも反復パターンを推定する
|
|
77
|
+
- Glob で `docs/plans/*.md` を取得(`todo-*.md`, `*-agent-*.md` は除外)
|
|
78
|
+
- Grep で作業カテゴリのキーワード + `# Plan:` タイトル行を検索
|
|
79
|
+
- 類似カテゴリの作業が2件以上あれば反復性の根拠とする
|
|
80
|
+
3. **複雑度評価**: 手順数・判断分岐数・参照ドキュメント数から複雑度を見積もる
|
|
81
|
+
|
|
82
|
+
### ステップ2: 既存Skillギャップ分析
|
|
83
|
+
|
|
84
|
+
1. `.claude/skills/einja-*/SKILL.md` を Glob で動的取得する
|
|
85
|
+
2. 各Skillの name / description を Read で読み取る
|
|
86
|
+
3. タスクに対するカバレッジを3段階で判定する:
|
|
87
|
+
|
|
88
|
+
| カバレッジ | 判定 | 次のアクション |
|
|
89
|
+
|-----------|------|---------------|
|
|
90
|
+
| **完全カバー** | Skill作成不要 | 既存Skillで実行 |
|
|
91
|
+
| **部分カバー** | 既存Skill拡張を検討 | 拡張箇所を特定 |
|
|
92
|
+
| **カバー外** | 新規Skill作成を検討 | ステップ3へ進む |
|
|
93
|
+
|
|
94
|
+
### ステップ3: ROI評価(スコアリング)
|
|
95
|
+
|
|
96
|
+
以下のスコアリングで定量評価する。
|
|
97
|
+
|
|
98
|
+
**コスト側(各1-3点):**
|
|
99
|
+
|
|
100
|
+
| 項目 | 1点 | 2点 | 3点 |
|
|
101
|
+
|------|-----|-----|-----|
|
|
102
|
+
| 作成時間 | 数十分 | 数時間 | 1日以上 |
|
|
103
|
+
| 複雑度 | 直線的 | 分岐あり | 多段判断 |
|
|
104
|
+
| テスト必要度 | 不要 | 簡易 | 網羅的eval必要 |
|
|
105
|
+
|
|
106
|
+
**価値側(各1-3点):**
|
|
107
|
+
|
|
108
|
+
| 項目 | 1点 | 2点 | 3点 |
|
|
109
|
+
|------|-----|-----|-----|
|
|
110
|
+
| 再利用頻度 | 月1回以下 | 週1-2回 | ほぼ毎日 |
|
|
111
|
+
| 品質安定化 | ばらつき小 | 中程度 | 手順ミスが致命的 |
|
|
112
|
+
| 時間節約 | 5分以下/回 | 30分程度/回 | 1時間以上/回 |
|
|
113
|
+
| チーム共有価値 | 個人向け | チーム内 | 全プロジェクト共通 |
|
|
114
|
+
|
|
115
|
+
**判定基準:**
|
|
116
|
+
```
|
|
117
|
+
価値合計 - コスト合計 >= 2 → 推奨(新規作成)
|
|
118
|
+
価値合計 - コスト合計 >= 0 かつ部分カバー → 拡張推奨
|
|
119
|
+
それ以外 → 不要
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### ステップ4: 構造化出力
|
|
123
|
+
|
|
124
|
+
以下のテンプレートで出力する。
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
## Skill作成評価結果
|
|
128
|
+
|
|
129
|
+
### 判定: {判定アイコン}{判定テキスト}
|
|
130
|
+
|
|
131
|
+
### スコア
|
|
132
|
+
| カテゴリ | 項目 | スコア |
|
|
133
|
+
|---------|------|--------|
|
|
134
|
+
| コスト | 作成時間 | X/3 |
|
|
135
|
+
| コスト | 複雑度 | X/3 |
|
|
136
|
+
| コスト | テスト必要度 | X/3 |
|
|
137
|
+
| **コスト合計** | | **X/9** |
|
|
138
|
+
| 価値 | 再利用頻度 | X/3 |
|
|
139
|
+
| 価値 | 品質安定化 | X/3 |
|
|
140
|
+
| 価値 | 時間節約 | X/3 |
|
|
141
|
+
| 価値 | チーム共有価値 | X/3 |
|
|
142
|
+
| **価値合計** | | **X/12** |
|
|
143
|
+
| **差分(価値-コスト)** | | **X** |
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**判定アイコンの定義:**
|
|
147
|
+
- 推奨: `🟢推奨`
|
|
148
|
+
- 拡張推奨: `🟡拡張推奨`
|
|
149
|
+
- 不要: `⚪不要`
|
|
150
|
+
|
|
151
|
+
### ステップ5: 過去Plan検索によるユースケース収集(推奨/拡張推奨の場合のみ)
|
|
152
|
+
|
|
153
|
+
以下の手順で過去Planから類似作業を検索し、Skill仕様のユースケースに反映する。
|
|
154
|
+
|
|
155
|
+
1. Glob で `docs/plans/*.md` を取得する
|
|
156
|
+
- 除外: `todo-*.md`, `*-agent-*.md`(子エージェント出力)
|
|
157
|
+
2. Grep で以下のキーワードを検索し、関連Planを特定する
|
|
158
|
+
- ステップ1で特定した作業カテゴリのキーワード
|
|
159
|
+
- 変更対象ファイルパターン(例: `.claude/skills/`, `CLAUDE.md` 等)
|
|
160
|
+
- `# Plan:` タイトル行で関連性を粗くフィルタ
|
|
161
|
+
3. 関連性の高いPlan(最大5件)のみ Read で詳細を確認する
|
|
162
|
+
- `## Context` セクションから作業概要を抽出
|
|
163
|
+
- 変更対象ファイル・手順から共通パターンを特定
|
|
164
|
+
4. 類似度を判定する
|
|
165
|
+
- 高: 変更対象ファイルが重複する
|
|
166
|
+
- 中: 同一ドメインの作業、または手法・パターンが類似
|
|
167
|
+
5. 結果を Skill概要仕様のユースケースセクションに反映する
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 判定別の推奨ワークフロー
|
|
172
|
+
|
|
173
|
+
### 推奨(新規Skill作成)
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
### Skill概要仕様
|
|
177
|
+
- **名前**: einja-{proposed-name}
|
|
178
|
+
- **目的**: {Skillの目的}
|
|
179
|
+
- **主要フロー**: {主要な処理ステップの概要}
|
|
180
|
+
- **推定作成時間**: {見積もり}
|
|
181
|
+
- **ユースケース(過去Planから)**:
|
|
182
|
+
- {Plan名}: {作業概要}(類似度: 高/中)
|
|
183
|
+
- {Plan名}: {作業概要}(類似度: 高/中)
|
|
184
|
+
|
|
185
|
+
### 推奨ワークフロー
|
|
186
|
+
計画のTODO-0にSkill作成を追加し、`einja-skill-creator` Skillで作成後に本作業を開始する。
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 拡張推奨(既存Skill拡張)
|
|
190
|
+
|
|
191
|
+
```markdown
|
|
192
|
+
### 推奨ワークフロー
|
|
193
|
+
既存Skill {name} の拡張を検討する。
|
|
194
|
+
- **拡張内容**: {具体的な拡張箇所}
|
|
195
|
+
- **影響範囲**: {拡張による影響}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 不要
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
### 推奨ワークフロー
|
|
202
|
+
既存Skillで十分カバー可能。該当Skill: {name}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Plan mode 対応
|
|
208
|
+
|
|
209
|
+
### Plan mode 内で行うこと
|
|
210
|
+
|
|
211
|
+
- 既存Skill一覧を Glob + Read で取得する
|
|
212
|
+
- `docs/einja/memory/patterns.md` を Read で参照する
|
|
213
|
+
- ROI評価ロジックを実行する(計算のみ)
|
|
214
|
+
- 構造化された評価結果を返却する
|
|
215
|
+
|
|
216
|
+
### Plan mode 内で行わないこと
|
|
217
|
+
|
|
218
|
+
- ファイル作成・編集
|
|
219
|
+
- einja-skill-creator の呼び出し
|
|
220
|
+
- Bash コマンド実行
|
|
221
|
+
|
|
222
|
+
### 親エージェントの責務(Plan mode内)
|
|
223
|
+
|
|
224
|
+
1. skill-first の結果を受け取る
|
|
225
|
+
2. AskUserQuestion で提案する(推奨 / 拡張推奨の場合)
|
|
226
|
+
3. 承認された場合、計画ファイルの TODO-0 に Skill 作成を記載する
|
|
227
|
+
|
|
228
|
+
### Plan mode 解除後のフロー
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
TODO-0: einja-skill-creator で Skill 作成(承認された場合のみ)
|
|
232
|
+
TODO-1〜: 作成した Skill を活用して本作業を実行
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## エラー処理
|
|
238
|
+
|
|
239
|
+
| エラー種別 | 原因 | 対処 |
|
|
240
|
+
|-----------|------|------|
|
|
241
|
+
| Skill一覧取得失敗 | `.claude/skills/` が存在しない | カバレッジ判定をスキップし、ROIのみで評価 |
|
|
242
|
+
| patterns.md 不在 | memory ディレクトリが未初期化 | 反復性評価をスキップし、他の項目で評価 |
|
|
243
|
+
| 作業内容が不明確 | 入力情報が不足 | スキップ基準を適用し「不要」と判定 |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 実行制約
|
|
248
|
+
|
|
249
|
+
- このSkillは親エージェント(オーケストレーター)から呼び出される
|
|
250
|
+
- Read / Grep / Glob のみ使用可能(Plan mode 互換)
|
|
251
|
+
- Skill作成の実行は行わない(einja-skill-creator に委譲)
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 連携
|
|
256
|
+
|
|
257
|
+
- **呼び出し元**: 親エージェント(Plan mode 進入時、einja-issue-spec-create Phase 0)
|
|
258
|
+
- **委譲先**: `einja-skill-creator` - Skill作成の実行
|
|
259
|
+
- **参照**: `docs/einja/memory/patterns.md` - 過去の作業パターン
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
<!-- @einja:project-private:start id="einja-skill-first-project" -->
|
|
264
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
265
|
+
<!-- @einja:project-private:end -->
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: einja-subagent-question-protocol
|
|
3
|
+
description: サブエージェントがユーザーへの質問を返却するためのプロトコル定義。AskUserQuestionが動作しないサブエージェント環境で使用。
|
|
4
|
+
autoload: true
|
|
5
|
+
# autoload: サブエージェントに自動preloadするため。親エージェントはPENDING_QUESTIONSの「受信・ハンドリング」側(CLAUDE.md参照)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# サブエージェント質問プロトコル(PENDING_QUESTIONS)
|
|
9
|
+
|
|
10
|
+
## 背景
|
|
11
|
+
|
|
12
|
+
Claude Code v2.0.56以降、**サブエージェントではAskUserQuestionツールがシステムレベルでフィルタリングされ動作しない**。
|
|
13
|
+
そのため、サブエージェントがユーザーへの確認が必要な場合は、以下のプロトコルに従って質問を返却する。
|
|
14
|
+
|
|
15
|
+
## プロトコル概要
|
|
16
|
+
|
|
17
|
+
1. サブエージェントは質問を `## PENDING_QUESTIONS` セクションとして出力に含める
|
|
18
|
+
2. 親エージェントが出力を検出し、AskUserQuestionでユーザーに確認する
|
|
19
|
+
3. 親エージェントがAgent toolの `resume` パラメータで同じサブエージェントを再開する
|
|
20
|
+
4. 再開時にユーザーの回答がプロンプトとして渡される
|
|
21
|
+
|
|
22
|
+
## PENDING_QUESTIONS フォーマット
|
|
23
|
+
|
|
24
|
+
質問を返却する場合、**必ず以下の形式**で出力し、その後停止すること:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
## PENDING_QUESTIONS
|
|
28
|
+
|
|
29
|
+
以下の不明点の解消が必要です。
|
|
30
|
+
|
|
31
|
+
### Q1: [質問タイトル]
|
|
32
|
+
**背景**: [なぜこの質問が必要か、どのような文脈で発生したか]
|
|
33
|
+
|
|
34
|
+
| 選択肢 | 説明 | メリット | デメリット |
|
|
35
|
+
|--------|------|----------|------------|
|
|
36
|
+
| A: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
|
|
37
|
+
| B: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
|
|
38
|
+
| C: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
|
|
39
|
+
|
|
40
|
+
**推奨**: A([推奨理由])
|
|
41
|
+
|
|
42
|
+
### Q2: [質問タイトル]
|
|
43
|
+
**背景**: [なぜこの質問が必要か]
|
|
44
|
+
|
|
45
|
+
| 選択肢 | 説明 | メリット | デメリット |
|
|
46
|
+
|--------|------|----------|------------|
|
|
47
|
+
| A: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
|
|
48
|
+
| B: [ラベル] | [詳細説明] | [メリット] | [デメリット] |
|
|
49
|
+
|
|
50
|
+
**推奨**: B([推奨理由])
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## ルール
|
|
54
|
+
|
|
55
|
+
1. **1回にまとめる**: 複数の質問がある場合は Q1, Q2, ... としてまとめて返却する。1問ずつ返却しない
|
|
56
|
+
2. **選択肢と背景を必ず含める**: 各選択肢には説明・メリット・デメリットを記載し、ユーザーが十分な情報に基づいて判断できるようにする
|
|
57
|
+
3. **推奨を明示する**: 各質問に対して推奨選択肢とその理由を記載する
|
|
58
|
+
4. **質問返却後は停止する**: PENDING_QUESTIONSを出力したら、それ以降の作業は行わない。回答を受けてから再開する
|
|
59
|
+
5. **再開後の作業継続**: `resume` で再開された場合、渡された回答に基づいて作業を継続する
|
|
60
|
+
|
|
61
|
+
## AskUserQuestion YAML → PENDING_QUESTIONS 変換ガイド
|
|
62
|
+
|
|
63
|
+
エージェント定義にAskUserQuestion YAMLの参考例がある場合、以下のように変換する:
|
|
64
|
+
|
|
65
|
+
### 変換前(AskUserQuestion YAML)
|
|
66
|
+
```yaml
|
|
67
|
+
AskUserQuestion:
|
|
68
|
+
question: "状態管理ライブラリを選択してください"
|
|
69
|
+
header: "状態管理"
|
|
70
|
+
options:
|
|
71
|
+
- label: "TanStack Query(推奨)"
|
|
72
|
+
description: "推奨理由: サーバー状態管理に最適。..."
|
|
73
|
+
- label: "Zustand"
|
|
74
|
+
description: "シンプルなグローバル状態管理。..."
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 変換後(PENDING_QUESTIONS形式)
|
|
78
|
+
```markdown
|
|
79
|
+
## PENDING_QUESTIONS
|
|
80
|
+
|
|
81
|
+
以下の不明点の解消が必要です。
|
|
82
|
+
|
|
83
|
+
### Q1: 状態管理ライブラリの選択
|
|
84
|
+
**背景**: サーバー状態の管理方式を決定する必要があります。
|
|
85
|
+
|
|
86
|
+
| 選択肢 | 説明 | メリット | デメリット |
|
|
87
|
+
|--------|------|----------|------------|
|
|
88
|
+
| A: TanStack Query | サーバー状態管理に最適 | 自動キャッシュ管理、型安全 | 学習コスト中程度 |
|
|
89
|
+
| B: Zustand | シンプルなグローバル状態管理 | 軽量、シンプルなAPI | サーバー状態管理は手動 |
|
|
90
|
+
|
|
91
|
+
**推奨**: A(サーバー状態管理に最適で、キャッシュと再取得が自動化されるため)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 重要な注意事項
|
|
95
|
+
|
|
96
|
+
- このプロトコルは**サブエージェントとして動作する場合にのみ**適用される
|
|
97
|
+
- 親エージェント(直接ユーザーと対話する場合)では通常通りAskUserQuestionを使用すること
|
|
98
|
+
- エージェント定義内のAskUserQuestion YAMLは「どんな質問をすべきか」の参照情報として有用なので削除しない
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: task-commit
|
|
3
|
-
description: "コミット・プッシュを実行するSkill。docs/einja/steering/commit-rules.mdのルールに従い、分割コミットを実施。直接呼び出し可能(確認あり)、task-exec経由では自動実行"
|
|
2
|
+
name: einja-task-commit
|
|
3
|
+
description: "コミット・プッシュを実行するSkill。docs/einja/steering/commit-rules.mdのルールに従い、分割コミットを実施。直接呼び出し可能(確認あり)、einja-task-exec Skill経由では自動実行"
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash
|
|
6
6
|
- Read
|
|
@@ -49,7 +49,7 @@ git stash pop
|
|
|
49
49
|
|
|
50
50
|
#### コンフリクト発生時
|
|
51
51
|
|
|
52
|
-
1. **conflict-resolver
|
|
52
|
+
1. **einja-conflict-resolver Skill** の手順に従って解消
|
|
53
53
|
2. 解消できない場合は以下を出力して終了:
|
|
54
54
|
|
|
55
55
|
```markdown
|
|
@@ -139,9 +139,9 @@ AskUserQuestion:
|
|
|
139
139
|
|
|
140
140
|
### ステップ4: 品質チェック
|
|
141
141
|
|
|
142
|
-
#### task-exec経由での呼び出しの場合
|
|
142
|
+
#### einja-task-exec Skill経由での呼び出しの場合
|
|
143
143
|
|
|
144
|
-
task-exec経由でQA合格後に呼び出されるため、品質チェック(lint/typecheck/test/build)は**スキップ**します。
|
|
144
|
+
einja-task-exec Skill経由でQA合格後に呼び出されるため、品質チェック(lint/typecheck/test/build)は**スキップ**します。
|
|
145
145
|
|
|
146
146
|
QAフェーズで既に実行済みのため、重複実行は不要です。
|
|
147
147
|
|
|
@@ -171,7 +171,7 @@ QAフェーズで既に実行済みのため、重複実行は不要です。
|
|
|
171
171
|
|
|
172
172
|
#### コミットコマンド
|
|
173
173
|
|
|
174
|
-
**task-exec経由での呼び出しの場合**(QA済み):
|
|
174
|
+
**einja-task-exec Skill経由での呼び出しの場合**(QA済み):
|
|
175
175
|
|
|
176
176
|
```bash
|
|
177
177
|
git add src/auth/login.ts src/auth/logout.ts && git commit -m "$(cat <<'EOF'
|
|
@@ -253,7 +253,7 @@ EOF
|
|
|
253
253
|
|
|
254
254
|
| エラー種別 | 対処 |
|
|
255
255
|
|-----------|------|
|
|
256
|
-
| git pull コンフリクト | conflict-resolver
|
|
256
|
+
| git pull コンフリクト | einja-conflict-resolver Skill の手順に従って解消を試行 |
|
|
257
257
|
| コンフリクト解消失敗 | 報告して終了、手動解決を依頼 |
|
|
258
258
|
| git commit 失敗 | エラー内容を報告 |
|
|
259
259
|
| git push 失敗 | エラー内容を報告、原因を説明 |
|
package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md}
RENAMED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
description: "GitHub Issueのタスクグループを実行するコマンド。ARGUMENTS: Issue番号(必須、#123形式)とタスクグループ番号(必須、1.1形式)"
|
|
3
|
-
allowed-tools: Task, TaskCreate, TaskUpdate, TaskList, TaskGet, TaskOutput, Skill, Read, Write, Edit, MultiEdit, Bash, Grep, Glob, WebFetch, mcp__github__*, mcp__serena__*
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# タスク実行コマンド
|
|
1
|
+
# タスク実行 Skill
|
|
7
2
|
|
|
8
3
|
## 役割
|
|
9
4
|
|
|
@@ -129,8 +124,8 @@ $ARGUMENTSからIssue番号とタスクグループ番号を解析する(現
|
|
|
129
124
|
1. **specディレクトリを探索**: `docs/specs/issues/*/issue{N}-*/` パターンで検索
|
|
130
125
|
2. **存在チェック**:
|
|
131
126
|
- 完全なspec(requirements.md + design.md + qa-tests/) → 次へ
|
|
132
|
-
- 部分的spec →
|
|
133
|
-
- specなし → `
|
|
127
|
+
- 部分的spec → エラー終了(`einja-issue-spec-create` Skill の実行を案内)
|
|
128
|
+
- specなし → `_einja-general-context-loader` Skill を呼び出してコンテキスト収集
|
|
134
129
|
3. **requirements.md を読み込み**、各タスクのメタデータ(`**要件**: Story X`)に基づいてACを抽出
|
|
135
130
|
- ACはGiven/When/Then形式で小さい(~50-100トークン/AC)ので直接保持
|
|
136
131
|
4. **design.md はパスのみ特定**(内容は読み込まない)
|
|
@@ -244,76 +239,6 @@ Issue #123 のPhase 99 タスク(タスクグループ 99.1)を実行して
|
|
|
244
239
|
|
|
245
240
|
---
|
|
246
241
|
|
|
247
|
-
## 受け入れ条件の参照方法
|
|
248
|
-
|
|
249
|
-
このセクションは、task-executer、task-reviewer、task-qaサブエージェントが受け入れ条件を参照する際の標準手順を定義します。
|
|
250
|
-
|
|
251
|
-
### requirements.mdの標準構造
|
|
252
|
-
|
|
253
|
-
**必須セクション**:
|
|
254
|
-
- **受け入れ基準(Acceptance Criteria)**: 各ACが以下の形式で記載
|
|
255
|
-
|
|
256
|
-
**AC(Acceptance Criteria)の形式**:
|
|
257
|
-
```markdown
|
|
258
|
-
##### 機能要件
|
|
259
|
-
- [ ] Given: 前提条件
|
|
260
|
-
When: 実行する操作
|
|
261
|
-
Then: 期待される結果
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### task-executerの受け入れ条件参照方法
|
|
265
|
-
|
|
266
|
-
1. タスクグループの関連ドキュメント(`requirements.md`)を読み込む
|
|
267
|
-
2. 各ユーザーストーリー配下の「受け入れ基準」セクションを特定
|
|
268
|
-
3. **検証レベルが「Unit」の AC のみ**を実装対象とする
|
|
269
|
-
4. 各 AC(Given/When/Then)に対して実装と単体テストを作成
|
|
270
|
-
5. `design.md` の技術仕様に準拠した実装を行う
|
|
271
|
-
|
|
272
|
-
**検証責務**:
|
|
273
|
-
- **Unit テスト**: 必須実装、実装と同時に作成
|
|
274
|
-
- **Integration/Browser テスト**: 実装不要(task-qa が担当)
|
|
275
|
-
|
|
276
|
-
**完了条件**:
|
|
277
|
-
- 実装したコードの単体テストが全て合格
|
|
278
|
-
- 検証レベルが「Unit」の AC を全て満たす
|
|
279
|
-
- Integration/Browser レベルの AC は未検証でも実装フェーズ完了とする
|
|
280
|
-
|
|
281
|
-
> **Note**: 検証レベルの詳細は `docs/einja/steering/terminology.md` を参照してください。
|
|
282
|
-
|
|
283
|
-
### task-reviewerの受け入れ条件参照方法
|
|
284
|
-
|
|
285
|
-
1. `requirements.md` の各ユーザーストーリー配下の「受け入れ基準」セクションを参照
|
|
286
|
-
2. 実装が各ACを満たしているかを確認
|
|
287
|
-
3. ACとの整合性をレビュー観点の最優先項目とする
|
|
288
|
-
|
|
289
|
-
### task-qaの受け入れ条件参照方法
|
|
290
|
-
|
|
291
|
-
**⚠️ 最重要**: QAエージェントは以下の手順で受け入れ条件を参照
|
|
292
|
-
|
|
293
|
-
1. **受け入れ基準の抽出**
|
|
294
|
-
- タスクグループの `requirements.md` を読み込む
|
|
295
|
-
- 各ユーザーストーリー配下の「受け入れ基準」セクションを特定
|
|
296
|
-
- **検証レベルが「Integration」「Browser」の AC のみ**を抽出
|
|
297
|
-
- 検証レベルが「Unit」の AC はスキップ(task-executer が既に検証済み)
|
|
298
|
-
|
|
299
|
-
2. **テストシナリオの作成**
|
|
300
|
-
- 各 AC に対して、Given/When/Then に基づくテストシナリオを作成
|
|
301
|
-
- Integration: API + DB + ミドルウェアの連携テスト
|
|
302
|
-
- Browser: Playwright MCP を使用したユーザーシナリオテスト
|
|
303
|
-
- QA 仕様書(`qa-tests/story{N}.md`)に記録
|
|
304
|
-
|
|
305
|
-
3. **SUCCESS 判定基準**
|
|
306
|
-
- **検証レベルが「Integration」「Browser」の全ての AC が満たされた場合のみ**、SUCCESS 判定
|
|
307
|
-
- 1つでも AC を満たさない場合、FAILURE 判定して適切な戻し先を決定
|
|
308
|
-
|
|
309
|
-
> **用語の明確化**: 「E2E」はPlaywrightコードによる自動テスト(`pnpm test:e2e`)を指します。task-qaが実行するPlaywright MCPテストは「Browser」検証レベルです。詳細は `docs/einja/steering/terminology.md` を参照してください。
|
|
310
|
-
|
|
311
|
-
4. **参照ドキュメント**
|
|
312
|
-
- QA テスト項目作成方針: `docs/einja/steering/acceptance-criteria-and-qa-guide.md`
|
|
313
|
-
- テンプレート: `docs/einja/templates/requirements.md.template`
|
|
314
|
-
|
|
315
|
-
---
|
|
316
|
-
|
|
317
242
|
## 失敗時のリカバリーフロー
|
|
318
243
|
|
|
319
244
|
### 失敗原因の分類
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: task-qa
|
|
2
|
+
name: einja-task-qa
|
|
3
3
|
description: "タスクの品質保証を実行するSkill。必須自動テスト、AC検証、動作確認を実施し、qa-tests/に結果を記録します"
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Task
|
|
@@ -92,7 +92,7 @@ AskUserQuestion:
|
|
|
92
92
|
|
|
93
93
|
### ステップ3: 既存テスト仕様の読み込み
|
|
94
94
|
|
|
95
|
-
**前提**: テスト仕様は `
|
|
95
|
+
**前提**: テスト仕様は `qa-generator` が作成済み。task-qaは**実行のみ**を担当。
|
|
96
96
|
|
|
97
97
|
1. **テスト仕様ファイルの特定**: 自然言語で指定されたAC番号からStoryを判定
|
|
98
98
|
- 例: 「AC1.1, AC1.2のテストを実行」→ AC番号の先頭数字(1)からStory 1を特定 → `qa-tests/story1.md`
|
|
@@ -100,7 +100,7 @@ AskUserQuestion:
|
|
|
100
100
|
2. **シナリオテストの確認**: `qa-tests/scenarios.md` で該当ACの実施タイミングを確認
|
|
101
101
|
3. **テスト仕様の読み込み**: story{N}.md内の該当ACセクションからテストシナリオ、確認項目、期待値を把握
|
|
102
102
|
|
|
103
|
-
**エラー時**: テスト仕様が存在しない場合は失敗分類B(要件齟齬)→
|
|
103
|
+
**エラー時**: テスト仕様が存在しない場合は失敗分類B(要件齟齬)→ qa-generatorで作成が必要
|
|
104
104
|
|
|
105
105
|
---
|
|
106
106
|
|
|
@@ -281,7 +281,7 @@ AskUserQuestion:
|
|
|
281
281
|
|
|
282
282
|
## 実行制約
|
|
283
283
|
|
|
284
|
-
**task-execからの呼び出し**: task-qa.md(ラッパー)経由、完了報告はtask-qa.mdが生成
|
|
284
|
+
**einja-task-exec Skillからの呼び出し**: task-qa.md(ラッパー)経由、完了報告はtask-qa.mdが生成
|
|
285
285
|
|
|
286
286
|
**独立使用**: トリガーワードで自律起動、完了報告は本Skillが生成
|
|
287
287
|
|
|
@@ -4,10 +4,10 @@ task-qa Skillの利用方法パターン集。
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## パターン1: task-execからの呼び出し(標準ワークフロー)
|
|
7
|
+
## パターン1: einja-task-exec Skillからの呼び出し(標準ワークフロー)
|
|
8
8
|
|
|
9
9
|
```
|
|
10
|
-
ユーザー: task-exec #123 1.1
|
|
10
|
+
ユーザー: einja-task-exec #123 1.1
|
|
11
11
|
→ starter → executer → reviewer → qa
|
|
12
12
|
↓
|
|
13
13
|
task-qa.md(ラッパー)→ SKILL.md
|