@geeseeker/easyai-dev 3.0.6 → 3.0.8
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/lib/init.js +156 -33
- package/lib/server/tools/framework-tools.d.ts +1 -1
- package/lib/server/tools/framework-tools.d.ts.map +1 -1
- package/lib/server/tools/framework-tools.js +107 -23
- package/lib/server/tools/framework-tools.js.map +1 -1
- package/package.json +1 -1
- package/skeleton/.agents/skills/common-session-close/SKILL.md +6 -5
- package/skeleton/easyai-manifest.json +96 -0
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.
|
|
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
|
-
*
|
|
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
|
|
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
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
-
//
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
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;
|
|
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.
|
|
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
|
|
309
|
-
"
|
|
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
|
-
//
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
const
|
|
360
|
-
fs.
|
|
361
|
-
|
|
362
|
-
|
|
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
|
-
//
|
|
365
|
-
const
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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
|
@@ -11,6 +11,7 @@ description: 会话收尾与日志沉淀 — 汇总本会话工作、写入 jour
|
|
|
11
11
|
|
|
12
12
|
## 触发条件
|
|
13
13
|
|
|
14
|
+
- 用户明确表示「**收工**」(或等价表达,如"结束"、"下班"等)
|
|
14
15
|
- 用户明确表示本次会话结束
|
|
15
16
|
- 上下文预算接近阈值,需要新开会话
|
|
16
17
|
- 任务执行完成,准备提交验收
|
|
@@ -60,12 +61,12 @@ task_append_log({
|
|
|
60
61
|
2. **列出候选沉淀内容**
|
|
61
62
|
- 向用户展示候选文档列表,说明每项的建议目标路径:
|
|
62
63
|
|
|
63
|
-
| Artifacts 类型
|
|
64
|
-
|
|
65
|
-
| `walkthrough.md`
|
|
66
|
-
| `other`(分析报告等)
|
|
64
|
+
| Artifacts 类型 | 建议沉淀目标 |
|
|
65
|
+
| ------------------------ | ------------------------------------------ |
|
|
66
|
+
| `walkthrough.md` | `.docs/notes/` 或 `.docs/guides/` |
|
|
67
|
+
| `other`(分析报告等) | `.docs/notes/` 或 `.docs/design/` |
|
|
67
68
|
| `implementation_plan.md` | 通常已由 `pm-brainstorm` Step 6 处理,跳过 |
|
|
68
|
-
| `task.md`
|
|
69
|
+
| `task.md` | 不沉淀(`.trellis/tasks/` 已持久化) |
|
|
69
70
|
|
|
70
71
|
3. **用户确认后执行**
|
|
71
72
|
- 用户确认需要沉淀 → 提炼内容并写入目标路径
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "3.0.7",
|
|
3
|
+
"generatedAt": "2026-03-12T14:10:02.125Z",
|
|
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": "81703e51dc2fed75145a808018351c7799ad0a8f347524366055f633182c1977"
|
|
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
|
+
}
|