@einja/dev-cli 0.1.45 → 0.1.48

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 (32) hide show
  1. package/dist/commands/sync.d.ts.map +1 -1
  2. package/dist/commands/sync.js +50 -11
  3. package/dist/commands/sync.js.map +1 -1
  4. package/dist/commands/sync.test.js +1 -1
  5. package/dist/commands/sync.test.js.map +1 -1
  6. package/dist/lib/sync/file-filter.d.ts.map +1 -1
  7. package/dist/lib/sync/file-filter.js +49 -0
  8. package/dist/lib/sync/file-filter.js.map +1 -1
  9. package/dist/lib/sync/file-filter.test.js +40 -0
  10. package/dist/lib/sync/file-filter.test.js.map +1 -1
  11. package/dist/lib/sync/json-processor.d.ts +49 -27
  12. package/dist/lib/sync/json-processor.d.ts.map +1 -1
  13. package/dist/lib/sync/json-processor.js +182 -82
  14. package/dist/lib/sync/json-processor.js.map +1 -1
  15. package/dist/lib/sync/json-processor.test.d.ts +2 -0
  16. package/dist/lib/sync/json-processor.test.d.ts.map +1 -0
  17. package/dist/lib/sync/json-processor.test.js +334 -0
  18. package/dist/lib/sync/json-processor.test.js.map +1 -0
  19. package/dist/lib/sync/metadata-manager.d.ts +6 -1
  20. package/dist/lib/sync/metadata-manager.d.ts.map +1 -1
  21. package/dist/lib/sync/metadata-manager.js +26 -6
  22. package/dist/lib/sync/metadata-manager.js.map +1 -1
  23. package/dist/types/sync.d.ts +2 -0
  24. package/dist/types/sync.d.ts.map +1 -1
  25. package/dist/types/sync.js +1 -0
  26. package/dist/types/sync.js.map +1 -1
  27. package/package.json +1 -1
  28. package/presets/default/.claude/commands/einja/einja-sync.md +6 -6
  29. package/presets/default/docs/einja/instructions/setup-flow.md +40 -0
  30. package/presets/default/package.json +73 -0
  31. package/presets/default/preset.yaml +2 -2
  32. package/presets/default/scripts/ensure-serena.sh +26 -7
