openspec-mcp 0.3.1 → 0.3.2

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 (103) hide show
  1. package/README.md +22 -6
  2. package/README.zh.md +36 -1
  3. package/dist/api/routes/changes.d.ts.map +1 -1
  4. package/dist/api/routes/changes.js +42 -0
  5. package/dist/api/routes/changes.js.map +1 -1
  6. package/dist/api/routes/context.d.ts +8 -0
  7. package/dist/api/routes/context.d.ts.map +1 -0
  8. package/dist/api/routes/context.js +45 -0
  9. package/dist/api/routes/context.js.map +1 -0
  10. package/dist/api/routes/kanban.d.ts +8 -0
  11. package/dist/api/routes/kanban.d.ts.map +1 -0
  12. package/dist/api/routes/kanban.js +181 -0
  13. package/dist/api/routes/kanban.js.map +1 -0
  14. package/dist/api/routes/qa.d.ts +8 -0
  15. package/dist/api/routes/qa.d.ts.map +1 -0
  16. package/dist/api/routes/qa.js +98 -0
  17. package/dist/api/routes/qa.js.map +1 -0
  18. package/dist/api/server.d.ts +1 -0
  19. package/dist/api/server.d.ts.map +1 -1
  20. package/dist/api/server.js +7 -0
  21. package/dist/api/server.js.map +1 -1
  22. package/dist/core/approval-manager.d.ts.map +1 -1
  23. package/dist/core/approval-manager.js +9 -1
  24. package/dist/core/approval-manager.js.map +1 -1
  25. package/dist/core/approval-manager.test.js +14 -0
  26. package/dist/core/approval-manager.test.js.map +1 -1
  27. package/dist/core/context-analyzer.d.ts +116 -0
  28. package/dist/core/context-analyzer.d.ts.map +1 -0
  29. package/dist/core/context-analyzer.js +495 -0
  30. package/dist/core/context-analyzer.js.map +1 -0
  31. package/dist/core/prompt-manager.d.ts +50 -0
  32. package/dist/core/prompt-manager.d.ts.map +1 -0
  33. package/dist/core/prompt-manager.js +186 -0
  34. package/dist/core/prompt-manager.js.map +1 -0
  35. package/dist/core/qa-runner.d.ts +134 -0
  36. package/dist/core/qa-runner.d.ts.map +1 -0
  37. package/dist/core/qa-runner.js +299 -0
  38. package/dist/core/qa-runner.js.map +1 -0
  39. package/dist/core/spec-critic.d.ts +118 -0
  40. package/dist/core/spec-critic.d.ts.map +1 -0
  41. package/dist/core/spec-critic.js +478 -0
  42. package/dist/core/spec-critic.js.map +1 -0
  43. package/dist/core/spec-critic.test.d.ts +5 -0
  44. package/dist/core/spec-critic.test.d.ts.map +1 -0
  45. package/dist/core/spec-critic.test.js +152 -0
  46. package/dist/core/spec-critic.test.js.map +1 -0
  47. package/dist/index.js +33 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/server/tools/ai-context.d.ts +13 -0
  50. package/dist/server/tools/ai-context.d.ts.map +1 -0
  51. package/dist/server/tools/ai-context.js +212 -0
  52. package/dist/server/tools/ai-context.js.map +1 -0
  53. package/dist/server/tools/approval.d.ts.map +1 -1
  54. package/dist/server/tools/approval.js +33 -18
  55. package/dist/server/tools/approval.js.map +1 -1
  56. package/dist/server/tools/archive.d.ts.map +1 -1
  57. package/dist/server/tools/archive.js +9 -6
  58. package/dist/server/tools/archive.js.map +1 -1
  59. package/dist/server/tools/context.d.ts +12 -0
  60. package/dist/server/tools/context.d.ts.map +1 -0
  61. package/dist/server/tools/context.js +145 -0
  62. package/dist/server/tools/context.js.map +1 -0
  63. package/dist/server/tools/critique.d.ts +12 -0
  64. package/dist/server/tools/critique.d.ts.map +1 -0
  65. package/dist/server/tools/critique.js +194 -0
  66. package/dist/server/tools/critique.js.map +1 -0
  67. package/dist/server/tools/cross-service.d.ts.map +1 -1
  68. package/dist/server/tools/cross-service.js +11 -5
  69. package/dist/server/tools/cross-service.js.map +1 -1
  70. package/dist/server/tools/generator.d.ts.map +1 -1
  71. package/dist/server/tools/generator.js +27 -18
  72. package/dist/server/tools/generator.js.map +1 -1
  73. package/dist/server/tools/guides.d.ts.map +1 -1
  74. package/dist/server/tools/guides.js +8 -2
  75. package/dist/server/tools/guides.js.map +1 -1
  76. package/dist/server/tools/hooks.d.ts.map +1 -1
  77. package/dist/server/tools/hooks.js +7 -4
  78. package/dist/server/tools/hooks.js.map +1 -1
  79. package/dist/server/tools/management.d.ts.map +1 -1
  80. package/dist/server/tools/management.js +26 -14
  81. package/dist/server/tools/management.js.map +1 -1
  82. package/dist/server/tools/qa.d.ts +12 -0
  83. package/dist/server/tools/qa.d.ts.map +1 -0
  84. package/dist/server/tools/qa.js +248 -0
  85. package/dist/server/tools/qa.js.map +1 -0
  86. package/dist/server/tools/reviews.d.ts.map +1 -1
  87. package/dist/server/tools/reviews.js +55 -37
  88. package/dist/server/tools/reviews.js.map +1 -1
  89. package/dist/server/tools/tasks.d.ts.map +1 -1
  90. package/dist/server/tools/tasks.js +29 -17
  91. package/dist/server/tools/tasks.js.map +1 -1
  92. package/dist/server/tools/templates.d.ts.map +1 -1
  93. package/dist/server/tools/templates.js +26 -17
  94. package/dist/server/tools/templates.js.map +1 -1
  95. package/dist/server/tools/validation.d.ts.map +1 -1
  96. package/dist/server/tools/validation.js +31 -22
  97. package/dist/server/tools/validation.js.map +1 -1
  98. package/package.json +1 -1
  99. package/web/dist/assets/index-Bf5mzJti.css +1 -0
  100. package/web/dist/assets/index-W9UMaaAn.js +244 -0
  101. package/web/dist/index.html +2 -2
  102. package/web/dist/assets/index-CCYunmpc.css +0 -1
  103. package/web/dist/assets/index-wgGN6sVJ.js +0 -244
