@geeseeker/easyai-dev 3.0.5 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README_AI.md CHANGED
@@ -52,7 +52,10 @@ easyAI 的 MCP Server 已打包在 npm 包中,无需本地编译。
52
52
 
53
53
  3. **注入 easyAI MCP Server 配置**:
54
54
 
55
- 向用户展示将要添加的配置内容,**请求用户确认**后再写入:
55
+ 向用户展示将要添加的配置内容,**请求用户确认**后再写入。
56
+
57
+ **关键**:必须包含 `EASYAI_PROJECT_ROOT` 环境变量,指向用户项目的绝对路径。
58
+ MCP Server 通过 `npx` 运行时,进程的工作目录不在项目内,需要此环境变量才能定位项目。
56
59
 
57
60
  ```
58
61
  我将在 Antigravity MCP 配置文件中添加 easyAI MCP Server:
@@ -62,12 +65,18 @@ easyAI 的 MCP Server 已打包在 npm 包中,无需本地编译。
62
65
  新增条目:
63
66
  "easyai-mcp-server": {
64
67
  "command": "npx",
65
- "args": ["-y", "@geeseeker/easyai-dev", "serve"]
68
+ "args": ["-y", "@geeseeker/easyai-dev", "serve"],
69
+ "env": {
70
+ "EASYAI_PROJECT_ROOT": "<用户项目的绝对路径>"
71
+ }
66
72
  }
67
73
 
68
74
  是否确认添加?
69
75
  ```
70
76
 
77
+ > **`EASYAI_PROJECT_ROOT` 必须是项目根目录的绝对路径**(包含 `.trellis/` 的目录)。
78
+ > 例如:`/home/user/projects/my-app` 或 `/Users/user/projects/my-app`。
79
+
71
80
  4. **用户确认后,写入配置**:
72
81
 
73
82
  将 `easyai-mcp-server` 条目添加到 `mcpServers` 对象中(保留已有的其他 MCP Server 配置不变)。
@@ -83,9 +92,22 @@ easyAI 的 MCP Server 已打包在 npm 包中,无需本地编译。
83
92
 
84
93
  > 这是一个**必须的断点**,MCP 配置修改后需要重启 IDE 才能生效。
85
94
 
86
- 6. **验证 MCP 连接**:用户确认重启后,尝试调用任意 easyai MCP 工具(如 `project_status`)验证连接。
87
- - 如果调用失败,检查配置文件内容是否正确,协助用户排查。
88
- - 如果没有 easyai MCP 工具可用,说明配置尚未生效,需要再次检查配置和重启。
95
+ 6. **验证 MCP 连接**:
96
+
97
+ 用户确认重启后,按以下顺序验证:
98
+
99
+ a. 尝试读取 MCP 资源 `trellis://status`
100
+
101
+ b. **如果成功** → 包含 `git`、`tasks`、`journal` 字段 → MCP 工作正常,进入 S2
102
+
103
+ c. **如果报错「无法找到项目根目录」** → 按以下步骤自修复:
104
+ 1. 读取 `~/.gemini/antigravity/mcp_config.json`
105
+ 2. 检查 `easyai-mcp-server` 条目是否包含 `env.EASYAI_PROJECT_ROOT`
106
+ 3. 如果缺失,添加 `"env": { "EASYAI_PROJECT_ROOT": "<项目绝对路径>" }`
107
+ 4. 如果已有但路径错误,修正为正确的项目根目录路径
108
+ 5. 告知用户需要再次重启 IDE
109
+
110
+ d. **如果没有 easyai MCP 工具可用** → 配置尚未生效,检查配置文件并重启
89
111
 
90
112
  ---
91
113
 
@@ -140,6 +162,40 @@ npx @geeseeker/easyai-dev check .
140
162
 
141
163
  ## 故障排查
142
164
 
