aidevo 1.0.0-beta.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/dist/cli/commands/dashboard.d.ts +2 -0
  4. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  5. package/dist/cli/commands/dashboard.js +70 -0
  6. package/dist/cli/commands/dashboard.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +2 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +362 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/log.d.ts +2 -0
  12. package/dist/cli/commands/log.d.ts.map +1 -0
  13. package/dist/cli/commands/log.js +438 -0
  14. package/dist/cli/commands/log.js.map +1 -0
  15. package/dist/cli/commands/migrate.d.ts +2 -0
  16. package/dist/cli/commands/migrate.d.ts.map +1 -0
  17. package/dist/cli/commands/migrate.js +183 -0
  18. package/dist/cli/commands/migrate.js.map +1 -0
  19. package/dist/cli/commands/reindex.d.ts +10 -0
  20. package/dist/cli/commands/reindex.d.ts.map +1 -0
  21. package/dist/cli/commands/reindex.js +94 -0
  22. package/dist/cli/commands/reindex.js.map +1 -0
  23. package/dist/cli/commands/report.d.ts +2 -0
  24. package/dist/cli/commands/report.d.ts.map +1 -0
  25. package/dist/cli/commands/report.js +219 -0
  26. package/dist/cli/commands/report.js.map +1 -0
  27. package/dist/cli/commands/rules.d.ts +2 -0
  28. package/dist/cli/commands/rules.d.ts.map +1 -0
  29. package/dist/cli/commands/rules.js +143 -0
  30. package/dist/cli/commands/rules.js.map +1 -0
  31. package/dist/cli/commands/start.d.ts +2 -0
  32. package/dist/cli/commands/start.d.ts.map +1 -0
  33. package/dist/cli/commands/start.js +173 -0
  34. package/dist/cli/commands/start.js.map +1 -0
  35. package/dist/cli/commands/status.d.ts +2 -0
  36. package/dist/cli/commands/status.d.ts.map +1 -0
  37. package/dist/cli/commands/status.js +74 -0
  38. package/dist/cli/commands/status.js.map +1 -0
  39. package/dist/cli/commands/update.d.ts +2 -0
  40. package/dist/cli/commands/update.d.ts.map +1 -0
  41. package/dist/cli/commands/update.js +146 -0
  42. package/dist/cli/commands/update.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +85 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/mcp/server.d.ts +10 -0
  48. package/dist/mcp/server.d.ts.map +1 -0
  49. package/dist/mcp/server.js +632 -0
  50. package/dist/mcp/server.js.map +1 -0
  51. package/dist/schemas/run-json.d.ts +252 -0
  52. package/dist/schemas/run-json.d.ts.map +1 -0
  53. package/dist/schemas/run-json.js +22 -0
  54. package/dist/schemas/run-json.js.map +1 -0
  55. package/dist/server/api.d.ts +24 -0
  56. package/dist/server/api.d.ts.map +1 -0
  57. package/dist/server/api.js +196 -0
  58. package/dist/server/api.js.map +1 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/index.d.ts.map +1 -0
  61. package/dist/server/index.js +166 -0
  62. package/dist/server/index.js.map +1 -0
  63. package/dist/utils/display.d.ts +12 -0
  64. package/dist/utils/display.d.ts.map +1 -0
  65. package/dist/utils/display.js +52 -0
  66. package/dist/utils/display.js.map +1 -0
  67. package/dist/utils/fs.d.ts +9 -0
  68. package/dist/utils/fs.d.ts.map +1 -0
  69. package/dist/utils/fs.js +43 -0
  70. package/dist/utils/fs.js.map +1 -0
  71. package/dist/utils/git.d.ts +4 -0
  72. package/dist/utils/git.d.ts.map +1 -0
  73. package/dist/utils/git.js +18 -0
  74. package/dist/utils/git.js.map +1 -0
  75. package/dist/utils/paths.d.ts +25 -0
  76. package/dist/utils/paths.d.ts.map +1 -0
  77. package/dist/utils/paths.js +45 -0
  78. package/dist/utils/paths.js.map +1 -0
  79. package/dist/utils/rules.d.ts +44 -0
  80. package/dist/utils/rules.d.ts.map +1 -0
  81. package/dist/utils/rules.js +208 -0
  82. package/dist/utils/rules.js.map +1 -0
  83. package/dist/utils/run-data.d.ts +37 -0
  84. package/dist/utils/run-data.d.ts.map +1 -0
  85. package/dist/utils/run-data.js +353 -0
  86. package/dist/utils/run-data.js.map +1 -0
  87. package/dist/utils/tokens.d.ts +26 -0
  88. package/dist/utils/tokens.d.ts.map +1 -0
  89. package/dist/utils/tokens.js +173 -0
  90. package/dist/utils/tokens.js.map +1 -0
  91. package/package.json +48 -0
  92. package/src/assets/skills/audit.md +98 -0
  93. package/src/assets/skills/bug-fixer.md +48 -0
  94. package/src/assets/skills/code-generator.md +82 -0
  95. package/src/assets/skills/commit-code.md +67 -0
  96. package/src/assets/skills/dashboard-generator.md +65 -0
  97. package/src/assets/skills/dev-flower.md +85 -0
  98. package/src/assets/skills/deviation-recorder.md +89 -0
  99. package/src/assets/skills/docx-to-markdown.md +69 -0
  100. package/src/assets/skills/mcp-reviewer.md +43 -0
  101. package/src/assets/skills/requirement-analyzer.md +103 -0
  102. package/src/assets/skills/rules-evolver.md +48 -0
  103. package/src/assets/skills/self-reviewer.md +53 -0
  104. package/src/assets/skills/task-splitter.md +58 -0
  105. package/src/assets/skills/workflow-orchestrator.md +204 -0
  106. package/src/assets/templates/demo-run.json +910 -0
  107. package/src/assets/templates/run.json +63 -0
  108. package/src/dashboard/assets/index-BMygHuaU.js +111 -0
  109. package/src/dashboard/assets/index-BW0UZ6Es.css +1 -0
  110. package/src/dashboard/index.html +13 -0
