create-einja-app 0.3.2 → 0.3.4

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 (65) hide show
  1. package/README.md +33 -0
  2. package/dist/cli.js +60 -64
  3. package/dist/cli.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/default/.changeset/config.json +11 -0
  6. package/templates/default/.claude/hooks/einja/plan-mode-skill-loader.sh +5 -1
  7. package/templates/default/.claude/settings.json +14 -4
  8. package/templates/default/.claude/skills/_einja-general-context-loader/SKILL.md +258 -0
  9. package/templates/default/.claude/skills/_einja-output-format/SKILL.md +211 -0
  10. package/templates/default/.claude/skills/_einja-project-overview/SKILL.md +29 -0
  11. package/templates/default/.claude/skills/_einja-spec-context-loader/SKILL.md +181 -0
  12. package/templates/default/.claude/skills/cli-package-specs/SKILL.md +294 -0
  13. package/templates/default/.einja-sync.json +1 -1
  14. package/templates/default/.github/release.yml +10 -0
  15. package/templates/default/.github/workflows/changeset-status.yml +60 -0
  16. package/templates/default/.github/workflows/deploy-stable-branches.yml +289 -59
  17. package/templates/default/CLAUDE.md +50 -10
  18. package/templates/default/README.md +20 -8
  19. package/templates/default/docs/plans/agile-munching-knuth.md +161 -0
  20. package/templates/default/docs/plans/agile-riding-nova.md +158 -0
  21. package/templates/default/docs/plans/agile-wibbling-dusk.md +91 -0
  22. package/templates/default/docs/plans/ancient-watching-otter.md +152 -0
  23. package/templates/default/docs/plans/bright-sauteeing-bumblebee.md +30 -0
  24. package/templates/default/docs/plans/composed-doodling-mountain.md +362 -0
  25. package/templates/default/docs/plans/dazzling-foraging-cascade.md +32 -0
  26. package/templates/default/docs/plans/enchanted-wiggling-ember-agent-a5befd57d0ca4c7c7.md +177 -0
  27. package/templates/default/docs/plans/enchanted-wiggling-ember.md +170 -0
  28. package/templates/default/docs/plans/federated-questing-kahan.md +47 -0
  29. package/templates/default/docs/plans/flickering-pondering-hearth.md +26 -0
  30. package/templates/default/docs/plans/fluttering-snuggling-sprout.md +172 -0
  31. package/templates/default/docs/plans/generic-sleeping-snowglobe-agent-a41d8da.md +179 -0
  32. package/templates/default/docs/plans/generic-sleeping-snowglobe.md +108 -0
  33. package/templates/default/docs/plans/generic-snuggling-pudding.md +57 -0
  34. package/templates/default/docs/plans/glistening-conjuring-cascade.md +42 -0
  35. package/templates/default/docs/plans/idempotent-wiggling-cherny.md +122 -0
  36. package/templates/default/docs/plans/linear-gathering-hejlsberg.md +596 -0
  37. package/templates/default/docs/plans/recursive-fluttering-mitten.md +176 -0
  38. package/templates/default/docs/plans/todo-create-einja-app-ux-fix.md +16 -0
  39. package/templates/default/docs/plans/todo-direnv-hang-fix.md +12 -0
  40. package/templates/default/docs/plans/todo-github-actions-release-workflow.md +34 -0
  41. package/templates/default/docs/plans/todo-glistening-conjuring-cascade.md +20 -0
  42. package/templates/default/docs/plans/todo-issue-spec-rename.md +24 -0
  43. package/templates/default/docs/plans/todo-skill-creator-upgrade.md +18 -0
  44. package/templates/default/docs/plans/todo-unified-crafting-valiant.md +23 -0
  45. package/templates/default/docs/plans/unified-crafting-valiant.md +60 -0
  46. package/templates/default/docs/plans/velvety-chasing-spark.md +28 -0
  47. package/templates/default/docs/plans/wondrous-strolling-crystal-agent-a0615fc.md +215 -0
  48. package/templates/default/docs/plans/wondrous-strolling-crystal.md +182 -0
  49. package/templates/default/docs/plans/zesty-roaming-steele.md +74 -0
  50. package/templates/default/gitignore +6 -2
  51. package/templates/default/package.json +6 -2
  52. package/templates/default/pnpm-lock.yaml +547 -0
  53. package/templates/default/scripts/ensure-serena.sh +28 -9
  54. package/templates/default/scripts/env-rotate-secrets.ts +66 -6
  55. package/templates/default/scripts/init-github.ts +363 -0
  56. package/templates/default/scripts/init.sh +11 -5
  57. package/templates/default/scripts/setup-dev.ts +16 -1
  58. package/templates/default/.claude/hooks/einja/validate-git-commit.sh +0 -239
  59. package/templates/default/.claude/skills/create-einja-app-release/SKILL.md +0 -186
  60. package/templates/default/.claude/skills/dev-cli-release/SKILL.md +0 -173
  61. package/templates/default/.cursor/commands/spec-create.md +0 -227
  62. package/templates/default/.cursor/commands/task-exec.md +0 -287
  63. package/templates/default/.cursor/commands/update-docs-by-task-specs.md +0 -448
  64. package/templates/default/packages/server-core/src/__generated__/fabbrica/index.d.ts +0 -270
  65. package/templates/default/packages/server-core/src/__generated__/fabbrica/index.js +0 -484
