@geeseeker/easyai-dev 3.0.3 → 3.0.5
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.md +2 -2
- package/README_AI.md +60 -25
- package/lib/init.js +19 -50
- package/lib/server/tools/framework-tools.d.ts.map +1 -1
- package/lib/server/tools/framework-tools.js +8 -4
- package/lib/server/tools/framework-tools.js.map +1 -1
- package/lib/server/utils/git-utils.d.ts +1 -1
- package/lib/server/utils/git-utils.d.ts.map +1 -1
- package/lib/server/utils/git-utils.js +27 -18
- package/lib/server/utils/git-utils.js.map +1 -1
- package/lib/server/utils/task-utils.d.ts +10 -2
- package/lib/server/utils/task-utils.d.ts.map +1 -1
- package/lib/server/utils/task-utils.js +42 -6
- package/lib/server/utils/task-utils.js.map +1 -1
- package/package.json +1 -1
- package/skeleton/.agents/rules/project-identity.md +10 -8
- package/skeleton/.agents/skills/common-session-close/SKILL.md +26 -2
- package/skeleton/.agents/skills/pm-brainstorm/SKILL.md +2 -0
- package/skeleton/.agents/skills/pm-framework-evolve/SKILL.md +165 -0
- package/skeleton/.agents/skills/pm-framework-evolve/changelog/index.md +11 -0
- package/skeleton/.agents/skills/pm-framework-evolve/references/architecture.md +51 -0
- package/skeleton/.agents/skills/pm-framework-evolve/references/directory-map.md +86 -0
- package/skeleton/.agents/skills/pm-framework-evolve/references/features.md +98 -0
- package/skeleton/.agents/skills/pm-framework-evolve/references/github-info.md +27 -0
- package/skeleton/.agents/skills/pm-framework-evolve/references/installation.md +62 -0
- package/skeleton/.agents/skills/pm-framework-evolve/resources/changelog-entry-template.md +43 -0
- package/skeleton/.agents/skills/pm-task-review/SKILL.md +52 -9
- package/skeleton/.docs/README.md +1 -1
- package/skeleton/.agents/skills/common-framework-evolve/.gitkeep +0 -0
- package/skeleton/.agents/skills/common-framework-evolve/SKILL.md +0 -105
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ easyAI 是一个为 [Antigravity IDE](https://antigravity.google/) 打造的 **A
|
|
|
28
28
|
| 🧠 **记忆系统** | journal 日志 + Artifacts 沉淀,跨会话不丢失上下文 |
|
|
29
29
|
| 🛡️ **反幻觉** | 第三方 API 必须查文档,禁止凭记忆编码 |
|
|
30
30
|
| ✅ **TDD 铁律** | 所有新功能必须先写测试,Worker 无法跳过 |
|
|
31
|
-
| 🔧 **MCP 集成** |
|
|
31
|
+
| 🔧 **MCP 集成** | 21 个工具 + 6 个数据源,通过 MCP 协议与 IDE 深度集成 |
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
@@ -124,7 +124,7 @@ npx @geeseeker/easyai-dev serve # 启动 MCP Server
|
|
|
124
124
|
|
|
125
125
|
## 📄 许可证
|
|
126
126
|
|
|
127
|
-
[MIT](LICENSE)
|
|
127
|
+
[MIT](LICENSE) | [更新日志](CHANGELOG.md)
|
|
128
128
|
|
|
129
129
|
---
|
|
130
130
|
|
package/README_AI.md
CHANGED
|
@@ -30,38 +30,61 @@ easyAI 的 MCP Server 已打包在 npm 包中,无需本地编译。
|
|
|
30
30
|
|
|
31
31
|
### 步骤
|
|
32
32
|
|
|
33
|
-
1.
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
{
|
|
37
|
-
"easyai-mcp-server": {
|
|
38
|
-
"command": "npx",
|
|
39
|
-
"args": ["-y", "@geeseeker/easyai-dev", "serve"]
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
```
|
|
33
|
+
1. **定位 MCP 配置文件**:
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
Antigravity IDE 的 MCP 配置文件路径为:
|
|
45
36
|
|
|
46
|
-
|
|
37
|
+
```
|
|
38
|
+
~/.gemini/antigravity/mcp_config.json
|
|
39
|
+
```
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
请将以下 MCP 配置添加到 Antigravity IDE 的 MCP 设置中:
|
|
41
|
+
> 如果 AI 无法确认该路径是否正确(例如 IDE 版本更新导致路径变化),应先访问 Antigravity 官方文档确认:https://antigravity.google/docs/mcp
|
|
50
42
|
|
|
51
|
-
|
|
52
|
-
"easyai-mcp-server": {
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": ["-y", "@geeseeker/easyai-dev", "serve"]
|
|
55
|
-
}
|
|
56
|
-
}
|
|
43
|
+
2. **读取现有配置**:
|
|
57
44
|
|
|
58
|
-
|
|
59
|
-
|
|
45
|
+
读取 `~/.gemini/antigravity/mcp_config.json` 文件。如果不存在,创建一个空的配置骨架:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. **注入 easyAI MCP Server 配置**:
|
|
54
|
+
|
|
55
|
+
向用户展示将要添加的配置内容,**请求用户确认**后再写入:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
我将在 Antigravity MCP 配置文件中添加 easyAI MCP Server:
|
|
59
|
+
|
|
60
|
+
配置文件:~/.gemini/antigravity/mcp_config.json
|
|
61
|
+
|
|
62
|
+
新增条目:
|
|
63
|
+
"easyai-mcp-server": {
|
|
64
|
+
"command": "npx",
|
|
65
|
+
"args": ["-y", "@geeseeker/easyai-dev", "serve"]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
是否确认添加?
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
4. **用户确认后,写入配置**:
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
将 `easyai-mcp-server` 条目添加到 `mcpServers` 对象中(保留已有的其他 MCP Server 配置不变)。
|
|
62
74
|
|
|
63
|
-
|
|
64
|
-
|
|
75
|
+
5. **请求用户重启 IDE**:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
✅ MCP 配置已写入。
|
|
79
|
+
|
|
80
|
+
请重启 Antigravity IDE 以使配置生效。
|
|
81
|
+
重启完成后,请告诉我已重启。
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
> 这是一个**必须的断点**,MCP 配置修改后需要重启 IDE 才能生效。
|
|
85
|
+
|
|
86
|
+
6. **验证 MCP 连接**:用户确认重启后,尝试调用任意 easyai MCP 工具(如 `project_status`)验证连接。
|
|
87
|
+
- 如果调用失败,检查配置文件内容是否正确,协助用户排查。
|
|
65
88
|
- 如果没有 easyai MCP 工具可用,说明配置尚未生效,需要再次检查配置和重启。
|
|
66
89
|
|
|
67
90
|
---
|
|
@@ -75,6 +98,7 @@ npx @geeseeker/easyai-dev init .
|
|
|
75
98
|
```
|
|
76
99
|
|
|
77
100
|
此命令会:
|
|
101
|
+
|
|
78
102
|
- 复制 `.agents/`(规则 + 工作流 + Skills)
|
|
79
103
|
- 复制 `.trellis/`(配置 + 规范骨架)
|
|
80
104
|
- 创建 `.docs/`(空文档子文件夹)
|
|
@@ -127,6 +151,17 @@ npx @geeseeker/easyai-dev serve
|
|
|
127
151
|
# 正常情况下会输出 "easyAI MCP Server v0.1.0 started" 到 stderr
|
|
128
152
|
```
|
|
129
153
|
|
|
154
|
+
### MCP 配置文件路径不确定
|
|
155
|
+
|
|
156
|
+
如果默认路径 `~/.gemini/antigravity/mcp_config.json` 不正确,可尝试:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 搜索可能的配置文件
|
|
160
|
+
find ~/.gemini -name "mcp_config*" -o -name "*mcp*.json" 2>/dev/null
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
如仍无法找到,访问 Antigravity 官方文档获取最新路径信息:https://antigravity.google/docs/mcp
|
|
164
|
+
|
|
130
165
|
### 框架完整性检查失败
|
|
131
166
|
|
|
132
167
|
```bash
|
package/lib/init.js
CHANGED
|
@@ -27,7 +27,7 @@ const NC = "\x1b[0m";
|
|
|
27
27
|
const SKELETON_DIR = path.join(__dirname, "..", "skeleton");
|
|
28
28
|
|
|
29
29
|
// 框架版本
|
|
30
|
-
const FRAMEWORK_VERSION = "3.0.
|
|
30
|
+
const FRAMEWORK_VERSION = "3.0.5";
|
|
31
31
|
|
|
32
32
|
// 需要检查的必需目录
|
|
33
33
|
const REQUIRED_DIRS = [
|
|
@@ -57,10 +57,7 @@ const REQUIRED_FILES = [
|
|
|
57
57
|
];
|
|
58
58
|
|
|
59
59
|
// 初始化时不应覆盖的文件(已有项目集成时)
|
|
60
|
-
const NO_OVERWRITE_FILES = [
|
|
61
|
-
"README.md",
|
|
62
|
-
".gitignore",
|
|
63
|
-
];
|
|
60
|
+
const NO_OVERWRITE_FILES = ["README.md", ".gitignore"];
|
|
64
61
|
|
|
65
62
|
/**
|
|
66
63
|
* 递归复制目录
|
|
@@ -68,11 +65,7 @@ const NO_OVERWRITE_FILES = [
|
|
|
68
65
|
* @param dest - 目标目录
|
|
69
66
|
* @param options - 选项
|
|
70
67
|
*/
|
|
71
|
-
function copyDirSync(
|
|
72
|
-
src,
|
|
73
|
-
dest,
|
|
74
|
-
options = { noOverwrite: false, log: true },
|
|
75
|
-
) {
|
|
68
|
+
function copyDirSync(src, dest, options = { noOverwrite: false, log: true }) {
|
|
76
69
|
fs.mkdirSync(dest, { recursive: true });
|
|
77
70
|
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
78
71
|
|
|
@@ -85,8 +78,10 @@ function copyDirSync(
|
|
|
85
78
|
} else {
|
|
86
79
|
if (options.noOverwrite && fs.existsSync(destPath)) {
|
|
87
80
|
if (options.log) {
|
|
88
|
-
console.log(
|
|
89
|
-
|
|
81
|
+
console.log(
|
|
82
|
+
` ${YELLOW}⊘${NC} ${path.relative(dest, destPath)}` +
|
|
83
|
+
` — 已存在,跳过`,
|
|
84
|
+
);
|
|
90
85
|
}
|
|
91
86
|
continue;
|
|
92
87
|
}
|
|
@@ -127,8 +122,7 @@ function mergeGitignore(targetDir) {
|
|
|
127
122
|
const newLines = skeletonLines.filter((l) => !existingLines.includes(l));
|
|
128
123
|
|
|
129
124
|
if (newLines.length > 0) {
|
|
130
|
-
const appendContent =
|
|
131
|
-
"\n\n# easyAI 框架\n" + newLines.join("\n") + "\n";
|
|
125
|
+
const appendContent = "\n\n# easyAI 框架\n" + newLines.join("\n") + "\n";
|
|
132
126
|
fs.appendFileSync(targetGitignore, appendContent);
|
|
133
127
|
console.log(
|
|
134
128
|
` ${GREEN}✓${NC} .gitignore — 已追加 ${newLines.length} 条规则`,
|
|
@@ -156,9 +150,7 @@ export async function doInit(targetDir) {
|
|
|
156
150
|
console.log(
|
|
157
151
|
`${YELLOW}⚠ 项目已初始化过(.agents/ 和 .trellis/ 已存在)${NC}`,
|
|
158
152
|
);
|
|
159
|
-
console.log(
|
|
160
|
-
`${YELLOW} 如需更新框架,请使用: easyai-dev update${NC}`,
|
|
161
|
-
);
|
|
153
|
+
console.log(`${YELLOW} 如需更新框架,请使用: easyai-dev update${NC}`);
|
|
162
154
|
console.log(
|
|
163
155
|
`${YELLOW} 如需重新初始化,请先手动删除 .agents/ 和 .trellis/${NC}`,
|
|
164
156
|
);
|
|
@@ -283,9 +275,7 @@ export async function doCheck(targetDir) {
|
|
|
283
275
|
if (fs.existsSync(versionFile)) {
|
|
284
276
|
const installedVersion = fs.readFileSync(versionFile, "utf-8").trim();
|
|
285
277
|
if (installedVersion === FRAMEWORK_VERSION) {
|
|
286
|
-
console.log(
|
|
287
|
-
` ${GREEN}✓${NC} 框架版本: v${installedVersion} (最新)`,
|
|
288
|
-
);
|
|
278
|
+
console.log(` ${GREEN}✓${NC} 框架版本: v${installedVersion} (最新)`);
|
|
289
279
|
} else {
|
|
290
280
|
console.log(
|
|
291
281
|
` ${YELLOW}⚠${NC} 框架版本: v${installedVersion}` +
|
|
@@ -307,10 +297,7 @@ export async function doCheck(targetDir) {
|
|
|
307
297
|
});
|
|
308
298
|
console.log(` ${GREEN}✓${NC} Git 仓库已初始化`);
|
|
309
299
|
} catch {
|
|
310
|
-
console.log(
|
|
311
|
-
` ${YELLOW}⚠${NC} 非 Git 仓库` +
|
|
312
|
-
` — worktree 等功能将不可用`,
|
|
313
|
-
);
|
|
300
|
+
console.log(` ${YELLOW}⚠${NC} 非 Git 仓库` + ` — worktree 等功能将不可用`);
|
|
314
301
|
warnings++;
|
|
315
302
|
}
|
|
316
303
|
|
|
@@ -318,21 +305,12 @@ export async function doCheck(targetDir) {
|
|
|
318
305
|
console.log("");
|
|
319
306
|
const total = REQUIRED_DIRS.length + REQUIRED_FILES.length + 1;
|
|
320
307
|
if (missing === 0 && warnings === 0) {
|
|
321
|
-
console.log(
|
|
322
|
-
`${GREEN}✅ 框架完整,共 ${total} 项全部通过${NC}`,
|
|
323
|
-
);
|
|
308
|
+
console.log(`${GREEN}✅ 框架完整,共 ${total} 项全部通过${NC}`);
|
|
324
309
|
} else if (missing === 0) {
|
|
325
|
-
console.log(
|
|
326
|
-
`${YELLOW}⚠ 框架基本完整,有 ${warnings} 项警告${NC}`,
|
|
327
|
-
);
|
|
310
|
+
console.log(`${YELLOW}⚠ 框架基本完整,有 ${warnings} 项警告${NC}`);
|
|
328
311
|
} else {
|
|
329
|
-
console.log(
|
|
330
|
-
|
|
331
|
-
`${warnings} 项警告${NC}`,
|
|
332
|
-
);
|
|
333
|
-
console.log(
|
|
334
|
-
`${RED} 建议运行: npx @geeseeker/easyai-dev init .${NC}`,
|
|
335
|
-
);
|
|
312
|
+
console.log(`${RED}⚠ 发现 ${missing} 项缺失,` + `${warnings} 项警告${NC}`);
|
|
313
|
+
console.log(`${RED} 建议运行: npx @geeseeker/easyai-dev init .${NC}`);
|
|
336
314
|
}
|
|
337
315
|
}
|
|
338
316
|
|
|
@@ -344,9 +322,7 @@ export async function doCheck(targetDir) {
|
|
|
344
322
|
export async function doUpdate(targetDir) {
|
|
345
323
|
// 检查是否已初始化
|
|
346
324
|
if (!fs.existsSync(path.join(targetDir, ".agents"))) {
|
|
347
|
-
console.error(
|
|
348
|
-
`${RED}✗ 项目未初始化,请先运行: easyai-dev init${NC}`,
|
|
349
|
-
);
|
|
325
|
+
console.error(`${RED}✗ 项目未初始化,请先运行: easyai-dev init${NC}`);
|
|
350
326
|
process.exit(1);
|
|
351
327
|
}
|
|
352
328
|
|
|
@@ -358,9 +334,7 @@ export async function doUpdate(targetDir) {
|
|
|
358
334
|
}
|
|
359
335
|
|
|
360
336
|
if (installedVersion === FRAMEWORK_VERSION) {
|
|
361
|
-
console.log(
|
|
362
|
-
`${GREEN}✅ 框架已是最新版本 (v${FRAMEWORK_VERSION})${NC}`,
|
|
363
|
-
);
|
|
337
|
+
console.log(`${GREEN}✅ 框架已是最新版本 (v${FRAMEWORK_VERSION})${NC}`);
|
|
364
338
|
return;
|
|
365
339
|
}
|
|
366
340
|
|
|
@@ -377,10 +351,7 @@ export async function doUpdate(targetDir) {
|
|
|
377
351
|
const agentsDest = path.join(targetDir, ".agents");
|
|
378
352
|
if (fs.existsSync(agentsSrc)) {
|
|
379
353
|
// 备份当前 .agents/
|
|
380
|
-
const backupDir = path.join(
|
|
381
|
-
targetDir,
|
|
382
|
-
`.agents.bak.${Date.now()}`,
|
|
383
|
-
);
|
|
354
|
+
const backupDir = path.join(targetDir, `.agents.bak.${Date.now()}`);
|
|
384
355
|
fs.renameSync(agentsDest, backupDir);
|
|
385
356
|
copyDirSync(agentsSrc, agentsDest, { noOverwrite: false, log: false });
|
|
386
357
|
console.log(
|
|
@@ -401,9 +372,7 @@ export async function doUpdate(targetDir) {
|
|
|
401
372
|
fs.renameSync(specDest, specBackup);
|
|
402
373
|
}
|
|
403
374
|
copyDirSync(specSrc, specDest, { noOverwrite: false, log: false });
|
|
404
|
-
console.log(
|
|
405
|
-
` ${GREEN}✓${NC} .trellis/spec/ — 已更新`,
|
|
406
|
-
);
|
|
375
|
+
console.log(` ${GREEN}✓${NC} .trellis/spec/ — 已更新`);
|
|
407
376
|
}
|
|
408
377
|
|
|
409
378
|
// 更新版本清单
|
|
@@ -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;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"}
|
|
@@ -15,7 +15,7 @@ const __dirname = path.dirname(__filename);
|
|
|
15
15
|
// skeleton 在 npm 包中的位置:lib/server/tools/ → 向上 3 级 → skeleton/
|
|
16
16
|
const SKELETON_DIR = path.resolve(__dirname, "..", "..", "..", "skeleton");
|
|
17
17
|
// 框架版本(与 package.json 保持一致)
|
|
18
|
-
const FRAMEWORK_VERSION = "3.0.
|
|
18
|
+
const FRAMEWORK_VERSION = "3.0.5";
|
|
19
19
|
// 必需目录
|
|
20
20
|
const REQUIRED_DIRS = [
|
|
21
21
|
".agents/rules",
|
|
@@ -144,8 +144,8 @@ export function registerFrameworkInit(server) {
|
|
|
144
144
|
}
|
|
145
145
|
// 检测是否是已有项目
|
|
146
146
|
fs.mkdirSync(resolvedDir, { recursive: true });
|
|
147
|
-
const isExisting = fs.readdirSync(resolvedDir).filter((f) => !f.startsWith("."))
|
|
148
|
-
|
|
147
|
+
const isExisting = fs.readdirSync(resolvedDir).filter((f) => !f.startsWith(".")).length >
|
|
148
|
+
0;
|
|
149
149
|
const logs = [];
|
|
150
150
|
logs.push(isExisting ? "模式: 集成到已有项目" : "模式: 新项目初始化");
|
|
151
151
|
// 复制 .agents/
|
|
@@ -228,7 +228,11 @@ export function registerFrameworkCheck(server) {
|
|
|
228
228
|
const results = {
|
|
229
229
|
dirs: [],
|
|
230
230
|
files: [],
|
|
231
|
-
version: {
|
|
231
|
+
version: {
|
|
232
|
+
installed: null,
|
|
233
|
+
latest: FRAMEWORK_VERSION,
|
|
234
|
+
upToDate: false,
|
|
235
|
+
},
|
|
232
236
|
git: { initialized: false },
|
|
233
237
|
summary: { missing: 0, warnings: 0, total: 0 },
|
|
234
238
|
};
|
|
@@ -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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"}
|
|
@@ -29,5 +29,5 @@ declare function getRecentCommits(count?: number): GitCommit[];
|
|
|
29
29
|
*/
|
|
30
30
|
declare function isGitRepo(): boolean;
|
|
31
31
|
export type { GitCommit };
|
|
32
|
-
export { getGitBranch, getGitStatus, getRecentCommits, isGitRepo
|
|
32
|
+
export { getGitBranch, getGitStatus, getRecentCommits, isGitRepo };
|
|
33
33
|
//# sourceMappingURL=git-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,iBAAS,YAAY,IAAI,MAAM,CAY9B;AAED;;;GAGG;AACH,iBAAS,YAAY,IAAI,MAAM,CAY9B;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA8BzD;AAED;;;GAGG;AACH,iBAAS,SAAS,IAAI,OAAO,CAY5B;AAID,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { execSync } from
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { getProjectRoot } from "./task-utils.js";
|
|
2
3
|
// ============ 工具函数 ============
|
|
3
4
|
/**
|
|
4
5
|
* 获取当前 Git 分支名
|
|
@@ -6,14 +7,16 @@ import { execSync } from 'node:child_process';
|
|
|
6
7
|
*/
|
|
7
8
|
function getGitBranch() {
|
|
8
9
|
try {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const cwd = getProjectRoot();
|
|
11
|
+
const result = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
12
|
+
cwd,
|
|
13
|
+
encoding: "utf-8",
|
|
14
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
12
15
|
});
|
|
13
16
|
return result.trim();
|
|
14
17
|
}
|
|
15
18
|
catch (error) {
|
|
16
|
-
return
|
|
19
|
+
return "HEAD";
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
@@ -22,14 +25,16 @@ function getGitBranch() {
|
|
|
22
25
|
*/
|
|
23
26
|
function getGitStatus() {
|
|
24
27
|
try {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const cwd = getProjectRoot();
|
|
29
|
+
const result = execSync("git status --short", {
|
|
30
|
+
cwd,
|
|
31
|
+
encoding: "utf-8",
|
|
32
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
28
33
|
});
|
|
29
34
|
return result.trim();
|
|
30
35
|
}
|
|
31
36
|
catch (error) {
|
|
32
|
-
return
|
|
37
|
+
return "";
|
|
33
38
|
}
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
@@ -39,16 +44,18 @@ function getGitStatus() {
|
|
|
39
44
|
*/
|
|
40
45
|
function getRecentCommits(count = 10) {
|
|
41
46
|
try {
|
|
47
|
+
const cwd = getProjectRoot();
|
|
42
48
|
// 使用 git log 格式化输出
|
|
43
|
-
const format =
|
|
49
|
+
const format = "%H|%s|%ci|%an";
|
|
44
50
|
const result = execSync(`git log -n ${count} --format="${format}"`, {
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
cwd,
|
|
52
|
+
encoding: "utf-8",
|
|
53
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
47
54
|
});
|
|
48
55
|
const commits = [];
|
|
49
|
-
const lines = result.trim().split(
|
|
56
|
+
const lines = result.trim().split("\n");
|
|
50
57
|
for (const line of lines) {
|
|
51
|
-
const parts = line.split(
|
|
58
|
+
const parts = line.split("|");
|
|
52
59
|
if (parts.length >= 4) {
|
|
53
60
|
commits.push({
|
|
54
61
|
hash: parts[0],
|
|
@@ -70,9 +77,11 @@ function getRecentCommits(count = 10) {
|
|
|
70
77
|
*/
|
|
71
78
|
function isGitRepo() {
|
|
72
79
|
try {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
const cwd = getProjectRoot();
|
|
81
|
+
execSync("git rev-parse --git-dir", {
|
|
82
|
+
cwd,
|
|
83
|
+
encoding: "utf-8",
|
|
84
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
76
85
|
});
|
|
77
86
|
return true;
|
|
78
87
|
}
|
|
@@ -80,5 +89,5 @@ function isGitRepo() {
|
|
|
80
89
|
return false;
|
|
81
90
|
}
|
|
82
91
|
}
|
|
83
|
-
export { getGitBranch, getGitStatus, getRecentCommits, isGitRepo
|
|
92
|
+
export { getGitBranch, getGitStatus, getRecentCommits, isGitRepo };
|
|
84
93
|
//# sourceMappingURL=git-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAcjD,iCAAiC;AAEjC;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;YACzD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC5C,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,mBAAmB;QACnB,MAAM,MAAM,GAAG,eAAe,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,KAAK,cAAc,MAAM,GAAG,EAAE;YAClE,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,QAAQ,CAAC,yBAAyB,EAAE;YAClC,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAKD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -33,10 +33,18 @@ interface ParsedTask {
|
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* 获取项目根目录
|
|
36
|
-
*
|
|
36
|
+
* 检测优先级:
|
|
37
|
+
* 1. EASYAI_PROJECT_ROOT 环境变量(显式指定)
|
|
38
|
+
* 2. process.cwd() 向上遍历查找 .trellis(IDE 工作目录在项目内时有效)
|
|
39
|
+
* 3. __dirname 向上遍历查找 .trellis(MCP Server 安装在项目 node_modules 内时有效)
|
|
37
40
|
* @returns 项目根目录的绝对路径
|
|
38
41
|
*/
|
|
39
42
|
declare function getProjectRoot(): string;
|
|
43
|
+
/**
|
|
44
|
+
* 重置项目根目录缓存
|
|
45
|
+
* 仅供测试和极端场景使用
|
|
46
|
+
*/
|
|
47
|
+
declare function resetProjectRootCache(): void;
|
|
40
48
|
/**
|
|
41
49
|
* 获取任务目录绝对路径
|
|
42
50
|
* @returns 任务目录的绝对路径
|
|
@@ -100,5 +108,5 @@ declare function listTaskDirs(): string[];
|
|
|
100
108
|
*/
|
|
101
109
|
declare function ensureDir(dirPath: string): void;
|
|
102
110
|
export type { TaskStatus, TaskMetadata, ParsedTask };
|
|
103
|
-
export { TRELLIS_ROOT, TASKS_ROOT, ARCHIVE_ROOT, VALID_TRANSITIONS, getProjectRoot, getTasksDir, getArchiveDir, getTaskDir, generateTaskId, slugify, parseTaskMd, serializeTaskMd, isValidTransition, listTaskDirs, ensureDir, };
|
|
111
|
+
export { TRELLIS_ROOT, TASKS_ROOT, ARCHIVE_ROOT, VALID_TRANSITIONS, getProjectRoot, resetProjectRootCache, getTasksDir, getArchiveDir, getTaskDir, generateTaskId, slugify, parseTaskMd, serializeTaskMd, isValidTransition, listTaskDirs, ensureDir, };
|
|
104
112
|
//# sourceMappingURL=task-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-utils.d.ts","sourceRoot":"","sources":["../../src/utils/task-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task-utils.d.ts","sourceRoot":"","sources":["../../src/utils/task-utils.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,YAAY,aAAa,CAAC;AAChC,QAAA,MAAM,UAAU,mBAAmB,CAAC;AACpC,QAAA,MAAM,YAAY,2BAA2B,CAAC;AAI9C;;GAEG;AACH,KAAK,UAAU,GACX,SAAS,GACT,aAAa,GACb,cAAc,GACd,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,CAAC;AAEf;;;GAGG;AACH,QAAA,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAQvD,CAAC;AAEF;;GAEG;AACH,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAQD;;;;;;;GAOG;AACH,iBAAS,cAAc,IAAI,MAAM,CA0ChC;AAqBD;;;GAGG;AACH,iBAAS,qBAAqB,IAAI,IAAI,CAErC;AAED;;;GAGG;AACH,iBAAS,WAAW,IAAI,MAAM,CAG7B;AAED;;;GAGG;AACH,iBAAS,aAAa,IAAI,MAAM,CAG/B;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO1C;AAED;;;;;;;GAOG;AACH,iBAAS,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BrC;AAED;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiD7C;AAgKD;;;;GAIG;AACH,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA4BhD;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,OAAO,CAGpE;AAED;;;GAGG;AACH,iBAAS,YAAY,IAAI,MAAM,EAAE,CAahC;AAED;;;GAGG;AACH,iBAAS,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIxC;AAID,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,UAAU,EACV,cAAc,EACd,OAAO,EACP,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
3
4
|
// ============ 常量 ============
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = path.dirname(__filename);
|
|
4
7
|
const TRELLIS_ROOT = ".trellis";
|
|
5
8
|
const TASKS_ROOT = ".trellis/tasks";
|
|
6
9
|
const ARCHIVE_ROOT = ".trellis/tasks/archive";
|
|
@@ -22,14 +25,17 @@ let projectRootCache = null;
|
|
|
22
25
|
// ============ 工具函数 ============
|
|
23
26
|
/**
|
|
24
27
|
* 获取项目根目录
|
|
25
|
-
*
|
|
28
|
+
* 检测优先级:
|
|
29
|
+
* 1. EASYAI_PROJECT_ROOT 环境变量(显式指定)
|
|
30
|
+
* 2. process.cwd() 向上遍历查找 .trellis(IDE 工作目录在项目内时有效)
|
|
31
|
+
* 3. __dirname 向上遍历查找 .trellis(MCP Server 安装在项目 node_modules 内时有效)
|
|
26
32
|
* @returns 项目根目录的绝对路径
|
|
27
33
|
*/
|
|
28
34
|
function getProjectRoot() {
|
|
29
35
|
if (projectRootCache) {
|
|
30
36
|
return projectRootCache;
|
|
31
37
|
}
|
|
32
|
-
//
|
|
38
|
+
// 策略 1:优先使用环境变量(支持全局 MCP Server 模式)
|
|
33
39
|
const envRoot = process.env.EASYAI_PROJECT_ROOT;
|
|
34
40
|
if (envRoot) {
|
|
35
41
|
const resolvedRoot = path.resolve(envRoot);
|
|
@@ -40,16 +46,46 @@ function getProjectRoot() {
|
|
|
40
46
|
}
|
|
41
47
|
throw new Error(`EASYAI_PROJECT_ROOT 指向的目录不包含 ${TRELLIS_ROOT}: ${resolvedRoot}`);
|
|
42
48
|
}
|
|
43
|
-
|
|
49
|
+
// 策略 2:从 process.cwd() 向上遍历
|
|
50
|
+
const cwdResult = findTrellisUpward(process.cwd());
|
|
51
|
+
if (cwdResult) {
|
|
52
|
+
projectRootCache = cwdResult;
|
|
53
|
+
return cwdResult;
|
|
54
|
+
}
|
|
55
|
+
// 策略 3:从 __dirname(MCP Server 可执行文件所在目录)向上遍历
|
|
56
|
+
// 适用场景:MCP Server 安装在项目的 node_modules/ 或 packages/ 下
|
|
57
|
+
const dirnameResult = findTrellisUpward(__dirname);
|
|
58
|
+
if (dirnameResult) {
|
|
59
|
+
projectRootCache = dirnameResult;
|
|
60
|
+
return dirnameResult;
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`无法找到项目根目录:未找到 ${TRELLIS_ROOT} 目录。` +
|
|
63
|
+
`已尝试:cwd(${process.cwd()}) 和 __dirname(${__dirname}) 向上遍历。` +
|
|
64
|
+
`请设置环境变量 EASYAI_PROJECT_ROOT 指向项目根目录,` +
|
|
65
|
+
`或确保 MCP Server 从项目目录内启动。`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 从指定目录向上遍历查找包含 .trellis 的目录
|
|
69
|
+
* @param startDir - 起始目录
|
|
70
|
+
* @returns 找到的项目根目录路径,未找到返回 null
|
|
71
|
+
*/
|
|
72
|
+
function findTrellisUpward(startDir) {
|
|
73
|
+
let currentDir = startDir;
|
|
44
74
|
while (currentDir !== path.parse(currentDir).root) {
|
|
45
75
|
const trellisPath = path.join(currentDir, TRELLIS_ROOT);
|
|
46
76
|
if (fs.existsSync(trellisPath) && fs.statSync(trellisPath).isDirectory()) {
|
|
47
|
-
projectRootCache = currentDir;
|
|
48
77
|
return currentDir;
|
|
49
78
|
}
|
|
50
79
|
currentDir = path.dirname(currentDir);
|
|
51
80
|
}
|
|
52
|
-
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 重置项目根目录缓存
|
|
85
|
+
* 仅供测试和极端场景使用
|
|
86
|
+
*/
|
|
87
|
+
function resetProjectRootCache() {
|
|
88
|
+
projectRootCache = null;
|
|
53
89
|
}
|
|
54
90
|
/**
|
|
55
91
|
* 获取任务目录绝对路径
|
|
@@ -392,5 +428,5 @@ function ensureDir(dirPath) {
|
|
|
392
428
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
393
429
|
}
|
|
394
430
|
}
|
|
395
|
-
export { TRELLIS_ROOT, TASKS_ROOT, ARCHIVE_ROOT, VALID_TRANSITIONS, getProjectRoot, getTasksDir, getArchiveDir, getTaskDir, generateTaskId, slugify, parseTaskMd, serializeTaskMd, isValidTransition, listTaskDirs, ensureDir, };
|
|
431
|
+
export { TRELLIS_ROOT, TASKS_ROOT, ARCHIVE_ROOT, VALID_TRANSITIONS, getProjectRoot, resetProjectRootCache, getTasksDir, getArchiveDir, getTaskDir, generateTaskId, slugify, parseTaskMd, serializeTaskMd, isValidTransition, listTaskDirs, ensureDir, };
|
|
396
432
|
//# sourceMappingURL=task-utils.js.map
|