@@ -0,0 +1,632 @@
1
+ /**
2
+ * AIDevOS MCP Server
3
+ *
4
+ * Implements MCP (Model Context Protocol) over stdio using JSON-RPC 2.0.
5
+ * Zero dependencies — raw stdin/stdout processing.
6
+ *
7
+ * Provides tools for AI agents to silently collect development data.
8
+ */
9
+ import { execSync } from 'node:child_process';
10
+ import { writeJson } from '../utils/fs.js';
11
+ import { SEVERITY_VALUES, BUG_SOURCE_VALUES, ROOT_CAUSE_VALUES, DEVIATION_CAT_VALUES, } from '../schemas/run-json.js';
12
+ import { now, nextId, addEvent, addTimeline, saveRunData, ensureRunJson as ensureRunJsonShared, } from '../utils/run-data.js';
13
+ import { collectClaudeTokens, collectClaudeTokensBetween } from '../utils/tokens.js';
14
+ function sendResponse(res) {
15
+ const json = JSON.stringify(res);
16
+ const msg = `Content-Length: ${Buffer.byteLength(json)}\r\n\r\n${json}`;
17
+ process.stdout.write(msg);
18
+ }
19
+ function sendResult(id, result) {
20
+ sendResponse({ jsonrpc: '2.0', id, result });
21
+ }
22
+ function sendError(id, code, message) {
23
+ sendResponse({ jsonrpc: '2.0', id, error: { code, message } });
24
+ }
25
+ // ─── Project Root ────────────────────────────────────────
26
+ let projectRoot = process.cwd();
27
+ function ensureRunJson() {
28
+ return ensureRunJsonShared(projectRoot);
29
+ }
30
+ function save(path, data) {
31
+ saveRunData(path, data, projectRoot);
32
+ }
33
+ // ─── Token Auto-Collection ───────────────────────────────
34
+ /**
35
+ * Collect tokens from Claude Code session since run started,
36
+ * and update run.json cost data.
37
+ */
38
+ function syncTokenUsage(path, data) {
39
+ try {
40
+ const startTime = data.meta?.startTime;
41
+ if (!startTime)
42
+ return;
43
+ const usage = collectClaudeTokens(projectRoot, startTime);
44
+ if (!usage)
45
+ return;
46
+ if (!data.cost)
47
+ data.cost = {};
48
+ data.cost.totalTokens = usage.totalTokens;
49
+ // Store detailed breakdown
50
+ data.cost.tokenDetail = {
51
+ inputTokens: usage.inputTokens,
52
+ outputTokens: usage.outputTokens,
53
+ cacheCreationTokens: usage.cacheCreationTokens,
54
+ cacheReadTokens: usage.cacheReadTokens,
55
+ };
56
+ writeJson(path, data);
57
+ }
58
+ catch {
59
+ // Non-critical: don't break data collection if token reading fails
60
+ }
61
+ }
62
+ /**
63
+ * Collect tokens for a specific task time range.
64
+ * Returns total tokens consumed during the task.
65
+ */
66
+ function getTaskTokens(startTime, endTime) {
67
+ try {
68
+ const usage = collectClaudeTokensBetween(projectRoot, startTime, endTime);
69
+ return usage?.totalTokens || 0;
70
+ }
71
+ catch {
72
+ return 0;
73
+ }
74
+ }
75
+ // ─── MCP Tool Definitions ────────────────────────────────
76
+ const TOOLS = [
77
+ {
78
+ name: 'aidevos_task_start',
79
+ description: '当你开始一个新任务或功能开发时调用。记录任务标题和所属模块。在接到用户需求、开始编码前调用。',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ title: { type: 'string', description: '任务标题,简洁描述要做什么' },
84
+ stage: { type: 'string', description: '所属模块或阶段,如 Authentication, UI, API 等' },
85
+ },
86
+ required: ['title'],
87
+ },
88
+ },
89
+ {
90
+ name: 'aidevos_task_done',
91
+ description: '当你完成一个任务后调用。标记任务为已完成,自动计算耗时。',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ taskId: { type: 'string', description: '任务ID,如 TASK-01。如不确定,可调用 aidevos_status 查看。' },
96
+ },
97
+ required: ['taskId'],
98
+ },
99
+ },
100
+ {
101
+ name: 'aidevos_log_bug',
102
+ description: '当你在开发或测试中发现 bug 时调用。记录 bug 信息。',
103
+ inputSchema: {
104
+ type: 'object',
105
+ properties: {
106
+ title: { type: 'string', description: 'Bug 描述' },
107
+ severity: { type: 'string', enum: [...SEVERITY_VALUES], description: '严重程度:critical/high/medium/low,默认 medium' },
108
+ source: { type: 'string', enum: [...BUG_SOURCE_VALUES], description: '发现来源:self-review/user-feedback/testing,默认 self-review' },
109
+ },
110
+ required: ['title'],
111
+ },
112
+ },
113
+ {
114
+ name: 'aidevos_bug_fix',
115
+ description: '当你修复了一个 bug 后调用。标记 bug 为已修复。',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ bugId: { type: 'string', description: 'Bug ID,如 BUG-01' },
120
+ fix: { type: 'string', description: '修复方案简述' },
121
+ },
122
+ required: ['bugId'],
123
+ },
124
+ },
125
+ {
126
+ name: 'aidevos_log_review',
127
+ description: '当你完成一轮代码审查后调用。记录审查结果。',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ taskId: { type: 'string', description: '关联的任务ID' },
132
+ result: { type: 'string', enum: ['pass', 'fail'], description: '审查结果:pass 或 fail' },
133
+ issues: { type: 'string', description: '发现的问题,逗号分隔。通过时不填。' },
134
+ scope: { type: 'string', description: '审查覆盖的文件或模块范围' },
135
+ },
136
+ required: ['result'],
137
+ },
138
+ },
139
+ {
140
+ name: 'aidevos_log_deviation',
141
+ description: '当 AI 产出与用户预期不符时调用。记录偏差用于后续分析。',
142
+ inputSchema: {
143
+ type: 'object',
144
+ properties: {
145
+ title: { type: 'string', description: '偏差描述' },
146
+ rootCause: { type: 'string', enum: [...ROOT_CAUSE_VALUES], description: '根因分类' },
147
+ category: { type: 'string', enum: [...DEVIATION_CAT_VALUES], description: '偏差类别' },
148
+ },
149
+ required: ['title'],
150
+ },
151
+ },
152
+ {
153
+ name: 'aidevos_log_files',
154
+ description: '记录文件变更。无需传参,自动扫描 git diff 获取变更文件列表和行数。在完成一轮代码修改后调用。',
155
+ inputSchema: {
156
+ type: 'object',
157
+ properties: {},
158
+ },
159
+ },
160
+ {
161
+ name: 'aidevos_highlight',
162
+ description: '记录值得关注的亮点,如性能提升、架构优化等。',
163
+ inputSchema: {
164
+ type: 'object',
165
+ properties: {
166
+ content: { type: 'string', description: '亮点内容描述' },
167
+ },
168
+ required: ['content'],
169
+ },
170
+ },
171
+ {
172
+ name: 'aidevos_status',
173
+ description: '查看当前开发运行的状态:任务列表、bug 数量、进度等。在需要了解当前进度时调用。',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {},
177
+ },
178
+ },
179
+ ];
180
+ // ─── MCP Prompts ─────────────────────────────────────────
181
+ const PROMPTS = [
182
+ {
183
+ name: 'aidevos-guide',
184
+ description: 'AIDevOS 数据采集使用指南',
185
+ },
186
+ ];
187
+ const PROMPT_CONTENT = `你拥有 AIDevOS 数据采集工具,请在开发过程中的关键节点自然使用:
188
+
189
+ - 开始一个新任务时 → aidevos_task_start
190
+ - 完成任务时 → aidevos_task_done
191
+ - 发现 bug 时 → aidevos_log_bug,修复后 → aidevos_bug_fix
192
+ - 完成一轮代码修改后 → aidevos_log_files(自动扫描 git diff,无需传参)
193
+ - 完成代码审查时 → aidevos_log_review
194
+ - 有值得记录的亮点时 → aidevos_highlight
195
+
196
+ 不需要改变你的开发流程,在关键节点顺手记录即可。漏报几个也没关系,有数据比没数据好。`;
197
+ // ─── Tool Handlers ───────────────────────────────────────
198
+ function handleTaskStart(args) {
199
+ const { path, data } = ensureRunJson();
200
+ const id = nextId(data.tasks, 'TASK');
201
+ const task = {
202
+ taskId: id,
203
+ title: args.title,
204
+ status: 'in-progress',
205
+ stageName: args.stage || 'default',
206
+ prdPhase: '',
207
+ acceptance: '',
208
+ createdAt: now(),
209
+ startedAt: now(),
210
+ completedAt: null,
211
+ };
212
+ data.tasks.push(task);
213
+ data.summary.totalTasks = data.tasks.length;
214
+ data.context.currentTaskId = id;
215
+ addEvent(data, 'task_created', { taskId: id });
216
+ addEvent(data, 'task_started', { taskId: id });
217
+ addTimeline(data, 'task', `${id}: ${args.title}`);
218
+ save(path, data);
219
+ return { success: true, taskId: id, message: `${id} 已记录并开始: ${args.title}` };
220
+ }
221
+ function handleTaskDone(args) {
222
+ const { path, data } = ensureRunJson();
223
+ const task = data.tasks.find(t => t.taskId === args.taskId);
224
+ if (!task)
225
+ return { success: false, message: `任务 ${args.taskId} 未找到` };
226
+ task.status = 'done';
227
+ task.completedAt = now();
228
+ if (!task.startedAt)
229
+ task.startedAt = task.createdAt || task.completedAt;
230
+ data.summary.completedTasks = data.tasks.filter(t => t.status === 'done').length;
231
+ // Auto-collect tokens for this task
232
+ let taskTokens = 0;
233
+ if (task.startedAt && task.completedAt) {
234
+ taskTokens = getTaskTokens(task.startedAt, task.completedAt);
235
+ if (taskTokens > 0) {
236
+ task.tokensConsumed = taskTokens;
237
+ // Add to cost breakdown
238
+ if (!data.cost)
239
+ data.cost = {};
240
+ if (!data.cost.tokenBreakdown)
241
+ data.cost.tokenBreakdown = [];
242
+ data.cost.tokenBreakdown.push({
243
+ stage: `task:${args.taskId}`,
244
+ tokens: taskTokens,
245
+ });
246
+ }
247
+ }
248
+ addEvent(data, 'task_completed', { taskId: args.taskId, tokensConsumed: taskTokens });
249
+ addTimeline(data, 'task-done', `${args.taskId}: ${task.title}`);
250
+ save(path, data);
251
+ // Sync total token usage from session
252
+ syncTokenUsage(path, data);
253
+ const tokenMsg = taskTokens > 0 ? ` (${taskTokens} tokens)` : '';
254
+ return { success: true, message: `${args.taskId} 已完成${tokenMsg}` };
255
+ }
256
+ function handleLogBug(args) {
257
+ const severity = args.severity || 'medium';
258
+ const source = args.source || 'self-review';
259
+ const { path, data } = ensureRunJson();
260
+ const id = nextId(data.bugs, 'BUG');
261
+ const bug = {
262
+ bugId: id,
263
+ title: args.title,
264
+ severity: severity,
265
+ source: source,
266
+ status: 'open',
267
+ files: [],
268
+ fix: null,
269
+ taskId: data.context.currentTaskId || null,
270
+ reportedAt: now(),
271
+ fixedAt: null,
272
+ };
273
+ data.bugs.push(bug);
274
+ data.summary.bugCount = data.bugs.length;
275
+ addEvent(data, 'bug_created', { bugId: id });
276
+ addTimeline(data, 'bug', `${id}: ${args.title}`);
277
+ save(path, data);
278
+ return { success: true, bugId: id, message: `${id} 已记录: ${args.title} [${severity}]` };
279
+ }
280
+ function handleBugFix(args) {
281
+ const { path, data } = ensureRunJson();
282
+ const bug = data.bugs.find(b => b.bugId === args.bugId);
283
+ if (!bug)
284
+ return { success: false, message: `Bug ${args.bugId} 未找到` };
285
+ bug.status = 'fixed';
286
+ bug.fixedAt = now();
287
+ if (args.fix)
288
+ bug.fix = args.fix;
289
+ // Auto-collect tokens for bug fix
290
+ let bugTokens = 0;
291
+ if (bug.reportedAt && bug.fixedAt) {
292
+ bugTokens = getTaskTokens(bug.reportedAt, bug.fixedAt);
293
+ if (bugTokens > 0) {
294
+ bug.tokensConsumed = bugTokens;
295
+ if (!data.cost)
296
+ data.cost = {};
297
+ if (!data.cost.tokenBreakdown)
298
+ data.cost.tokenBreakdown = [];
299
+ data.cost.tokenBreakdown.push({
300
+ stage: `bugfix:${args.bugId}`,
301
+ tokens: bugTokens,
302
+ });
303
+ }
304
+ }
305
+ addEvent(data, 'bug_fixed', { bugId: args.bugId, tokensConsumed: bugTokens });
306
+ addTimeline(data, 'bug-fix', `${args.bugId}: ${bug.title}`);
307
+ save(path, data);
308
+ syncTokenUsage(path, data);
309
+ const tokenMsg = bugTokens > 0 ? ` (${bugTokens} tokens)` : '';
310
+ return { success: true, message: `${args.bugId} 已修复${tokenMsg}` };
311
+ }
312
+ function handleLogReview(args) {
313
+ const result = args.result || 'pass';
314
+ const { path, data } = ensureRunJson();
315
+ const id = nextId(data.reviews, 'REV');
316
+ const issues = args.issues ? args.issues.split(',').map((s) => s.trim()).filter(Boolean) : [];
317
+ const review = {
318
+ reviewId: id,
319
+ taskId: args.taskId || data.context.currentTaskId || null,
320
+ result: result,
321
+ issueCount: issues.length,
322
+ scope: args.scope || '',
323
+ reviewedAt: now(),
324
+ issues,
325
+ };
326
+ data.reviews.push(review);
327
+ data.summary.reviewCount = data.reviews.length;
328
+ data.summary.reviewPassCount = data.reviews.filter(r => r.result === 'pass').length;
329
+ data.summary.reviewFailCount = data.reviews.filter(r => r.result === 'fail').length;
330
+ addEvent(data, 'review_created', { reviewId: id, result });
331
+ addTimeline(data, 'review', `${id}: ${result}`);
332
+ save(path, data);
333
+ syncTokenUsage(path, data);
334
+ return { success: true, reviewId: id, message: `${id}: ${result}` };
335
+ }
336
+ function handleLogDeviation(args) {
337
+ const rootCause = args.rootCause || 'other';
338
+ const category = args.category || 'other';
339
+ const { path, data } = ensureRunJson();
340
+ const id = nextId(data.deviations, 'DEV');
341
+ const deviation = {
342
+ deviationId: id,
343
+ title: args.title,
344
+ rootCauseCategory: rootCause,
345
+ deviationCategory: category,
346
+ aiOutput: '',
347
+ expectedOutput: '',
348
+ files: [],
349
+ ruleSedimented: null,
350
+ detectedAt: now(),
351
+ fixedAt: null,
352
+ };
353
+ data.deviations.push(deviation);
354
+ data.summary.deviationCount = data.deviations.length;
355
+ addEvent(data, 'deviation_created', { deviationId: id });
356
+ addTimeline(data, 'deviation', `${id}: ${args.title}`);
357
+ save(path, data);
358
+ return { success: true, deviationId: id, message: `${id} 已记录: ${args.title}` };
359
+ }
360
+ function handleLogFiles() {
361
+ const { path, data } = ensureRunJson();
362
+ // Auto-scan git diff
363
+ let diffOutput = '';
364
+ try {
365
+ diffOutput = execSync('git diff --stat HEAD', { cwd: projectRoot, encoding: 'utf-8' });
366
+ }
367
+ catch {
368
+ // If no HEAD (first commit), try against empty tree
369
+ try {
370
+ diffOutput = execSync('git diff --stat --cached', { cwd: projectRoot, encoding: 'utf-8' });
371
+ }
372
+ catch {
373
+ return { success: true, message: '没有检测到文件变更', filesLogged: 0 };
374
+ }
375
+ }
376
+ if (!diffOutput.trim()) {
377
+ return { success: true, message: '没有检测到文件变更', filesLogged: 0 };
378
+ }
379
+ // Parse git diff --stat output
380
+ // Format: " src/foo.ts | 10 ++++------" or " src/bar.ts | 5 +++++"
381
+ const lines = diffOutput.split('\n').filter(l => l.includes('|'));
382
+ let totalAdded = 0;
383
+ let totalRemoved = 0;
384
+ const filesLogged = [];
385
+ for (const line of lines) {
386
+ const match = line.match(/^\s*(.+?)\s*\|\s*(\d+)\s*([+-]*)/);
387
+ if (!match)
388
+ continue;
389
+ const filePath = match[1].trim();
390
+ const changes = parseInt(match[2]) || 0;
391
+ const indicators = match[3] || '';
392
+ // Count + and - in the indicators
393
+ const plusCount = (indicators.match(/\+/g) || []).length;
394
+ const minusCount = (indicators.match(/-/g) || []).length;
395
+ const total = plusCount + minusCount;
396
+ let linesAdded = 0;
397
+ let linesRemoved = 0;
398
+ if (total > 0) {
399
+ linesAdded = Math.round(changes * plusCount / total);
400
+ linesRemoved = Math.round(changes * minusCount / total);
401
+ }
402
+ else {
403
+ linesAdded = changes;
404
+ }
405
+ // Determine change type
406
+ let changeType = 'modified';
407
+ if (linesRemoved === 0 && linesAdded > 0)
408
+ changeType = 'created';
409
+ const existing = data.files.find(f => f.path === filePath);
410
+ if (existing) {
411
+ existing.changeCount = (existing.changeCount || 1) + 1;
412
+ existing.linesAdded += linesAdded;
413
+ existing.linesRemoved += linesRemoved;
414
+ existing.lastModified = now();
415
+ }
416
+ else {
417
+ data.files.push({
418
+ path: filePath,
419
+ changeType,
420
+ linesAdded,
421
+ linesRemoved,
422
+ changeCount: 1,
423
+ lastModified: now(),
424
+ });
425
+ }
426
+ totalAdded += linesAdded;
427
+ totalRemoved += linesRemoved;
428
+ filesLogged.push(filePath);
429
+ }
430
+ data.summary.filesChanged = data.files.length;
431
+ data.summary.linesAdded = data.files.reduce((s, f) => s + (f.linesAdded || 0), 0);
432
+ data.summary.linesRemoved = data.files.reduce((s, f) => s + (f.linesRemoved || 0), 0);
433
+ addEvent(data, 'files_scanned', { count: filesLogged.length });
434
+ save(path, data);
435
+ return {
436
+ success: true,
437
+ filesLogged: filesLogged.length,
438
+ linesAdded: totalAdded,
439
+ linesRemoved: totalRemoved,
440
+ message: `${filesLogged.length} files logged (+${totalAdded} -${totalRemoved})`,
441
+ };
442
+ }
443
+ function handleHighlight(args) {
444
+ const { path, data } = ensureRunJson();
445
+ const highlight = {
446
+ content: args.content,
447
+ source: 'auto',
448
+ createdAt: now(),
449
+ };
450
+ data.highlights.push(highlight);
451
+ addEvent(data, 'highlight_added', { content: args.content });
452
+ save(path, data);
453
+ return { success: true, message: `亮点已记录: ${args.content}` };
454
+ }
455
+ function handleStatus() {
456
+ try {
457
+ const { path, data } = ensureRunJson();
458
+ const s = data.summary;
459
+ const tasks = data.tasks.map(t => ({ id: t.taskId, title: t.title, status: t.status }));
460
+ const openBugs = data.bugs.filter(b => b.status === 'open').map(b => ({ id: b.bugId, title: b.title, severity: b.severity }));
461
+ // Real-time token sync
462
+ syncTokenUsage(path, data);
463
+ return {
464
+ branch: data.meta.branch,
465
+ developer: data.meta.developer,
466
+ status: data.meta.status,
467
+ summary: {
468
+ totalTasks: s.totalTasks,
469
+ completedTasks: s.completedTasks,
470
+ bugCount: s.bugCount,
471
+ deviationCount: s.deviationCount,
472
+ filesChanged: s.filesChanged,
473
+ },
474
+ tokenUsage: {
475
+ totalTokens: data.cost?.totalTokens || 0,
476
+ detail: data.cost?.tokenDetail || null,
477
+ },
478
+ currentTaskId: data.context.currentTaskId,
479
+ tasks,
480
+ openBugs,
481
+ };
482
+ }
483
+ catch (e) {
484
+ return { error: e.message };
485
+ }
486
+ }
487
+ // ─── MCP Request Router ─────────────────────────────────
488
+ function handleRequest(req) {
489
+ const { id, method, params } = req;
490
+ switch (method) {
491
+ case 'initialize':
492
+ sendResult(id, {
493
+ protocolVersion: '2024-11-05',
494
+ capabilities: {
495
+ tools: {},
496
+ prompts: {},
497
+ },
498
+ serverInfo: {
499
+ name: 'aidevos',
500
+ version: '1.0.0',
501
+ },
502
+ });
503
+ break;
504
+ case 'notifications/initialized':
505
+ // No response needed for notifications
506
+ break;
507
+ case 'tools/list':
508
+ sendResult(id, { tools: TOOLS });
509
+ break;
510
+ case 'tools/call': {
511
+ const toolName = params?.name;
512
+ const args = params?.arguments || {};
513
+ let result;
514
+ try {
515
+ switch (toolName) {
516
+ case 'aidevos_task_start':
517
+ result = handleTaskStart(args);
518
+ break;
519
+ case 'aidevos_task_done':
520
+ result = handleTaskDone(args);
521
+ break;
522
+ case 'aidevos_log_bug':
523
+ result = handleLogBug(args);
524
+ break;
525
+ case 'aidevos_bug_fix':
526
+ result = handleBugFix(args);
527
+ break;
528
+ case 'aidevos_log_review':
529
+ result = handleLogReview(args);
530
+ break;
531
+ case 'aidevos_log_deviation':
532
+ result = handleLogDeviation(args);
533
+ break;
534
+ case 'aidevos_log_files':
535
+ result = handleLogFiles();
536
+ break;
537
+ case 'aidevos_highlight':
538
+ result = handleHighlight(args);
539
+ break;
540
+ case 'aidevos_status':
541
+ result = handleStatus();
542
+ break;
543
+ default:
544
+ sendError(id, -32601, `Unknown tool: ${toolName}`);
545
+ return;
546
+ }
547
+ sendResult(id, {
548
+ content: [{ type: 'text', text: JSON.stringify(result) }],
549
+ });
550
+ }
551
+ catch (e) {
552
+ sendResult(id, {
553
+ content: [{ type: 'text', text: JSON.stringify({ error: e.message }) }],
554
+ isError: true,
555
+ });
556
+ }
557
+ break;
558
+ }
559
+ case 'prompts/list':
560
+ sendResult(id, { prompts: PROMPTS });
561
+ break;
562
+ case 'prompts/get': {
563
+ const promptName = params?.name;
564
+ if (promptName === 'aidevos-guide') {
565
+ sendResult(id, {
566
+ messages: [{
567
+ role: 'user',
568
+ content: { type: 'text', text: PROMPT_CONTENT },
569
+ }],
570
+ });
571
+ }
572
+ else {
573
+ sendError(id, -32601, `Unknown prompt: ${promptName}`);
574
+ }
575
+ break;
576
+ }
577
+ case 'ping':
578
+ sendResult(id, {});
579
+ break;
580
+ default:
581
+ if (id !== undefined) {
582
+ sendError(id, -32601, `Method not found: ${method}`);
583
+ }
584
+ }
585
+ }
586
+ // ─── Stdio Transport ─────────────────────────────────────
587
+ export function startMcpServer() {
588
+ let buffer = '';
589
+ process.stdin.setEncoding('utf-8');
590
+ process.stdin.on('data', (chunk) => {
591
+ buffer += chunk;
592
+ // Parse Content-Length based messages
593
+ while (true) {
594
+ const headerEnd = buffer.indexOf('\r\n\r\n');
595
+ if (headerEnd === -1)
596
+ break;
597
+ const header = buffer.substring(0, headerEnd);
598
+ const match = header.match(/Content-Length:\s*(\d+)/i);
599
+ if (!match) {
600
+ // Try to parse as raw JSON (some clients don't send headers)
601
+ const nlIdx = buffer.indexOf('\n');
602
+ if (nlIdx === -1)
603
+ break;
604
+ const line = buffer.substring(0, nlIdx).trim();
605
+ buffer = buffer.substring(nlIdx + 1);
606
+ if (line) {
607
+ try {
608
+ const req = JSON.parse(line);
609
+ handleRequest(req);
610
+ }
611
+ catch { /* skip malformed */ }
612
+ }
613
+ continue;
614
+ }
615
+ const contentLength = parseInt(match[1]);
616
+ const bodyStart = headerEnd + 4;
617
+ if (buffer.length < bodyStart + contentLength)
618
+ break;
619
+ const body = buffer.substring(bodyStart, bodyStart + contentLength);
620
+ buffer = buffer.substring(bodyStart + contentLength);
621
+ try {
622
+ const req = JSON.parse(body);
623
+ handleRequest(req);
624
+ }
625
+ catch { /* skip malformed */ }
626
+ }
627
+ });
628
+ process.stdin.on('end', () => {
629
+ process.exit(0);
630
+ });
631
+ }
632
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}