@@ -0,0 +1,334 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { JsonProcessor } from "./json-processor.js";
3
+ describe("JsonProcessor", () => {
4
+ const processor = new JsonProcessor();
5
+ const emptyPaths = { managed: {}, "project-private": {} };
6
+ describe("mergeJson - 基本動作", () => {
7
+ it("localJson が null の場合、project-private除外済みテンプレートを返す", () => {
8
+ // Given
9
+ const template = { name: "test", scripts: { build: "tsc" } };
10
+ const jsonPaths = {
11
+ managed: {},
12
+ "project-private": { "package.json": ["name"] },
13
+ };
14
+ // When
15
+ const result = processor.mergeJson(template, null, jsonPaths, "package.json");
16
+ // Then: name は project-private 除外、scripts は残る
17
+ expect(result.result).toEqual({ scripts: { build: "tsc" } });
18
+ expect(result.conflicts).toEqual([]);
19
+ });
20
+ it("戻り値が JsonMergeResult 型であること", () => {
21
+ // Given
22
+ const template = { a: 1 };
23
+ const local = { a: 1 };
24
+ // When
25
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json");
26
+ // Then: result と conflicts プロパティを持つ
27
+ expect(result).toHaveProperty("result");
28
+ expect(result).toHaveProperty("conflicts");
29
+ expect(Array.isArray(result.conflicts)).toBe(true);
30
+ expect(typeof result.result).toBe("object");
31
+ });
32
+ });
33
+ describe("mergeJson - 3方向マージ", () => {
34
+ it("base→template 変更のみ → テンプレート適用", () => {
35
+ // Given: base(2) → template(3) に変更、local は未変更
36
+ const base = { a: 1, b: 2 };
37
+ const local = { a: 1, b: 2 };
38
+ const template = { a: 1, b: 3 };
39
+ // When
40
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
41
+ // Then: b がテンプレート値(3)に更新される
42
+ expect(result.result).toEqual({ a: 1, b: 3 });
43
+ expect(result.conflicts).toEqual([]);
44
+ });
45
+ it("base→local 変更のみ → ローカル保持", () => {
46
+ // Given: base(2) → local(5) に変更、template は未変更
47
+ const base = { a: 1, b: 2 };
48
+ const local = { a: 1, b: 5 };
49
+ const template = { a: 1, b: 2 };
50
+ // When
51
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
52
+ // Then: b はローカル値(5)を保持
53
+ expect(result.result).toEqual({ a: 1, b: 5 });
54
+ expect(result.conflicts).toEqual([]);
55
+ });
56
+ it("両方変更(異なる値)→ コンフリクト検出、ローカル保持", () => {
57
+ // Given: local(5) と template(3) が base(2) から異なる値に変更
58
+ const base = { a: 1, b: 2 };
59
+ const local = { a: 1, b: 5 };
60
+ const template = { a: 1, b: 3 };
61
+ // When
62
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
63
+ // Then: ローカル値(5)を保持 + コンフリクト検出
64
+ expect(result.result).toEqual({ a: 1, b: 5 });
65
+ expect(result.conflicts).toHaveLength(1);
66
+ expect(result.conflicts[0].keyPath).toBe("b");
67
+ expect(result.conflicts[0].baseValue).toBe(2);
68
+ expect(result.conflicts[0].localValue).toBe(5);
69
+ expect(result.conflicts[0].templateValue).toBe(3);
70
+ });
71
+ it("両方変更(同じ値)→ コンフリクトなし", () => {
72
+ // Given: local と template が同じ値(3)に変更
73
+ const base = { a: 1, b: 2 };
74
+ const local = { a: 1, b: 3 };
75
+ const template = { a: 1, b: 3 };
76
+ // When
77
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
78
+ // Then: コンフリクトなし
79
+ expect(result.result).toEqual({ a: 1, b: 3 });
80
+ expect(result.conflicts).toEqual([]);
81
+ });
82
+ it("ローカル削除 + テンプレート未変更 → 削除維持", () => {
83
+ // Given: ローカルで b を削除、テンプレートは未変更
84
+ const base = { a: 1, b: 2 };
85
+ const local = { a: 1 };
86
+ const template = { a: 1, b: 2 };
87
+ // When
88
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
89
+ // Then: b は削除されたまま
90
+ expect(result.result).toEqual({ a: 1 });
91
+ expect(result.conflicts).toEqual([]);
92
+ });
93
+ it("ローカル削除 + テンプレート変更 → コンフリクト(ローカル=削除を保持)", () => {
94
+ // Given: ローカルで b を削除、テンプレートで b を変更
95
+ const base = { a: 1, b: 2 };
96
+ const local = { a: 1 };
97
+ const template = { a: 1, b: 3 };
98
+ // When
99
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
100
+ // Then: コンフリクト検出、b は削除されたまま(ローカルの削除を保持)
101
+ expect(result.result).toEqual({ a: 1 });
102
+ expect(result.conflicts).toHaveLength(1);
103
+ expect(result.conflicts[0].keyPath).toBe("b");
104
+ expect(result.conflicts[0].localValue).toBeUndefined();
105
+ expect(result.conflicts[0].templateValue).toBe(3);
106
+ });
107
+ it("テンプレートで新キー追加 → 追加", () => {
108
+ // Given: template に新キー b を追加
109
+ const base = { a: 1 };
110
+ const local = { a: 1 };
111
+ const template = { a: 1, b: 2 };
112
+ // When
113
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
114
+ // Then: b がローカルに追加される
115
+ expect(result.result).toEqual({ a: 1, b: 2 });
116
+ expect(result.conflicts).toEqual([]);
117
+ });
118
+ it("ローカルで新キー追加 → 保持", () => {
119
+ // Given: local に独自キー c を追加
120
+ const base = { a: 1 };
121
+ const local = { a: 1, c: 3 };
122
+ const template = { a: 1 };
123
+ // When
124
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
125
+ // Then: c はローカルに保持される
126
+ expect(result.result).toEqual({ a: 1, c: 3 });
127
+ expect(result.conflicts).toEqual([]);
128
+ });
129
+ it("テンプレートでキー削除 + ローカル未変更 → 削除", () => {
130
+ // Given: template で b を削除、local は未変更
131
+ const base = { a: 1, b: 2 };
132
+ const local = { a: 1, b: 2 };
133
+ const template = { a: 1 };
134
+ // When
135
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
136
+ // Then: b がローカルから削除される
137
+ expect(result.result).toEqual({ a: 1 });
138
+ expect(result.conflicts).toEqual([]);
139
+ });
140
+ it("テンプレートでキー削除 + ローカル変更あり → コンフリクト", () => {
141
+ // Given: template で b を削除、local で b を変更
142
+ const base = { a: 1, b: 2 };
143
+ const local = { a: 1, b: 5 };
144
+ const template = { a: 1 };
145
+ // When
146
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
147
+ // Then: コンフリクト検出、ローカル値(5)を保持
148
+ expect(result.result).toEqual({ a: 1, b: 5 });
149
+ expect(result.conflicts).toHaveLength(1);
150
+ expect(result.conflicts[0].keyPath).toBe("b");
151
+ expect(result.conflicts[0].localValue).toBe(5);
152
+ expect(result.conflicts[0].templateValue).toBeUndefined();
153
+ });
154
+ it("配列値の両方変更でコンフリクトが検出されること", () => {
155
+ const base = { deps: ["a", "b"] };
156
+ const local = { deps: ["a", "b", "c"] }; // ローカルが変更
157
+ const template = { deps: ["a", "b", "d"] }; // テンプレートも変更
158
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
159
+ // 両方変更で異なる値 → コンフリクト(ローカル保持)
160
+ expect(result.result.deps).toEqual(["a", "b", "c"]);
161
+ expect(result.conflicts.length).toBe(1);
162
+ expect(result.conflicts[0].keyPath).toBe("deps");
163
+ });
164
+ it("base が空オブジェクトの場合、テンプレートとローカルの新キーがすべて保持されること", () => {
165
+ const base = {};
166
+ const local = { localKey: "local" };
167
+ const template = { templateKey: "template" };
168
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
169
+ // ローカルの新キー → 保持
170
+ expect(result.result.localKey).toBe("local");
171
+ // テンプレートの新キー → 追加
172
+ expect(result.result.templateKey).toBe("template");
173
+ expect(result.conflicts).toEqual([]);
174
+ });
175
+ });
176
+ describe("mergeJson - 初回sync(baseなし)", () => {
177
+ it("初回sync + ローカルにユーザー変更あり → ローカル保持", () => {
178
+ // Given: base なし、ローカルに変更あり
179
+ const template = { a: 1, b: 2, c: 3 };
180
+ const local = { a: 10, b: 20 };
181
+ const jsonPaths = { managed: {}, "project-private": {} };
182
+ // When
183
+ const result = processor.mergeJson(template, local, jsonPaths, "test.json");
184
+ // Then: a, b はローカル保持、c はテンプレートから追加
185
+ expect(result.result).toEqual({ a: 10, b: 20, c: 3 });
186
+ expect(result.conflicts).toEqual([]);
187
+ });
188
+ it("初回sync + オブジェクト型の再帰マージ", () => {
189
+ // Given: base なし、ネストされたオブジェクト
190
+ const template = { scripts: { build: "tsc", dev: "next dev" } };
191
+ const local = { scripts: { build: "vite build" } };
192
+ // When
193
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json");
194
+ // Then: build はローカル保持、dev はテンプレートから追加
195
+ expect(result.result).toEqual({ scripts: { build: "vite build", dev: "next dev" } });
196
+ expect(result.conflicts).toEqual([]);
197
+ });
198
+ });
199
+ describe("mergeJson - project-private", () => {
200
+ it("project-private: テンプレートにあってもローカルに追加しない(完全除外)", () => {
201
+ // Given: name, version が project-private
202
+ const jsonPaths = {
203
+ managed: {},
204
+ "project-private": { "package.json": ["name", "version"] },
205
+ };
206
+ const template = { name: "template-name", version: "1.0.0", scripts: { build: "tsc" } };
207
+ const local = { scripts: {} };
208
+ // When
209
+ const result = processor.mergeJson(template, local, jsonPaths, "package.json");
210
+ // Then: name, version は追加されない
211
+ expect(result.result).not.toHaveProperty("name");
212
+ expect(result.result).not.toHaveProperty("version");
213
+ expect(result.result).toHaveProperty("scripts");
214
+ });
215
+ it("project-private: 初回syncでも追加しない", () => {
216
+ // Given: base なし、name が project-private
217
+ const jsonPaths = {
218
+ managed: {},
219
+ "project-private": { "package.json": ["name"] },
220
+ };
221
+ const template = { name: "template", scripts: { build: "tsc" } };
222
+ const local = {};
223
+ // When
224
+ const result = processor.mergeJson(template, local, jsonPaths, "package.json");
225
+ // Then: name は追加されない
226
+ expect(result.result).not.toHaveProperty("name");
227
+ expect(result.result).toHaveProperty("scripts");
228
+ });
229
+ it("project-private ネスト指定: devDeps.@types/node が除外される", () => {
230
+ // Given: devDeps.@types/node が project-private
231
+ const jsonPaths = {
232
+ managed: {},
233
+ "project-private": { "test.json": ["devDeps.@types/node"] },
234
+ };
235
+ const template = { devDeps: { "@types/node": "20", typescript: "5" } };
236
+ const local = { devDeps: { typescript: "4" } };
237
+ // When
238
+ const result = processor.mergeJson(template, local, jsonPaths, "test.json");
239
+ // Then: @types/node は除外(追加されない)、typescript はマージ対象
240
+ expect(result.result.devDeps).not.toHaveProperty("@types/node");
241
+ expect(result.result.devDeps.typescript).toBe("4");
242
+ });
243
+ it("project-private キーがローカルにある場合、削除されないこと", () => {
244
+ const jsonPaths = {
245
+ managed: {},
246
+ "project-private": { "package.json": ["name", "version"] },
247
+ };
248
+ const base = { name: "old-name", version: "0.1.0", scripts: { build: "tsc" } };
249
+ const local = { name: "my-project", version: "1.0.0", scripts: { build: "tsc" } };
250
+ const template = { name: "template-name", version: "2.0.0", scripts: { build: "tsc --noEmit" } };
251
+ const result = processor.mergeJson(template, local, jsonPaths, "package.json", base);
252
+ // project-private キーはローカル値がそのまま保持される
253
+ expect(result.result.name).toBe("my-project");
254
+ expect(result.result.version).toBe("1.0.0");
255
+ // scripts.build はテンプレート変更あり → テンプレート適用
256
+ expect(result.result.scripts.build).toBe("tsc --noEmit");
257
+ expect(result.conflicts).toEqual([]);
258
+ });
259
+ });
260
+ describe("mergeJson - managed", () => {
261
+ it("managed: テンプレート値で強制上書き", () => {
262
+ // Given: plansDirectory が managed
263
+ const jsonPaths = {
264
+ managed: { "settings.json": ["plansDirectory"] },
265
+ "project-private": {},
266
+ };
267
+ const template = { plansDirectory: "docs/plans", userSetting: "template" };
268
+ const local = { plansDirectory: "my-plans", userSetting: "local" };
269
+ const base = { plansDirectory: "old-plans", userSetting: "template" };
270
+ // When
271
+ const result = processor.mergeJson(template, local, jsonPaths, "settings.json", base);
272
+ // Then: plansDirectory はテンプレート値(managed)、userSetting はローカル保持
273
+ expect(result.result.plansDirectory).toBe("docs/plans");
274
+ expect(result.result.userSetting).toBe("local");
275
+ });
276
+ it("managed パスが初回sync(baseなし)でも強制上書きされること", () => {
277
+ const jsonPaths = {
278
+ managed: { "settings.json": ["plansDirectory"] },
279
+ "project-private": {},
280
+ };
281
+ const template = { plansDirectory: "docs/plans", userSetting: "template" };
282
+ const local = { plansDirectory: "my-plans", userSetting: "local" };
283
+ // base なし(初回sync)でも managed は強制上書き
284
+ const result = processor.mergeJson(template, local, jsonPaths, "settings.json");
285
+ expect(result.result.plansDirectory).toBe("docs/plans");
286
+ expect(result.result.userSetting).toBe("local"); // managed以外はローカル保持
287
+ expect(result.conflicts).toEqual([]);
288
+ });
289
+ });
290
+ describe("mergeJson - フルパスルックアップ", () => {
291
+ it(".claude/settings.json がフルパスで正しくマッチ", () => {
292
+ // Given: .claude/settings.json の plansDirectory が managed
293
+ const jsonPaths = {
294
+ managed: { ".claude/settings.json": ["plansDirectory"] },
295
+ "project-private": {},
296
+ };
297
+ const template = { plansDirectory: "docs/plans", hooks: {} };
298
+ const local = { plansDirectory: "my-plans", hooks: { custom: true } };
299
+ // When
300
+ const result = processor.mergeJson(template, local, jsonPaths, ".claude/settings.json");
301
+ // Then: plansDirectory はテンプレート値(managed)
302
+ expect(result.result.plansDirectory).toBe("docs/plans");
303
+ });
304
+ });
305
+ describe("mergeJson - ネストされたオブジェクト", () => {
306
+ it("3階層以上のネストでも3方向マージが正しく動作すること", () => {
307
+ const base = { a: { b: { c: 1, d: 2 } } };
308
+ const local = { a: { b: { c: 1, d: 5 } } }; // d を変更
309
+ const template = { a: { b: { c: 3, d: 2 } } }; // c を変更
310
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
311
+ // c はテンプレート変更 → テンプレート適用
312
+ // d はローカル変更 → ローカル保持
313
+ const nested = result.result.a;
314
+ const deepNested = nested.b;
315
+ expect(deepNested.c).toBe(3);
316
+ expect(deepNested.d).toBe(5);
317
+ expect(result.conflicts).toEqual([]);
318
+ });
319
+ it("ネストされたオブジェクト内でも3方向マージが動作する", () => {
320
+ // Given: scripts オブジェクト内の各キーを個別に変更
321
+ const base = { scripts: { build: "tsc", dev: "next dev", test: "vitest" } };
322
+ const local = { scripts: { build: "tsc", dev: "next dev --turbo", test: "vitest" } };
323
+ const template = { scripts: { build: "tsc --noEmit", dev: "next dev", test: "vitest" } };
324
+ // When
325
+ const result = processor.mergeJson(template, local, emptyPaths, "test.json", base);
326
+ // Then: build → template適用(local未変更)、dev → local保持(template未変更)、test → 変更なし
327
+ expect(result.result.scripts.build).toBe("tsc --noEmit");
328
+ expect(result.result.scripts.dev).toBe("next dev --turbo");
329
+ expect(result.result.scripts.test).toBe("vitest");
330
+ expect(result.conflicts).toEqual([]);
331
+ });
332
+ });
333
+ });
334
+ //# sourceMappingURL=json-processor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-processor.test.js","sourceRoot":"","sources":["../../../src/lib/sync/json-processor.test.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,13 @@ export declare class MetadataManager {
27
27
  getBaseContent(filePath: string): Promise<BaseContent>;
