@einja/dev-cli 0.1.40 → 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.
Files changed (207) 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/commands/task-loop/lib/github-client.test.js.map +1 -1
  12. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js +2 -2
  13. package/dist/commands/task-loop/lib/vibe-kanban-rest-client.js.map +1 -1
  14. package/dist/lib/dependency-checker.d.ts.map +1 -1
  15. package/dist/lib/merger.d.ts +12 -0
  16. package/dist/lib/merger.d.ts.map +1 -1
  17. package/dist/lib/merger.js +28 -0
  18. package/dist/lib/merger.js.map +1 -1
  19. package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -1
  20. package/dist/lib/preset-update/file-copier.d.ts.map +1 -1
  21. package/dist/lib/preset-update/file-copier.js +3 -3
  22. package/dist/lib/preset-update/file-copier.js.map +1 -1
  23. package/dist/lib/preset-update/preset-finder.d.ts.map +1 -1
  24. package/dist/lib/preset.d.ts.map +1 -1
  25. package/dist/lib/sync/category-validator.d.ts +1 -1
  26. package/dist/lib/sync/category-validator.d.ts.map +1 -1
  27. package/dist/lib/sync/category-validator.js +2 -1
  28. package/dist/lib/sync/category-validator.js.map +1 -1
  29. package/dist/lib/sync/category-validator.test.js +3 -1
  30. package/dist/lib/sync/category-validator.test.js.map +1 -1
  31. package/dist/lib/sync/conflict-reporter.d.ts.map +1 -1
  32. package/dist/lib/sync/diff-engine.d.ts.map +1 -1
  33. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  34. package/dist/lib/sync/file-filter.js +1 -0
  35. package/dist/lib/sync/file-filter.js.map +1 -1
  36. package/dist/lib/sync/integration.test.js +255 -69
  37. package/dist/lib/sync/integration.test.js.map +1 -1
  38. package/dist/lib/sync/json-processor.d.ts +4 -4
  39. package/dist/lib/sync/json-processor.d.ts.map +1 -1
  40. package/dist/lib/sync/json-processor.js +11 -11
  41. package/dist/lib/sync/json-processor.js.map +1 -1
  42. package/dist/lib/sync/marker-processor.d.ts +60 -8
  43. package/dist/lib/sync/marker-processor.d.ts.map +1 -1
  44. package/dist/lib/sync/marker-processor.js +117 -26
  45. package/dist/lib/sync/marker-processor.js.map +1 -1
  46. package/dist/lib/sync/marker-processor.test.js +261 -40
  47. package/dist/lib/sync/marker-processor.test.js.map +1 -1
  48. package/dist/lib/sync/metadata-manager.d.ts +4 -0
  49. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  50. package/dist/lib/sync/metadata-manager.js +15 -0
  51. package/dist/lib/sync/metadata-manager.js.map +1 -1
  52. package/dist/lib/sync/metadata-manager.test.js +69 -0
  53. package/dist/lib/sync/metadata-manager.test.js.map +1 -1
  54. package/dist/lib/sync/orphan-cleaner.d.ts +29 -0
  55. package/dist/lib/sync/orphan-cleaner.d.ts.map +1 -0
  56. package/dist/lib/sync/orphan-cleaner.js +80 -0
  57. package/dist/lib/sync/orphan-cleaner.js.map +1 -0
  58. package/dist/lib/sync/orphan-cleaner.test.d.ts +2 -0
  59. package/dist/lib/sync/orphan-cleaner.test.d.ts.map +1 -0
  60. package/dist/lib/sync/orphan-cleaner.test.js +169 -0
  61. package/dist/lib/sync/orphan-cleaner.test.js.map +1 -0
  62. package/dist/lib/sync/project-private-synchronizer.d.ts +52 -0
  63. package/dist/lib/sync/project-private-synchronizer.d.ts.map +1 -0
  64. package/dist/lib/sync/project-private-synchronizer.js +110 -0
  65. package/dist/lib/sync/project-private-synchronizer.js.map +1 -0
  66. package/dist/lib/sync/project-private-synchronizer.test.d.ts +2 -0
  67. package/dist/lib/sync/project-private-synchronizer.test.d.ts.map +1 -0
  68. package/dist/lib/sync/project-private-synchronizer.test.js +348 -0
  69. package/dist/lib/sync/project-private-synchronizer.test.js.map +1 -0
  70. package/dist/types/index.d.ts +1 -0
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/sync.d.ts +36 -6
  73. package/dist/types/sync.d.ts.map +1 -1
  74. package/dist/types/sync.js +2 -2
  75. package/dist/types/sync.js.map +1 -1
  76. package/package.json +5 -4
  77. package/presets/default/.claude/agents/einja/Explore.md +140 -0
  78. package/presets/default/.claude/agents/einja/backend-architect.md +21 -1
  79. package/presets/default/.claude/agents/einja/codex-agent.md +5 -1
  80. package/presets/default/.claude/agents/einja/design-engineer.md +5 -1
  81. package/presets/default/.claude/agents/einja/docs/docs-updater.md +7 -93
  82. package/presets/default/.claude/agents/einja/frontend-architect.md +21 -1
  83. package/presets/default/.claude/agents/einja/frontend-coder.md +5 -1
  84. package/presets/default/.claude/agents/einja/{specs/spec-design-generator.md → issue-specs/design-generator.md} +16 -8
  85. package/presets/default/.claude/agents/einja/{specs/spec-qa-generator.md → issue-specs/qa-generator.md} +10 -4
  86. package/presets/default/.claude/agents/einja/{specs/spec-requirements-generator.md → issue-specs/requirements-generator.md} +9 -6
  87. package/presets/default/.claude/agents/einja/{specs/spec-tasks-generator.md → issue-specs/tasks-generator.md} +19 -16
  88. package/presets/default/.claude/agents/einja/{specs/spec-tasks-validator.md → issue-specs/tasks-validator.md} +13 -9
  89. package/presets/default/.claude/agents/einja/issue-specs/ui-design-generator.md +114 -0
  90. package/presets/default/.claude/agents/einja/task/task-executer.md +64 -116
  91. package/presets/default/.claude/agents/einja/task/task-modification-analyzer.md +6 -2
  92. package/presets/default/.claude/agents/einja/task/task-qa.md +7 -3
  93. package/presets/default/.claude/agents/einja/task/task-reviewer.md +17 -1
  94. package/presets/default/.claude/commands/einja/einja-sync.md +124 -45
  95. package/presets/default/.claude/commands/einja/frontend-implement.md +3 -1
  96. package/presets/default/.claude/commands/einja/issue-exec.md +413 -0
  97. package/presets/default/.claude/commands/einja/start-dev.md +4 -0
  98. package/presets/default/.claude/commands/einja/sync-cursor-commands.md +10 -6
  99. package/presets/default/.claude/commands/einja/{update-docs-by-task-specs.md → update-docs-by-issue-specs.md} +61 -57
  100. package/presets/default/.claude/hooks/einja/plan-mode-skill-loader.sh +27 -0
  101. package/presets/default/.claude/settings.json +29 -5
  102. package/presets/default/.claude/skills/{einja-general-context-loader → _einja-general-context-loader}/SKILL.md +6 -2
  103. package/presets/default/.claude/skills/{einja-output-format → _einja-output-format}/SKILL.md +5 -1
  104. package/presets/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  105. package/presets/default/.claude/skills/{einja-spec-context-loader → _einja-spec-context-loader}/SKILL.md +9 -5
  106. package/presets/default/.claude/skills/einja-coding-standards/references/testing-strategy.md +899 -0
  107. package/presets/default/.claude/skills/einja-conflict-resolver/SKILL.md +5 -1
  108. package/presets/default/.claude/skills/einja-create-pr/SKILL.md +138 -0
  109. package/presets/default/.claude/skills/einja-infra-maintenance/SKILL.md +779 -0
  110. package/presets/default/.claude/{commands/einja/spec-create.md → skills/einja-issue-spec-create/SKILL.md} +60 -23
  111. package/presets/default/.claude/skills/einja-issue-spec-generator/SKILL.md +105 -0
  112. package/presets/default/.claude/skills/einja-issue-spec-generator/references/format-rules.md +35 -0
  113. package/presets/default/.claude/skills/einja-issue-spec-validator/SKILL.md +130 -0
  114. package/presets/default/.claude/skills/einja-issue-spec-validator/references/validation-rules.md +52 -0
  115. package/presets/default/.claude/skills/einja-npm-release/SKILL.md +242 -0
  116. package/presets/default/.claude/skills/einja-skill-creator/SKILL.md +311 -263
  117. package/presets/default/.claude/skills/einja-skill-creator/agents/analyzer.md +274 -0
  118. package/presets/default/.claude/skills/einja-skill-creator/agents/comparator.md +202 -0
  119. package/presets/default/.claude/skills/einja-skill-creator/agents/grader.md +195 -0
  120. package/presets/default/.claude/skills/einja-skill-creator/assets/eval_review.html +146 -0
  121. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/generate_review.py +471 -0
  122. package/presets/default/.claude/skills/einja-skill-creator/eval-viewer/viewer.html +1325 -0
  123. package/presets/default/.claude/skills/einja-skill-creator/references/schemas.md +430 -0
  124. package/presets/default/.claude/skills/einja-skill-creator/scripts/aggregate_benchmark.py +401 -0
  125. package/presets/default/.claude/skills/einja-skill-creator/scripts/compare_runs.py +154 -0
  126. package/presets/default/.claude/skills/einja-skill-creator/scripts/generate_report.py +272 -0
  127. package/presets/default/.claude/skills/einja-skill-creator/scripts/improve_description.py +247 -0
  128. package/presets/default/.claude/skills/einja-skill-creator/scripts/init_skill.py +13 -19
  129. package/presets/default/.claude/skills/einja-skill-creator/scripts/package_skill.py +36 -7
  130. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_eval.py +310 -0
  131. package/presets/default/.claude/skills/einja-skill-creator/scripts/run_loop.py +375 -0
  132. package/presets/default/.claude/skills/einja-skill-creator/scripts/utils.py +48 -0
  133. package/presets/default/.claude/skills/einja-skill-first/SKILL.md +265 -0
  134. package/presets/default/.claude/skills/einja-subagent-question-protocol/SKILL.md +98 -0
  135. package/presets/default/.claude/skills/einja-task-commit/SKILL.md +11 -7
  136. package/presets/default/.claude/{commands/einja/task-exec.md → skills/einja-task-exec/SKILL.md} +106 -89
  137. package/presets/default/.claude/skills/einja-task-qa/SKILL.md +8 -4
  138. package/presets/default/.claude/skills/einja-task-qa/references/troubleshooting.md +1 -1
  139. package/presets/default/.claude/skills/einja-task-qa/references/usage-patterns.md +2 -2
  140. package/presets/default/.claude/skills/einja-team-exec/SKILL.md +165 -0
  141. package/presets/default/.envrc +5 -0
  142. package/presets/default/.mcp.json +2 -12
  143. package/presets/default/CLAUDE.md.template +45 -8
  144. package/presets/default/docs/einja/example/specs/issues/issue999-example-task/tasks.md +1 -1
  145. package/presets/default/docs/einja/instructions/deployment-setup.md +4 -9
  146. package/presets/default/docs/einja/instructions/environment-setup.md +3 -8
  147. package/presets/default/docs/einja/instructions/issue-exec-workflow.md +276 -0
  148. package/presets/default/docs/einja/instructions/local-server-environment-and-worktree.md +71 -9
  149. package/presets/default/docs/einja/instructions/neon-cli-reference.md +3 -8
  150. package/presets/default/docs/einja/instructions/setup-flow.md +279 -0
  151. package/presets/default/docs/einja/instructions/task-execute.md +63 -68
  152. package/presets/default/docs/einja/instructions/vercel-cli-reference.md +17 -10
  153. package/presets/default/docs/einja/steering/README.md +11 -11
  154. package/presets/default/docs/einja/steering/acceptance-criteria-and-qa-guide.md +4 -9
  155. package/presets/default/docs/einja/steering/architecture.md +3 -8
  156. package/presets/default/docs/einja/steering/branch-strategy.md +63 -70
  157. package/presets/default/docs/einja/steering/commit-rules.md +3 -8
  158. package/presets/default/docs/einja/steering/db-schema-design.md +3 -8
  159. package/presets/default/docs/einja/steering/development/api-development.md +3 -8
  160. package/presets/default/docs/einja/steering/development/backend-architecture.md +3 -8
  161. package/presets/default/docs/einja/steering/development/coding-standards.md +723 -0
  162. package/presets/default/docs/einja/steering/development/component-design.md +502 -0
  163. package/presets/default/docs/einja/steering/development/database-guidelines.md +2 -2
  164. package/presets/default/docs/einja/steering/development/frontend-development.md +3 -8
  165. package/presets/default/docs/einja/steering/development/playwright-guidelines.md +59 -0
  166. package/presets/default/docs/einja/steering/development/review-guidelines.md +3 -8
  167. package/presets/default/docs/einja/steering/development/testing-strategy.md +3 -8
  168. package/presets/default/docs/einja/steering/development-workflow.md +155 -140
  169. package/presets/default/docs/einja/steering/infrastructure/deployment.md +156 -55
  170. package/presets/default/docs/einja/steering/infrastructure/environment-variables.md +4 -8
  171. package/presets/default/docs/einja/steering/product.md +3 -8
  172. package/presets/default/docs/einja/steering/task-management.md +22 -110
  173. package/presets/default/scripts/ensure-serena.sh +75 -0
  174. package/presets/default/scripts/env-rotate-secrets.ts +396 -0
  175. package/presets/default/scripts/env-show.ts +130 -0
  176. package/presets/default/scripts/env.ts +479 -0
  177. package/presets/default/scripts/init-github.ts +363 -0
  178. package/presets/default/scripts/init.sh +98 -0
  179. package/presets/default/scripts/lib/env-common.ts +108 -0
  180. package/presets/default/scripts/lib/worktree-config.ts +64 -0
  181. package/presets/default/scripts/setup-dev.ts +655 -0
  182. package/presets/default/scripts/stop-serena.sh +25 -0
  183. package/presets/default/scripts/worktree/dev.ts +872 -0
  184. package/dist/lib/sync/seed-synchronizer.d.ts +0 -27
  185. package/dist/lib/sync/seed-synchronizer.d.ts.map +0 -1
  186. package/dist/lib/sync/seed-synchronizer.js +0 -72
  187. package/dist/lib/sync/seed-synchronizer.js.map +0 -1
  188. package/dist/lib/sync/seed-synchronizer.test.d.ts +0 -2
  189. package/dist/lib/sync/seed-synchronizer.test.d.ts.map +0 -1
  190. package/dist/lib/sync/seed-synchronizer.test.js +0 -147
  191. package/dist/lib/sync/seed-synchronizer.test.js.map +0 -1
  192. package/presets/default/.claude/agents/einja/git/conflict-resolver.md +0 -148
  193. package/presets/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  194. package/presets/default/.claude/skills/einja-api-development/SKILL.md +0 -14
  195. package/presets/default/.claude/skills/einja-backend-architecture/SKILL.md +0 -18
  196. package/presets/default/.claude/skills/einja-coding-standards/SKILL.md +0 -132
  197. package/presets/default/.claude/skills/einja-coding-standards/references/import-conventions.md +0 -69
  198. package/presets/default/.claude/skills/einja-coding-standards/references/naming-conventions.md +0 -107
  199. package/presets/default/.claude/skills/einja-coding-standards/references/prohibited-patterns.md +0 -169
  200. package/presets/default/.claude/skills/einja-coding-standards/references/typescript-rules.md +0 -247
  201. package/presets/default/.claude/skills/einja-component-design/SKILL.md +0 -109
  202. package/presets/default/.claude/skills/einja-component-design/references/directory-structure.md +0 -117
  203. package/presets/default/.claude/skills/einja-component-design/references/props-patterns.md +0 -159
  204. package/presets/default/.claude/skills/einja-component-design/references/styling-guide.md +0 -122
  205. package/presets/default/.claude/skills/einja-frontend-development/SKILL.md +0 -14
  206. package/presets/default/.claude/skills/einja-project-overview/SKILL.md +0 -35
  207. package/presets/default/docs/einja/instructions/task-vibe-kanban-loop.md +0 -565