165
+ AI 遇到 MCP 相关报错时,应**先自行诊断和修复**,不要将底层错误暴露给用户。
166
+
167
+ ### 「无法找到项目根目录」
168
+
169
+ **这是最常见的问题**。MCP Server 需要知道项目根目录才能工作。
170
+
171
+ **诊断**:错误信息中会包含 `cwd(...)` 和 `__dirname(...)` 两个路径,表示它在这两条路径上都没找到 `.trellis` 目录。
172
+
173
+ **自动修复步骤**(AI 应自行执行,无需用户介入):
174
+
175
+ 1. 读取 `~/.gemini/antigravity/mcp_config.json`
176
+ 2. 找到 `easyai-mcp-server` 条目
177
+ 3. 检查是否包含 `env.EASYAI_PROJECT_ROOT`
178
+ 4. 如果缺失或路径错误 → 修正为当前项目根目录(包含 `.trellis/` 的目录)的绝对路径:
179
+ ```json
180
+ "easyai-mcp-server": {
181
+ "command": "npx",
182
+ "args": ["-y", "@geeseeker/easyai-dev", "serve"],
183
+ "env": {
184
+ "EASYAI_PROJECT_ROOT": "/绝对路径/到/项目根"
185
+ }
186
+ }
187
+ ```
188
+ 5. 告知用户「MCP 配置已自动修复,请重启 IDE」
189
+ 6. 用户重启后,再次验证
190
+
191
+ **根因说明**:MCP Server 检测项目根的优先级为:
192
+
193
+ 1. `EASYAI_PROJECT_ROOT` 环境变量(推荐,最可靠)
194
+ 2. `process.cwd()` 向上遍历查找 `.trellis`(IDE 工作目录在项目内时有效)
195
+ 3. `__dirname` 向上遍历(MCP Server 安装在项目 `node_modules` 内时有效)
196
+
197
+ 通过 `npx -y` 运行时,cwd 和 `__dirname` 通常都在项目外,因此**必须设置环境变量**。
198
+
143
199
  ### MCP Server 无法启动
144
200
 
145
201
  ```bash
@@ -148,7 +204,7 @@ node --version # 需要 >= 18
148
204
 
149
205
  # 手动测试 MCP Server
150
206
  npx @geeseeker/easyai-dev serve
151
- # 正常情况下会输出 "easyAI MCP Server v0.1.0 started" 到 stderr
207
+ # 正常情况下会输出 "easyAI MCP Server started" 到 stderr
152
208
  ```
153
209
 
154
210
  ### MCP 配置文件路径不确定
@@ -176,3 +232,10 @@ npx @geeseeker/easyai-dev init .
176
232
  npx @geeseeker/easyai-dev update .
177
233
  # 只更新 .agents/ 和 .trellis/spec/,不影响用户数据
