@geeseeker/easyai-dev 3.0.0-alpha.1 → 3.0.1

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 (169) hide show
  1. package/README.md +90 -88
  2. package/README_AI.md +143 -0
  3. package/bin/easyai-dev.js +127 -1
  4. package/lib/init.js +425 -0
  5. package/lib/server/index.d.ts +14 -0
  6. package/lib/server/index.d.ts.map +1 -0
  7. package/lib/server/index.js +126 -0
  8. package/lib/server/index.js.map +1 -0
  9. package/lib/server/resources/journal-resource.d.ts +8 -0
  10. package/lib/server/resources/journal-resource.d.ts.map +1 -0
  11. package/lib/server/resources/journal-resource.js +46 -0
  12. package/lib/server/resources/journal-resource.js.map +1 -0
  13. package/lib/server/resources/spec-resource.d.ts +11 -0
  14. package/lib/server/resources/spec-resource.d.ts.map +1 -0
  15. package/lib/server/resources/spec-resource.js +126 -0
  16. package/lib/server/resources/spec-resource.js.map +1 -0
  17. package/lib/server/resources/status-resource.d.ts +8 -0
  18. package/lib/server/resources/status-resource.d.ts.map +1 -0
  19. package/lib/server/resources/status-resource.js +36 -0
  20. package/lib/server/resources/status-resource.js.map +1 -0
  21. package/lib/server/resources/subtask-context-resource.d.ts +8 -0
  22. package/lib/server/resources/subtask-context-resource.d.ts.map +1 -0
  23. package/lib/server/resources/subtask-context-resource.js +93 -0
  24. package/lib/server/resources/subtask-context-resource.js.map +1 -0
  25. package/lib/server/resources/task-context-resource.d.ts +8 -0
  26. package/lib/server/resources/task-context-resource.d.ts.map +1 -0
  27. package/lib/server/resources/task-context-resource.js +76 -0
  28. package/lib/server/resources/task-context-resource.js.map +1 -0
  29. package/lib/server/tools/conflict-check.d.ts +7 -0
  30. package/lib/server/tools/conflict-check.d.ts.map +1 -0
  31. package/lib/server/tools/conflict-check.js +242 -0
  32. package/lib/server/tools/conflict-check.js.map +1 -0
  33. package/lib/server/tools/context-budget.d.ts +7 -0
  34. package/lib/server/tools/context-budget.d.ts.map +1 -0
  35. package/lib/server/tools/context-budget.js +178 -0
  36. package/lib/server/tools/context-budget.js.map +1 -0
  37. package/lib/server/tools/context-generate.d.ts +7 -0
  38. package/lib/server/tools/context-generate.d.ts.map +1 -0
  39. package/lib/server/tools/context-generate.js +208 -0
  40. package/lib/server/tools/context-generate.js.map +1 -0
  41. package/lib/server/tools/framework-tools.d.ts +20 -0
  42. package/lib/server/tools/framework-tools.d.ts.map +1 -0
  43. package/lib/server/tools/framework-tools.js +412 -0
  44. package/lib/server/tools/framework-tools.js.map +1 -0
  45. package/lib/server/tools/journal-append.d.ts +7 -0
  46. package/lib/server/tools/journal-append.d.ts.map +1 -0
  47. package/lib/server/tools/journal-append.js +55 -0
  48. package/lib/server/tools/journal-append.js.map +1 -0
  49. package/lib/server/tools/journal-search.d.ts +7 -0
  50. package/lib/server/tools/journal-search.d.ts.map +1 -0
  51. package/lib/server/tools/journal-search.js +63 -0
  52. package/lib/server/tools/journal-search.js.map +1 -0
  53. package/lib/server/tools/plan-validate.d.ts +7 -0
  54. package/lib/server/tools/plan-validate.d.ts.map +1 -0
  55. package/lib/server/tools/plan-validate.js +146 -0
  56. package/lib/server/tools/plan-validate.js.map +1 -0
  57. package/lib/server/tools/spec-validate.d.ts +7 -0
  58. package/lib/server/tools/spec-validate.d.ts.map +1 -0
  59. package/lib/server/tools/spec-validate.js +170 -0
  60. package/lib/server/tools/spec-validate.js.map +1 -0
  61. package/lib/server/tools/subtask-tools.d.ts +12 -0
  62. package/lib/server/tools/subtask-tools.d.ts.map +1 -0
  63. package/lib/server/tools/subtask-tools.js +383 -0
  64. package/lib/server/tools/subtask-tools.js.map +1 -0
  65. package/lib/server/tools/task-append-log.d.ts +7 -0
  66. package/lib/server/tools/task-append-log.d.ts.map +1 -0
  67. package/lib/server/tools/task-append-log.js +108 -0
  68. package/lib/server/tools/task-append-log.js.map +1 -0
  69. package/lib/server/tools/task-cancel.d.ts +7 -0
  70. package/lib/server/tools/task-cancel.d.ts.map +1 -0
  71. package/lib/server/tools/task-cancel.js +104 -0
  72. package/lib/server/tools/task-cancel.js.map +1 -0
  73. package/lib/server/tools/task-create.d.ts +7 -0
  74. package/lib/server/tools/task-create.d.ts.map +1 -0
  75. package/lib/server/tools/task-create.js +98 -0
  76. package/lib/server/tools/task-create.js.map +1 -0
  77. package/lib/server/tools/task-get.d.ts +7 -0
  78. package/lib/server/tools/task-get.d.ts.map +1 -0
  79. package/lib/server/tools/task-get.js +152 -0
  80. package/lib/server/tools/task-get.js.map +1 -0
  81. package/lib/server/tools/task-list.d.ts +7 -0
  82. package/lib/server/tools/task-list.d.ts.map +1 -0
  83. package/lib/server/tools/task-list.js +66 -0
  84. package/lib/server/tools/task-list.js.map +1 -0
  85. package/lib/server/tools/task-transition.d.ts +7 -0
  86. package/lib/server/tools/task-transition.d.ts.map +1 -0
  87. package/lib/server/tools/task-transition.js +259 -0
  88. package/lib/server/tools/task-transition.js.map +1 -0
  89. package/lib/server/tools/worktree-tools.d.ts +17 -0
  90. package/lib/server/tools/worktree-tools.d.ts.map +1 -0
  91. package/lib/server/tools/worktree-tools.js +336 -0
  92. package/lib/server/tools/worktree-tools.js.map +1 -0
  93. package/lib/server/utils/capability-gate.d.ts +50 -0
  94. package/lib/server/utils/capability-gate.d.ts.map +1 -0
  95. package/lib/server/utils/capability-gate.js +146 -0
  96. package/lib/server/utils/capability-gate.js.map +1 -0
  97. package/lib/server/utils/git-utils.d.ts +33 -0
  98. package/lib/server/utils/git-utils.d.ts.map +1 -0
  99. package/lib/server/utils/git-utils.js +84 -0
  100. package/lib/server/utils/git-utils.js.map +1 -0
  101. package/lib/server/utils/hash-utils.d.ts +78 -0
  102. package/lib/server/utils/hash-utils.d.ts.map +1 -0
  103. package/lib/server/utils/hash-utils.js +153 -0
  104. package/lib/server/utils/hash-utils.js.map +1 -0
  105. package/lib/server/utils/journal-utils.d.ts +69 -0
  106. package/lib/server/utils/journal-utils.d.ts.map +1 -0
  107. package/lib/server/utils/journal-utils.js +387 -0
  108. package/lib/server/utils/journal-utils.js.map +1 -0
  109. package/lib/server/utils/status-utils.d.ts +58 -0
  110. package/lib/server/utils/status-utils.d.ts.map +1 -0
  111. package/lib/server/utils/status-utils.js +70 -0
  112. package/lib/server/utils/status-utils.js.map +1 -0
  113. package/lib/server/utils/task-utils.d.ts +104 -0
  114. package/lib/server/utils/task-utils.d.ts.map +1 -0
  115. package/lib/server/utils/task-utils.js +396 -0
  116. package/lib/server/utils/task-utils.js.map +1 -0
  117. package/lib/server/utils/uri-utils.d.ts +9 -0
  118. package/lib/server/utils/uri-utils.d.ts.map +1 -0
  119. package/lib/server/utils/uri-utils.js +21 -0
  120. package/lib/server/utils/uri-utils.js.map +1 -0
  121. package/package.json +30 -21
  122. package/skeleton/.agents/rules/anti-hallucination.md +42 -0
  123. package/skeleton/.agents/rules/coding-standards.md +41 -0
  124. package/skeleton/.agents/rules/project-identity.md +71 -0
  125. package/skeleton/.agents/skills/common-framework-evolve/.gitkeep +0 -0
  126. package/skeleton/.agents/skills/common-framework-evolve/SKILL.md +105 -0
  127. package/skeleton/.agents/skills/common-session-close/.gitkeep +0 -0
  128. package/skeleton/.agents/skills/common-session-close/SKILL.md +83 -0
  129. package/skeleton/.agents/skills/common-spec-update/.gitkeep +0 -0
  130. package/skeleton/.agents/skills/common-spec-update/SKILL.md +87 -0
  131. package/skeleton/.agents/skills/pm-brainstorm/.gitkeep +0 -0
  132. package/skeleton/.agents/skills/pm-brainstorm/SKILL.md +114 -0
  133. package/skeleton/.agents/skills/pm-session-start/.gitkeep +0 -0
  134. package/skeleton/.agents/skills/pm-session-start/SKILL.md +73 -0
  135. package/skeleton/.agents/skills/pm-task-planning/SKILL.md +200 -0
  136. package/skeleton/.agents/skills/pm-task-review/.gitkeep +0 -0
  137. package/skeleton/.agents/skills/pm-task-review/SKILL.md +144 -0
  138. package/skeleton/.agents/skills/worker-check/.gitkeep +0 -0
  139. package/skeleton/.agents/skills/worker-check/SKILL.md +194 -0
  140. package/skeleton/.agents/skills/worker-debug/.gitkeep +0 -0
  141. package/skeleton/.agents/skills/worker-debug/SKILL.md +241 -0
  142. package/skeleton/.agents/skills/worker-implement/.gitkeep +0 -0
  143. package/skeleton/.agents/skills/worker-implement/SKILL.md +192 -0
  144. package/skeleton/.agents/workflows/pm.md +81 -0
  145. package/skeleton/.agents/workflows/worker.md +100 -0
  146. package/skeleton/.docs/README.md +25 -0
  147. package/skeleton/.docs/archive/.gitkeep +0 -0
  148. package/skeleton/.docs/design/.gitkeep +0 -0
  149. package/skeleton/.docs/guides/.gitkeep +0 -0
  150. package/skeleton/.docs/notes/.gitkeep +0 -0
  151. package/skeleton/.docs/requirements/.gitkeep +0 -0
  152. package/skeleton/.trellis/config/config.yaml +48 -0
  153. package/skeleton/.trellis/spec/backend/.gitkeep +0 -0
  154. package/skeleton/.trellis/spec/frontend/.gitkeep +0 -0
  155. package/skeleton/.trellis/spec/guides/.gitkeep +0 -0
  156. package/skeleton/.trellis/spec/guides/external-cli-guide.md +253 -0
  157. package/skeleton/.trellis/spec/guides/task-workflow.md +34 -0
  158. package/skeleton/.trellis/spec/guides/testing.md +32 -0
  159. package/skeleton/.trellis/spec/spec-schema.json +64 -0
  160. package/skeleton/.trellis/tasks/.gitkeep +0 -0
  161. package/skeleton/.trellis/workspace/.gitkeep +0 -0
  162. package/skeleton/README.md +25 -0
  163. package/LICENSE +0 -21
  164. package/src/cli/index.js +0 -40
  165. package/src/commands/init.js +0 -37
  166. package/src/commands/update.js +0 -33
  167. package/templates/README.md +0 -22
  168. package/templates/agents/README.md +0 -4
  169. package/templates/trellis/README.md +0 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-check.js","sourceRoot":"","sources":["../../src/tools/conflict-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * 注册 context_budget 工具
