@einja/dev-cli 0.1.39 → 0.1.41
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/README.md +89 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +187 -13
- package/dist/commands/sync.js.map +1 -1
- package/dist/lib/dependency-checker.d.ts.map +1 -1
- package/dist/lib/merger.d.ts +12 -0
- package/dist/lib/merger.d.ts.map +1 -1
- package/dist/lib/merger.js +28 -0
- package/dist/lib/merger.js.map +1 -1
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
- package/dist/lib/preset.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.d.ts +1 -1
- package/dist/lib/sync/category-validator.d.ts.map +1 -1
- package/dist/lib/sync/category-validator.js +2 -1
- package/dist/lib/sync/category-validator.js.map +1 -1
- package/dist/lib/sync/category-validator.test.js +3 -1
- package/dist/lib/sync/category-validator.test.js.map +1 -1
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
- package/dist/lib/sync/diff-engine.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.d.ts.map +1 -1
- package/dist/lib/sync/file-filter.js +1 -0
- package/dist/lib/sync/file-filter.js.map +1 -1
- package/dist/lib/sync/integration.test.js +255 -69
- package/dist/lib/sync/integration.test.js.map +1 -1
- package/dist/lib/sync/json-processor.d.ts +4 -4
- package/dist/lib/sync/json-processor.d.ts.map +1 -1
- package/dist/lib/sync/json-processor.js +11 -11
- package/dist/lib/sync/json-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.d.ts +60 -8
- package/dist/lib/sync/marker-processor.d.ts.map +1 -1
- package/dist/lib/sync/marker-processor.js +117 -26
- package/dist/lib/sync/marker-processor.js.map +1 -1
- package/dist/lib/sync/marker-processor.test.js +261 -40
- package/dist/lib/sync/marker-processor.test.js.map +1 -1
- package/dist/lib/sync/metadata-manager.d.ts +4 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
- package/dist/lib/sync/metadata-manager.js +15 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -1
- package/dist/lib/sync/metadata-manager.test.js +68 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -1
- package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
- package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.js +80 -0
- package/dist/lib/sync/orphan-cleaner.js.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
- package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
- package/dist/lib/sync/orphan-cleaner.test.js +169 -0
- package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
- package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.js +106 -0
- package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
- package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
- package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
- package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/sync.d.ts +36 -6
- package/dist/types/sync.d.ts.map +1 -1
- package/dist/types/sync.js +2 -2
- package/dist/types/sync.js.map +1 -1
- package/package.json +5 -4
- package/presets/default/.claude/agents/einja/Explore.md +140 -0
- package/presets/default/.claude/agents/einja/backend-architect.md +4 -0
- package/presets/default/.claude/agents/einja/codex-agent.md +4 -0
- package/presets/default/.claude/agents/einja/design-engineer.md +4 -0
- package/presets/default/.claude/agents/einja/docs/docs-updater.md +4 -0
- package/presets/default/.claude/agents/einja/frontend-architect.md +4 -0
- package/presets/default/.claude/agents/einja/frontend-coder.md +4 -0
- package/presets/default/.claude/agents/einja/git/conflict-resolver.md +4 -0
- package/presets/default/.claude/agents/einja/specs/spec-design-generator.md +4 -1
- package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +4 -0
- package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +4 -1
- package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +6 -2
- package/presets/default/.claude/agents/einja/specs/spec-tasks-validator.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-executer.md +57 -115
- package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-qa.md +4 -0
- package/presets/default/.claude/agents/einja/task/task-reviewer.md +4 -0
- package/presets/default/.claude/commands/einja/einja-sync.md +5 -1
- package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
- package/presets/default/.claude/commands/einja/issue-exec.md +403 -0
- package/presets/default/.claude/commands/einja/spec-create.md +15 -1
- package/presets/default/.claude/commands/einja/start-dev.md +4 -0
- package/presets/default/.claude/commands/einja/sync-cursor-commands.md +4 -0
- package/presets/default/.claude/commands/einja/task-exec.md +106 -14
- package/presets/default/.claude/commands/einja/update-docs-by-task-specs.md +4 -0
- package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +23 -0
- package/presets/default/.claude/settings.json +15 -1
- package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-general-context-loader/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-output-format/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-project-overview/SKILL.md +7 -3
- package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +266 -274
- package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
- package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
- package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
- package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
- package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +154 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +265 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +252 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
- package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +295 -0
- package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
- package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-task-commit/SKILL.md +4 -0
- package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -0
- package/presets/default/.envrc +5 -0
- package/presets/default/.mcp.json +2 -12
- package/presets/default/CLAUDE.md.template +26 -4
- package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
- package/presets/default/docs/einja/instructions/deployment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
- package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
- package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +70 -8
- package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
- package/presets/default/docs/einja/instructions/task-execute.md +23 -28
- package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
- package/presets/default/docs/einja/steering/README.md +11 -11
- package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +3 -8
- package/presets/default/docs/einja/steering/architecture.md +3 -8
- package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
- package/presets/default/docs/einja/steering/commit-rules.md +3 -8
- package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
- package/presets/default/docs/einja/steering/development/api-development.md +3 -8
- package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
- package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
- package/presets/default/docs/einja/steering/development/component-design.md +502 -0
- package/presets/default/docs/einja/steering/development/database-guidelines.md +54 -5
- package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
- package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
- package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
- package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
- package/presets/default/docs/einja/steering/development-workflow.md +71 -124
- package/presets/default/docs/einja/steering/infrastructure/deployment.md +49 -55
- package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
- package/presets/default/docs/einja/steering/product.md +3 -8
- package/presets/default/docs/einja/steering/task-management.md +14 -98
- package/presets/default/scripts/ensure-serena.sh +75 -0
- package/presets/default/scripts/env-rotate-secrets.ts +336 -0
- package/presets/default/scripts/env-show.ts +130 -0
- package/presets/default/scripts/env.ts +479 -0
- package/presets/default/scripts/init.sh +92 -0
- package/presets/default/scripts/lib/env-common.ts +108 -0
- package/presets/default/scripts/lib/worktree-config.ts +64 -0
- package/presets/default/scripts/setup-dev.ts +640 -0
- package/presets/default/scripts/stop-serena.sh +25 -0
- package/presets/default/scripts/worktree/dev.ts +872 -0
- package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
- package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.js +0 -72
- package/dist/lib/sync/seed-synchronizer.js.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
- package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
- package/dist/lib/sync/seed-synchronizer.test.js +0 -147
- package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
- package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
- package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
- package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
- package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
- package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
- package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
- package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
- package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
- package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
- package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
- package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
- package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
- package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
|
@@ -1,565 +0,0 @@
|
|
|
1
|
-
<!-- @einja:managed:start -->
|
|
2
|
-
# `pnpm task:loop` コマンド
|
|
3
|
-
|
|
4
|
-
## 概要
|
|
5
|
-
|
|
6
|
-
GitHub Issue からタスクを自動選定し、Vibe-Kanban に登録して連続実行する npm スクリプト。
|
|
7
|
-
|
|
8
|
-
**⚠️ 重要**: 着手可能なタスクを全て並列で Doing に移し、Done 状態の変化を監視して次のタスクを開始するループ処理。
|
|
9
|
-
|
|
10
|
-
**親Issue/サブIssue 構造**: Phase ごとに Vibe-Kanban 上で **親Issue** を作成し、着手可能なタスクグループは親Issueの配下に **サブIssue** として登録します。Phase内の全サブIssueが完了すると、PR作成・マージを経て親Issueが自動でDoneになります。
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## 使用方法
|
|
15
|
-
|
|
16
|
-
### 事前準備(初回のみ)
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# 1. 仕様書を作成(requirements.md, design.md, GitHub Issue へのタスク記述)
|
|
20
|
-
/einja:spec-create <タスク内容の説明>
|
|
21
|
-
|
|
22
|
-
# 一旦ここまで終わったらDiscordでスレッドを作りチームにレビュー依頼
|
|
23
|
-
|
|
24
|
-
# 2. Vibe-Kanban を起動(別ターミナルで実行)
|
|
25
|
-
npx vibe-kanban
|
|
26
|
-
# → ブラウザが自動で開き、Kanbanボードが表示される
|
|
27
|
-
# → このボードで PR作成・レビュー・マージ操作を行う
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### コマンド実行
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# 基本
|
|
34
|
-
pnpm task:loop <issue-number>
|
|
35
|
-
|
|
36
|
-
# 実行後、specで作成されたタスクが勝手に着手可能なものから実行開始されていくので、
|
|
37
|
-
# vibe-kanbanの画面を眺めて終わったものから自己レビュー、OKならPR作成ボタンでPR作成、チームのレビュー後、
|
|
38
|
-
# PRがマージされると自動で次のタスクが始まる(ちょっとラグあり)
|
|
39
|
-
|
|
40
|
-
# オプション指定
|
|
41
|
-
pnpm task:loop <issue-number> --max-group <number> --branch <branch>
|
|
42
|
-
|
|
43
|
-
# 例
|
|
44
|
-
pnpm task:loop 123 # Issue #123 の全タスクを実行
|
|
45
|
-
pnpm task:loop 123 --max-group 4 # Phase 4 まで実行
|
|
46
|
-
pnpm task:loop 123 --max-group 4.2 # タスクグループ 4.2 まで実行
|
|
47
|
-
pnpm task:loop 123 --branch develop # develop ブランチベースで実行
|
|
48
|
-
|
|
49
|
-
# ヘルプ
|
|
50
|
-
pnpm task:loop --help
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Vibe-Kanban 画面での操作
|
|
54
|
-
|
|
55
|
-
`npx vibe-kanban` で開いたボードで以下の操作を行います:
|
|
56
|
-
|
|
57
|
-
| 操作 | タイミング | 説明 |
|
|
58
|
-
|------|-----------|------|
|
|
59
|
-
| **タスク進捗確認** | 随時 | Todo → In Progress → In Review → Done の流れを確認 |
|
|
60
|
-
| **Create PR** | In Review 時 | ボタンをクリックして PR を自動作成 |
|
|
61
|
-
| **レビュー** | PR 作成後 | GitHub で PR の内容を確認 |
|
|
62
|
-
| **マージ** | レビュー完了後 | GitHub で PR をマージ(⚠️ 必ず GitHub 側で操作) |
|
|
63
|
-
|
|
64
|
-
**⚠️ 重要**: PR のマージは必ず GitHub 側で行ってください。マージを検知して Vibe-Kanban のタスクが自動で Done になります。
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## ブランチ階層
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
main (デフォルト)
|
|
72
|
-
└── issue/17 ← main から作成
|
|
73
|
-
├── issue/17-phase1 ← issue/17 から作成
|
|
74
|
-
├── issue/17-phase2 ← issue/17 から作成
|
|
75
|
-
└── issue/17-phase3 ← issue/17 から作成
|
|
76
|
-
└── (作業ブランチ) ← Vibe-Kanban が自動作成
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
- **main**: プロダクションブランチ
|
|
80
|
-
- **issue/N**: Issue 単位のブランチ(`--branch` で変更可能)
|
|
81
|
-
- **issue/N-phaseM**: Phase 単位のブランチ、タスクグループの作業ベース
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 開発手順(ステップバイステップ)
|
|
86
|
-
|
|
87
|
-
### 事前準備チェックリスト
|
|
88
|
-
|
|
89
|
-
- [ ] `npx @einja/dev-cli init` 実行済み(`pnpm task:loop` コマンドが使用可能)
|
|
90
|
-
- [ ] Docker が起動している
|
|
91
|
-
- [ ] `pnpm install` 済み
|
|
92
|
-
- [ ] Vibe-Kanban にプロジェクトが登録されている(後述)
|
|
93
|
-
- [ ] GitHub Issue にタスク一覧が記載されている
|
|
94
|
-
|
|
95
|
-
### Step 1: Vibe-Kanban を起動
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
npx vibe-kanban
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
ブラウザが自動で開きます。このボードでタスクの進捗を確認します。
|
|
102
|
-
|
|
103
|
-
### Step 2: プロジェクト登録(初回のみ)
|
|
104
|
-
|
|
105
|
-
Vibe-Kanban にこのプロジェクトが登録されていない場合:
|
|
106
|
-
|
|
107
|
-
1. ブラウザで Projects ページを開く
|
|
108
|
-
2. 「Create project」ボタンをクリック
|
|
109
|
-
3. Git Repository Path にプロジェクトのパスを入力
|
|
110
|
-
```
|
|
111
|
-
/Users/yourname/path/to/your-project
|
|
112
|
-
```
|
|
113
|
-
4. 保存
|
|
114
|
-
|
|
115
|
-
### Step 3: タスクループを開始
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
pnpm task:loop <issue-number>
|
|
119
|
-
|
|
120
|
-
# 例: Issue #17 の全タスクを実行
|
|
121
|
-
pnpm task:loop 17
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
コマンド実行後:
|
|
125
|
-
- 着手可能なタスクが自動で Vibe-Kanban に登録される
|
|
126
|
-
- 各タスクが並列で実行開始される
|
|
127
|
-
- 15秒ごとに進捗をポーリング
|
|
128
|
-
|
|
129
|
-
### Step 4: タスク進捗の確認
|
|
130
|
-
|
|
131
|
-
`npx vibe-kanban` で開いたボードでタスクの状態を確認:
|
|
132
|
-
|
|
133
|
-
| 状態 | 意味 |
|
|
134
|
-
|------|------|
|
|
135
|
-
| **Todo** | 未着手 |
|
|
136
|
-
| **In Progress** | 実行中(Claude Code が作業中) |
|
|
137
|
-
| **In Review** | レビュー待ち(PR作成が必要) |
|
|
138
|
-
| **Done** | 完了 |
|
|
139
|
-
|
|
140
|
-
### Step 5: In Review 状態の対応
|
|
141
|
-
|
|
142
|
-
タスクが **In Review** になったら:
|
|
143
|
-
|
|
144
|
-
1. **Vibe-Kanban で「Create PR」ボタンをクリック**
|
|
145
|
-
- PR が自動作成される
|
|
146
|
-
|
|
147
|
-
2. **GitHub で PR をレビュー**
|
|
148
|
-
- コードを確認
|
|
149
|
-
- 必要に応じて修正を依頼
|
|
150
|
-
|
|
151
|
-
3. **修正が必要な場合**
|
|
152
|
-
- PR にコメントを残す
|
|
153
|
-
- または Vibe-Kanban で「Request Changes」
|
|
154
|
-
|
|
155
|
-
4. **レビュー完了後、GitHub で PR をマージ**
|
|
156
|
-
- ⚠️ **必ず GitHub 側でマージすること**(Vibe-Kanban からはマージしない)
|
|
157
|
-
|
|
158
|
-
### Step 6: マージ後の自動処理
|
|
159
|
-
|
|
160
|
-
PR をマージすると:
|
|
161
|
-
|
|
162
|
-
1. Vibe-Kanban がマージを検知
|
|
163
|
-
2. タスクが自動で **Done** に変更
|
|
164
|
-
3. `pnpm task:loop` がこれを検知
|
|
165
|
-
4. GitHub Issue のチェックボックスが自動で `[x]` に更新
|
|
166
|
-
5. **Phase 内の全タスクが完了した場合、Phase ブランチを Issue ブランチに自動マージ**
|
|
167
|
-
6. 新たに着手可能になったタスクが自動で開始
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
171
|
-
│ PR マージ(サブIssue分) │
|
|
172
|
-
│ ↓ │
|
|
173
|
-
│ Vibe-Kanban: タスク → Done(自動) │
|
|
174
|
-
│ ↓ │
|
|
175
|
-
│ task:loop: Done 検知 │
|
|
176
|
-
│ ↓ │
|
|
177
|
-
│ GitHub Issue: チェックボックス更新(自動) │
|
|
178
|
-
│ ↓ │
|
|
179
|
-
│ Phase 全タスク(サブIssue)完了? │
|
|
180
|
-
│ ├─ Yes → 親Issue用Workspace作成 │
|
|
181
|
-
│ │ → PR作成・マージ(Phase → Issue ブランチ) │
|
|
182
|
-
│ │ → 親Issue 自動Done(タイムアウト2分でフォールバック)│
|
|
183
|
-
│ └─ No → スキップ │
|
|
184
|
-
│ ↓ │
|
|
185
|
-
│ 次のタスクが自動開始 │
|
|
186
|
-
└─────────────────────────────────────────────────────────────┘
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Step 7: 全タスク完了
|
|
190
|
-
|
|
191
|
-
すべてのタスクが Done になると:
|
|
192
|
-
|
|
193
|
-
```
|
|
194
|
-
🎉 すべてのタスクが完了しました!
|
|
195
|
-
✅ タスク自動実行ループ終了
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## トラブルシューティング
|
|
201
|
-
|
|
202
|
-
### プロジェクトが見つからないエラー
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
❌ プロジェクトが Vibe-Kanban に登録されていません
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
**対処法**: Step 2 の手順でプロジェクトを登録してください。
|
|
209
|
-
|
|
210
|
-
### タスクが In Review のまま進まない
|
|
211
|
-
|
|
212
|
-
**原因**: PR がマージされていない
|
|
213
|
-
|
|
214
|
-
**対処法**:
|
|
215
|
-
1. Vibe-Kanban で「Create PR」をクリック
|
|
216
|
-
2. GitHub で PR をレビュー・マージ
|
|
217
|
-
|
|
218
|
-
### タスクが Done にならない
|
|
219
|
-
|
|
220
|
-
**原因**: GitHub 側でマージしていない(Vibe-Kanban 上で手動で Done にした)
|
|
221
|
-
|
|
222
|
-
**対処法**: 必ず GitHub の PR をマージしてください。マージを検知して自動で Done になります。
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## 処理フロー
|
|
227
|
-
|
|
228
|
-
### アクター凡例
|
|
229
|
-
|
|
230
|
-
| アクター | 説明 | 操作種別 |
|
|
231
|
-
|---------|------|---------|
|
|
232
|
-
| 👤 **ユーザー** | 開発者(あなた) | 手動 |
|
|
233
|
-
| 🔄 **task:loop** | `pnpm task:loop` コマンド | 自動 |
|
|
234
|
-
| 🤖 **Claude Code** | Vibe-Kanban が起動する AI エージェント | 自動 |
|
|
235
|
-
| 📋 **Vibe-Kanban** | タスク管理ボード | 自動 |
|
|
236
|
-
| 🐙 **GitHub** | Issue / PR | - |
|
|
237
|
-
|
|
238
|
-
### フロー図
|
|
239
|
-
|
|
240
|
-
```mermaid
|
|
241
|
-
graph TD
|
|
242
|
-
subgraph User ["👤 ユーザー(手動)"]
|
|
243
|
-
U1([pnpm task:loop 実行])
|
|
244
|
-
U2[Vibe-Kanban で<br/>PR作成ボタンクリック]
|
|
245
|
-
U3[GitHub で<br/>PRレビュー・マージ]
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
subgraph TaskLoop ["🔄 task:loop(自動)"]
|
|
249
|
-
T1[Issue取得・解析]
|
|
250
|
-
T2[ブランチ作成]
|
|
251
|
-
T3[Vibe-Kanban 接続]
|
|
252
|
-
T3a[Phase毎に親Issue作成]
|
|
253
|
-
T4[サブIssue作成・開始指示]
|
|
254
|
-
T5[15秒ポーリング]
|
|
255
|
-
T6{Done検知?<br/>※親Issue除外}
|
|
256
|
-
T7[GitHub Issue<br/>チェックボックス更新]
|
|
257
|
-
T8[次のタスク開始指示]
|
|
258
|
-
T9{全完了?}
|
|
259
|
-
T10([ループ終了])
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
subgraph Claude ["🤖 Claude Code(自動)"]
|
|
263
|
-
C1[コード実装]
|
|
264
|
-
C2[テスト実行]
|
|
265
|
-
C3[コミット・プッシュ]
|
|
266
|
-
C4[作業完了報告]
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
subgraph VibeKanban ["📋 Vibe-Kanban(自動)"]
|
|
270
|
-
V1[タスク状態管理]
|
|
271
|
-
V2[Claude Code 起動]
|
|
272
|
-
V3[PRマージ検知]
|
|
273
|
-
V4[タスク → Done]
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
subgraph GitHub ["🐙 GitHub"]
|
|
277
|
-
G1[Issue]
|
|
278
|
-
G2[PR]
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
U1 --> T1
|
|
282
|
-
T1 --> T2
|
|
283
|
-
T2 --> T3
|
|
284
|
-
T3 --> T3a
|
|
285
|
-
T3a --> T4
|
|
286
|
-
T4 --> V1
|
|
287
|
-
V1 --> V2
|
|
288
|
-
V2 --> C1
|
|
289
|
-
C1 --> C2
|
|
290
|
-
C2 --> C3
|
|
291
|
-
C3 --> C4
|
|
292
|
-
C4 --> V1
|
|
293
|
-
|
|
294
|
-
T4 --> T5
|
|
295
|
-
T5 --> T6
|
|
296
|
-
T6 -->|No| T9
|
|
297
|
-
T6 -->|Yes| T7
|
|
298
|
-
T7 --> G1
|
|
299
|
-
T7 --> T8
|
|
300
|
-
T8 --> T9
|
|
301
|
-
T9 -->|No| T5
|
|
302
|
-
T9 -->|Yes| T10
|
|
303
|
-
|
|
304
|
-
V1 -->|In Review| U2
|
|
305
|
-
U2 --> G2
|
|
306
|
-
G2 --> U3
|
|
307
|
-
U3 --> V3
|
|
308
|
-
V3 --> V4
|
|
309
|
-
V4 --> T6
|
|
310
|
-
|
|
311
|
-
style U1 fill:#e3f2fd
|
|
312
|
-
style U2 fill:#e3f2fd
|
|
313
|
-
style U3 fill:#e3f2fd
|
|
314
|
-
style T10 fill:#4caf50,color:#fff
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### シーケンス図
|
|
318
|
-
|
|
319
|
-
```mermaid
|
|
320
|
-
sequenceDiagram
|
|
321
|
-
box rgb(227, 242, 253) 手動操作
|
|
322
|
-
participant User as 👤 ユーザー
|
|
323
|
-
end
|
|
324
|
-
box rgb(232, 245, 233) 自動処理
|
|
325
|
-
participant Script as 🔄 task:loop
|
|
326
|
-
participant Vibe as 📋 Vibe-Kanban
|
|
327
|
-
participant Claude as 🤖 Claude Code
|
|
328
|
-
end
|
|
329
|
-
box rgb(255, 243, 224) 外部サービス
|
|
330
|
-
participant GitHub as 🐙 GitHub
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
Note over User: 【開始】
|
|
334
|
-
User->>Script: pnpm task:loop 123
|
|
335
|
-
|
|
336
|
-
Note over Script: 【初期化フェーズ】
|
|
337
|
-
Script->>GitHub: Issue 取得・解析
|
|
338
|
-
Script->>Script: ブランチ作成(issue/123, issue/123-phase1...)
|
|
339
|
-
Script->>Vibe: MCP 接続
|
|
340
|
-
Script->>Script: REST API ヘルスチェック(probeCapability)
|
|
341
|
-
Script->>Vibe: Phase毎に親Issue作成(MCP create_issue)
|
|
342
|
-
|
|
343
|
-
Note over Script: 【サブIssue開始】
|
|
344
|
-
Script->>Script: 着手可能タスク選定
|
|
345
|
-
Script->>Vibe: サブIssue作成(MCP create_issue + REST PATCH parent_issue_id)
|
|
346
|
-
Script->>Vibe: start_task_attempt(実行開始指示)
|
|
347
|
-
Vibe->>Claude: Claude Code 起動
|
|
348
|
-
|
|
349
|
-
Note over Claude: 【タスク実行】
|
|
350
|
-
Claude->>Claude: コード実装
|
|
351
|
-
Claude->>Claude: テスト実行
|
|
352
|
-
Claude->>GitHub: コミット・プッシュ
|
|
353
|
-
Claude->>Vibe: 作業完了報告
|
|
354
|
-
Vibe->>Vibe: ステータス → In Review
|
|
355
|
-
|
|
356
|
-
Note over User: 【レビューフェーズ】
|
|
357
|
-
User->>Vibe: 「Create PR」ボタンクリック
|
|
358
|
-
Vibe->>GitHub: PR 作成
|
|
359
|
-
User->>GitHub: PR レビュー
|
|
360
|
-
User->>GitHub: PR マージ
|
|
361
|
-
|
|
362
|
-
Note over Vibe: 【自動検知】
|
|
363
|
-
Vibe->>Vibe: PR マージ検知
|
|
364
|
-
Vibe->>Vibe: ステータス → Done
|
|
365
|
-
|
|
366
|
-
Note over Script: 【ポーリング検知】
|
|
367
|
-
loop 15秒ごと
|
|
368
|
-
Script->>Vibe: タスク状態取得(親Issue除外)
|
|
369
|
-
alt Done 増加検知(サブIssue)
|
|
370
|
-
Script->>GitHub: Issue チェックボックス更新
|
|
371
|
-
alt Phase内全サブIssue完了
|
|
372
|
-
Script->>Vibe: 親Issue用Workspace作成
|
|
373
|
-
Script->>GitHub: PR作成・マージ(Phase→Issue)
|
|
374
|
-
Note over Vibe: PRマージ検知 → 親Issue自動Done<br/>(タイムアウト2分でフォールバック)
|
|
375
|
-
end
|
|
376
|
-
Script->>Script: 新たに着手可能なタスク選定
|
|
377
|
-
Script->>Vibe: 次のサブIssue作成・開始
|
|
378
|
-
Vibe->>Claude: Claude Code 起動(次タスク)
|
|
379
|
-
end
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
Note over Script: 【完了】
|
|
383
|
-
Script->>Vibe: MCP 切断
|
|
384
|
-
Script->>User: 🎉 全タスク完了
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### 操作主体の一覧
|
|
388
|
-
|
|
389
|
-
| フェーズ | 操作 | 主体 |
|
|
390
|
-
|---------|------|------|
|
|
391
|
-
| 開始 | `pnpm task:loop` 実行 | 👤 ユーザー |
|
|
392
|
-
| 初期化 | Issue 取得、ブランチ作成 | 🔄 task:loop |
|
|
393
|
-
| 初期化 | Vibe-Kanban 接続 | 🔄 task:loop |
|
|
394
|
-
| Phase初期化 | Phase毎に親Issue作成 | 🔄 task:loop |
|
|
395
|
-
| タスク開始 | サブIssue作成・開始指示(parent_issue_id設定) | 🔄 task:loop |
|
|
396
|
-
| タスク開始 | Claude Code 起動 | 📋 Vibe-Kanban |
|
|
397
|
-
| 実装 | コード実装、テスト、コミット | 🤖 Claude Code |
|
|
398
|
-
| 実装 | 作業完了報告 | 🤖 Claude Code |
|
|
399
|
-
| レビュー | 「Create PR」クリック | 👤 ユーザー |
|
|
400
|
-
| レビュー | PR 作成 | 📋 Vibe-Kanban |
|
|
401
|
-
| レビュー | PR レビュー・マージ | 👤 ユーザー |
|
|
402
|
-
| 検知 | PR マージ検知 → Done | 📋 Vibe-Kanban |
|
|
403
|
-
| 検知 | Done 検知 | 🔄 task:loop |
|
|
404
|
-
| 更新 | Issue チェックボックス更新 | 🔄 task:loop |
|
|
405
|
-
| 次タスク | 次のタスク開始指示 | 🔄 task:loop |
|
|
406
|
-
| 終了 | MCP 切断、完了通知 | 🔄 task:loop |
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## 各フェーズの概要
|
|
411
|
-
|
|
412
|
-
### 1. 初期化フェーズ(1回のみ)
|
|
413
|
-
|
|
414
|
-
- 引数解析(Issue番号、最大タスク番号、ベースブランチ)
|
|
415
|
-
- GitHub Issue 取得・Markdown パース
|
|
416
|
-
- Issue ブランチ作成: `issue/{issue_number}`
|
|
417
|
-
- Phase ブランチ作成: `issue/{issue_number}-phase{N}`
|
|
418
|
-
- Vibe-Kanban MCP 接続(以降使い回し)
|
|
419
|
-
- プロジェクト ID 取得
|
|
420
|
-
- REST API ヘルスチェック(probeCapability)
|
|
421
|
-
- **Phase ごとに親Issue作成**: タイトル形式 `[Issue{N} Phase{M}] {Phase名}`
|
|
422
|
-
|
|
423
|
-
### 2. 初期サブIssue開始
|
|
424
|
-
|
|
425
|
-
- 依存関係を考慮して着手可能なタスクグループを全て選定
|
|
426
|
-
- Vibe-Kanban に**サブIssueとして作成**(MCP create_issue + REST PATCH で parent_issue_id 設定)
|
|
427
|
-
- PATCH 失敗時はリトライ3回 → 全失敗時は MCP delete_issue で削除して再スロー
|
|
428
|
-
- `start_task_attempt` で実行開始
|
|
429
|
-
|
|
430
|
-
### 3. メインループ(15秒ポーリング)
|
|
431
|
-
|
|
432
|
-
- Vibe-Kanban のタスク状態を取得(**親IssueをIDベースで除外**してサブIssueのみ対象)
|
|
433
|
-
- Done 増加を検知した場合:
|
|
434
|
-
- GitHub Issue のチェックボックスを `- [x]` に更新
|
|
435
|
-
- **Phase 内の全サブIssueが完了していれば**:
|
|
436
|
-
1. 親Issue用Workspace作成(target = issue/N)
|
|
437
|
-
2. PR作成・自動マージ(Phase ブランチ → Issue ブランチ)
|
|
438
|
-
3. Vibe-KanbanがPRマージ検知 → 親Issue自動Done
|
|
439
|
-
4. タイムアウト(2分)時は手動Done更新(フォールバック)
|
|
440
|
-
- 新たに着手可能になったタスクを開始
|
|
441
|
-
- 全タスク完了で終了
|
|
442
|
-
|
|
443
|
-
### 4. 終了処理
|
|
444
|
-
|
|
445
|
-
- Vibe-Kanban MCP 切断
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
|
-
## Vibe-Kanban セットアップ
|
|
450
|
-
|
|
451
|
-
### 前提条件
|
|
452
|
-
|
|
453
|
-
✅ このプロジェクトでは既に設定済み(`.mcp.json`)
|
|
454
|
-
|
|
455
|
-
### セットアップ手順
|
|
456
|
-
|
|
457
|
-
1. **アプリケーション起動**
|
|
458
|
-
```bash
|
|
459
|
-
npx vibe-kanban
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
2. **プロジェクト確認**
|
|
463
|
-
- ブラウザでKanbanボード表示
|
|
464
|
-
- プロジェクトが登録されていることを確認
|
|
465
|
-
|
|
466
|
-
---
|
|
467
|
-
|
|
468
|
-
## `/einja:task-exec` との使い分け
|
|
469
|
-
|
|
470
|
-
| コマンド | 用途 | 品質保証 | 推奨シーン |
|
|
471
|
-
|---------|------|---------|----------|
|
|
472
|
-
| **`/einja:task-exec`** | 重要タスクの確実な完了 | ✅ 合格まで自動ループ | 複雑な実装、品質重視 |
|
|
473
|
-
| **`pnpm task:loop`** | 大量タスクの自動消化 | 並列実行・監視 | 定型作業、並行開発 |
|
|
474
|
-
|
|
475
|
-
---
|
|
476
|
-
|
|
477
|
-
## 実装詳細
|
|
478
|
-
|
|
479
|
-
スクリプトは `packages/cli/src/commands/task-loop/` に配置(CLIパッケージに統合):
|
|
480
|
-
|
|
481
|
-
```
|
|
482
|
-
packages/cli/src/commands/task-loop/
|
|
483
|
-
├── index.ts # エントリポイント(taskLoopCommand関数)
|
|
484
|
-
└── lib/
|
|
485
|
-
├── types.ts # 型定義
|
|
486
|
-
├── task-number-utils.ts # タスク番号比較
|
|
487
|
-
├── github-client.ts # GitHub Issue操作
|
|
488
|
-
├── gh-setup.ts # GitHub CLI セットアップ
|
|
489
|
-
├── branch-manager.ts # Git ブランチ操作
|
|
490
|
-
├── conflict-handler.ts # コンフリクト処理
|
|
491
|
-
├── vibe-kanban-client.ts # MCP経由Vibe-Kanban操作
|
|
492
|
-
├── vibe-kanban-rest-client.ts # REST API クライアント(親子関係設定、ヘルスチェック)
|
|
493
|
-
├── issue-parser.ts # Issue Markdownパーサー
|
|
494
|
-
├── dependency-resolver.ts # 依存関係解析
|
|
495
|
-
├── project-selector.ts # プロジェクト選択
|
|
496
|
-
└── task-state-manager.ts # タスク状態管理
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
## Claude Codeプロンプト生成アーキテクチャ
|
|
500
|
-
|
|
501
|
-
### VK Issue と VK 内部タスクの違い
|
|
502
|
-
|
|
503
|
-
task:loop は Vibe-Kanban に対して2種類のオブジェクトを作成する。**これらは別物であり、混同しないこと。**
|
|
504
|
-
|
|
505
|
-
| オブジェクト | 作成API | 用途 | 備考 |
|
|
506
|
-
|-------------|---------|------|------|
|
|
507
|
-
| VK Issue(サブIssue) | `createSubIssue(title, description)` | VK UI上でのタスク表示・管理 | title=`[Issue22 1.2] タスク名` |
|
|
508
|
-
| VK 内部タスク | `start_workspace_session(title)` | Claude Codeセッション起動 | **titleがプロンプトになる** |
|
|
509
|
-
|
|
510
|
-
### プロンプトの流れ
|
|
511
|
-
|
|
512
|
-
```
|
|
513
|
-
startTaskAttempt(agentPrompt, executor, repos, issueId)
|
|
514
|
-
│
|
|
515
|
-
└─ VK: start_workspace_session(title=agentPrompt)
|
|
516
|
-
└─ CreateTask(title=agentPrompt, description=None)
|
|
517
|
-
└─ task.to_prompt() → agentPrompt をそのまま返す
|
|
518
|
-
└─ CodingAgentInitialRequest { prompt: agentPrompt }
|
|
519
|
-
└─ Claude Code起動
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
**重要**: `start_workspace_session` には description パラメータがない。内部タスクの description は常に None になるため、**title のみが Claude Code のプロンプトになる**。
|
|
523
|
-
|
|
524
|
-
### start_workspace_session のパラメータ
|
|
525
|
-
|
|
526
|
-
| パラメータ | 型 | Claude Codeへの影響 |
|
|
527
|
-
|-----------|-----|-------------------|
|
|
528
|
-
| title | String | **Claude Codeのプロンプトになる** |
|
|
529
|
-
| executor | String | 起動するエージェントの種類 |
|
|
530
|
-
| repos | Array | リポジトリ・ベースブランチ |
|
|
531
|
-
| issue_id | UUID? | Issueとのリンク(プロンプトに影響なし) |
|
|
532
|
-
| variant | String? | エージェントのバリアント |
|
|
533
|
-
|
|
534
|
-
### プロンプト生成関数
|
|
535
|
-
|
|
536
|
-
| 関数 | 用途 | 出力先 |
|
|
537
|
-
|------|------|--------|
|
|
538
|
-
| `generateVibeKanbanTitle()` | VK Issue のタイトル | `createSubIssue` の title |
|
|
539
|
-
| `generateVibeKanbanDescription()` | VK Issue の説明文 | `createSubIssue` の description |
|
|
540
|
-
| `generateAgentPrompt()` | Claude Code の初期プロンプト | `startTaskAttempt` の title |
|
|
541
|
-
|
|
542
|
-
### プロンプト変更時の注意
|
|
543
|
-
|
|
544
|
-
1. `startTaskAttempt` の第1引数が Claude Code の初期プロンプトになる
|
|
545
|
-
2. `createSubIssue` の title とは別に管理すること(同じ変数を使い回さない)
|
|
546
|
-
3. VK UI の Issue description とは独立(description は UI 表示用のみ)
|
|
547
|
-
|
|
548
|
-
---
|
|
549
|
-
|
|
550
|
-
## 関連ドキュメント
|
|
551
|
-
|
|
552
|
-
- [タスク実行ワークフロー](./einja:task-execute.md)
|
|
553
|
-
- [タスク管理ガイドライン](../steering/task-management.md)
|
|
554
|
-
- [仕様書作成ワークフロー](./einja:spec-create.md)
|
|
555
|
-
- [ブランチ運用戦略](../steering/branch-strategy.md) - ブランチ命名規則、同期フロー、ワークフロー図
|
|
556
|
-
<!-- @einja:managed:end -->
|
|
557
|
-
|
|
558
|
-
---
|
|
559
|
-
|
|
560
|
-
<!-- @einja:seed:start id="task-vibe-kanban-loop-project" -->
|
|
561
|
-
## プロジェクト固有の設定
|
|
562
|
-
|
|
563
|
-
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
564
|
-
<!-- einja syncで上書きされません -->
|
|
565
|
-
<!-- @einja:seed:end -->
|