@@ -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,84 +137,152 @@ 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
- - create-einja-app sync には `--yes` フラグがないが、`--categories` 指定時は対話プロンプトをスキップする
169
+ - 孤児削除を選択した場合は `--clean` フラグを追加する(sync と孤児削除を1回の実行で完了)
170
+ - create-einja-app sync には `--yes` フラグがない。`--categories` 指定時でもプロジェクト設定検出失敗時や依存バージョン競合時に対話プロンプトが発生する可能性がある。その場合は標準出力を確認し、必要に応じてユーザーに手動対応を促す
171
+
172
+ ### Step 5: コンフリクト検出 → 対話的解消(dev-cli のみ)
173
+
174
+ dev-cli の sync 固有のコンフリクトを検出し、1ファイルずつ対話的に解消する(git コンフリクトとは異なる)。create-einja-app にはファイルコンフリクトの概念がないため、このStepは dev-cli 使用時のみ実行する。
175
+
176
+ #### 5-1. コンフリクトファイル一覧取得
146
177
 
147
- ### Step 5: コンフリクト検出 手動解消サポート
178
+ dev-cli JSON出力の `files` 配列から `status === "conflict"` のエントリを抽出する。
148
179
 
149
- sync 固有のコンフリクトを検出し、対話的に解消する(git コンフリクトとは異なる)。
180
+ - コンフリクトなし → このStepをスキップ
181
+ - コンフリクトファイル一覧をテーブル表示(ファイルパス、コンフリクト箇所数)
182
+ - JSON出力のパースに失敗した場合は、標準出力をそのまま表示し、同期対象カテゴリのファイルパスのみを対象に `Grep` で dev-cli 固有のコンフリクトマーカー `<<<<<<< LOCAL (your changes)` を検索して検出する(プロジェクト全体を検索しないこと)
150
183
 