178
234
  ```
235
+
236
+ ### 切换项目
237
+
238
+ 如果用户切换到不同项目,需要更新 MCP 配置中的 `EASYAI_PROJECT_ROOT`:
239
+
240
+ 1. 修改 `~/.gemini/antigravity/mcp_config.json` 中的路径
241
+ 2. 重启 IDE
package/lib/init.js CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  import * as fs from "node:fs";
11
11
  import * as path from "node:path";
12
+ import * as crypto from "node:crypto";
12
13
  import { fileURLToPath } from "node:url";
13
14
  import { execSync } from "node:child_process";
14
15
 
@@ -27,7 +28,7 @@ const NC = "\x1b[0m";
27
28
  const SKELETON_DIR = path.join(__dirname, "..", "skeleton");
28
29
 
29
30
  // 框架版本
30
- const FRAMEWORK_VERSION = "3.0.5";
31
+ const FRAMEWORK_VERSION = "3.0.7";
31
32
 
32
33
  // 需要检查的必需目录
33
34
  const REQUIRED_DIRS = [
@@ -59,6 +60,17 @@ const REQUIRED_FILES = [
59
60
  // 初始化时不应覆盖的文件(已有项目集成时)
60
61
  const NO_OVERWRITE_FILES = ["README.md", ".gitignore"];
61
62
 
63
+ // Manifest 相关常量
64
+ const MANIFEST_FILENAME = "easyai-manifest.json";
65
+
66
+ /**
67
+ * 计算文件的 SHA-256 哈希
68
+ */
69
+ function fileHash(filePath) {
70
+ const content = fs.readFileSync(filePath);
71
+ return crypto.createHash("sha256").update(content).digest("hex");
72
+ }
73
+
62
74
  /**
63
75
  * 递归复制目录
64
76
  * @param src - 源目录
@@ -207,6 +219,13 @@ export async function doInit(targetDir) {
207
219
  console.log(` ${YELLOW}⊘${NC} README.md — 已存在,跳过`);
208
220
  }
209
221
 
222
+ // 复制 Manifest 文件(记录初始文件哈希)
223
+ const manifestSrc = path.join(SKELETON_DIR, MANIFEST_FILENAME);
224
+ if (fs.existsSync(manifestSrc)) {
225
+ fs.copyFileSync(manifestSrc, path.join(targetDir, `.${MANIFEST_FILENAME}`));
226
+ console.log(` ${GREEN}✓${NC} .${MANIFEST_FILENAME} — 框架文件清单`);
227
+ }
228
+
210
229
  // 写入版本清单
211
230
  fs.writeFileSync(
212
231
  path.join(targetDir, ".easyai-version"),
@@ -226,7 +245,10 @@ ${BOLD}下一步:配置 MCP Server${NC}
226
245
  {
227
246
  "easyai-mcp-server": {
228
247
  "command": "npx",
229
- "args": ["-y", "@geeseeker/easyai-dev", "serve"]
248
+ "args": ["-y", "@geeseeker/easyai-dev", "serve"],
249
+ "env": {
250
+ "EASYAI_PROJECT_ROOT": "${targetDir}"
251
+ }
230
252
  }
231
253
  }
232
254
 
@@ -315,8 +337,16 @@ export async function doCheck(targetDir) {
315
337
  }
316
338
 
317
339
  /**
318
- * 更新框架
319
- * 只更新 .agents/ 和 .trellis/spec/,不覆盖用户数据
340
+ * 更新框架(Manifest 驱动的智能合并)
341
+ *
342
+ * 核心逻辑:
343
+ * - 纯用户文件(不在 manifest 中)→ 不碰
344
+ * - 框架文件、用户未修改 → 自动覆盖
345
+ * - 框架文件、用户已修改 → 报告冲突,保存 .new 文件
346
+ * - 框架新增文件 → 自动创建
347
+ * - 框架删除文件、用户未修改 → 删除
348
+ * - 框架删除文件、用户已修改 → 报告冲突
349
+ *
320
350
  * @param targetDir - 目标项目目录(绝对路径)
321
351
  */
322
352
  export async function doUpdate(targetDir) {
@@ -338,47 +368,129 @@ export async function doUpdate(targetDir) {
338
368
  return;
339
369
  }
340
370
 
371
+ // 读取新旧 Manifest
372
+ const newManifestPath = path.join(SKELETON_DIR, MANIFEST_FILENAME);
373
+ const oldManifestPath = path.join(targetDir, `.${MANIFEST_FILENAME}`);
374
+
375
+ if (!fs.existsSync(newManifestPath)) {
376
+ console.error(
377
+ `${RED}✗ 新版本缺少 ${MANIFEST_FILENAME},无法执行安全升级${NC}`,
378
+ );
379
+ process.exit(1);
380
+ }
381
+
382
+ const newManifest = JSON.parse(fs.readFileSync(newManifestPath, "utf-8"));
383
+ let oldManifest = { files: {} };
384
+ if (fs.existsSync(oldManifestPath)) {
385
+ oldManifest = JSON.parse(fs.readFileSync(oldManifestPath, "utf-8"));
386
+ }
387
+
341
388
  console.log(`\n${BLUE}${BOLD}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}`);
342
- console.log(`${BLUE}${BOLD}easyAI 框架更新${NC}`);
389
+ console.log(`${BLUE}${BOLD}easyAI 框架更新(智能合并)${NC}`);
343
390
  console.log(`${BLUE}${BOLD}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}`);
344
391
  console.log(
345
392
  `当前版本: ${YELLOW}v${installedVersion}${NC}` +
346
393
  ` → 目标版本: ${GREEN}v${FRAMEWORK_VERSION}${NC}\n`,
347
394
  );
348
395
 
349
- // 更新 .agents/(完整替换)
350
- const agentsSrc = path.join(SKELETON_DIR, ".agents");
351
- const agentsDest = path.join(targetDir, ".agents");
352
- if (fs.existsSync(agentsSrc)) {
353
- // 备份当前 .agents/
354
- const backupDir = path.join(targetDir, `.agents.bak.${Date.now()}`);
355
- fs.renameSync(agentsDest, backupDir);
356
- copyDirSync(agentsSrc, agentsDest, { noOverwrite: false, log: false });
357
- console.log(
358
- ` ${GREEN}✓${NC} .agents/ 已更新(备份: ${path.basename(backupDir)})`,
359
- );
396
+ const conflicts = [];
397
+ let updated = 0;
398
+ let created = 0;
399
+ let removed = 0;
400
+ let skipped = 0;
401
+
402
+ // 阶段 1:处理新 Manifest 中的文件(新增 + 更新)
403
+ console.log(`${BOLD}处理框架文件:${NC}`);
404
+ for (const [relPath, newEntry] of Object.entries(newManifest.files)) {
405
+ const targetPath = path.join(targetDir, relPath);
406
+ const skeletonPath = path.join(SKELETON_DIR, relPath);
407
+ const oldEntry = oldManifest.files[relPath];
408
+
409
+ if (!fs.existsSync(targetPath)) {
410
+ // 文件在用户项目中不存在 → 直接创建
411
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
412
+ fs.copyFileSync(skeletonPath, targetPath);
413
+ console.log(` ${GREEN}+${NC} ${relPath} — 新增`);
414
+ created++;
415
+ continue;
416
+ }
417
+
418
+ if (!oldEntry) {
419
+ // 新 Manifest 有,旧 Manifest 没有,但用户文件已存在
420
+ // → 框架新增文件与用户已有文件冲突
421
+ fs.copyFileSync(skeletonPath, targetPath + ".new");
422
+ conflicts.push({
423
+ file: relPath,
424
+ reason: "框架新增此文件,但你的项目中已有同名文件",
425
+ });
426
+ continue;
427
+ }
428
+
429
+ // 框架文件在新旧版本中都有,检查是否有更新
430
+ if (oldEntry.hash === newEntry.hash) {
431
+ // 框架这个文件没更新,跳过
432
+ skipped++;
433
+ continue;
434
+ }
435
+
436
+ // 框架文件有更新,检查用户是否修改过
437
+ const currentHash = fileHash(targetPath);
438
+ if (currentHash === oldEntry.hash) {
439
+ // 用户未修改 → 直接覆盖
440
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
441
+ fs.copyFileSync(skeletonPath, targetPath);
442
+ console.log(` ${GREEN}✓${NC} ${relPath} — 已更新`);
443
+ updated++;
444
+ } else {
445
+ // 用户已修改 → 报告冲突
446
+ fs.copyFileSync(skeletonPath, targetPath + ".new");
447
+ conflicts.push({
448
+ file: relPath,
449
+ reason: "框架已更新此文件,但你也修改过它",
450
+ });
451
+ }
360
452
  }
361
453
 
362
- // 更新 .trellis/spec/(完整替换)
363
- const specSrc = path.join(SKELETON_DIR, ".trellis", "spec");
364
- const specDest = path.join(targetDir, ".trellis", "spec");
365
- if (fs.existsSync(specSrc)) {
366
- const specBackup = path.join(
367
- targetDir,
368
- ".trellis",
369
- `spec.bak.${Date.now()}`,
370
- );
371
- if (fs.existsSync(specDest)) {
372
- fs.renameSync(specDest, specBackup);
454
+ // 阶段 2:处理旧 Manifest 中有、新 Manifest 中没有的文件(框架删除)
455
+ for (const [relPath, oldEntry] of Object.entries(oldManifest.files)) {
456
+ if (newManifest.files[relPath]) {
457
+ continue; // 新版本中仍存在,已在阶段 1 处理
458
+ }
459
+
460
+ const targetPath = path.join(targetDir, relPath);
461
+ if (!fs.existsSync(targetPath)) {
462
+ continue; // 文件已不存在,无需处理
463
+ }
464
+
465
+ const currentHash = fileHash(targetPath);
466
+ if (currentHash === oldEntry.hash) {
467
+ // 用户未修改 → 直接删除
468
+ fs.unlinkSync(targetPath);
469
+ console.log(` ${RED}-${NC} ${relPath} — 已移除(框架不再需要)`);
470
+ removed++;
471
+ } else {
472
+ // 用户已修改 → 报告冲突
473
+ conflicts.push({
474
+ file: relPath,
475
+ reason: "框架已移除此文件,但你修改过它",
476
+ });
373
477
  }
374
- copyDirSync(specSrc, specDest, { noOverwrite: false, log: false });
375
- console.log(` ${GREEN}✓${NC} .trellis/spec/ — 已更新`);
376
478
  }
377
479
 
378
- // 更新版本清单
480
+ // 更新项目中的 Manifest 和版本号
481
+ fs.copyFileSync(newManifestPath, oldManifestPath);
379
482
  fs.writeFileSync(versionFile, `${FRAMEWORK_VERSION}\n`);
380
483
  console.log(` ${GREEN}✓${NC} .easyai-version — v${FRAMEWORK_VERSION}`);
381
484
 
485
+ // 统计输出
486
+ console.log(
487
+ `\n${BOLD}统计:${NC} ` +
488
+ `${GREEN}${created} 新增${NC}, ` +
489
+ `${GREEN}${updated} 更新${NC}, ` +
490
+ `${RED}${removed} 移除${NC}, ` +
491
+ `${skipped} 无变化`,
492
+ );
493
+
382
494
  // 不更新的内容
383
495
  console.log(`\n${BOLD}以下内容未被修改(保留用户数据):${NC}`);
384
496
  console.log(` ${YELLOW}⊘${NC} .trellis/config/config.yaml`);
@@ -387,9 +499,20 @@ export async function doUpdate(targetDir) {
387
499
  console.log(` ${YELLOW}⊘${NC} .docs/`);
388
500
  console.log(` ${YELLOW}⊘${NC} README.md`);
389
501
  console.log(` ${YELLOW}⊘${NC} .gitignore`);
502
+ console.log(` ${YELLOW}⊘${NC} 用户自定义的 Skills / Rules / Workflows`);
503
+
504
+ // 冲突报告
505
+ if (conflicts.length > 0) {
506
+ console.log(`\n${YELLOW}${BOLD}⚠ 检测到 ${conflicts.length} 个冲突:${NC}`);
507
+ for (let i = 0; i < conflicts.length; i++) {
508
+ const c = conflicts[i];
509
+ console.log(`\n ${i + 1}. ${YELLOW}${c.file}${NC}`);
510
+ console.log(` → ${c.reason}`);
511
+ console.log(` → 框架新版已保存到 ${c.file}.new`);
512
+ console.log(` → 请手动比较并决定保留哪个版本`);
513
+ }
514
+ console.log(`\n${YELLOW}提示: 使用 diff <file> <file>.new 比较差异${NC}`);
515
+ }
390
516
 
391
517
  console.log(`\n${GREEN}${BOLD}✅ 框架更新完成!${NC}`);
392
- console.log(
393
- `${YELLOW}注意: 旧版 .agents/ 已备份。确认无误后可手动删除。${NC}`,
394
- );
395
518
  }
@@ -14,7 +14,7 @@ export declare function registerFrameworkInit(server: McpServer): void;
14
14
  */
15
15
  export declare function registerFrameworkCheck(server: McpServer): void;
16
16
  /**
17
- * 注册 framework_update 工具
17
+ * 注册 framework_update 工具(Manifest 驱动智能合并)
18
18
  */
19
19
  export declare function registerFrameworkUpdate(server: McpServer): void;
20
20
  //# sourceMappingURL=framework-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"framework-tools.d.ts","sourceRoot":"","sources":["../../src/tools/framework-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkHpE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmI7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqG9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6H/D"}
1
+ {"version":3,"file":"framework-tools.d.ts","sourceRoot":"","sources":["../../src/tools/framework-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8HpE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmI7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqG9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgN/D"}
@@ -7,6 +7,7 @@
7
7
  import { z } from "zod";
8
8
  import * as fs from "node:fs";
9
9
  import * as path from "node:path";
10
+ import * as crypto from "node:crypto";
10
11
  import { fileURLToPath } from "node:url";
11
12
  import { execSync } from "node:child_process";
12
13
  // ============ 常量 ============
@@ -15,7 +16,16 @@ const __dirname = path.dirname(__filename);
15
16
  // skeleton 在 npm 包中的位置:lib/server/tools/ → 向上 3 级 → skeleton/
16
17
  const SKELETON_DIR = path.resolve(__dirname, "..", "..", "..", "skeleton");
17
18
  // 框架版本(与 package.json 保持一致)
18
- const FRAMEWORK_VERSION = "3.0.5";
19
+ const FRAMEWORK_VERSION = "3.0.7";
20
+ // Manifest 相关常量
21
+ const MANIFEST_FILENAME = "easyai-manifest.json";
22
+ /**
23
+ * 计算文件的 SHA-256 哈希
24
+ */
25
+ function fileHash(filePath) {
26
+ const content = fs.readFileSync(filePath);
27
+ return crypto.createHash("sha256").update(content).digest("hex");
28
+ }
19
29
  // 必需目录
20
30
  const REQUIRED_DIRS = [
21
31
  ".agents/rules",
@@ -302,12 +312,12 @@ export function registerFrameworkCheck(server) {
302
312
  });
303
313
  }
304
314
  /**
305
- * 注册 framework_update 工具
315
+ * 注册 framework_update 工具(Manifest 驱动智能合并)
306
316
  */
307
317
  export function registerFrameworkUpdate(server) {
308
- server.tool("framework_update", "更新 easyAI 框架到最新版本。只更新 .agents/ 和 .trellis/spec/," +
309
- "不覆盖用户数据(.trellis/config/、tasks/、workspace/、.docs/)。" +
310
- "更新前会自动备份旧文件。", {
318
+ server.tool("framework_update", "更新 easyAI 框架到最新版本。使用 Manifest 驱动的智能合并:" +
319
+ "只更新框架自有文件,保留用户自定义的 Skills/Rules/Workflows。" +
320
+ "框架文件被用户修改过时报告冲突,由用户决策。", {
311
321
  targetDir: z
312
322
  .string()
313
323
  .describe("目标项目目录的绝对路径。默认为当前工作目录。")
@@ -350,30 +360,101 @@ export function registerFrameworkUpdate(server) {
350
360
  ],
351
361
  };
352
362
  }
363
+ // 读取新旧 Manifest
364
+ const newManifestPath = path.join(SKELETON_DIR, MANIFEST_FILENAME);
365
+ const oldManifestPath = path.join(resolvedDir, `.${MANIFEST_FILENAME}`);
366
+ if (!fs.existsSync(newManifestPath)) {
367
+ return {
368
+ content: [
369
+ {
370
+ type: "text",
371
+ text: JSON.stringify({
372
+ success: false,
373
+ error: `新版本缺少 ${MANIFEST_FILENAME},无法执行安全升级`,
374
+ }),
375
+ },
376
+ ],
377
+ };
378
+ }
379
+ const newManifest = JSON.parse(fs.readFileSync(newManifestPath, "utf-8"));
380
+ let oldManifest = {
381
+ files: {},
382
+ };
383
+ if (fs.existsSync(oldManifestPath)) {
384
+ oldManifest = JSON.parse(fs.readFileSync(oldManifestPath, "utf-8"));
385
+ }
353
386
  const logs = [];
387
+ const conflicts = [];
388
+ let updated = 0;
389
+ let created = 0;
390
+ let removed = 0;
391
+ let skipped = 0;
354
392
  logs.push(`更新: v${installedVersion} → v${FRAMEWORK_VERSION}`);
355
- // 更新 .agents/(完整替换,先备份)
356
- const agentsSrc = path.join(SKELETON_DIR, ".agents");
357
- const agentsDest = path.join(resolvedDir, ".agents");
358
- if (fs.existsSync(agentsSrc) && fs.existsSync(agentsDest)) {
359
- const backupName = `.agents.bak.${Date.now()}`;
360
- fs.renameSync(agentsDest, path.join(resolvedDir, backupName));
361
- copyDirSync(agentsSrc, agentsDest);
362
- logs.push(`✓ .agents/ 已更新(备份: ${backupName})`);
393
+ // 阶段 1:处理新 Manifest 中的文件
394
+ for (const [relPath, newEntry] of Object.entries(newManifest.files)) {
395
+ const targetPath = path.join(resolvedDir, relPath);
396
+ const skeletonPath = path.join(SKELETON_DIR, relPath);
397
+ const oldEntry = oldManifest.files[relPath];
398
+ if (!fs.existsSync(targetPath)) {
399
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
400
+ fs.copyFileSync(skeletonPath, targetPath);
401
+ logs.push(`+ ${relPath} — 新增`);
402
+ created++;
403
+ continue;
404
+ }
405
+ if (!oldEntry) {
406
+ fs.copyFileSync(skeletonPath, targetPath + ".new");
407
+ conflicts.push({
408
+ file: relPath,
409
+ reason: "框架新增此文件,但项目中已有同名文件",
410
+ });
411
+ continue;
412
+ }
413
+ if (oldEntry.hash === newEntry.hash) {
414
+ skipped++;
415
+ continue;
416
+ }
417
+ const currentHash = fileHash(targetPath);
418
+ if (currentHash === oldEntry.hash) {
419
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
420
+ fs.copyFileSync(skeletonPath, targetPath);
421
+ logs.push(`✓ ${relPath} — 已更新`);
422
+ updated++;
423
+ }
424
+ else {
425
+ fs.copyFileSync(skeletonPath, targetPath + ".new");
426
+ conflicts.push({
427
+ file: relPath,
428
+ reason: "框架已更新此文件,但用户也修改过它",
429
+ });
430
+ }
363
431
  }
364
- // 更新 .trellis/spec/(完整替换,先备份)
365
- const specSrc = path.join(SKELETON_DIR, ".trellis", "spec");
366
- const specDest = path.join(resolvedDir, ".trellis", "spec");
367
- if (fs.existsSync(specSrc) && fs.existsSync(specDest)) {
368
- const backupName = `spec.bak.${Date.now()}`;
369
- fs.renameSync(specDest, path.join(resolvedDir, ".trellis", backupName));
370
- copyDirSync(specSrc, specDest);
371
- logs.push("✓ .trellis/spec/ 已更新");
432
+ // 阶段 2:处理框架删除的文件
433
+ for (const [relPath, oldEntry] of Object.entries(oldManifest.files)) {
434
+ if (newManifest.files[relPath]) {
435
+ continue;
436
+ }
437
+ const targetPath = path.join(resolvedDir, relPath);
438
+ if (!fs.existsSync(targetPath)) {
439
+ continue;
440
+ }
441
+ const currentHash = fileHash(targetPath);
442
+ if (currentHash === oldEntry.hash) {
443
+ fs.unlinkSync(targetPath);
444
+ logs.push(`- ${relPath} — 已移除`);
445
+ removed++;
446
+ }
447
+ else {
448
+ conflicts.push({
449
+ file: relPath,
450
+ reason: "框架已移除此文件,但用户修改过它",
451
+ });
452
+ }
372
453
  }
373
- // 更新版本
454
+ // 更新 Manifest 和版本号
455
+ fs.copyFileSync(newManifestPath, oldManifestPath);
374
456
  fs.writeFileSync(versionFile, `${FRAMEWORK_VERSION}\n`);
375
457
  logs.push(`✓ .easyai-version → v${FRAMEWORK_VERSION}`);
376
- // 未修改的内容
377
458
  const preserved = [
378
459
  ".trellis/config/config.yaml",
379
460
  ".trellis/tasks/",
@@ -381,6 +462,7 @@ export function registerFrameworkUpdate(server) {
381
462
  ".docs/",
382
463
  "README.md",
383
464
  ".gitignore",
465
+ "用户自定义的 Skills / Rules / Workflows",
384
466
  ];
385
467
  return {
386
468
  content: [
@@ -391,7 +473,9 @@ export function registerFrameworkUpdate(server) {
391
473
  updated: true,
392
474
  fromVersion: installedVersion,
393
475
  toVersion: FRAMEWORK_VERSION,
476
+ stats: { created, updated, removed, skipped },
394
477
  logs,
478
+ conflicts,
395
479
  preserved,
396
480
  }),
397
481
  },
@@ -1 +1 @@
1
- {"version":3,"file":"framework-tools.js","sourceRoot":"","sources":["../../src/tools/framework-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"framework-tools.js","sourceRoot":"","sources":["../../src/tools/framework-tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geeseeker/easyai-dev",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
4
4
  "description": "easyAI — 让用户以纯客户的视角进行软件开发",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,96 @@
1
+ {
2
+ "version": "3.0.7",
3
+ "generatedAt": "2026-03-12T13:24:32.935Z",
4
+ "files": {
5
+ ".agents/rules/anti-hallucination.md": {
6
+ "hash": "0d18aafe1cdacf5db0e71eb06c559ab01df9deebb99804ad514930cc7d59c749"
7
+ },
8
+ ".agents/rules/coding-standards.md": {
9
+ "hash": "b3e3d04a1a80ac78fabf5d6566e02f51f8c68e07d32e9a4fa376e38ae9ba0384"
10
+ },
11
+ ".agents/rules/project-identity.md": {
12
+ "hash": "42f56e40168cd2528b72a7d99e862be806e1af0a89e609b51fdad42cb8c06758"
13
+ },
14
+ ".agents/skills/common-session-close/SKILL.md": {
15
+ "hash": "491132b12d8a1e327afdb16d9667031ad703abd9d184d8b26b3d160318d58517"
16
+ },
17
+ ".agents/skills/common-spec-update/SKILL.md": {
18
+ "hash": "cca0e3176a235d5a2b33f419e80b4e35409e377b915de14a8cd35283eb980630"
19
+ },
20
+ ".agents/skills/pm-brainstorm/SKILL.md": {
21
+ "hash": "56091ee907d737a6d9301198909b3ad6d4b6c51b77c1836226e247bef68516f5"
22
+ },
23
+ ".agents/skills/pm-framework-evolve/SKILL.md": {
24
+ "hash": "9e5564d7a5de0902f802acd3ccb30e2bdbf152d38539cd7f7d0e391424b1ce4f"
25
+ },
26
+ ".agents/skills/pm-framework-evolve/changelog/index.md": {
27
+ "hash": "3f307c523ed8d80845cf575e4d1f53958d34d326bf548eef8a720c190f35c85d"
28
+ },
29
+ ".agents/skills/pm-framework-evolve/references/architecture.md": {
30
+ "hash": "a6963837139ebeebc791d10736110683233ac6a6ef4465ad30ac8d2ca4bf4670"
31
+ },
32
+ ".agents/skills/pm-framework-evolve/references/directory-map.md": {
33
+ "hash": "941e49ac6de554ff1c3d0c0e33d1dc576a8b9720506acc1263df6c787434f0cc"
34
+ },
35
+ ".agents/skills/pm-framework-evolve/references/features.md": {
36
+ "hash": "7a0b6a9c5e789efffd3479ed679c950e2ffda57878995fa04c5606c8dac30dd2"
37
+ },
38
+ ".agents/skills/pm-framework-evolve/references/github-info.md": {
39
+ "hash": "762304a2279fb07dde46e8d0e63ae0fe534064274088ae70b95327577d881994"
40
+ },
41
+ ".agents/skills/pm-framework-evolve/references/installation.md": {
42
+ "hash": "c2e66dc8710988f54e08b2b518bf5e83b7eb82107a525af6e57e56d17e101181"
43
+ },
44
+ ".agents/skills/pm-framework-evolve/resources/changelog-entry-template.md": {
45
+ "hash": "801ae16c13edcf6f6efefeecb91e74ebf269e73841d2c8db4e4e5de81143fe7c"
46
+ },
47
+ ".agents/skills/pm-session-start/SKILL.md": {
48
+ "hash": "8497c872219a21f02bf1bd815411e0340d5d50c5db0c7ad6d6c2368352899d03"
49
+ },
50
+ ".agents/skills/pm-task-planning/SKILL.md": {
51
+ "hash": "290aa40262e6b30b771a3cb6707f7855b49b97c209330cb97b1cae24aed37dba"
52
+ },
53
+ ".agents/skills/pm-task-review/SKILL.md": {
54
+ "hash": "5c0de10bded4b1ccdccb7bdaecf873dea84482674844a1a3eca9a0811c7fc041"
55
+ },
56
+ ".agents/skills/worker-check/SKILL.md": {
57
+ "hash": "1ad45ef6673289037f3add509d27c9941ebe94a446657436805ac8f845996fb7"
58
+ },
59
+ ".agents/skills/worker-debug/SKILL.md": {
60
+ "hash": "4efb05b10547d298d908b8ec718f845f141c805a41340b32437d54dda06d4012"
61
+ },
62
+ ".agents/skills/worker-implement/SKILL.md": {
63
+ "hash": "3f4674b0d927aa3fabe83810f8388979fa6d6aade84172a5df547edad7c7410b"
64
+ },
65
+ ".agents/workflows/pm.md": {
66
+ "hash": "978b8b60dff2bbc4fa2fb81e768231ba642fe46db31ee2cfafcee62234acfd84"
67
+ },
68
+ ".agents/workflows/worker.md": {
69
+ "hash": "c18c0fb93ac5cad49be05efd1d13ee3d16576645ec6c124683113d31103e206d"
70
+ },
71
+ ".docs/README.md": {
72
+ "hash": "bb979346956d6d753d44519a533e634429c73d9e72895920b5861e29a3808ddb"
73
+ },
74
+ ".trellis/config/config.yaml": {
75
+ "hash": "5b761b8d8ed05a47ac62b371953d08cfc220cba2cd784cae4f3858bb90e441cf"
76
+ },
77
+ ".trellis/spec/guides/external-cli-guide.md": {
78
+ "hash": "ee6e10f83813243ba7bcccf38a6caa977863298bee96642642713b7066cd72ba"
79
+ },
80
+ ".trellis/spec/guides/task-workflow.md": {
81
+ "hash": "f58667994ebb3543b0b7aa737eeab7b270b0e9657515fecdc7f3d0ceb1809200"
82
+ },
83
+ ".trellis/spec/guides/testing.md": {
84
+ "hash": "31133d58f05ba6ab63f55beb6398f936b532af9d8def4443b8da025897fd4c53"
85
+ },
86
+ ".trellis/spec/spec-schema.json": {
87
+ "hash": "3706e5dbc8ba583b886717fab22b238e2f70e05a64988b469576edfe024116cd"
88
+ },
89
+ "README.md": {
90
+ "hash": "c64596569893c3131c830696aa690294f5fa31a8d6a445cc4ccd52a52d20e3a2"
91
+ },
92
+ "gitignore.template": {
93
+ "hash": "52ffb895237131c18433d45473b55d34110f283c8395a667567386eca72be8ea"
94
+ }
95
+ }
96
+ }