@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "テンプレート同期を実行。dev-cli/create-einja-appのsyncをカテゴリ選択式で実行し、コンフリクトも自動解消します"
|
|
3
|
-
allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob
|
|
3
|
+
allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob, Edit
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# テンプレート同期コマンド
|
|
@@ -16,8 +16,8 @@ allowed-tools: Bash, AskUserQuestion, Read, Grep, Glob
|
|
|
16
16
|
以下のコマンドで利用可能なCLIを検出する。
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
npx @einja/dev-cli --version 2>/dev/null
|
|
20
|
-
npx create-einja-app --version 2>/dev/null
|
|
19
|
+
npx --no @einja/dev-cli --version 2>/dev/null
|
|
20
|
+
npx --no create-einja-app --version 2>/dev/null
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
| 検出結果 | 動作 |
|
|
@@ -104,10 +104,10 @@ AskUserQuestion:
|
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
# dev-cli の場合
|
|
107
|
-
npx @einja/dev-cli sync --only <categories> --dry-run --yes
|
|
107
|
+
npx --yes @einja/dev-cli sync --only <categories> --dry-run --yes
|
|
108
108
|
|
|
109
109
|
# create-einja-app の場合
|
|
110
|
-
npx create-einja-app sync --categories <categories> --dry-run
|
|
110
|
+
npx --yes create-einja-app sync --categories <categories> --dry-run
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
> **注**: 両CLIでカテゴリ指定のオプション名が異なる(dev-cli: `--only` / create-einja-app: `--categories`)
|
|
@@ -116,9 +116,15 @@ npx create-einja-app sync --categories <categories> --dry-run
|
|
|
116
116
|
- 差分がない場合は「変更はありません」と表示して該当CLIの処理をスキップ
|
|
117
117
|
- 差分がある場合はファイル一覧と変更内容をユーザーに提示
|
|
118
118
|
|
|
119
|
+
#### dev-cli 使用時: 孤児ファイルの事前検出
|
|
120
|
+
|
|
121
|
+
dry-run の JSON出力から `orphans` 配列を確認する。存在する孤児(`exists: true`)がある場合は一覧をテーブル表示し、Step 4 の確認時に孤児削除を含めるかユーザーに確認する。
|
|
122
|
+
|
|
119
123
|
### Step 4: 実行確認 → sync実行
|
|
120
124
|
|
|
121
|
-
|
|
125
|
+
差分プレビューと孤児ファイル情報を見せた上で、ユーザーに実行可否を確認する。
|
|
126
|
+
|
|
127
|
+
#### 孤児ファイルがない場合
|
|
122
128
|
|
|
123
129
|
```yaml
|
|
124
130
|
AskUserQuestion:
|
|
@@ -131,75 +137,142 @@ AskUserQuestion:
|
|
|
131
137
|
description: "変更を適用せずに終了します"
|
|
132
138
|
```
|
|
133
139
|
|
|
140
|
+
#### 孤児ファイルがある場合(dev-cli 使用時)
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
AskUserQuestion:
|
|
144
|
+
question: "上記の変更を適用しますか?(孤児ファイルN個を検出)"
|
|
145
|
+
header: "同期実行の確認"
|
|
146
|
+
options:
|
|
147
|
+
- label: "孤児ファイルも削除して同期(推奨)"
|
|
148
|
+
description: "表示された差分を適用し、テンプレートから削除されたファイル(N個)も削除します"
|
|
149
|
+
- label: "孤児ファイルは残して同期"
|
|
150
|
+
description: "表示された差分のみ適用し、孤児ファイルは残します"
|
|
151
|
+
- label: "キャンセル"
|
|
152
|
+
description: "変更を適用せずに終了します"
|
|
153
|
+
```
|
|
154
|
+
|
|
134
155
|
**実行順序**: dev-cli を先に実行し、次に create-einja-app を実行する(dev-cli が Claude Code 設定を先に更新するため)。
|
|
135
156
|
|
|
136
157
|
```bash
|
|
137
|
-
# dev-cli
|
|
138
|
-
npx @einja/dev-cli sync --only <categories> --yes --json
|
|
158
|
+
# dev-cli(孤児削除あり)
|
|
159
|
+
npx --yes @einja/dev-cli sync --only <categories> --yes --json --clean
|
|
160
|
+
|
|
161
|
+
# dev-cli(孤児削除なし)
|
|
162
|
+
npx --yes @einja/dev-cli sync --only <categories> --yes --json
|
|
139
163
|
|
|
140
164
|
# create-einja-app
|
|
141
|
-
npx create-einja-app sync --categories <categories>
|
|
165
|
+
npx --yes create-einja-app sync --categories <categories>
|
|
142
166
|
```
|
|
143
167
|
|
|
144
168
|
- dev-cli は `--json` オプションで構造化出力を取得しパースする
|
|
145
|
-
-
|
|
169
|
+
- 孤児削除を選択した場合は `--clean` フラグを追加する(sync と孤児削除を1回の実行で完了)
|
|
170
|
+
- create-einja-app sync には `--yes` フラグがない。`--categories` 指定時でもプロジェクト設定検出失敗時や依存バージョン競合時に対話プロンプトが発生する可能性がある。その場合は標準出力を確認し、必要に応じてユーザーに手動対応を促す
|
|
146
171
|
|
|
147
|
-
### Step 5: コンフリクト検出 →
|
|
172
|
+
### Step 5: コンフリクト検出 → 対話的解消(dev-cli のみ)
|
|
148
173
|
|
|
149
|
-
sync
|
|
174
|
+
dev-cli の sync 固有のコンフリクトを検出し、1ファイルずつ対話的に解消する(git コンフリクトとは異なる)。create-einja-app にはファイルコンフリクトの概念がないため、このStepは dev-cli 使用時のみ実行する。
|
|
150
175
|
|
|
151
|
-
####
|
|
176
|
+
#### 5-1. コンフリクトファイル一覧取得
|
|
152
177
|
|
|
153
|
-
|
|
154
|
-
|-----|---------|
|
|
155
|
-
| dev-cli | JSON出力の `status: "partial_success"` かつ `conflicts > 0` |
|
|
156
|
-
| create-einja-app | 標準出力に「コンフリクト」文字列が含まれる |
|
|
178
|
+
dev-cli の JSON出力の `files` 配列から `status === "conflict"` のエントリを抽出する。
|
|
157
179
|
|
|
158
|
-
|
|
180
|
+
- コンフリクトなし → このStepをスキップ
|
|
181
|
+
- コンフリクトファイル一覧をテーブル表示(ファイルパス、コンフリクト箇所数)
|
|
182
|
+
- JSON出力のパースに失敗した場合は、標準出力をそのまま表示し、同期対象カテゴリのファイルパスのみを対象に `Grep` で dev-cli 固有のコンフリクトマーカー `<<<<<<< LOCAL (your changes)` を検索して検出する(プロジェクト全体を検索しないこと)
|
|
159
183
|
|
|
160
|
-
|
|
161
|
-
- dev-cli: JSON出力の `conflicts` 配列からファイルパスを抽出
|
|
162
|
-
- create-einja-app: 標準出力から「コンフリクト」を含む行を抽出し、ファイルパスをパース
|
|
163
|
-
- 取得したファイルパスを表形式で一覧表示
|
|
184
|
+
#### 5-2. 各ファイルを1ファイルずつ処理
|
|
164
185
|
|
|
165
|
-
|
|
166
|
-
- `Read` ツールでコンフリクトファイルの内容を読み込み、差分をユーザーに提示
|
|
186
|
+
以下を各コンフリクトファイルについて繰り返す:
|
|
167
187
|
|
|
168
|
-
|
|
188
|
+
a. `Read` でファイル全体を読み込む
|
|
189
|
+
b. コンフリクトマーカーブロックを特定し、**双方の内容を分析・説明**:
|
|
190
|
+
- ローカル側: 何がカスタマイズされているか(例: プロジェクト固有の設定値)
|
|
191
|
+
- テンプレート側: 何が更新されたか(例: 新しいフィールド追加、バグ修正)
|
|
192
|
+
- 影響の説明: どちらを採用した場合に何が起きるか
|
|
193
|
+
c. **具体的なマージ案を提案**: 両方の変更を分析し、統合案を作成(可能な場合)
|
|
194
|
+
d. AskUserQuestion で解消方法を確認:
|
|
169
195
|
|
|
170
196
|
```yaml
|
|
171
197
|
AskUserQuestion:
|
|
172
|
-
question: "
|
|
173
|
-
header: "
|
|
198
|
+
question: "{ファイル名}のコンフリクト解消方法を選択してください"
|
|
199
|
+
header: "コンフリクト解消"
|
|
174
200
|
options:
|
|
175
|
-
- label: "
|
|
176
|
-
description: "
|
|
177
|
-
- label: "
|
|
178
|
-
description: "
|
|
179
|
-
- label: "
|
|
180
|
-
description: "
|
|
201
|
+
- label: "テンプレート優先"
|
|
202
|
+
description: "テンプレートの内容を採用。メリット: 最新の更新を取り込める。デメリット: ローカルのカスタマイズが失われる"
|
|
203
|
+
- label: "ローカル優先"
|
|
204
|
+
description: "現在の内容を維持。メリット: カスタマイズを保全できる。デメリット: テンプレートの更新が適用されない"
|
|
205
|
+
- label: "マージ案(両方の変更を統合)"
|
|
206
|
+
description: "{具体的なマージ内容の説明}。メリット: {利点}。デメリット: {欠点}"
|
|
207
|
+
- label: "このファイルをスキップ"
|
|
208
|
+
description: "コンフリクトマーカーを残して後で手動解消。メリット: 判断を保留できる。デメリット: 後で対応が必要"
|
|
181
209
|
```
|
|
182
210
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
-
|
|
211
|
+
**重要**: 必ず1ファイルごとにAskUserQuestionを実行する。複数ファイルをまとめて質問しない。
|
|
212
|
+
|
|
213
|
+
e. 選択に応じて `Edit` でコンフリクトマーカーを解消する
|
|
214
|
+
- 複数マーカーがある場合はファイル末尾側から処理し、行番号ずれを防止する
|
|
215
|
+
- テンプレート優先: `<<<<<<< LOCAL` 〜 `=======` を削除し、`=======` 〜 `>>>>>>> TEMPLATE` のテンプレート側を残す
|
|
216
|
+
- ローカル優先: `<<<<<<< LOCAL` のローカル側を残し、`=======` 〜 `>>>>>>> TEMPLATE` を削除する
|
|
217
|
+
- マージ案: 提案したマージ内容でマーカーブロック全体を置換する
|
|
218
|
+
f. 解消結果を `Read` で確認し、ユーザーに表示
|
|
219
|
+
|
|
220
|
+
**コンフリクトマーカー形式**: `<<<<<<< LOCAL (your changes)` / `=======` / `>>>>>>> TEMPLATE (from @einja/cli)`
|
|
221
|
+
|
|
222
|
+
#### 5-3. 全ファイル解消後の検証
|
|
187
223
|
|
|
188
|
-
|
|
224
|
+
- `Grep` で `<<<<<<<` パターンを検索し、未解消マーカーが残っていないか検証
|
|
225
|
+
- スキップされたファイルがあれば一覧を再表示
|
|
226
|
+
|
|
227
|
+
### Step 6: 孤児ファイル処理結果の確認(dev-cli のみ)
|
|
228
|
+
|
|
229
|
+
Step 4 で孤児削除を選択した場合、JSON出力の `summary.orphansDeleted` を確認し、削除されたファイル一覧を記録する(Step 9 の詳細表示で使用)。
|
|
230
|
+
|
|
231
|
+
Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli sync --only <categories> --clean --yes` で削除できます」と案内する。
|
|
232
|
+
|
|
233
|
+
### Step 7: direnv allow 実行確認
|
|
234
|
+
|
|
235
|
+
`.envrc` が正常に更新された場合に `direnv allow` を実行する。
|
|
236
|
+
|
|
237
|
+
1. dev-cli の JSON出力の `files` 配列から `.envrc` のエントリを確認する
|
|
238
|
+
2. 以下の条件をすべて満たす場合のみ実行対象とする:
|
|
239
|
+
- `.envrc` の `status` が `"success"` である(`"skipped"`, `"conflict"`, `"error"` は対象外)
|
|
240
|
+
- ファイル内にコンフリクトマーカー(`<<<<<<< LOCAL`)が含まれていない
|
|
241
|
+
3. `command -v direnv` で direnv の存在を確認する(インストールされていなければスキップし、Step 8 で案内表示)
|
|
242
|
+
4. AskUserQuestion で確認:
|
|
243
|
+
|
|
244
|
+
```yaml
|
|
245
|
+
AskUserQuestion:
|
|
246
|
+
question: ".envrc が更新されました。direnv allow を実行しますか?"
|
|
247
|
+
header: "direnv allow"
|
|
248
|
+
options:
|
|
249
|
+
- label: "実行する(推奨)"
|
|
250
|
+
description: "更新済み .envrc を有効化します。環境変数が即座に反映されます"
|
|
251
|
+
- label: "スキップ"
|
|
252
|
+
description: "後で手動で direnv allow を実行します"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
5. 「実行する」選択時に `direnv allow` を実行
|
|
256
|
+
6. 結果を表示(成功/失敗。失敗しても同期処理全体は継続する)
|
|
257
|
+
|
|
258
|
+
### Step 8: 結果サマリー表示
|
|
189
259
|
|
|
190
260
|
テーブル形式で同期結果の概要を表示する。
|
|
191
261
|
|
|
192
262
|
```markdown
|
|
193
263
|
## 同期結果サマリー
|
|
194
264
|
|
|
195
|
-
| CLI | 成功 | スキップ | コンフリクト |
|
|
196
|
-
|
|
197
|
-
| dev-cli | 5 | 2 | 1 (解消済み) |
|
|
198
|
-
| create-einja-app | 8 | 3 | 0 |
|
|
199
|
-
| **合計** | **13** | **5** | **1** |
|
|
265
|
+
| CLI | 成功 | スキップ | コンフリクト | 孤児削除 |
|
|
266
|
+
|-----|------|---------|------------|---------|
|
|
267
|
+
| dev-cli | 5 | 2 | 1 (解消済み) | 2 |
|
|
268
|
+
| create-einja-app | 8 | 3 | 0 | - |
|
|
269
|
+
| **合計** | **13** | **5** | **1** | **2** |
|
|
200
270
|
```
|
|
201
271
|
|
|
202
|
-
|
|
272
|
+
- `.envrc` が変更された場合は「✓ direnv allow 実行済み」を表示
|
|
273
|
+
- `.envrc` が変更されたが direnv 未インストールの場合は「⚠ direnv 未インストール。手動で `direnv allow` を実行してください」を表示
|
|
274
|
+
|
|
275
|
+
### Step 9: 結果詳細表示
|
|
203
276
|
|
|
204
277
|
各ファイルの詳細結果を以下の形式で表示する。
|
|
205
278
|
|
|
@@ -209,6 +282,7 @@ AskUserQuestion:
|
|
|
209
282
|
✓ .claude/skills/einja-task-commit/SKILL.md (更新)
|
|
210
283
|
⏭ .claude/agents/einja/task-executer.md (変更なし)
|
|
211
284
|
⚠ .claude/hooks/einja/pre-commit.sh (コンフリクト → 解消済み)
|
|
285
|
+
🗑️ .claude/skills/old-skill/SKILL.md (孤児ファイル削除)
|
|
212
286
|
|
|
213
287
|
### create-einja-app sync 詳細
|
|
214
288
|
✨ .github/workflows/ci.yml (新規)
|
|
@@ -224,6 +298,7 @@ AskUserQuestion:
|
|
|
224
298
|
| ✨ | 新規ファイル追加 |
|
|
225
299
|
| ⏭ | 変更なし(スキップ) |
|
|
226
300
|
| ⚠ | コンフリクト発生(解消済み) |
|
|
301
|
+
| 🗑️ | 孤児ファイル削除 |
|
|
227
302
|
|
|
228
303
|
**パース方法:**
|
|
229
304
|
- dev-cli: `--json` 出力の `files` 配列をパースして各ファイルのステータスを表示。JSON形式が不正な場合は標準出力をそのまま表示
|
|
@@ -100,7 +100,7 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
|
|
|
100
100
|
- 以下を表示して**停止**:
|
|
101
101
|
> issue-exec は tmux を必須としており、この環境では利用できません。
|
|
102
102
|
> WSL2 環境での実行を推奨します。
|
|
103
|
-
> 代替:
|
|
103
|
+
> 代替: `einja-task-exec` Skill で個別タスクグループを逐次実行することは可能です。
|
|
104
104
|
|
|
105
105
|
**インストール後の検証:**
|
|
106
106
|
- `hash -r` で PATH をリフレッシュし、`command -v tmux && tmux -V` で成功確認
|
|
@@ -111,6 +111,8 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
|
|
|
111
111
|
|
|
112
112
|
#### 3. セッション復元
|
|
113
113
|
- `--resume` フラグがある場合、`~/.einja/sessions/issue-{N}/session.json` からセッション状態を復元
|
|
114
|
+
- Manager worktree の存在確認: `git worktree list | grep issue-{N}/manager`
|
|
115
|
+
- 存在しない場合は再作成: `git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}`
|
|
114
116
|
- 未完了のPhaseのDirectorを再起動する
|
|
115
117
|
|
|
116
118
|
### Step 1: Issue パース
|
|
@@ -122,16 +124,18 @@ $ARGUMENTS をLLMとして自然言語解析し、以下の情報を抽出する
|
|
|
122
124
|
3. `--max-phase` が指定されている場合、その番号以降のPhaseを除外
|
|
123
125
|
|
|
124
126
|
### Step 2: ブランチ & worktree 作成
|
|
125
|
-
1. Issue
|
|
126
|
-
2.
|
|
127
|
-
3. git worktree 作成:
|
|
127
|
+
1. Issue ブランチ作成(メインリポジトリから): `issue/{issue番号}`(base ブランチから)
|
|
128
|
+
2. Manager worktree 作成(メインリポジトリから):
|
|
128
129
|
```bash
|
|
129
130
|
mkdir -p ~/.einja/worktrees/issue-{N}/
|
|
130
|
-
git worktree add ~/.einja/worktrees/issue-{N}/
|
|
131
|
+
git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}
|
|
132
|
+
git push -u origin issue/{N}
|
|
131
133
|
```
|
|
132
|
-
|
|
134
|
+
3. **以降の操作は全て Manager worktree 内から実行**(cwd: `~/.einja/worktrees/issue-{N}/manager`)
|
|
135
|
+
4. 各 Phase のブランチ作成(Manager worktree から): `issue/{issue番号}-phase{N}`(issue ブランチから)
|
|
136
|
+
5. Phase worktree 作成(Manager worktree から):
|
|
133
137
|
```bash
|
|
134
|
-
git
|
|
138
|
+
git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
|
|
135
139
|
git push -u origin issue/{N}-phase{M}
|
|
136
140
|
```
|
|
137
141
|
|
|
@@ -164,7 +168,7 @@ session.json の初期状態:
|
|
|
164
168
|
|
|
165
169
|
### Step 4: tmux セッション作成
|
|
166
170
|
```bash
|
|
167
|
-
tmux new-session -d -s einja-{issue番号} -n manager
|
|
171
|
+
tmux new-session -d -s einja-{issue番号} -n manager -c ~/.einja/worktrees/issue-{N}/manager
|
|
168
172
|
```
|
|
169
173
|
|
|
170
174
|
### Step 5: Director 起動(Phase単位)
|
|
@@ -199,15 +203,16 @@ tmux send-keys -t einja-{N}:director-phase{M} '
|
|
|
199
203
|
1. 依存関係のないタスクグループは並列でWorkerを起動してください
|
|
200
204
|
2. 各Worker には tmux window + claude 対話モードで起動:
|
|
201
205
|
- worktree作成: git worktree add ~/.einja/worktrees/issue-{N}/task-{X.Y} task/{N}-{X.Y}
|
|
202
|
-
- tmux: tmux new-window + claude 起動 +
|
|
206
|
+
- tmux: tmux new-window + claude 起動 + einja-task-exec Skill で #{N} {X.Y} を実行
|
|
203
207
|
3. Worker完了後:
|
|
204
208
|
- ステータスファイルでPR番号を確認
|
|
205
209
|
- マージモードに応じたPR処理
|
|
206
210
|
- 他active Workerにsync通知
|
|
207
211
|
- 完了したworktree削除
|
|
208
|
-
4.
|
|
209
|
-
5.
|
|
210
|
-
6.
|
|
212
|
+
4. Phase完了時: `/einja-create-pr --auto --base issue/{N}` でPhase PRを作成
|
|
213
|
+
5. 質問対応: Workerからの質問にspec/design/issueベースで回答。回答不可ならManagerにエスカレーション
|
|
214
|
+
6. Phase完了時: ステータスファイルで Manager に報告
|
|
215
|
+
7. GitHub Issue のチェックボックス更新
|
|
211
216
|
|
|
212
217
|
## 質問エスカレーション
|
|
213
218
|
回答不可な質問は ~/.einja/sessions/issue-{N}/questions/ にJSONファイルを作成してManagerに通知してください。
|
|
@@ -237,7 +242,8 @@ Manager は以下を定期的に監視:
|
|
|
237
242
|
- Director/Worker の tmux window が消失した場合のリカバリ処理
|
|
238
243
|
|
|
239
244
|
### Step 7: 全Phase完了 → 最終PR
|
|
240
|
-
1. 最終PR作成:
|
|
245
|
+
1. 最終PR作成: `/einja-create-pr --auto --base {baseBranch}` を実行
|
|
246
|
+
- changeset自動生成 + ラベル付与 + PR作成が一括実行される
|
|
241
247
|
2. PR URL を表示
|
|
242
248
|
3. セッションクリーンアップ(worktree 削除、セッションファイル削除)
|
|
243
249
|
|
|
@@ -253,7 +259,7 @@ Manager は以下を定期的に監視:
|
|
|
253
259
|
|
|
254
260
|
```
|
|
255
261
|
{baseBranch}
|
|
256
|
-
└── issue/{N} Manager
|
|
262
|
+
└── issue/{N} Manager worktree
|
|
257
263
|
├── issue/{N}-phase1 Director1 worktree
|
|
258
264
|
│ ├── task/{N}-1.1 Worker1.1 worktree
|
|
259
265
|
│ ├── task/{N}-1.2 Worker1.2 worktree
|
|
@@ -265,6 +271,7 @@ Manager は以下を定期的に監視:
|
|
|
265
271
|
## worktree 物理パス
|
|
266
272
|
```
|
|
267
273
|
~/.einja/worktrees/issue-{N}/
|
|
274
|
+
├── manager/ ← Manager cwd
|
|
268
275
|
├── phase{M}/ ← Director cwd
|
|
269
276
|
├── task-{X.Y}/ ← Worker cwd
|
|
270
277
|
```
|
|
@@ -339,7 +346,7 @@ Manager は以下を定期的に監視:
|
|
|
339
346
|
| Worker異常終了(PR作成済み) | tmux window消失 + PRあり | スキップ(PRマージ待ち継続) |
|
|
340
347
|
| Director異常終了 | tmux window消失 + ステータス未更新 | 各Workerのステータスを確認 → 未完了Workerのみ再実行 |
|
|
341
348
|
| Manager異常終了 | ユーザー手動 | `--resume` でセッション復元 |
|
|
342
|
-
| rebaseコンフリクト | git rebase失敗 | conflict-resolverで自力解消 |
|
|
349
|
+
| rebaseコンフリクト | git rebase失敗 | einja-conflict-resolver Skillで自力解消 |
|
|
343
350
|
| CI失敗 | gh run status | 修正 → 再push → 再CI待機 |
|
|
344
351
|
|
|
345
352
|
## CI 待機タイムアウト
|
|
@@ -382,22 +389,25 @@ git worktree add ~/.einja/worktrees/issue-{N}/task-{X.Y} task/{N}-{X.Y}
|
|
|
382
389
|
tmux new-window -t einja-{N} -n worker-{X.Y}
|
|
383
390
|
tmux send-keys -t einja-{N}:worker-{X.Y} 'cd ~/.einja/worktrees/issue-{N}/task-{X.Y} && claude' Enter
|
|
384
391
|
|
|
385
|
-
# 3. task-exec
|
|
392
|
+
# 3. einja-task-exec Skill を実行
|
|
386
393
|
# claude 起動後に以下を送信:
|
|
387
|
-
tmux send-keys -t einja-{N}:worker-{X.Y} '/einja
|
|
394
|
+
tmux send-keys -t einja-{N}:worker-{X.Y} '/einja-task-exec #{N} {X.Y}' Enter
|
|
388
395
|
```
|
|
389
396
|
|
|
390
397
|
## セッションクリーンアップ
|
|
391
398
|
|
|
392
399
|
Issue完了時に以下を自動削除:
|
|
393
400
|
- `~/.einja/sessions/issue-{N}/` (セッションファイル)
|
|
394
|
-
- `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove`
|
|
401
|
+
- `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を各ディレクトリに対して実行)
|
|
402
|
+
- `git worktree remove ~/.einja/worktrees/issue-{N}/task-{X.Y}`(Worker)
|
|
403
|
+
- `git worktree remove ~/.einja/worktrees/issue-{N}/phase{M}`(Director)
|
|
404
|
+
- `git worktree remove ~/.einja/worktrees/issue-{N}/manager`(Manager - 最後に削除)
|
|
395
405
|
- ローカルブランチのクリーンアップ(task/*, issue/*-phase*)
|
|
396
406
|
|
|
397
407
|
## 注意事項
|
|
398
408
|
|
|
399
409
|
- 全プロセスは**対話モード**(`claude`、非 `-p`)で起動。質問エスカレーションのため
|
|
400
|
-
- Worker 内部のタスク並列実行は既存の task-exec フロー(Task ツール + run_in_background)をそのまま活用
|
|
410
|
+
- Worker 内部のタスク並列実行は既存の einja-task-exec Skill フロー(Task ツール + run_in_background)をそのまま活用
|
|
401
411
|
- ステータスファイルの `status.json` 更新には `flock` による排他制御を使用
|
|
402
412
|
- 質問ファイルは1ファイル1質問のためロック不要(UUID でアトミック書き込み)
|
|
403
413
|
- Worker は各タスク完了毎 + PR作成前にステータスファイルをチェック(sync_required検知時は次タスク開始前にrebase)
|
|
@@ -51,7 +51,7 @@ Glob: .claude/commands/**/*.md
|
|
|
51
51
|
|
|
52
52
|
例:
|
|
53
53
|
- `task-executer` → `.claude/agents/task/task-executer.md`
|
|
54
|
-
- `
|
|
54
|
+
- `requirements-generator` → `.claude/agents/issue-specs/requirements-generator.md`
|
|
55
55
|
|
|
56
56
|
**変換テンプレート**:
|
|
57
57
|
|
|
@@ -131,8 +131,8 @@ alwaysApply: false
|
|
|
131
131
|
|
|
132
132
|
```bash
|
|
133
133
|
# 例(フォルダ形式)
|
|
134
|
-
.claude/
|
|
135
|
-
.claude/
|
|
134
|
+
.claude/skills/einja-task-exec/SKILL.md → .cursor/rules/task-exec/RULE.md
|
|
135
|
+
.claude/skills/einja-issue-spec-create/SKILL.md → .cursor/rules/spec-create/RULE.md
|
|
136
136
|
.claude/commands/einja/start-dev.md → .cursor/rules/start-dev/RULE.md
|
|
137
137
|
```
|
|
138
138
|
|
|
@@ -178,8 +178,8 @@ Cursor で以下のルールが利用可能になりました:
|
|
|
178
178
|
|
|
179
179
|
### レガシーファイル
|
|
180
180
|
以下の古い形式のファイルが検出されました(削除推奨):
|
|
181
|
-
- `.cursor/commands/task-exec.md`
|
|
182
|
-
- `.cursor/commands/spec-create.md`
|
|
181
|
+
- `.cursor/commands/einja-task-exec.md`
|
|
182
|
+
- `.cursor/commands/einja-issue-spec-create.md`
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
|
|
@@ -216,7 +216,7 @@ Cursor で以下のルールが利用可能になりました:
|
|
|
216
216
|
├── .cursor/rules/spec-create/RULE.md (3箇所のサブエージェント参照を変換)
|
|
217
217
|
├── .cursor/rules/task-exec/RULE.md (4箇所のサブエージェント参照を変換)
|
|
218
218
|
├── .cursor/rules/start-dev/RULE.md (変換不要)
|
|
219
|
-
└── .cursor/rules/update-docs-by-
|
|
219
|
+
└── .cursor/rules/update-docs-by-issue-specs/RULE.md (変換不要)
|
|
220
220
|
```
|
|
221
221
|
|
|
222
222
|
## エラー処理
|