151
- #### コンフリクトの検出方法
184
+ #### 5-2. 各ファイルを1ファイルずつ処理
152
185
 
153
- | CLI | 検出方法 |
154
- |-----|---------|
155
- | dev-cli | JSON出力の `status: "partial_success"` かつ `conflicts > 0` |
156
- | create-einja-app | 標準出力に「コンフリクト」文字列が含まれる |
186
+ 以下を各コンフリクトファイルについて繰り返す:
157
187
 
158
- #### コンフリクト解消フロー
188
+ a. `Read` でファイル全体を読み込む
189
+ b. コンフリクトマーカーブロックを特定し、**双方の内容を分析・説明**:
190
+ - ローカル側: 何がカスタマイズされているか(例: プロジェクト固有の設定値)
191
+ - テンプレート側: 何が更新されたか(例: 新しいフィールド追加、バグ修正)
192
+ - 影響の説明: どちらを採用した場合に何が起きるか
193
+ c. **具体的なマージ案を提案**: 両方の変更を分析し、統合案を作成(可能な場合)
194
+ d. AskUserQuestion で解消方法を確認:
159
195
 
160
- 1. **コンフリクトファイルの一覧を取得・表示**
161
- - dev-cli: JSON出力の `conflicts` 配列からファイルパスを抽出
162
- - create-einja-app: 標準出力から「コンフリクト」を含む行を抽出し、ファイルパスをパース
163
- - 取得したファイルパスを表形式で一覧表示
196
+ ```yaml
197
+ AskUserQuestion:
198
+ question: "{ファイル名}のコンフリクト解消方法を選択してください"
199
+ header: "コンフリクト解消"
200
+ options:
201
+ - label: "テンプレート優先"
202
+ description: "テンプレートの内容を採用。メリット: 最新の更新を取り込める。デメリット: ローカルのカスタマイズが失われる"
203
+ - label: "ローカル優先"
204
+ description: "現在の内容を維持。メリット: カスタマイズを保全できる。デメリット: テンプレートの更新が適用されない"
205
+ - label: "マージ案(両方の変更を統合)"
206
+ description: "{具体的なマージ内容の説明}。メリット: {利点}。デメリット: {欠点}"
207
+ - label: "このファイルをスキップ"
208
+ description: "コンフリクトマーカーを残して後で手動解消。メリット: 判断を保留できる。デメリット: 後で対応が必要"
209
+ ```
210
+
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. 全ファイル解消後の検証
164
223
 