@@ -0,0 +1,108 @@
1
+ # Plan: issue-exec Manager を worktree 化し、複数Issue同時実行を可能にする
2
+
3
+ ## Context
4
+
5
+ 現在の `issue-exec` コマンドでは、Manager がメインリポジトリで直接動作する。
6
+ これにより:
7
+ 1. 複数Issue同時実行時に git 状態の race condition リスクがある
8
+ 2. Manager 実行中にメインリポジトリで手動作業ができない
9
+
10
+ Manager も worktree で動作させることで、これらを解消する。
11
+
12
+ **技術的前提**: Git 2.15+ では worktree 内から `git worktree add` / `git branch` / `git push` が可能(検証済み)。
13
+
14
+ ## 変更対象
15
+
16
+ `.claude/commands/einja/issue-exec.md` (1ファイルのみ)
17
+
18
+ ## 具体的な変更箇所(5箇所)
19
+
20
+ ### 1. Step 2: ブランチ & worktree 作成(L124-137)
21
+
22
+ Manager worktree を最初に作成し、以降のgit操作はすべて Manager worktree 内から実行する。
23
+
24
+ ```markdown
25
+ ### Step 2: ブランチ & worktree 作成
26
+ 1. Issue ブランチ作成(メインリポジトリから): `issue/{issue番号}`(base ブランチから)
27
+ 2. Manager worktree 作成(メインリポジトリから):
28
+ ```bash
29
+ mkdir -p ~/.einja/worktrees/issue-{N}/
30
+ git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}
31
+ git push -u origin issue/{N}
32
+ ```
33
+ 3. **以降の操作は全て Manager worktree 内から実行**(cwd: `~/.einja/worktrees/issue-{N}/manager`)
34
+ 4. 各 Phase のブランチ作成(Manager worktree から): `issue/{issue番号}-phase{N}`(issue ブランチから)
35
+ 5. Phase worktree 作成(Manager worktree から):
36
+ ```bash
37
+ git worktree add ~/.einja/worktrees/issue-{N}/phase{M} issue/{N}-phase{M}
38
+ git push -u origin issue/{N}-phase{M}
39
+ ```
40
+ ```
41
+
42
+ ### 2. Step 4: tmux セッション作成(L166-168)
43
+
44
+ Manager の cwd を worktree に指定する。
45
+
46
+ ```bash
47
+ tmux new-session -d -s einja-{issue番号} -n manager -c ~/.einja/worktrees/issue-{N}/manager
48
+ ```
49
+
50
+ ### 3. Step 0-3: セッション復元(L112-114)
51
+
52
+ Manager worktree の存在確認・再作成ロジックを追加。
53
+
54
+ ```markdown
55
+ #### 3. セッション復元
56
+ - `--resume` フラグがある場合、`~/.einja/sessions/issue-{N}/session.json` からセッション状態を復元
57
+ - Manager worktree の存在確認: `git worktree list | grep issue-{N}/manager`
58
+ - 存在しない場合は再作成: `git worktree add ~/.einja/worktrees/issue-{N}/manager issue/{N}`
59
+ - 未完了のPhaseのDirectorを再起動する
60
+ ```
61
+
62
+ ### 4. worktree 物理パス構成図(L266-270)
63
+
64
+ `manager/` を追加。
65
+
66
+ ```
67
+ ~/.einja/worktrees/issue-{N}/
68
+ ├── manager/ ← Manager cwd
69
+ ├── phase{M}/ ← Director cwd
70
+ ├── task-{X.Y}/ ← Worker cwd
71
+ ```
72
+
73
+ ### 5. セッションクリーンアップ(L390-395)
74
+
75
+ Manager worktree を削除対象に追加。
76
+
77
+ ```markdown
78
+ Issue完了時に以下を自動削除:
79
+ - `~/.einja/sessions/issue-{N}/` (セッションファイル)
80
+ - `~/.einja/worktrees/issue-{N}/` (worktree。事前に `git worktree remove` を各ディレクトリに対して実行)
81
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/task-{X.Y}`(Worker)
82
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/phase{M}`(Director)
83
+ - `git worktree remove ~/.einja/worktrees/issue-{N}/manager`(Manager - 最後に削除)
84
+ - ローカルブランチのクリーンアップ(task/*, issue/*-phase*)
85
+ ```
86
+
87
+ ## ブランチ構成図の更新
88
+
89
+ ```
90
+ {baseBranch}
91
+ └── issue/{N} Manager worktree(← 変更点)
92
+ ├── issue/{N}-phase1 Director1 worktree
93
+ │ ├── task/{N}-1.1 Worker1.1 worktree
94
+ ...
95
+ ```
96
+
97
+ ## 変更しない箇所
98
+
99
+ - Director/Worker の起動方法
100
+ - ステータスファイル構造(絶対パスで管理)
101
+ - `gh pr create` コマンド
102
+ - `task-exec` コマンド
103
+ - `einja-team-exec` Skill
104
+
105
+ ## 検証方法
106
+
107
+ 1. 変更後の `issue-exec.md` 全体を通読し、Step 0〜7の整合性を確認
108
+ 2. worktree 構成図・ブランチ構成図が一致しているか確認
@@ -0,0 +1,57 @@
1
+ # Plan: conflict-resolver サブエージェント廃止 → Skill一本化
2
+
3
+ ## Context
4
+
5
+ `conflict-resolver` はサブエージェント定義(`.claude/agents/`)とSkill定義(`.claude/skills/`)の2重構造になっている。
6
+ サブエージェント経由では `AskUserQuestion` が使えないため、コンフリクト解消の核心機能(1ファイルずつユーザー確認)が動作しない。
7
+ Skill単体で親エージェントが直接実行すれば `AskUserQuestion` が正常に動作するため、サブエージェント定義を廃止してSkill一本化する。
8
+
9
+ ## 変更内容
10
+
11
+ ### TODO-1: エージェント定義の削除
12
+
13
+ **削除ファイル:**
14
+ - `.claude/agents/einja/git/conflict-resolver.md`
15
+
16
+ ### TODO-2: CLAUDE.md の参照更新
17
+
18
+ **ファイル:** `CLAUDE.md`
19
+
20
+ - **行29**: サブエージェント委託テーブルから `コンフリクト解消 → conflict-resolver` の行を削除
21
+ - **行41**: Skill テーブルの `einja-conflict-resolver` はそのまま維持
22
+ - **行92**: `gitコンフリクト発生時の対応` セクションもそのまま維持(既にSkillを参照している)
23
+
24
+ ### TODO-3: einja-task-commit Skill の参照更新
25
+
26
+ **ファイル:** `.claude/skills/einja-task-commit/SKILL.md`
27
+
28
+ - **行52**: `conflict-resolver エージェント を Task ツールで呼び出して解消` → `einja-conflict-resolver Skill の手順に従って解消`
29
+ - **行256**: `conflict-resolver エージェントを Task ツールで呼び出して解消を試行` → `einja-conflict-resolver Skill の手順に従って解消を試行`
30
+
31
+ ### TODO-4: issue-exec コマンドの参照更新
32
+
33
+ **ファイル:** `.claude/commands/einja/issue-exec.md`
34
+
35
+ - **行349**: `conflict-resolverで自力解消` → `einja-conflict-resolver Skillで自力解消`
36
+
37
+ ### TODO-5: .einja-sync.json のエントリ削除
38
+
39
+ **ファイル:** `.einja-sync.json`
40
+
41
+ - agent定義のsyncエントリ(`.claude/agents/einja/git/conflict-resolver.md`)を削除
42
+
43
+ ### 変更不要(参照のみ・読み取り専用)
44
+
45
+ | ファイル | 理由 |
46
+ |---------|------|
47
+ | `docs/einja/steering/branch-strategy.md` | マネージドディレクトリ(読み取り専用)※ただしこのリポジトリでは編集可。"conflict-resolver で解消"は曖昧でSkillを指すとも読めるため変更不要 |
48
+ | `docs/einja/instructions/issue-exec-workflow.md` | 同上 |
49
+ | `docs/plans/*.md` | 過去のPlan。履歴として変更不要 |
50
+ | `.claude/commands/einja/einja-sync.md` | "einja-conflict-resolver Skill は使用しない"の記述。変更不要 |
51
+ | `.claude/skills/einja-conflict-resolver/SKILL.md` | Skill本体。変更不要 |
52
+
53
+ ## 検証
54
+
55
+ 1. `grep -r "conflict-resolver" .claude/agents/` でエージェント定義が残っていないことを確認
56
+ 2. `grep -r "conflict-resolver.*エージェント.*Task" .claude/ CLAUDE.md` でサブエージェント呼び出し記述が残っていないことを確認
57
+ 3. `pnpm prepush` でlint/typecheck/testが通ることを確認
@@ -0,0 +1,42 @@
1
+ # Plan: npx コマンドの `@latest` 指定漏れを一括修正
2
+
3
+ ## Context
4
+
5
+ `npx @einja/dev-cli` を `@latest` なしで実行すると、npxキャッシュの古いバージョンが使われる。`einja:einja-sync` コマンドでv0.1.0が使われてしまった。実行されるコマンド/スクリプト定義を修正する。
6
+
7
+ ## 修正対象
8
+
9
+ ### 1. `.claude/commands/einja/einja-sync.md` (6箇所)
10
+
11
+ `npx --yes` で実行するコマンドに `@latest` を追加。`replace_all` で一括置換。
12
+
13
+ | Before | After |
14
+ |--------|-------|
15
+ | `npx --yes @einja/dev-cli sync` (4箇所: 107,159,162,231行) | `npx --yes @einja/dev-cli@latest sync` |
16
+ | `npx --yes create-einja-app sync` (2箇所: 110,165行) | `npx --yes create-einja-app@latest sync` |
17
+
18
+ **修正しない箇所**: Step 1のCLI検出 (19,20行目) は `npx --no` のまま。目的が「CLIが利用可能か」の検出であり、バージョン不問で検出できる方が適切。実際のsync実行 (Step 3,4) では `--yes @latest` で最新版が使われる。
19
+
20
+ ### 2. `docs/einja/cli/preset.yaml` (2箇所)
21
+
22
+ 下流プロジェクトの `package.json` scripts に反映されるため修正必須。
23
+
24
+ | 行 | Before | After |
25
+ |----|--------|-------|
26
+ | 127 | `"task:loop": "npx @einja/dev-cli task:loop"` | `"task:loop": "npx @einja/dev-cli@latest task:loop"` |
27
+ | 128 | `"einja:sync": "npx @einja/dev-cli sync"` | `"einja:sync": "npx @einja/dev-cli@latest sync"` |
28
+
29
+ ## 修正不要
30
+
31
+ | ファイル | 理由 |
32
+ |---------|------|
33
+ | `einja-sync.md` 19,20行 | Step 1のCLI検出。`--no` で検出目的のためバージョン不問 |
34
+ | `package.json` (ルート) | 既に `@latest` 付き |
35
+ | `create-einja-app/src/generators/post-setup.ts` | 既に `@latest` 付き |
36
+ | README.md / docs/plans/ / docs/specs/ 等 | ドキュメント内の説明・例示。直接実行されるコマンドではない |
37
+
38
+ ## 検証
39
+
40
+ 1. grep で `einja-sync.md` 内の `npx --yes` 呼び出しに全て `@latest` が付いていることを確認
41
+ 2. `preset.yaml` のscripts定義に `@latest` が付いていることを確認
42
+ 3. `pnpm build` して `presets/default/` に変更が反映されることを確認
@@ -0,0 +1,122 @@
1
+ # サブエージェント質問プロトコル(PENDING_QUESTIONS)導入
2
+
3
+ ## Context
4
+
5
+ Claude Code v2.0.56以降、**サブエージェントではAskUserQuestionがシステムレベルでフィルタリングされ動作しない**(GitHub Issue [#12890](https://github.com/anthropics/claude-code/issues/12890), [#20275](https://github.com/anthropics/claude-code/issues/20275)で確認済み)。また**CLAUDE.mdはサブエージェントに自動ロードされない**。
6
+
7
+ 現在8つのエージェントがAskUserQuestionを参照しているが、全て動作しない。Agent toolの`resume`パラメータ(コンテキスト維持で再開)を活用し、親経由で質問するプロトコルを導入する。
8
+
9
+ ## 変更方針
10
+
11
+ - **共通Skill**にプロトコルを1箇所だけ定義し、全エージェントに`skills:`でpreload
12
+ - **CLAUDE.md**に親側のハンドリングルールを追加
13
+ - 各エージェントの既存AskUserQuestion YAML例は**参照情報として残し**、PENDING_QUESTIONS形式の使用例を併記
14
+
15
+ ## 変更内容
16
+
17
+ ### 1. 共通Skill作成(新規)
18
+ **パス**: `.claude/skills/einja-subagent-question-protocol/SKILL.md`
19
+
20
+ 内容:
21
+ - サブエージェントではAskUserQuestionが動作しない旨の説明
22
+ - PENDING_QUESTIONSフォーマット定義(具体的な出力例付き)
23
+ - AskUserQuestion YAML → PENDING_QUESTIONS形式の変換ガイド
24
+ - ルール: 1回にまとめる、選択肢と背景・影響を含める、resumeで再開後に作業継続
25
+
26
+ フォーマット例:
27
+ ```markdown
28
+ ## PENDING_QUESTIONS
29
+
30
+ 以下の不明点の解消が必要です。
31
+
32
+ ### Q1: [質問タイトル]
33
+ **背景**: [なぜこの質問が必要か]
34
+
35
+ | 選択肢 | 説明 | メリット | デメリット |
36
+ |--------|------|----------|------------|
37
+ | A: [ラベル] | [詳細] | [メリット] | [デメリット] |
38
+ | B: [ラベル] | [詳細] | [メリット] | [デメリット] |
39
+
40
+ **推奨**: A([理由])
41
+ ```
42
+
43
+ ### 2. CLAUDE.md(親側ハンドリング追加)
44
+ **パス**: `CLAUDE.md`
45
+
46
+ 「サブエージェント委託ルール」セクション内に追加:
47
+
48
+ ```markdown
49
+ ### サブエージェント質問プロトコル(PENDING_QUESTIONS)
50
+
51
+ サブエージェント出力に `## PENDING_QUESTIONS` が含まれている場合:
52
+ 1. 質問内容を解析し、AskUserQuestionでユーザーに確認
53
+ 2. Agent toolの`resume`パラメータで同じサブエージェントを再開(コンテキスト維持)
54
+ 3. プロンプトにユーザーの回答を含めて渡す
55
+ 4. 再度PENDING_QUESTIONSがある場合は同様に処理(最大2回まで)
56
+ ```
57
+
58
+ ### 3. 全エージェント定義の更新
59
+
60
+ #### 3a. issue-specs系(`skills:` フィールド追加 + 「優先順位3」書き換え)
61
+
62
+ | ファイル | 変更 |
63
+ |---|---|
64
+ | `requirements-generator.md` | `skills:` 追加 + 49-52行目をプロトコル参照1行に |
65
+ | `design-generator.md` | `skills:` 追加 + 103-107行目をプロトコル参照1行に |
66
+ | `qa-generator.md` | `skills:` 追加 + 62行目をプロトコル参照1行に |
67
+ | `tasks-generator.md` | `skills:` 追加 + 95行目をプロトコル参照1行に |
68
+
69
+ 書き換え後:
70
+ ```markdown
71
+ - **優先順位3: ユーザーへの確認(最終手段)**
72
+ - 上記の方法で解決できない場合、preload済みの「サブエージェント質問プロトコル」に従いPENDING_QUESTIONS形式で質問を返却して停止する
73
+ ```
74
+
75
+ #### 3b. task系・architect系(`skills:` にpreload追加 + AskUserQuestion部分に注釈追加)
76
+
77
+ | ファイル | 変更 |
78
+ |---|---|
79
+ | `task-executer.md` | `skills: []` に追加 + AskUserQuestion YAML例の前に「⚠️ サブエージェントではAskUserQuestionは動作しない。代わりにPENDING_QUESTIONS形式で返却すること」注釈を追加 |
80
+ | `task-reviewer.md` | `skills:` 追加 + 同様の注釈 |
81
+ | `frontend-architect.md` | `skills:` に追加 + 同様の注釈 |
82
+ | `backend-architect.md` | `skills:` に追加 + 同様の注釈 |
83
+
84
+ **注釈の形式**(各AskUserQuestion YAML例の直前に挿入):
85
+ ```markdown
86
+ > ⚠️ サブエージェントではAskUserQuestionは動作しません。
87
+ > 以下のYAML例は「どんな質問をすべきか」の参照情報です。
88
+ > 実際にはpreload済みの「サブエージェント質問プロトコル」に従い、
89
+ > PENDING_QUESTIONS形式で質問を返却して停止してください。
90
+ ```
91
+
92
+ これにより既存YAML例の情報(選択肢・description・推奨理由)を完全に保持しつつ、プロトコルへの誘導を行う。
93
+
94
+ ### 4. 変更不要なエージェント
95
+
96
+ Explore, tasks-validator, task-qa(Skill側で処理済み), task-modification-analyzer, docs-updater, codex-agent, design-engineer, frontend-coder, ui-design-generator
97
+
98
+ ## 変更ファイルまとめ
99
+
100
+ | # | ファイル | 操作 |
101
+ |---|---|---|
102
+ | 1 | `.claude/skills/einja-subagent-question-protocol/SKILL.md` | **新規作成** |
103
+ | 2 | `CLAUDE.md` | 親側ハンドリング追加 |
104
+ | 3 | `.claude/agents/einja/issue-specs/requirements-generator.md` | skills追加 + 記述置換 |
105
+ | 4 | `.claude/agents/einja/issue-specs/design-generator.md` | skills追加 + 記述置換 |
106
+ | 5 | `.claude/agents/einja/issue-specs/qa-generator.md` | skills追加 + 記述置換 |
107
+ | 6 | `.claude/agents/einja/issue-specs/tasks-generator.md` | skills追加 + 記述置換 |
108
+ | 7 | `.claude/agents/einja/task/task-executer.md` | skills追加 + 注釈追加 |
109
+ | 8 | `.claude/agents/einja/task/task-reviewer.md` | skills追加 + 注釈追加 |
110
+ | 9 | `.claude/agents/einja/frontend-architect.md` | skills追加 + 注釈追加 |
111
+ | 10 | `.claude/agents/einja/backend-architect.md` | skills追加 + 注釈追加 |
112
+
113
+ ## 検証方法
114
+
115
+ ### 静的検証(Grep)
116
+ 1. 共通Skillファイルが存在し、PENDING_QUESTIONSフォーマット例が含まれること
117
+ 2. CLAUDE.mdに親側ハンドリングセクションが存在すること
118
+ 3. 対象8エージェントの`skills:`に`einja-subagent-question-protocol`が含まれること
119
+
120
+ ### 動作検証(手動)
121
+ 4. requirements-generatorを意図的に曖昧な要件でフォアグラウンド起動し、PENDING_QUESTIONS形式で質問が返却されることを確認
122
+ 5. 返却された質問をAskUserQuestionで確認後、resumeで再開してコンテキストが維持されていることを確認