@@ -0,0 +1,495 @@
1
+ /**
2
+ * Context Analyzer - 项目上下文分析模块
3
+ *
4
+ * 分析项目结构、技术栈、代码模式,让用户看到 AI 对项目的理解
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ // 语言扩展名映射
9
+ const LANGUAGE_EXTENSIONS = {
10
+ '.ts': 'TypeScript',
11
+ '.tsx': 'TypeScript',
12
+ '.js': 'JavaScript',
13
+ '.jsx': 'JavaScript',
14
+ '.mjs': 'JavaScript',
15
+ '.cjs': 'JavaScript',
16
+ '.go': 'Go',
17
+ '.py': 'Python',
18
+ '.java': 'Java',
19
+ '.rs': 'Rust',
20
+ '.rb': 'Ruby',
21
+ '.php': 'PHP',
22
+ '.swift': 'Swift',
23
+ '.kt': 'Kotlin',
24
+ '.css': 'CSS',
25
+ '.scss': 'SCSS',
26
+ '.less': 'Less',
27
+ '.html': 'HTML',
28
+ '.vue': 'Vue',
29
+ '.svelte': 'Svelte',
30
+ '.md': 'Markdown',
31
+ '.json': 'JSON',
32
+ '.yaml': 'YAML',
33
+ '.yml': 'YAML',
34
+ };
35
+ // 目录用途推断
36
+ const DIRECTORY_PURPOSES = {
37
+ src: '源代码',
38
+ lib: '库代码',
39
+ pkg: 'Go 包',
40
+ internal: '内部模块',
41
+ cmd: '命令行入口',
42
+ api: 'API 接口',
43
+ server: '服务器代码',
44
+ client: '客户端代码',
45
+ web: 'Web 前端',
46
+ app: '应用入口',
47
+ components: 'UI 组件',
48
+ pages: '页面组件',
49
+ routes: '路由定义',
50
+ controllers: '控制器',
51
+ services: '服务层',
52
+ models: '数据模型',
53
+ utils: '工具函数',
54
+ helpers: '辅助函数',
55
+ hooks: 'React Hooks',
56
+ store: '状态管理',
57
+ types: '类型定义',
58
+ tests: '测试文件',
59
+ __tests__: '测试文件',
60
+ test: '测试文件',
61
+ spec: '规格文件',
62
+ docs: '文档',
63
+ scripts: '脚本',
64
+ config: '配置文件',
65
+ assets: '静态资源',
66
+ public: '公共资源',
67
+ static: '静态文件',
68
+ dist: '构建输出',
69
+ build: '构建输出',
70
+ out: '输出目录',
71
+ node_modules: 'npm 依赖',
72
+ vendor: '第三方依赖',
73
+ };
74
+ /**
75
+ * ContextAnalyzer 主类
76
+ */
77
+ export class ContextAnalyzer {
78
+ cwd;
79
+ cachedContext = null;
80
+ constructor(options) {
81
+ this.cwd = options?.cwd || process.cwd();
82
+ }
83
+ /**
84
+ * 获取缓存目录
85
+ */
86
+ getCacheDir() {
87
+ return path.join(this.cwd, 'openspec', '.cache');
88
+ }
89
+ /**
90
+ * 分析项目上下文
91
+ */
92
+ async analyze() {
93
+ const projectName = path.basename(this.cwd);
94
+ // 获取项目文件列表(排除常见忽略目录)
95
+ const files = await this.scanFiles(this.cwd);
96
+ // 分析语言分布
97
+ const languages = await this.analyzeLanguages(files);
98
+ // 分析目录结构
99
+ const structure = await this.analyzeStructure();
100
+ // 检测技术栈
101
+ const stack = await this.detectStack(languages);
102
+ // 检测模式
103
+ const patterns = await this.detectPatterns();
104
+ // 计算统计
105
+ const stats = this.calculateStats(files, languages);
106
+ const context = {
107
+ stack,
108
+ structure,
109
+ patterns,
110
+ stats,
111
+ analyzedAt: new Date().toISOString(),
112
+ projectRoot: this.cwd,
113
+ projectName,
114
+ };
115
+ // 缓存结果
116
+ this.cachedContext = context;
117
+ await this.saveContext(context);
118
+ return context;
119
+ }
120
+ /**
121
+ * 获取缓存的上下文
122
+ */
123
+ async getCachedContext() {
124
+ if (this.cachedContext) {
125
+ return this.cachedContext;
126
+ }
127
+ const cachePath = path.join(this.getCacheDir(), 'context.json');
128
+ try {
129
+ const content = await fs.readFile(cachePath, 'utf-8');
130
+ this.cachedContext = JSON.parse(content);
131
+ return this.cachedContext;
132
+ }
133
+ catch {
134
+ return null;
135
+ }
136
+ }
137
+ /**
138
+ * 刷新上下文
139
+ */
140
+ async refreshContext() {
141
+ this.cachedContext = null;
142
+ return this.analyze();
143
+ }
144
+ /**
145
+ * 扫描文件
146
+ */
147
+ async scanFiles(dir, prefix = '') {
148
+ const files = [];
149
+ const ignorePatterns = ['node_modules', '.git', 'dist', 'build', '.next', '__pycache__', '.cache', 'vendor'];
150
+ try {
151
+ const entries = await fs.readdir(dir, { withFileTypes: true });
152
+ for (const entry of entries) {
153
+ const name = entry.name;
154
+ const relativePath = path.join(prefix, name);
155
+ if (entry.isDirectory()) {
156
+ // 跳过忽略的目录
157
+ if (ignorePatterns.includes(name) || name.startsWith('.')) {
158
+ continue;
159
+ }
160
+ // 限制递归深度
161
+ if (relativePath.split(path.sep).length < 5) {
162
+ const subFiles = await this.scanFiles(path.join(dir, name), relativePath);
163
+ files.push(...subFiles);
164
+ }
165
+ }
166
+ else if (entry.isFile()) {
167
+ files.push(relativePath);
168
+ }
169
+ }
170
+ }
171
+ catch {
172
+ // 忽略无法访问的目录
173
+ }
174
+ return files;
175
+ }
176
+ /**
177
+ * 分析语言分布
178
+ */
179
+ async analyzeLanguages(files) {
180
+ const langStats = {};
181
+ let totalLines = 0;
182
+ for (const file of files) {
183
+ const ext = path.extname(file).toLowerCase();
184
+ const lang = LANGUAGE_EXTENSIONS[ext];
185
+ if (lang) {
186
+ if (!langStats[lang]) {
187
+ langStats[lang] = { files: 0, lines: 0 };
188
+ }
189
+ langStats[lang].files++;
190
+ // 估算行数(实际计数会太慢)
191
+ try {
192
+ const stat = await fs.stat(path.join(this.cwd, file));
193
+ const estimatedLines = Math.round(stat.size / 40); // 估算每行 40 字符
194
+ langStats[lang].lines += estimatedLines;
195
+ totalLines += estimatedLines;
196
+ }
197
+ catch {
198
+ // 忽略
199
+ }
200
+ }
201
+ }
202
+ // 转换为数组并计算百分比
203
+ return Object.entries(langStats)
204
+ .map(([name, stats]) => ({
205
+ name,
206
+ fileCount: stats.files,
207
+ lineCount: stats.lines,
208
+ percentage: totalLines > 0 ? Math.round((stats.lines / totalLines) * 100) : 0,
209
+ }))
210
+ .sort((a, b) => b.percentage - a.percentage)
211
+ .slice(0, 10); // 最多返回 10 种语言
212
+ }
213
+ /**
214
+ * 分析目录结构
215
+ */
216
+ async analyzeStructure() {
217
+ const rootFiles = [];
218
+ const mainDirectories = [];
219
+ const entryPoints = [];
220
+ try {
221
+ const entries = await fs.readdir(this.cwd, { withFileTypes: true });
222
+ for (const entry of entries) {
223
+ const name = entry.name;
224
+ if (entry.isFile()) {
225
+ // 跳过隐藏文件
226
+ if (!name.startsWith('.')) {
227
+ rootFiles.push(name);
228
+ }
229
+ // 检测入口点
230
+ if (['index.ts', 'index.js', 'main.ts', 'main.js', 'main.go', 'app.py', 'main.py'].includes(name)) {
231
+ entryPoints.push(name);
232
+ }
233
+ }
234
+ else if (entry.isDirectory() && !name.startsWith('.') && !['node_modules', 'vendor'].includes(name)) {
235
+ const purpose = DIRECTORY_PURPOSES[name.toLowerCase()] || '项目目录';
236
+ // 计算文件数
237
+ let fileCount = 0;
238
+ try {
239
+ const subFiles = await this.scanFiles(path.join(this.cwd, name));
240
+ fileCount = subFiles.length;
241
+ }
242
+ catch {
243
+ // 忽略
244
+ }
245
+ if (fileCount > 0) {
246
+ mainDirectories.push({
247
+ name,
248
+ purpose,
249
+ fileCount,
250
+ path: name,
251
+ });
252
+ }
253
+ }
254
+ }
255
+ }
256
+ catch {
257
+ // 忽略
258
+ }
259
+ // 检查 src 目录下的入口点
260
+ try {
261
+ const srcEntries = await fs.readdir(path.join(this.cwd, 'src'), { withFileTypes: true });
262
+ for (const entry of srcEntries) {
263
+ if (entry.isFile() && ['index.ts', 'index.js', 'main.ts', 'main.js'].includes(entry.name)) {
264
+ entryPoints.push(`src/${entry.name}`);
265
+ }
266
+ }
267
+ }
268
+ catch {
269
+ // src 目录不存在
270
+ }
271
+ return {
272
+ rootFiles: rootFiles.slice(0, 20),
273
+ mainDirectories: mainDirectories.sort((a, b) => b.fileCount - a.fileCount).slice(0, 10),
274
+ entryPoints,
275
+ };
276
+ }
277
+ /**
278
+ * 检测技术栈
279
+ */
280
+ async detectStack(languages) {
281
+ const frameworks = [];
282
+ let packageManager = 'unknown';
283
+ const buildTools = [];
284
+ let testFramework;
285
+ // 检测 package.json
286
+ try {
287
+ const pkgContent = await fs.readFile(path.join(this.cwd, 'package.json'), 'utf-8');
288
+ const pkg = JSON.parse(pkgContent);
289
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
290
+ packageManager = 'npm';
291
+ // 检测框架
292
+ if (allDeps['react'])
293
+ frameworks.push('React');
294
+ if (allDeps['vue'])
295
+ frameworks.push('Vue');
296
+ if (allDeps['@angular/core'])
297
+ frameworks.push('Angular');
298
+ if (allDeps['svelte'])
299
+ frameworks.push('Svelte');
300
+ if (allDeps['next'])
301
+ frameworks.push('Next.js');
302
+ if (allDeps['nuxt'])
303
+ frameworks.push('Nuxt');
304
+ if (allDeps['express'])
305
+ frameworks.push('Express');
306
+ if (allDeps['fastify'])
307
+ frameworks.push('Fastify');
308
+ if (allDeps['koa'])
309
+ frameworks.push('Koa');
310
+ if (allDeps['nestjs'] || allDeps['@nestjs/core'])
311
+ frameworks.push('NestJS');
312
+ // 检测构建工具
313
+ if (allDeps['typescript'])
314
+ buildTools.push('TypeScript');
315
+ if (allDeps['vite'])
316
+ buildTools.push('Vite');
317
+ if (allDeps['webpack'])
318
+ buildTools.push('Webpack');
319
+ if (allDeps['esbuild'])
320
+ buildTools.push('esbuild');
321
+ if (allDeps['rollup'])
322
+ buildTools.push('Rollup');
323
+ // 检测测试框架
324
+ if (allDeps['vitest'])
325
+ testFramework = 'Vitest';
326
+ else if (allDeps['jest'])
327
+ testFramework = 'Jest';
328
+ else if (allDeps['mocha'])
329
+ testFramework = 'Mocha';
330
+ }
331
+ catch {
332
+ // package.json 不存在
333
+ }
334
+ // 检测 go.mod
335
+ try {
336
+ await fs.access(path.join(this.cwd, 'go.mod'));
337
+ frameworks.push('Go');
338
+ packageManager = 'go modules';
339
+ }
340
+ catch {
341
+ // 不是 Go 项目
342
+ }
343
+ // 检测 requirements.txt 或 pyproject.toml
344
+ try {
345
+ await fs.access(path.join(this.cwd, 'requirements.txt'));
346
+ packageManager = 'pip';
347
+ }
348
+ catch {
349
+ try {
350
+ await fs.access(path.join(this.cwd, 'pyproject.toml'));
351
+ packageManager = 'poetry/pip';
352
+ }
353
+ catch {
354
+ // 不是 Python 项目
355
+ }
356
+ }
357
+ return {
358
+ languages,
359
+ frameworks,
360
+ packageManager,
361
+ buildTools,
362
+ testFramework,
363
+ };
364
+ }
365
+ /**
366
+ * 检测代码模式
367
+ */
368
+ async detectPatterns() {
369
+ let architecture = 'unknown';
370
+ const codeStyle = [];
371
+ const conventions = [];
372
+ // 检测架构类型
373
+ try {
374
+ const entries = await fs.readdir(this.cwd, { withFileTypes: true });
375
+ const dirNames = entries.filter(e => e.isDirectory()).map(e => e.name);
376
+ if (dirNames.includes('packages') || dirNames.includes('apps')) {
377
+ architecture = 'monorepo';
378
+ }
379
+ else if (dirNames.includes('cmd') && dirNames.includes('internal')) {
380
+ architecture = 'Go standard layout';
381
+ }
382
+ else if (dirNames.includes('src') && dirNames.includes('web')) {
383
+ architecture = 'MCP Server + Dashboard';
384
+ }
385
+ else if (dirNames.includes('src')) {
386
+ architecture = 'standard';
387
+ }
388
+ }
389
+ catch {
390
+ // 忽略
391
+ }
392
+ // 检测代码风格配置
393
+ const styleFiles = [
394
+ ['.eslintrc', 'ESLint'],
395
+ ['.eslintrc.js', 'ESLint'],
396
+ ['.eslintrc.json', 'ESLint'],
397
+ ['eslint.config.js', 'ESLint'],
398
+ ['.prettierrc', 'Prettier'],
399
+ ['prettier.config.js', 'Prettier'],
400
+ ['.editorconfig', 'EditorConfig'],
401
+ ['tsconfig.json', 'TypeScript'],
402
+ ['.stylelintrc', 'Stylelint'],
403
+ ];
404
+ for (const [file, tool] of styleFiles) {
405
+ try {
406
+ await fs.access(path.join(this.cwd, file));
407
+ if (!codeStyle.includes(tool)) {
408
+ codeStyle.push(tool);
409
+ }
410
+ }
411
+ catch {
412
+ // 文件不存在
413
+ }
414
+ }
415
+ // 检测约定
416
+ try {
417
+ await fs.access(path.join(this.cwd, '.github'));
418
+ conventions.push('GitHub workflows');
419
+ }
420
+ catch { /* 忽略 */ }
421
+ try {
422
+ await fs.access(path.join(this.cwd, 'openspec'));
423
+ conventions.push('OpenSpec');
424
+ }
425
+ catch { /* 忽略 */ }
426
+ try {
427
+ await fs.access(path.join(this.cwd, '.husky'));
428
+ conventions.push('Husky git hooks');
429
+ }
430
+ catch { /* 忽略 */ }
431
+ return { architecture, codeStyle, conventions };
432
+ }
433
+ /**
434
+ * 计算统计数据
435
+ */
436
+ calculateStats(files, languages) {
437
+ const byLanguage = {};
438
+ for (const lang of languages) {
439
+ byLanguage[lang.name] = lang.lineCount;
440
+ }
441
+ return {
442
+ totalFiles: files.length,
443
+ totalLines: languages.reduce((sum, l) => sum + l.lineCount, 0),
444
+ byLanguage,
445
+ };
446
+ }
447
+ /**
448
+ * 保存上下文
449
+ */
450
+ async saveContext(context) {
451
+ const cacheDir = this.getCacheDir();
452
+ try {
453
+ await fs.mkdir(cacheDir, { recursive: true });
454
+ await fs.writeFile(path.join(cacheDir, 'context.json'), JSON.stringify(context, null, 2), 'utf-8');
455
+ }
456
+ catch {
457
+ // 忽略保存错误
458
+ }
459
+ }
460
+ /**
461
+ * 获取 project.md 内容
462
+ */
463
+ async getProjectMd() {
464
+ const projectMdPath = path.join(this.cwd, 'openspec', 'project.md');
465
+ try {
466
+ return await fs.readFile(projectMdPath, 'utf-8');
467
+ }
468
+ catch {
469
+ return null;
470
+ }
471
+ }
472
+ /**
473
+ * 获取关键文件内容(用于 AI 分析)
474
+ */
475
+ async getKeyFiles() {
476
+ const keyFiles = {};
477
+ const filesToCheck = [
478
+ 'package.json',
479
+ 'go.mod',
480
+ 'README.md',
481
+ 'openspec/project.md',
482
+ ];
483
+ for (const file of filesToCheck) {
484
+ try {
485
+ const content = await fs.readFile(path.join(this.cwd, file), 'utf-8');
486
+ keyFiles[file] = content.slice(0, 2000); // 限制长度
487
+ }
488
+ catch {
489
+ // 文件不存在,跳过
490
+ }
491
+ }
492
+ return keyFiles;
493
+ }
494
+ }
495
+ //# sourceMappingURL=context-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analyzer.js","sourceRoot":"","sources":["../../src/core/context-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Prompt Manager
3
+ * 管理和生成 MCP Prompts
4
+ */
5
+ export interface PromptDefinition {
6
+ name: string;
7
+ description: string;
8
+ arguments?: Array<{
9
+ name: string;
10
+ description: string;
11
+ required?: boolean;
12
+ }>;
13
+ }
14
+ export interface PromptMessage {
15
+ role: 'user' | 'assistant';
16
+ content: {
17
+ type: 'text' | 'image' | 'resource';
18
+ text?: string;
19
+ resource?: {
20
+ uri: string;
21
+ mimeType?: string;
22
+ text?: string;
23
+ };
24
+ };
25
+ }
26
+ export declare class PromptManager {
27
+ private analyzer;
28
+ private cli;
29
+ private qaRunner;
30
+ constructor(options: {
31
+ cwd: string;
32
+ });
33
+ /**
34
+ * 获取所有可用的 Prompts 定义
35
+ */
36
+ getPrompts(): PromptDefinition[];
37
+ /**
38
+ * 生成 Prompt 内容
39
+ */
40
+ getPrompt(name: string, args?: Record<string, string>): Promise<PromptMessage[]>;
41
+ /**
42
+ * 生成 analyze-project prompt
43
+ */
44
+ private generateAnalyzeProjectPrompt;
45
+ /**
46
+ * 生成 review-change prompt
47
+ */
48
+ private generateReviewChangePrompt;
49
+ }
50
+ //# sourceMappingURL=prompt-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-manager.d.ts","sourceRoot":"","sources":["../../src/core/prompt-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE;YACT,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,QAAQ,CAAW;gBAEf,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAMpC;;OAEG;IACH,UAAU,IAAI,gBAAgB,EAAE;IA2BhC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAc1F;;OAEG;YACW,4BAA4B;IA4D1C;;OAEG;YACW,0BAA0B;CAiEzC"}