4
+ * Token 估算 + 60%/80% 自动降级
5
+ */
6
+ export declare function register(server: McpServer): void;
7
+ //# sourceMappingURL=context-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.d.ts","sourceRoot":"","sources":["../../src/tools/context-budget.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6BpE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwIhD"}
@@ -0,0 +1,178 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { z } from "zod";
4
+ import { getTaskDir } from "../utils/task-utils.js";
5
+ import { parseContextJsonl, resolveUriToPath, checkStale, } from "../utils/hash-utils.js";
6
+ // ============ 常量 ============
7
+ /**
8
+ * 上下文预算阈值(Token 数)
9
+ * 来源:.trellis/config/context-budget.md + 架构 §6.3
10
+ */
11
+ const BUDGET_THRESHOLDS = {
12
+ WARNING: 0.6, // 60% — 自动降级 recommended → deferred
13
+ CRITICAL: 0.8, // 80% — 建议新开会话
14
+ };
15
+ const PHASE_BUDGET = {
16
+ plan: 40000,
17
+ implement: 60000,
18
+ check: 30000,
19
+ debug: 50000,
20
+ };
21
+ const DEFAULT_BUDGET = 60000;
22
+ /**
23
+ * 注册 context_budget 工具
24
+ * Token 估算 + 60%/80% 自动降级
25
+ */
26
+ export function register(server) {
27
+ server.tool("context_budget", "估算当前任务的上下文 Token 消耗。超过 60% 时建议降级 recommended 上下文,超过 80% 时建议新开会话。可选传入 task_id 分析特定任务。", {
28
+ task_id: z.string().optional().describe("可选任务 ID,分析特定任务的上下文预算"),
29
+ phase: z.string().optional().describe("阶段标识,决定预算上限"),
30
+ }, async ({ task_id, phase }) => {
31
+ try {
32
+ const budget = PHASE_BUDGET[phase || "implement"] || DEFAULT_BUDGET;
33
+ let totalTokens = 0;
34
+ // 按 priority 分层统计
35
+ const breakdown = {
36
+ required: { count: 0, tokens: 0 },
37
+ recommended: { count: 0, tokens: 0 },
38
+ deferred: { count: 0, tokens: 0 },
39
+ };
40
+ // 如果指定了 task_id,读取对应的 context.jsonl
41
+ if (task_id) {
42
+ const taskDir = getTaskDir(task_id);
43
+ const contextPath = path.join(taskDir, "context.jsonl");
44
+ if (fs.existsSync(contextPath)) {
45
+ const entries = parseContextJsonl(contextPath);
46
+ for (const entry of entries) {
47
+ const filePath = resolveUriToPath(entry.uri);
48
+ let tokens = entry.token_estimate || 0;
49
+ if (filePath && fs.existsSync(filePath)) {
50
+ const stat = fs.statSync(filePath);
51
+ tokens = Math.round(stat.size / 3);
52
+ }
53
+ const priority = entry.priority || "deferred";
54
+ if (breakdown[priority]) {
55
+ breakdown[priority].count += 1;
56
+ breakdown[priority].tokens += tokens;
57
+ }
58
+ // deferred 仅保留 URI 引用,不计入实际预算消耗
59
+ if (priority !== "deferred") {
60
+ totalTokens += tokens;
61
+ }
62
+ }
63
+ // 检查快照 stale 状态(优先本阶段快照,回退到 implement 快照)
64
+ const targetPhase = phase || "implement";
65
+ let snapshotPath = path.join(taskDir, `context-snapshot-${targetPhase}.jsonl`);
66
+ if (!fs.existsSync(snapshotPath) && targetPhase !== "implement") {
67
+ snapshotPath = path.join(taskDir, "context-snapshot-implement.jsonl");
68
+ }
69
+ if (fs.existsSync(snapshotPath)) {
70
+ const staleResult = checkStale(snapshotPath);
71
+ if (!staleResult.allFresh) {
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: JSON.stringify({
77
+ task_id,
78
+ phase: phase || "implement",
79
+ budget,
80
+ total_tokens: totalTokens,
81
+ usage_percent: Math.round((totalTokens / budget) * 100),
82
+ status: determineStatus(totalTokens, budget),
83
+ breakdown,
84
+ stale_warning: {
85
+ message: "⚠️ 上下文快照中检测到 stale 条目(spec 文件已变更)",
86
+ stale_count: staleResult.staleEntries.length,
87
+ stale_entries: staleResult.staleEntries,
88
+ },
89
+ ...getDegradationAdvice(totalTokens, budget),
90
+ }, null, 2),
91
+ },
92
+ ],
93
+ };
94
+ }
95
+ }
96
+ }
97
+ }
98
+ const usagePercent = Math.round((totalTokens / budget) * 100);
99
+ const status = determineStatus(totalTokens, budget);
100
+ return {
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: JSON.stringify({
105
+ task_id: task_id || null,
106
+ phase: phase || "implement",
107
+ budget,
108
+ total_tokens: totalTokens,
109
+ usage_percent: usagePercent,
110
+ status,
111
+ breakdown,
112
+ ...getDegradationAdvice(totalTokens, budget),
113
+ }, null, 2),
114
+ },
115
+ ],
116
+ };
117
+ }
118
+ catch (error) {
119
+ return {
120
+ content: [
121
+ {
122
+ type: "text",
123
+ text: JSON.stringify({
124
+ error: true,
125
+ message: error instanceof Error ? error.message : String(error),
126
+ }),
127
+ },
128
+ ],
129
+ isError: true,
130
+ };
131
+ }
132
+ });
133
+ }
134
+ // ============ 辅助函数 ============
135
+ /**
136
+ * 判断预算状态
137
+ */
138
+ function determineStatus(totalTokens, budget) {
139
+ const ratio = totalTokens / budget;
140
+ if (ratio >= BUDGET_THRESHOLDS.CRITICAL)
141
+ return "critical";
142
+ if (ratio >= BUDGET_THRESHOLDS.WARNING)
143
+ return "warning";
144
+ return "normal";
145
+ }
146
+ /**
147
+ * 根据状态生成降级建议
148
+ */
149
+ function getDegradationAdvice(totalTokens, budget) {
150
+ const status = determineStatus(totalTokens, budget);
151
+ if (status === "normal") {
152
+ return { advice: "预算充足,可正常加载所有 required + recommended 上下文" };
153
+ }
154
+ if (status === "warning") {
155
+ return {
156
+ advice: "⚠️ 超过 60% 预算,建议将 recommended 上下文降级为 deferred(仅保留 URI 引用)",
157
+ degradation: {
158
+ action: "降级 recommended → deferred",
159
+ reason: "上下文接近预算上限,优先保留 required 内容",
160
+ },
161
+ };
162
+ }
163
+ // critical
164
+ return {
165
+ advice: "🚨 超过 80% 预算,建议新开会话并使用恢复指令",
166
+ degradation: {
167
+ action: "停止加载新上下文 + 新开会话",
168
+ reason: "上下文已超预算上限",
169
+ },
170
+ recovery_instructions: {
171
+ step1: "新开会话",
172
+ step2: "调用 project_status() 恢复项目状态",
173
+ step3: "调用 task_get(current_task_id) 读取任务详情",
174
+ step4: "调用 journal_search(last_session) 恢复最近工作记录",
175
+ },
176
+ };
177
+ }
178
+ //# sourceMappingURL=context-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-budget.js","sourceRoot":"","sources":["../../src/tools/context-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * 注册 context_generate 工具
4
+ * 半自动生成 context.jsonl 推荐清单
5
+ */
6
+ export declare function register(server: McpServer): void;
7
+ //# sourceMappingURL=context-generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-generate.d.ts","sourceRoot":"","sources":["../../src/tools/context-generate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsCpE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsGhD"}
@@ -0,0 +1,208 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { z } from "zod";
4
+ import { getProjectRoot, getTaskDir } from "../utils/task-utils.js";
5
+ // ============ 常量 ============
6
+ const SPEC_ROOT = ".trellis/spec";
7
+ /**
8
+ * 各阶段的 priority 映射策略
9
+ */
10
+ const PHASE_PRIORITY_MAP = {
11
+ implement: {
12
+ frontend: "required",
13
+ backend: "required",
14
+ guides: "recommended",
15
+ general: "recommended",
16
+ },
17
+ check: {
18
+ frontend: "recommended",
19
+ backend: "recommended",
20
+ guides: "required",
21
+ general: "recommended",
22
+ },
23
+ debug: {
24
+ frontend: "recommended",
25
+ backend: "recommended",
26
+ guides: "recommended",
27
+ general: "deferred",
28
+ },
29
+ plan: {
30
+ frontend: "recommended",
31
+ backend: "recommended",
32
+ guides: "required",
33
+ general: "required",
34
+ },
35
+ };
36
+ /**
37
+ * 注册 context_generate 工具
38
+ * 半自动生成 context.jsonl 推荐清单
39
+ */
40
+ export function register(server) {
41
+ server.tool("context_generate", "半自动生成 context.jsonl 推荐清单。分析任务描述,扫描 spec 目录,返回按 phase 分配 priority 的上下文条目。PM 审核后写入 context.jsonl。", {
42
+ task_id: z.string().describe("任务 ID"),
43
+ phase: z
44
+ .string()
45
+ .describe("阶段标识:plan / implement / check / debug"),
46
+ }, async ({ task_id, phase }) => {
47
+ try {
48
+ const taskDir = getTaskDir(task_id);
49
+ const taskMdPath = path.join(taskDir, "task.md");
50
+ if (!fs.existsSync(taskMdPath)) {
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify({
56
+ error: true,
57
+ message: `任务 ${task_id} 的 task.md 不存在`,
58
+ }),
59
+ },
60
+ ],
61
+ isError: true,
62
+ };
63
+ }
64
+ // 读取任务描述,提取关键词
65
+ const taskContent = fs.readFileSync(taskMdPath, "utf-8");
66
+ const keywords = extractKeywords(taskContent);
67
+ // 扫描 spec 目录
68
+ const projectRoot = getProjectRoot();
69
+ const specDir = path.join(projectRoot, SPEC_ROOT);
70
+ const specFiles = scanSpecFiles(specDir);
71
+ // 匹配并生成推荐清单
72
+ const priorityMap = PHASE_PRIORITY_MAP[phase] || PHASE_PRIORITY_MAP.implement;
73
+ const recommendations = specFiles.map((specFile) => {
74
+ const { confidence, matchedKeywords: matchedKws } = calculateConfidence(specFile, keywords);
75
+ const category = specFile.category;
76
+ const priority = priorityMap[category] || "deferred";
77
+ const tokenEstimate = Math.round(specFile.sizeBytes / 3);
78
+ return {
79
+ uri: `trellis://spec/${specFile.relativePath}`,
80
+ phase,
81
+ priority: confidence > 0.1 ? priority : "deferred",
82
+ reason: `匹配关键词: ${matchedKws.join(", ") || "目录分类"}`,
83
+ confidence: Math.round(confidence * 100) / 100,
84
+ token_estimate: tokenEstimate,
85
+ source: "auto",
86
+ content_hash: "",
87
+ frozen_at: null,
88
+ };
89
+ });
90
+ // 按置信度排序,过滤低置信度
91
+ const filtered = recommendations
92
+ .filter((r) => r.confidence > 0.1)
93
+ .sort((a, b) => b.confidence - a.confidence);
94
+ return {
95
+ content: [
96
+ {
97
+ type: "text",
98
+ text: JSON.stringify({
99
+ task_id,
100
+ phase,
101
+ total_specs_scanned: specFiles.length,
102
+ recommendations_count: filtered.length,
103
+ recommendations: filtered,
104
+ instruction: "请审核上述推荐清单,添加/删除/调整后写入任务目录的 context.jsonl",
105
+ }, null, 2),
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: JSON.stringify({
116
+ error: true,
117
+ message: error instanceof Error ? error.message : String(error),
118
+ }),
119
+ },
120
+ ],
121
+ isError: true,
122
+ };
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * 从任务内容中提取关键词
128
+ */
129
+ function extractKeywords(content) {
130
+ // 提取中文和英文关键词(去除常见停用词)
131
+ const stopWords = new Set([
132
+ "的", "了", "和", "是", "在", "有", "中", "为", "以",
133
+ "the", "a", "an", "is", "are", "in", "of", "to", "for", "and",
134
+ "with", "on", "at", "by", "from", "that", "this", "be", "as",
135
+ ]);
136
+ const words = content
137
+ .toLowerCase()
138
+ .replace(/[^\w\u4e00-\u9fff]+/g, " ")
139
+ .split(/\s+/)
140
+ .filter((w) => w.length > 1 && !stopWords.has(w));
141
+ // 去重
142
+ return [...new Set(words)];
143
+ }
144
+ /**
145
+ * 扫描 spec 目录下的所有 .md 文件
146
+ */
147
+ function scanSpecFiles(specDir) {
148
+ const results = [];
149
+ if (!fs.existsSync(specDir)) {
150
+ return results;
151
+ }
152
+ const categories = ["frontend", "backend", "guides", "general"];
153
+ for (const category of categories) {
154
+ const categoryDir = path.join(specDir, category);
155
+ if (!fs.existsSync(categoryDir) || !fs.statSync(categoryDir).isDirectory()) {
156
+ continue;
157
+ }
158
+ try {
159
+ const files = fs.readdirSync(categoryDir);
160
+ for (const file of files) {
161
+ if (!file.endsWith(".md"))
162
+ continue;
163
+ const filePath = path.join(categoryDir, file);
164
+ const stat = fs.statSync(filePath);
165
+ results.push({
166
+ relativePath: `${category}/${file.replace(/\.md$/, "")}`,
167
+ category,
168
+ fileName: file,
169
+ sizeBytes: stat.size,
170
+ matchedKeywords: [],
171
+ });
172
+ }
173
+ }
174
+ catch (err) {
175
+ // 跳过无法读取的目录
176
+ console.error(`无法读取 spec 目录 ${categoryDir}: ${err}`);
177
+ }
178
+ }
179
+ return results;
180
+ }
181
+ /**
182
+ * 计算 spec 文件与关键词的匹配置信度
183
+ * 返回置信度值和匹配的关键词列表(不修改原始对象)
184
+ */
185
+ function calculateConfidence(specFile, keywords) {
186
+ const fileName = specFile.fileName.toLowerCase().replace(/\.md$/, "");
187
+ const category = specFile.category.toLowerCase();
188
+ let matchCount = 0;
189
+ const matched = [];
190
+ for (const keyword of keywords) {
191
+ // 只做正向匹配(文件名包含关键词),避免短文件名误匹配长关键词
192
+ if (fileName.includes(keyword)) {
193
+ matchCount += 2;
194
+ matched.push(keyword);
195
+ }
196
+ else if (category.includes(keyword)) {
197
+ matchCount += 1;
198
+ matched.push(keyword);
199
+ }
200
+ }
201
+ if (keywords.length === 0)
202
+ return { confidence: 0.3, matchedKeywords: [] };
203
+ return {
204
+ confidence: Math.min(1.0, matchCount / Math.max(keywords.length, 1)),
205
+ matchedKeywords: matched,
206
+ };
207
+ }
208
+ //# sourceMappingURL=context-generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-generate.js","sourceRoot":"","sources":["../../src/tools/context-generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 框架管理工具 — framework_init / framework_check / framework_update
3
+ *
4
+ * 让 AI 通过 MCP 工具直接执行框架初始化、检查和更新,
5
+ * 用户无需离开 IDE,无需使用命令行。
6
+ */
7
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ /**
9
+ * 注册 framework_init 工具
10
+ */
11
+ export declare function registerFrameworkInit(server: McpServer): void;
12
+ /**
13
+ * 注册 framework_check 工具
14
+ */
15
+ export declare function registerFrameworkCheck(server: McpServer): void;
16
+ /**
17
+ * 注册 framework_update 工具
18
+ */
19
+ export declare function registerFrameworkUpdate(server: McpServer): void;
20
+ //# sourceMappingURL=framework-tools.d.ts.map
@@ -0,0 +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;AAqHpE;;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"}