165
- 2. **各ファイルの差分内容を確認**
166
- - `Read` ツールでコンフリクトファイルの内容を読み込み、差分をユーザーに提示
224
+ - `Grep` で `<<<<<<<` パターンを検索し、未解消マーカーが残っていないか検証
225
+ - スキップされたファイルがあれば一覧を再表示
167
226
 
168
- 3. **ユーザーに解決方針を確認**
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 で確認:
169
243
 
170
244
  ```yaml
171
245
  AskUserQuestion:
172
- question: "コンフリクトの解決方針を選択してください"
173
- header: "コンフリクト解決"
246
+ question: ".envrc が更新されました。direnv allow を実行しますか?"
247
+ header: "direnv allow"
174
248
  options:
175
- - label: "テンプレート優先(リモートの最新版で上書き)"
176
- description: "テンプレートの内容を採用し、ローカルのカスタマイズを破棄します"
177
- - label: "ローカル優先(現在の内容を維持)"
178
- description: "現在のローカルファイルを維持し、テンプレートの変更を破棄します"
179
- - label: "手動マージ(1ファイルずつ確認)"
180
- description: "各ファイルの差分を確認しながら、手動でマージ内容を決定します"
249
+ - label: "実行する(推奨)"
250
+ description: "更新済み .envrc を有効化します。環境変数が即座に反映されます"
251
+ - label: "スキップ"
252
+ description: "後で手動で direnv allow を実行します"
181
253
  ```
