@einja/dev-cli 0.1.40 → 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.
Files changed (183) hide show
  1. package/README.md +89 -1
  2. package/dist/cli.js +1 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +71 -1
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/list.js.map +1 -1
  8. package/dist/commands/sync.d.ts.map +1 -1
  9. package/dist/commands/sync.js +187 -13
  10. package/dist/commands/sync.js.map +1 -1
  11. package/dist/lib/dependency-checker.d.ts.map +1 -1
  12. package/dist/lib/merger.d.ts +12 -0
  13. package/dist/lib/merger.d.ts.map +1 -1
  14. package/dist/lib/merger.js +28 -0
  15. package/dist/lib/merger.js.map +1 -1
  16. package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
  17. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  18. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
  19. package/dist/lib/preset.d.ts.map +1 -1
  20. package/dist/lib/sync/category-validator.d.ts +1 -1
  21. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  22. package/dist/lib/sync/category-validator.js +2 -1
  23. package/dist/lib/sync/category-validator.js.map +1 -1
  24. package/dist/lib/sync/category-validator.test.js +3 -1
  25. package/dist/lib/sync/category-validator.test.js.map +1 -1
  26. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
  27. package/dist/lib/sync/diff-engine.d.ts.map +1 -1
  28. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  29. package/dist/lib/sync/file-filter.js +1 -0
  30. package/dist/lib/sync/file-filter.js.map +1 -1
  31. package/dist/lib/sync/integration.test.js +255 -69
  32. package/dist/lib/sync/integration.test.js.map +1 -1
  33. package/dist/lib/sync/json-processor.d.ts +4 -4
  34. package/dist/lib/sync/json-processor.d.ts.map +1 -1
  35. package/dist/lib/sync/json-processor.js +11 -11
  36. package/dist/lib/sync/json-processor.js.map +1 -1
  37. package/dist/lib/sync/marker-processor.d.ts +60 -8
  38. package/dist/lib/sync/marker-processor.d.ts.map +1 -1
  39. package/dist/lib/sync/marker-processor.js +117 -26
  40. package/dist/lib/sync/marker-processor.js.map +1 -1
  41. package/dist/lib/sync/marker-processor.test.js +261 -40
  42. package/dist/lib/sync/marker-processor.test.js.map +1 -1
  43. package/dist/lib/sync/metadata-manager.d.ts +4 -0
  44. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  45. package/dist/lib/sync/metadata-manager.js +15 -0
  46. package/dist/lib/sync/metadata-manager.js.map +1 -1
  47. package/dist/lib/sync/metadata-manager.test.js +68 -0
  48. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  49. package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
  50. package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
  51. package/dist/lib/sync/orphan-cleaner.js +80 -0
  52. package/dist/lib/sync/orphan-cleaner.js.map +1 -0
  53. package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
  54. package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
  55. package/dist/lib/sync/orphan-cleaner.test.js +169 -0
  56. package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
  57. package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
  58. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
  59. package/dist/lib/sync/project-private-synchronizer.js +106 -0
  60. package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
  61. package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
  62. package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
  63. package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
  64. package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
  65. package/dist/types/index.d.ts +1 -0
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/types/sync.d.ts +36 -6
  68. package/dist/types/sync.d.ts.map +1 -1
  69. package/dist/types/sync.js +2 -2
  70. package/dist/types/sync.js.map +1 -1
  71. package/package.json +5 -4
  72. package/presets/default/.claude/agents/einja/Explore.md +140 -0
  73. package/presets/default/.claude/agents/einja/backend-architect.md +4 -0
  74. package/presets/default/.claude/agents/einja/codex-agent.md +4 -0
  75. package/presets/default/.claude/agents/einja/design-engineer.md +4 -0
  76. package/presets/default/.claude/agents/einja/docs/docs-updater.md +4 -0
  77. package/presets/default/.claude/agents/einja/frontend-architect.md +4 -0
  78. package/presets/default/.claude/agents/einja/frontend-coder.md +4 -0
  79. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +4 -0
  80. package/presets/default/.claude/agents/einja/specs/spec-design-generator.md +4 -1
  81. package/presets/default/.claude/agents/einja/specs/spec-qa-generator.md +4 -0
  82. package/presets/default/.claude/agents/einja/specs/spec-requirements-generator.md +4 -1
  83. package/presets/default/.claude/agents/einja/specs/spec-tasks-generator.md +6 -2
  84. package/presets/default/.claude/agents/einja/specs/spec-tasks-validator.md +4 -0
  85. package/presets/default/.claude/agents/einja/task/task-executer.md +57 -115
  86. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +4 -0
  87. package/presets/default/.claude/agents/einja/task/task-qa.md +4 -0
  88. package/presets/default/.claude/agents/einja/task/task-reviewer.md +4 -0
  89. package/presets/default/.claude/commands/einja/einja-sync.md +5 -1
  90. package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
  91. package/presets/default/.claude/commands/einja/issue-exec.md +403 -0
  92. package/presets/default/.claude/commands/einja/spec-create.md +15 -1
  93. package/presets/default/.claude/commands/einja/start-dev.md +4 -0
  94. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +4 -0
  95. package/presets/default/.claude/commands/einja/task-exec.md +106 -14
  96. package/presets/default/.claude/commands/einja/update-docs-by-task-specs.md +4 -0
  97. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +23 -0
  98. package/presets/default/.claude/settings.json +15 -1
  99. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +4 -0
  100. package/presets/default/.claude/skills/einja-general-context-loader/SKILL.md +4 -0
  101. package/presets/default/.claude/skills/einja-output-format/SKILL.md +4 -0
  102. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +7 -3
  103. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +266 -274
  104. package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
  105. package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
  106. package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
  107. package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
  108. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
  109. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
  110. package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
  111. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +154 -0
  112. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +265 -0
  113. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +252 -0
  114. package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
  115. package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
  116. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
  117. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +295 -0
  118. package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
  119. package/presets/default/.claude/skills/einja-spec-context-loader/SKILL.md +4 -0
  120. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +4 -0
  121. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +4 -0
  122. package/presets/default/.envrc +5 -0
  123. package/presets/default/.mcp.json +2 -12
  124. package/presets/default/CLAUDE.md.template +26 -4
  125. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
  126. package/presets/default/docs/einja/instructions/deployment-setup.md +3 -8
  127. package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
  128. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
  129. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +70 -8
  130. package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
  131. package/presets/default/docs/einja/instructions/task-execute.md +23 -28
  132. package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
  133. package/presets/default/docs/einja/steering/README.md +11 -11
  134. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +3 -8
  135. package/presets/default/docs/einja/steering/architecture.md +3 -8
  136. package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
  137. package/presets/default/docs/einja/steering/commit-rules.md +3 -8
  138. package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
  139. package/presets/default/docs/einja/steering/development/api-development.md +3 -8
  140. package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
  141. package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
  142. package/presets/default/docs/einja/steering/development/component-design.md +502 -0
  143. package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
  144. package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
  145. package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
  146. package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
  147. package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
  148. package/presets/default/docs/einja/steering/development-workflow.md +71 -124
  149. package/presets/default/docs/einja/steering/infrastructure/deployment.md +49 -55
  150. package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
  151. package/presets/default/docs/einja/steering/product.md +3 -8
  152. package/presets/default/docs/einja/steering/task-management.md +14 -98
  153. package/presets/default/scripts/ensure-serena.sh +75 -0
  154. package/presets/default/scripts/env-rotate-secrets.ts +336 -0
  155. package/presets/default/scripts/env-show.ts +130 -0
  156. package/presets/default/scripts/env.ts +479 -0
  157. package/presets/default/scripts/init.sh +92 -0
  158. package/presets/default/scripts/lib/env-common.ts +108 -0
  159. package/presets/default/scripts/lib/worktree-config.ts +64 -0
  160. package/presets/default/scripts/setup-dev.ts +640 -0
  161. package/presets/default/scripts/stop-serena.sh +25 -0
  162. package/presets/default/scripts/worktree/dev.ts +872 -0
  163. package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
  164. package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
  165. package/dist/lib/sync/seed-synchronizer.js +0 -72
  166. package/dist/lib/sync/seed-synchronizer.js.map +0 -1
  167. package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
  168. package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
  169. package/dist/lib/sync/seed-synchronizer.test.js +0 -147
  170. package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
  171. package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
  172. package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
  173. package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
  174. package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
  175. package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
  176. package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
  177. package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
  178. package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
  179. package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
  180. package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
  181. package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
  182. package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
  183. 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 -->