28
28
  /**
29
29
  * ファイルハッシュを更新する
30
+ *
31
+ * @param metadata - 現在のメタデータ
32
+ * @param filePath - 対象ファイルパス
33
+ * @param content - ファイルの内容(ハッシュ計算に使用)
34
+ * @param baseContent - 前回sync時のテンプレートコンテンツ(3方向マージ用)
30
35
  */
31
- updateFileHash(metadata: SyncMetadata, filePath: string, content: string): Promise<SyncMetadata>;
36
+ updateFileHash(metadata: SyncMetadata, filePath: string, content: string, baseContent?: string): Promise<SyncMetadata>;
32
37
  /**
33
38
  * SHA-256ハッシュを計算する(キャッシュあり)
34
39
  * 同一ファイル内容の場合、2回目以降はキャッシュから取得
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAY;gBAEjB,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAKtD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAwBnC;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;IAWrC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5D;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IAgBxB;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM;IAoBrD;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY;IAWtE;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
1
+ {"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAY;gBAEjB,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS;IAKtD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAwBnC;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;IAWrC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAa5D;;;;;;;OAOG;IACG,cAAc,CAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC;IAiBxB;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM;IAoBrD;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY;IAWtE;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA0B3B"}
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
- import fs from "fs-extra";
3
2
  import { SyncMetadataSchema } from "../../types/sync.js";
3
+ import fs from "fs-extra";
4
4
  import { HashCache } from "./hash-cache.js";
5
5
  /**
6
6
  * メタデータ管理クラス
@@ -83,13 +83,15 @@ export class MetadataManager {
83
83
  }
84
84
  /**
85
85
  * ファイルハッシュを更新する
86
+ *
87
+ * @param metadata - 現在のメタデータ
88
+ * @param filePath - 対象ファイルパス
89
+ * @param content - ファイルの内容(ハッシュ計算に使用)
90
+ * @param baseContent - 前回sync時のテンプレートコンテンツ(3方向マージ用)
86
91
  */