182
254
 
183
- 4. **方針に従って解消**
184
- - テンプレート優先: dry-run出力やCLIのコンフリクト情報からテンプレート側の内容を特定し、`Edit` ツールで上書き
185
- - ローカル優先: 現在の内容を維持(変更なし)
186
- - 手動マージ: テンプレート内容とローカル内容を両方表示し、ユーザーと対話しながら `Edit` で編集
255
+ 5. 「実行する」選択時に `direnv allow` を実行
256
+ 6. 結果を表示(成功/失敗。失敗しても同期処理全体は継続する)
187
257
 
188
- ### Step 6: 結果サマリー表示
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
- ### Step 7: 結果詳細表示
272
+ - `.envrc` が変更された場合は「✓ direnv allow 実行済み」を表示
273
+ - `.envrc` が変更されたが direnv 未インストールの場合は「⚠ direnv 未インストール。手動で `direnv allow` を実行してください」を表示
274
+
275
+ ### Step 9: 結果詳細表示
203
276
 
204
277
  各ファイルの詳細結果を以下の形式で表示する。
205
278
 
206
279
  ```markdown
207
280
  ### dev-cli sync 詳細
208
281
  ✓ .claude/commands/einja/task-exec.md (更新)
209
- ✓ .claude/skills/einja-coding-standards/SKILL.md (更新)
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形式が不正な場合は標準出力をそのまま表示
@@ -236,3 +311,7 @@ AskUserQuestion:
236
311
  - `apps` と `packages` カテゴリはデフォルト OFF。既存の実装コードを上書きするリスクがあるため、明示的な指定が必要
237
312
  - コンフリクト解消は sync 固有のもので、git コンフリクトとは異なる。`einja-conflict-resolver` Skill は使用しない
238
313
  - 両方のCLIを実行する場合、dev-cli を先に実行すること(Claude Code 設定が先に更新される必要があるため)
314
+
315
+ <!-- @einja:project-private:start id="einja-sync-project" -->
316
+ <!-- プロジェクト固有の情報を記入 -->
317
+ <!-- @einja:project-private:end -->
@@ -319,4 +319,6 @@ pnpm --filter @repo/web panda codegen
319
319
  pnpm typecheck
320
320
  ```
321
321
 
322
- ---
322
+ <!-- @einja:project-private:start id="frontend-implement-project" -->
323
+ <!-- プロジェクト固有の情報を記入 -->
324
+ <!-- @einja:project-private:end -->