@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.
Files changed (30) hide show
  1. package/README.md +2 -2
  2. package/README_AI.md +60 -25
  3. package/lib/init.js +19 -50
  4. package/lib/server/tools/framework-tools.d.ts.map +1 -1
  5. package/lib/server/tools/framework-tools.js +8 -4
  6. package/lib/server/tools/framework-tools.js.map +1 -1
  7. package/lib/server/utils/git-utils.d.ts +1 -1
  8. package/lib/server/utils/git-utils.d.ts.map +1 -1
  9. package/lib/server/utils/git-utils.js +27 -18
  10. package/lib/server/utils/git-utils.js.map +1 -1
  11. package/lib/server/utils/task-utils.d.ts +10 -2
  12. package/lib/server/utils/task-utils.d.ts.map +1 -1
  13. package/lib/server/utils/task-utils.js +42 -6
  14. package/lib/server/utils/task-utils.js.map +1 -1
  15. package/package.json +1 -1
  16. package/skeleton/.agents/rules/project-identity.md +10 -8
  17. package/skeleton/.agents/skills/common-session-close/SKILL.md +26 -2
  18. package/skeleton/.agents/skills/pm-brainstorm/SKILL.md +2 -0
  19. package/skeleton/.agents/skills/pm-framework-evolve/SKILL.md +165 -0
  20. package/skeleton/.agents/skills/pm-framework-evolve/changelog/index.md +11 -0
  21. package/skeleton/.agents/skills/pm-framework-evolve/references/architecture.md +51 -0
  22. package/skeleton/.agents/skills/pm-framework-evolve/references/directory-map.md +86 -0
  23. package/skeleton/.agents/skills/pm-framework-evolve/references/features.md +98 -0
  24. package/skeleton/.agents/skills/pm-framework-evolve/references/github-info.md +27 -0
  25. package/skeleton/.agents/skills/pm-framework-evolve/references/installation.md +62 -0
  26. package/skeleton/.agents/skills/pm-framework-evolve/resources/changelog-entry-template.md +43 -0
  27. package/skeleton/.agents/skills/pm-task-review/SKILL.md +52 -9
  28. package/skeleton/.docs/README.md +1 -1
  29. package/skeleton/.agents/skills/common-framework-evolve/.gitkeep +0 -0
  30. 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 集成** | 19 个工具 + 5 个数据源,通过 MCP 协议与 IDE 深度集成 |
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. **生成 MCP 配置 JSON**:
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
- 2. **引导用户操作**:
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
- 添加完成后,请重启 Antigravity IDE,然后告诉我已重启。
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
- 3. **等待用户确认重启** 这是一个**必须的断点**,MCP 配置修改后需要重启 IDE 才能生效。
73
+ `easyai-mcp-server` 条目添加到 `mcpServers` 对象中(保留已有的其他 MCP Server 配置不变)。
62
74
 
63
- 4. **验证 MCP 连接**:用户确认重启后,尝试调用任意 easyai MCP 工具(如 `project_status`)验证连接。
64
- - 如果调用失败,协助用户排查 MCP 配置。
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.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(` ${YELLOW}⊘${NC} ${path.relative(dest, destPath)}`
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
- `${RED} 发现 ${missing} 项缺失,` +
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;AAsHpE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyI7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkG9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+H/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;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.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
- .length > 0;
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: { installed: null, latest: FRAMEWORK_VERSION, upToDate: false },
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":"AAIA;;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,CAU9B;AAED;;;GAGG;AACH,iBAAS,YAAY,IAAI,MAAM,CAU9B;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA4BzD;AAED;;;GAGG;AACH,iBAAS,SAAS,IAAI,OAAO,CAU5B;AAID,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,CAAC"}
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 'node:child_process';
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 result = execSync('git rev-parse --abbrev-ref HEAD', {
10
- encoding: 'utf-8',
11
- stdio: ['pipe', 'pipe', 'pipe'],
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 'HEAD';
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 result = execSync('git status --short', {
26
- encoding: 'utf-8',
27
- stdio: ['pipe', 'pipe', 'pipe'],
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 = '%H|%s|%ci|%an';
49
+ const format = "%H|%s|%ci|%an";
44
50
  const result = execSync(`git log -n ${count} --format="${format}"`, {
45
- encoding: 'utf-8',
46
- stdio: ['pipe', 'pipe', 'pipe'],
51
+ cwd,
52
+ encoding: "utf-8",
53
+ stdio: ["pipe", "pipe", "pipe"],
47
54
  });
48
55
  const commits = [];
49
- const lines = result.trim().split('\n');
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
- execSync('git rev-parse --git-dir', {
74
- encoding: 'utf-8',
75
- stdio: ['pipe', 'pipe', 'pipe'],
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;AAc9C,iCAAiC;AAEjC;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;YACzD,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,MAAM,GAAG,QAAQ,CAAC,oBAAoB,EAAE;YAC5C,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,mBAAmB;QACnB,MAAM,MAAM,GAAG,eAAe,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,KAAK,cAAc,MAAM,GAAG,EAAE;YAClE,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,QAAQ,CAAC,yBAAyB,EAAE;YAClC,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,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,SAAS,GACV,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
- * 优先级:EASYAI_PROJECT_ROOT 环境变量 → 向上查找 .trellis 目录
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":"AAKA,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;;;;GAIG;AACH,iBAAS,cAAc,IAAI,MAAM,CAiChC;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,WAAW,EACX,aAAa,EACb,UAAU,EACV,cAAc,EACd,OAAO,EACP,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,CAAC"}
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
- * 优先级:EASYAI_PROJECT_ROOT 环境变量 → 向上查找 .trellis 目录
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
- // 优先使用环境变量(支持全局 MCP Server 模式)
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
- let currentDir = process.cwd();
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
- throw new Error(`无法找到项目根目录:未找到 ${TRELLIS_ROOT} 目录`);
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