87
- async updateFileHash(metadata, filePath, content) {
92
+ async updateFileHash(metadata, filePath, content, baseContent) {
88
93
  const hash = this.calculateHash(content, filePath);
89
- const fileMetadata = {
90
- hash,
91
- syncedAt: new Date().toISOString(),
92
- };
94
+ const fileMetadata = Object.assign({ hash, syncedAt: new Date().toISOString() }, (baseContent !== undefined && { baseContent }));
93
95
  return Object.assign(Object.assign({}, metadata), { files: Object.assign(Object.assign({}, metadata.files), { [filePath]: fileMetadata }) });
94
96
  }
95
97
  /**
@@ -137,6 +139,24 @@ export class MetadataManager {
137
139
  lastSync: new Date().toISOString(),
138
140
  templateVersion: "0.1.0",
139
141
  files: {},
142
+ jsonPaths: {
143
+ managed: {
144
+ ".claude/settings.json": ["plansDirectory", "includeCoAuthoredBy"],
145
+ ".vscode/settings.json": [
146
+ "editor.codeActionsOnSave",
147
+ "editor.defaultFormatter",
148
+ "editor.formatOnSave",
149
+ "eslint.enable",
150
+ "prettier.enable",
151
+ "prettier.useEditorConfig",
152
+ "[json]",
153
+ "[jsonc]",
154
+ ],
155
+ },
156
+ "project-private": {
157
+ "package.json": ["name", "version", "private", "workspaces", "packageManager", "volta"],
158
+ },
159
+ },
140
160
  };
141
161
  }
142
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-manager.js","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata-manager.js","sourceRoot":"","sources":["../../../src/lib/sync/metadata-manager.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare const FileMetadataSchema: z.ZodObject<{
6
6
  hash: z.ZodString;
7
7
  syncedAt: z.ZodString;
8
8
  conflicts: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ baseContent: z.ZodOptional<z.ZodString>;
9
10
  }, z.core.$strip>;
10
11
  /**
11
12
  * JSON パス設定の Zod スキーマ
@@ -27,6 +28,7 @@ export declare const SyncMetadataSchema: z.ZodObject<{
27
28
  hash: z.ZodString;
28
29
  syncedAt: z.ZodString;
29
30
  conflicts: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ baseContent: z.ZodOptional<z.ZodString>;
30
32
  }, z.core.$strip>>;
31
33
  jsonPaths: z.ZodOptional<z.ZodObject<{
32
34
  managed: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export const FileMetadataSchema = z.object({
6
6
  hash: z.string(),
7
7
  syncedAt: z.string(),
8
8
  conflicts: z.array(z.string()).optional(),
9
+ baseContent: z.string().optional(), // 前回sync時のテンプレートコンテンツ(3方向マージ用)
9
10
  });
10
11
  /**
11
12
  * JSON パス設定の Zod スキーマ
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC;IAC/C,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,+BAA+B;CACpE,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC7D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC;IAC/C,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@einja/dev-cli",
3
- "version": "0.1.45",
3
+ "version": "0.1.48",
4
4
  "description": "Einja CLI - .claude設定とテンプレート同期をnpxでインストール",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -104,10 +104,10 @@ AskUserQuestion:
104
104
 
105
105
  ```bash
106
106
  # dev-cli の場合
107
- npx --yes @einja/dev-cli sync --only <categories> --dry-run --yes
107
+ npx --yes @einja/dev-cli@latest sync --only <categories> --dry-run --yes
108
108
 
109
109
  # create-einja-app の場合
110
- npx --yes create-einja-app sync --categories <categories> --dry-run
110
+ npx --yes create-einja-app@latest sync --categories <categories> --dry-run
111
111
  ```
112
112
 
113
113
  > **注**: 両CLIでカテゴリ指定のオプション名が異なる(dev-cli: `--only` / create-einja-app: `--categories`)
@@ -156,13 +156,13 @@ AskUserQuestion:
156
156
 
157
157
  ```bash
158
158
  # dev-cli(孤児削除あり)
159
- npx --yes @einja/dev-cli sync --only <categories> --yes --json --clean
159
+ npx --yes @einja/dev-cli@latest sync --only <categories> --yes --json --clean
160
160
 
161
161
  # dev-cli(孤児削除なし)
162
- npx --yes @einja/dev-cli sync --only <categories> --yes --json
162
+ npx --yes @einja/dev-cli@latest sync --only <categories> --yes --json
163
163
 
164
164
  # create-einja-app
165
- npx --yes create-einja-app sync --categories <categories>
165
+ npx --yes create-einja-app@latest sync --categories <categories>
166
166
  ```
167
167
 
168
168
  - dev-cli は `--json` オプションで構造化出力を取得しパースする
@@ -228,7 +228,7 @@ f. 解消結果を `Read` で確認し、ユーザーに表示
228
228
 
229
229
  Step 4 で孤児削除を選択した場合、JSON出力の `summary.orphansDeleted` を確認し、削除されたファイル一覧を記録する(Step 9 の詳細表示で使用)。
230
230
 
231
- Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli sync --only <categories> --clean --yes` で削除できます」と案内する。
231
+ Step 4 で孤児削除をスキップした場合、孤児ファイル一覧を再表示し「後で `npx --yes @einja/dev-cli@latest sync --only <categories> --clean --yes` で削除できます」と案内する。
232
232
 
233
233
  ### Step 7: direnv allow 実行確認
234
234
 
@@ -202,6 +202,8 @@ sequenceDiagram
202
202
  | `scripts` | `scripts/` | ユーティリティスクリプト(`_` プレフィックスは除外) |
203
203
  | `env` | `.envrc` | direnv 設定 |
204
204
  | `tools` | `.vscode/settings.json` | VS Code 設定 |
205
+ | `root-config` | `package.json`, `.mcp.json` | ルート設定ファイル |
206
+ | `claude-config` | `.claude/settings.json` | Claude Code設定 |
205
207
 
206
208
  **マージ方式:**
207
209
 
@@ -213,6 +215,44 @@ sequenceDiagram
213
215
  | JSON マージ | `.json` 拡張子のファイル | managed/project-private の JSON パス指定に基づきマージ |
214
216
  | 3方向マージ | マーカーなしの通常ファイル | base(前回テンプレート)・local・template の3方向差分で自動マージ。コンフリクト時はマーカー付きで出力 |
215
217
 
218
+ #### JSON マージモード(3モード構成)
219
+
220
+ | モード | 動作 | 設定方法 |
221
+ |--------|------|---------|
222
+ | `managed` | テンプレート値で強制上書き | jsonPaths.managed にパス指定 |
223
+ | `project-private` | 完全除外(テンプレートから追加しない) | jsonPaths["project-private"] にパス指定 |
224
+ | デフォルト | 3方向マージ(base/local/template比較、コンフリクト検出) | 上記以外の全パス |
225
+
226
+ #### JSON ファイルの同期動作(3方向マージ)
227
+
228
+ | 操作 | 結果 |
229
+ |------|------|
230
+ | テンプレートに新キーが追加された(利用者は未変更) | sync時に利用者のファイルに追加される |
231
+ | 利用者が独自キーを追加した | 保持される |
232
+ | 利用者がテンプレート由来のキーを削除(テンプレート側は未変更) | 削除が維持される |
233
+ | 利用者がテンプレート由来のキーを変更(テンプレート側は未変更) | 利用者の変更が保持される |
234
+ | テンプレートがキーを更新(利用者側は未変更) | テンプレートの更新が自動適用される |
235
+ | 両方が同じキーを異なる値に変更 | コンフリクト警告(利用者の値を保持) |
236
+ | project-private 指定のキー | テンプレートから一切追加・変更されない |
237
+ | managed 指定のキー | テンプレート値で常に上書き |
238
+
239
+ #### ファイル別 jsonPaths 設定
240
+
241
+ | ファイル | managed | project-private | 残り |
242
+ |---------|---------|----------------|------|
243
+ | `package.json` | — | name, version, private, workspaces, packageManager, volta | 3方向マージ |
244
+ | `.claude/settings.json` | plansDirectory, includeCoAuthoredBy | — | 3方向マージ |
245
+ | `.vscode/settings.json` | editor.*, eslint.*, prettier.*, [json], [jsonc] | — | 3方向マージ |
246
+ | `.mcp.json` | — | — | 3方向マージ |
247
+
248
+ #### base スナップショット
249
+
250
+ 3方向マージには「前回sync時のテンプレート内容」(base)が必要。
251
+ `.einja-sync.json` の `baseContent` フィールドに保存される。
252
+
253
+ - 初回sync(baseなし): ローカル優先 + テンプレートの新規キーのみ追加
254
+ - 2回目以降: base/local/template の3方向比較でマージ
255
+
216
256
  #### create-einja-app sync の同期対象カテゴリ
217
257
 
218
258
  | カテゴリ | 対象パターン | デフォルト選択 |