openspec-mcp 0.3.1 → 0.3.3

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,152 @@
1
+ /**
2
+ * Spec Critic Tests
3
+ */
4
+ import { describe, it, expect, beforeEach } from 'vitest';
5
+ import { SpecCritic } from './spec-critic.js';
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ describe('SpecCritic', () => {
10
+ let tempDir;
11
+ let critic;
12
+ beforeEach(async () => {
13
+ // 创建临时目录
14
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'spec-critic-test-'));
15
+ critic = new SpecCritic({ cwd: tempDir });
16
+ // 创建 openspec 目录结构
17
+ const changeDir = path.join(tempDir, 'openspec', 'changes', 'test-change');
18
+ await fs.mkdir(changeDir, { recursive: true });
19
+ });
20
+ describe('critiqueProposal', () => {
21
+ it('should detect missing problem description', async () => {
22
+ // 创建缺少问题描述的 proposal
23
+ const proposalPath = path.join(tempDir, 'openspec', 'changes', 'test-change', 'proposal.md');
24
+ await fs.writeFile(proposalPath, `
25
+ # Solution
26
+
27
+ This is the solution.
28
+ `);
29
+ const result = await critic.critiqueProposal('test-change');
30
+ expect(result.changeName).toBe('test-change');
31
+ expect(result.documentType).toBe('proposal');
32
+ expect(result.critiques.some(c => c.id.length > 0)).toBe(true);
33
+ // 应该检测到缺少问题描述
34
+ const missingProblem = result.critiques.find(c => c.category === 'completeness' && c.title.includes('问题'));
35
+ expect(missingProblem).toBeDefined();
36
+ });
37
+ it('should detect missing solution', async () => {
38
+ const proposalPath = path.join(tempDir, 'openspec', 'changes', 'test-change', 'proposal.md');
39
+ await fs.writeFile(proposalPath, `
40
+ # Problem
41
+
42
+ This is the problem.
43
+ `);
44
+ const result = await critic.critiqueProposal('test-change');
45
+ // 应该检测到缺少解决方案
46
+ const missingSolution = result.critiques.find(c => c.category === 'completeness' && c.title.includes('解决方案'));
47
+ expect(missingSolution).toBeDefined();
48
+ });
49
+ it('should detect TODO placeholders', async () => {
50
+ const proposalPath = path.join(tempDir, 'openspec', 'changes', 'test-change', 'proposal.md');
51
+ await fs.writeFile(proposalPath, `
52
+ # Problem
53
+
54
+ We need to fix this issue.
55
+
56
+ # Solution
57
+
58
+ TODO: Implement the solution
59
+
60
+ TBD: Decide on the approach
61
+ `);
62
+ const result = await critic.critiqueProposal('test-change');
63
+ // 应该检测到 TODO
64
+ const todoFound = result.critiques.find(c => c.category === 'feasibility' && c.title.includes('TODO'));
65
+ expect(todoFound).toBeDefined();
66
+ });
67
+ it('should detect short documents', async () => {
68
+ const proposalPath = path.join(tempDir, 'openspec', 'changes', 'test-change', 'proposal.md');
69
+ await fs.writeFile(proposalPath, 'Short doc.');
70
+ const result = await critic.critiqueProposal('test-change');
71
+ // 应该检测到文档过短
72
+ const tooShort = result.critiques.find(c => c.category === 'clarity' && c.title.includes('过短'));
73
+ expect(tooShort).toBeDefined();
74
+ });
75
+ it('should give high score for complete document', async () => {
76
+ const proposalPath = path.join(tempDir, 'openspec', 'changes', 'test-change', 'proposal.md');
77
+ await fs.writeFile(proposalPath, `
78
+ # Problem
79
+
80
+ We have a significant issue with our authentication system. Users are experiencing slow login times due to synchronous database queries. This affects user experience and increases server load during peak hours.
81
+
82
+ # Solution
83
+
84
+ We will implement asynchronous authentication with Redis caching:
85
+ 1. Cache user sessions in Redis
86
+ 2. Use async/await for database queries
87
+ 3. Add connection pooling
88
+
89
+ ## Impact
90
+
91
+ This change affects:
92
+ - login.ts - Main authentication handler
93
+ - session-manager.ts - Session storage
94
+ - redis-client.ts - Cache layer
95
+
96
+ ## Error Handling
97
+
98
+ We handle errors by:
99
+ - Retry logic for Redis connection failures
100
+ - Fallback to database if cache miss
101
+ - Proper exception propagation
102
+
103
+ ## Security
104
+
105
+ Authentication tokens are:
106
+ - Encrypted with AES-256
107
+ - Rotated every 24 hours
108
+ - Validated server-side
109
+ `);
110
+ const result = await critic.critiqueProposal('test-change');
111
+ // 完整文档应该得高分
112
+ expect(result.overallScore).toBeGreaterThanOrEqual(7);
113
+ expect(result.summary.critical).toBe(0);
114
+ });
115
+ });
116
+ describe('getCritiqueHistory', () => {
117
+ it('should return empty array when no history', async () => {
118
+ const history = await critic.getCritiqueHistory('nonexistent-change');
119
+ expect(history).toEqual([]);
120
+ });
121
+ });
122
+ describe('saveCritiqueResult', () => {
123
+ it('should save and retrieve critique result', async () => {
124
+ const result = {
125
+ changeName: 'test-change',
126
+ documentType: 'proposal',
127
+ overallScore: 7.5,
128
+ critiques: [],
129
+ suggestions: ['Test suggestion'],
130
+ summary: {
131
+ total: 0,
132
+ critical: 0,
133
+ warning: 0,
134
+ info: 0,
135
+ byCategory: {
136
+ completeness: 0,
137
+ feasibility: 0,
138
+ security: 0,
139
+ edge_case: 0,
140
+ clarity: 0,
141
+ },
142
+ },
143
+ createdAt: new Date().toISOString(),
144
+ };
145
+ await critic.saveCritiqueResult(result);
146
+ const history = await critic.getCritiqueHistory('test-change');
147
+ expect(history.length).toBe(1);
148
+ expect(history[0].overallScore).toBe(7.5);
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=spec-critic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-critic.test.js","sourceRoot":"","sources":["../../src/core/spec-critic.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -25,8 +25,17 @@ import { registerTemplatesTools } from './server/tools/templates.js';
25
25
  import { registerHooksTools } from './server/tools/hooks.js';
26
26
  import { registerGeneratorTools } from './server/tools/generator.js';
27
27
  import { registerCrossServiceTools } from './server/tools/cross-service.js';
28
+ import { registerCritiqueTools } from './server/tools/critique.js';
29
+ import { registerQATools } from './server/tools/qa.js';
30
+ import { registerContextTools } from './server/tools/context.js';
31
+ import { registerAIContextTools } from './server/tools/ai-context.js';
28
32
  import { CrossServiceManager } from './core/cross-service-manager.js';
33
+ import { SpecCritic } from './core/spec-critic.js';
34
+ import { QARunner } from './core/qa-runner.js';
35
+ import { ContextAnalyzer } from './core/context-analyzer.js';
29
36
  import { VERSION } from './utils/version.js';
37
+ import { PromptManager } from './core/prompt-manager.js';
38
+ import { ListPromptsRequestSchema, GetPromptRequestSchema } from '@modelcontextprotocol/sdk/types.js';
30
39
  /**
31
40
  * 创建并配置 MCP Server
32
41
  */
@@ -56,6 +65,30 @@ function createMcpServer(cwd) {
56
65
  // 跨服务文档管理
57
66
  const crossServiceManager = new CrossServiceManager({ cwd });
58
67
  registerCrossServiceTools(server, crossServiceManager);
68
+ // 规格评审
69
+ const specCritic = new SpecCritic({ cwd });
70
+ registerCritiqueTools(server, specCritic);
71
+ // 质量检查
72
+ const qaRunner = new QARunner({ cwd });
73
+ registerQATools(server, qaRunner);
74
+ // 项目上下文分析
75
+ const contextAnalyzer = new ContextAnalyzer({ cwd });
76
+ registerContextTools(server, contextAnalyzer);
77
+ registerAIContextTools(server, contextAnalyzer);
78
+ // 注册 Prompts
79
+ const promptManager = new PromptManager({ cwd });
80
+ // 尝试注册 Prompt Handlers (通过底层 server 实例)
81
+ const coreServer = server.server;
82
+ if (coreServer && typeof coreServer.setRequestHandler === 'function') {
83
+ coreServer.setRequestHandler(ListPromptsRequestSchema, async () => {
84
+ return { prompts: promptManager.getPrompts() };
85
+ });
86
+ coreServer.setRequestHandler(GetPromptRequestSchema, async (request) => {
87
+ const { name, arguments: args } = request.params;
88
+ const messages = await promptManager.getPrompt(name, args);
89
+ return { messages };
90
+ });
91
+ }
59
92
  return server;
60
93
  }
61
94
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * AI Context Tools - AI 增强的项目上下文分析
3
+ *
4
+ * 利用 MCP Sampling 能力调用 Client AI 进行深度分析
5
+ * 并给出 project.md 更新建议
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import { ContextAnalyzer } from '../../core/context-analyzer.js';
9
+ /**
10
+ * 注册 AI Context 相关工具
11
+ */
12
+ export declare function registerAIContextTools(server: McpServer, analyzer: ContextAnalyzer): void;
13
+ //# sourceMappingURL=ai-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context.d.ts","sourceRoot":"","sources":["../../../src/server/tools/ai-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAkB,MAAM,gCAAgC,CAAC;AAEjF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,GACxB,IAAI,CA2DN"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * AI Context Tools - AI 增强的项目上下文分析
3
+ *
4
+ * 利用 MCP Sampling 能力调用 Client AI 进行深度分析
5
+ * 并给出 project.md 更新建议
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * 注册 AI Context 相关工具
10
+ */
11
+ export function registerAIContextTools(server, analyzer) {
12
+ /**
13
+ * AI 深度分析项目上下文
14
+ */
15
+ server.registerTool('openspec_ai_analyze_context', {
16
+ description: `使用 AI 深度分析项目上下文并给出 project.md 更新建议。
17
+ 利用 MCP Client 的 AI 能力进行分析。`,
18
+ inputSchema: z.object({
19
+ focus: z
20
+ .enum(['overview', 'architecture', 'improvements', 'conventions'])
21
+ .optional()
22
+ .describe('分析重点:overview(总览), architecture(架构), improvements(改进建议), conventions(约定规范)'),
23
+ }),
24
+ }, async ({ focus = 'overview' }) => {
25
+ try {
26
+ // 1. 收集上下文
27
+ const staticContext = await analyzer.analyze();
28
+ const projectMd = await analyzer.getProjectMd();
29
+ const keyFiles = await analyzer.getKeyFiles();
30
+ // 2. 构建分析 Prompt
31
+ const prompt = buildAnalysisPrompt(staticContext, projectMd, keyFiles, focus);
32
+ // 3. 使用 MCP Sampling 请求 Client AI
33
+ // 注意:这需要 Client 支持 sampling 能力
34
+ const samplingResult = await requestSampling(server, prompt);
35
+ if (!samplingResult.success) {
36
+ // Sampling 不可用,返回静态分析结果
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: `${formatStaticContext(staticContext, projectMd)}\n\n> ⚠️ 注意: AI 深度分析不可用(${samplingResult.error})。以上为静态分析结果。`,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: samplingResult.response,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : 'Unknown error';
57
+ return {
58
+ content: [{ type: 'text', text: `❌ 分析失败: ${message}` }],
59
+ isError: true,
60
+ };
61
+ }
62
+ });
63
+ }
64
+ /**
65
+ * 构建分析 Prompt
66
+ */
67
+ function buildAnalysisPrompt(context, projectMd, keyFiles, focus) {
68
+ const languagesSummary = context.stack.languages
69
+ .slice(0, 5)
70
+ .map((l) => `${l.name}: ${l.percentage}%`)
71
+ .join(', ');
72
+ const directoriesSummary = context.structure.mainDirectories
73
+ .slice(0, 8)
74
+ .map((d) => `${d.name}/ (${d.purpose}, ${d.fileCount} files)`)
75
+ .join('\n');
76
+ const focusInstructions = {
77
+ overview: '请给出项目的整体概述和架构理解',
78
+ architecture: '请深入分析项目架构设计,包括分层、模块划分、依赖关系',
79
+ improvements: '请找出项目中可以改进的地方,包括代码组织、最佳实践、潜在问题',
80
+ conventions: '请分析项目的编码约定和规范,建议补充缺失的约定',
81
+ };
82
+ return `你是一个资深软件架构师,请分析以下项目并给出见解。
83
+
84
+ ## 分析重点
85
+ ${focusInstructions[focus] || focusInstructions.overview}
86
+
87
+ ## 当前 project.md
88
+ \`\`\`markdown
89
+ ${projectMd || '(尚未创建 openspec/project.md)'}
90
+ \`\`\`
91
+
92
+ ## 静态分析结果
93
+
94
+ ### 技术栈
95
+ - 语言分布: ${languagesSummary}
96
+ - 框架: ${context.stack.frameworks.join(', ') || '未检测到'}
97
+ - 包管理器: ${context.stack.packageManager}
98
+ - 构建工具: ${context.stack.buildTools.join(', ') || '无'}
99
+ - 测试框架: ${context.stack.testFramework || '未检测到'}
100
+
101
+ ### 目录结构
102
+ ${directoriesSummary}
103
+
104
+ ### 统计
105
+ - 文件总数: ${context.stats.totalFiles}
106
+ - 预估代码行数: ${context.stats.totalLines}
107
+
108
+ ### 关键文件
109
+ ${Object.entries(keyFiles)
110
+ .map(([name, content]) => `#### ${name}\n\`\`\`\n${content.slice(0, 500)}${content.length > 500 ? '\n...(truncated)' : ''}\n\`\`\``)
111
+ .join('\n\n')}
112
+
113
+ ---
114
+
115
+ 请按以下格式输出:
116
+
117
+ ## 项目分析
118
+ (你对项目的理解和分析)
119
+
120
+ ## project.md 更新建议
121
+ (如果 project.md 已存在,使用 diff 格式标注增删;如果不存在,给出完整的推荐内容)
122
+
123
+ \`\`\`markdown
124
+ (更新后的 project.md 内容或 diff)
125
+ \`\`\`
126
+ `;
127
+ }
128
+ /**
129
+ * 请求 MCP Sampling
130
+ */
131
+ async function requestSampling(server, prompt) {
132
+ try {
133
+ // 检查 server 是否支持 createMessage
134
+ if (typeof server.createMessage !== 'function') {
135
+ return {
136
+ success: false,
137
+ error: 'MCP Server 不支持 sampling,请确保 Client 支持此功能',
138
+ };
139
+ }
140
+ const result = await server.createMessage({
141
+ messages: [
142
+ {
143
+ role: 'user',
144
+ content: {
145
+ type: 'text',
146
+ text: prompt,
147
+ },
148
+ },
149
+ ],
150
+ maxTokens: 3000,
151
+ modelPreferences: {
152
+ hints: [{ name: 'claude-3-5-sonnet' }],
153
+ },
154
+ });
155
+ // 提取响应文本
156
+ const responseText = typeof result.content === 'string'
157
+ ? result.content
158
+ : result.content?.text || JSON.stringify(result.content);
159
+ return { success: true, response: responseText };
160
+ }
161
+ catch (error) {
162
+ const message = error instanceof Error ? error.message : 'Unknown sampling error';
163
+ return { success: false, error: message };
164
+ }
165
+ }
166
+ /**
167
+ * 格式化静态上下文(Sampling 不可用时的备选)
168
+ * 提供完整的静态分析结果和 project.md 模板建议
169
+ */
170
+ function formatStaticContext(context, projectMd) {
171
+ const primaryLang = context.stack.languages[0];
172
+ const langList = context.stack.languages.slice(0, 5).map(l => `${l.name} (${l.percentage}%)`).join(', ');
173
+ const sections = [
174
+ // 技术栈分析
175
+ `## 项目分析(静态)`,
176
+ '',
177
+ `### 技术栈`,
178
+ `| 项目 | 信息 |`,
179
+ `|------|------|`,
180
+ `| **主要语言** | ${primaryLang?.name || '未知'} (${primaryLang?.percentage || 0}%) |`,
181
+ `| **语言分布** | ${langList} |`,
182
+ `| **框架** | ${context.stack.frameworks.join(', ') || '未检测到'} |`,
183
+ `| **包管理器** | ${context.stack.packageManager} |`,
184
+ `| **构建工具** | ${context.stack.buildTools.join(', ') || '无'} |`,
185
+ `| **测试框架** | ${context.stack.testFramework || '未检测到'} |`,
186
+ '',
187
+ // 目录结构
188
+ `### 目录结构`,
189
+ '',
190
+ ...context.structure.mainDirectories.slice(0, 10).map(d => `- \`${d.name}/\` - ${d.purpose} (${d.fileCount} 文件)`),
191
+ '',
192
+ // 统计信息
193
+ `### 统计`,
194
+ `- **文件总数**: ${context.stats.totalFiles.toLocaleString()}`,
195
+ `- **预估代码行**: ${context.stats.totalLines.toLocaleString()}`,
196
+ '',
197
+ // 架构模式
198
+ `### 检测到的模式`,
199
+ `- **架构风格**: ${context.patterns.architecture}`,
200
+ `- **代码风格**: ${context.patterns.codeStyle.join(', ') || '未配置'}`,
201
+ `- **约定规范**: ${context.patterns.conventions.join(', ') || '无'}`,
202
+ ];
203
+ // 如果 project.md 不存在,生成模板
204
+ if (!projectMd) {
205
+ sections.push('', `---`, '', `## project.md 模板建议`, '', `你尚未创建 \`openspec/project.md\`。以下是基于静态分析的推荐模板:`, '', '```markdown', `# ${context.projectName}`, '', `## 项目概述`, `<!-- 描述项目的目的和主要功能 -->`, '', `## 技术栈`, `- **主要语言**: ${primaryLang?.name || '未知'}`, `- **框架**: ${context.stack.frameworks.join(', ') || '无'}`, `- **包管理器**: ${context.stack.packageManager}`, context.stack.testFramework ? `- **测试框架**: ${context.stack.testFramework}` : '', '', `## 项目结构`, ...context.structure.mainDirectories.slice(0, 6).map(d => `- \`${d.name}/\` - ${d.purpose}`), '', `## 开发约定`, `<!-- 描述编码规范、提交消息格式等 -->`, '', `## 外部依赖`, `<!-- 列出重要的外部服务或 API -->`, '```', '', `> 💡 将上述内容保存到 \`openspec/project.md\`,然后再次运行分析获取更好的结果。`);
206
+ }
207
+ else {
208
+ sections.push('', `---`, '', `## project.md 状态`, `✅ 已存在 \`openspec/project.md\`(${projectMd.length} 字符)`);
209
+ }
210
+ return sections.filter(Boolean).join('\n');
211
+ }
212
+ //# sourceMappingURL=ai-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context.js","sourceRoot":"","sources":["../../../src/server/tools/ai-context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/server/tools/approval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,GAC/B,IAAI,CAmON"}
1
+ {"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/server/tools/approval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,GAC/B,IAAI,CA6ON"}
@@ -7,8 +7,11 @@ export function registerApprovalTools(server, approvalManager) {
7
7
  /**
8
8
  * 获取审批状态
9
9
  */
10
- server.tool('openspec_get_approval_status', 'Get approval status for a change', {
11
- changeId: z.string().describe('Change ID'),
10
+ server.registerTool('openspec_get_approval_status', {
11
+ description: 'Get approval status for a change',
12
+ inputSchema: {
13
+ changeId: z.string().describe('Change ID'),
14
+ },
12
15
  }, async ({ changeId }) => {
13
16
  const record = await approvalManager.getApprovalStatus(changeId);
14
17
  if (!record) {
@@ -55,13 +58,16 @@ export function registerApprovalTools(server, approvalManager) {
55
58
  /**
56
59
  * 请求审批
57
60
  */
58
- server.tool('openspec_request_approval', 'Request approval for a change', {
59
- changeId: z.string().describe('Change ID'),
60
- requestedBy: z.string().describe('Who is requesting approval'),
61
- reviewers: z
62
- .array(z.string())
63
- .optional()
64
- .describe('List of reviewers'),
61
+ server.registerTool('openspec_request_approval', {
62
+ description: 'Request approval for a change',
63
+ inputSchema: {
64
+ changeId: z.string().describe('Change ID'),
65
+ requestedBy: z.string().describe('Who is requesting approval'),
66
+ reviewers: z
67
+ .array(z.string())
68
+ .optional()
69
+ .describe('List of reviewers'),
70
+ },
65
71
  }, async ({ changeId, requestedBy, reviewers }) => {
66
72
  try {
67
73
  const record = await approvalManager.requestApproval(changeId, requestedBy, reviewers);
@@ -90,10 +96,13 @@ export function registerApprovalTools(server, approvalManager) {
90
96
  /**
91
97
  * 审批通过
92
98
  */
93
- server.tool('openspec_approve_change', 'Approve a change', {
94
- changeId: z.string().describe('Change ID'),
95
- approver: z.string().describe('Who is approving'),
96
- comment: z.string().optional().describe('Optional approval comment'),
99
+ server.registerTool('openspec_approve_change', {
100
+ description: 'Approve a change',
101
+ inputSchema: {
102
+ changeId: z.string().describe('Change ID'),
103
+ approver: z.string().describe('Who is approving'),
104
+ comment: z.string().optional().describe('Optional approval comment'),
105
+ },
97
106
  }, async ({ changeId, approver, comment }) => {
98
107
  try {
99
108
  const record = await approvalManager.approve(changeId, approver, comment);
@@ -122,10 +131,13 @@ export function registerApprovalTools(server, approvalManager) {
122
131
  /**
123
132
  * 审批拒绝
124
133
  */
125
- server.tool('openspec_reject_change', 'Reject a change', {
126
- changeId: z.string().describe('Change ID'),
127
- rejector: z.string().describe('Who is rejecting'),
128
- reason: z.string().describe('Rejection reason'),
134
+ server.registerTool('openspec_reject_change', {
135
+ description: 'Reject a change',
136
+ inputSchema: {
137
+ changeId: z.string().describe('Change ID'),
138
+ rejector: z.string().describe('Who is rejecting'),
139
+ reason: z.string().describe('Rejection reason'),
140
+ },
129
141
  }, async ({ changeId, rejector, reason }) => {
130
142
  try {
131
143
  const record = await approvalManager.reject(changeId, rejector, reason);
@@ -152,7 +164,10 @@ export function registerApprovalTools(server, approvalManager) {
152
164
  /**
153
165
  * 列出待审批的变更
154
166
  */
155
- server.tool('openspec_list_pending_approvals', 'List all changes pending approval', {}, async () => {
167
+ server.registerTool('openspec_list_pending_approvals', {
168
+ description: 'List all changes pending approval',
169
+ inputSchema: {},
170
+ }, async () => {
156
171
  const pending = await approvalManager.listPendingApprovals();
157
172
  if (pending.length === 0) {
158
173
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/server/tools/approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/server/tools/approval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,eAAgC;IAEhC;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;SAC3C;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iCAAiC,QAAQ,kEAAkE;qBAClH;iBACF;aACF,CAAC;QACJ,CAAC;QAED,QAAQ;QACR,IAAI,IAAI,GAAG,oBAAoB,QAAQ,IAAI,CAAC;QAC5C,IAAI,IAAI,8BAA8B,CAAC;QACvC,IAAI,IAAI,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAEnD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,IAAI,cAAc,MAAM,CAAC,WAAW,IAAI,CAAC;YAC7C,IAAI,IAAI,iBAAiB,MAAM,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC;QAC/D,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,cAAc,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,IAAI,gBAAgB,CAAC;YACzB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxC,IAAI,IAAI,OAAO,QAAQ,CAAC,QAAQ,OAAO,QAAQ,CAAC,UAAU,IAAI,CAAC;gBAC/D,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrB,IAAI,IAAI,iBAAiB,QAAQ,CAAC,OAAO,IAAI,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,IAAI,iBAAiB,CAAC;YAC1B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,IAAI,OAAO,SAAS,CAAC,QAAQ,OAAO,SAAS,CAAC,UAAU,IAAI,CAAC;gBACjE,IAAI,IAAI,gBAAgB,SAAS,CAAC,MAAM,IAAI,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC9D,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,mBAAmB,CAAC;SACjC;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,eAAe,CAClD,QAAQ,EACR,WAAW,EACX,SAAS,CACV,CAAC;YAEF,IAAI,IAAI,GAAG,6BAA6B,QAAQ,MAAM,CAAC;YACvD,IAAI,IAAI,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,iBAAiB,WAAW,IAAI,CAAC;YAEzC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,IAAI,cAAc,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAClC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iCAAiC,KAAK,CAAC,OAAO,EAAE;qBACvD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACrE;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE1E,IAAI,IAAI,GAAG,sBAAsB,QAAQ,MAAM,CAAC;YAChD,IAAI,IAAI,gBAAgB,QAAQ,IAAI,CAAC;YACrC,IAAI,IAAI,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAEnD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,IAAI,YAAY,OAAO,IAAI,CAAC;YAClC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAClC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,wBAAwB,KAAK,CAAC,OAAO,EAAE;qBAC9C;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAChD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAExE,IAAI,IAAI,GAAG,sBAAsB,QAAQ,MAAM,CAAC;YAChD,IAAI,IAAI,gBAAgB,QAAQ,IAAI,CAAC;YACrC,IAAI,IAAI,WAAW,MAAM,IAAI,CAAC;YAC9B,IAAI,IAAI,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAEnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAClC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uBAAuB,KAAK,CAAC,OAAO,EAAE;qBAC7C;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,iCAAiC,EACjC;QACE,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,oBAAoB,EAAE,CAAC;QAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,wGAAwG;qBAC/G;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,GAAG,qBAAqB,CAAC;QACjC,IAAI,IAAI,uBAAuB,CAAC;QAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,MAAM,MAAM,CAAC,QAAQ,IAAI,CAAC;YAClC,IAAI,IAAI,iBAAiB,MAAM,CAAC,WAAW,IAAI,CAAC;YAChD,IAAI,IAAI,UAAU,MAAM,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC;YAEtD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,IAAI,iBAAiB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3D,CAAC;YAED,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,SAAS,GAA2B;QACxC,KAAK,EAAE,UAAU;QACjB,gBAAgB,EAAE,oBAAoB;QACtC,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,iBAAiB;QAC/B,SAAS,EAAE,cAAc;KAC1B,CAAC;IACF,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/server/tools/archive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAuC9E"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/server/tools/archive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAyC9E"}
@@ -7,12 +7,15 @@ export function registerArchiveTools(server, cli) {
7
7
  /**
8
8
  * 归档变更
9
9
  */
10
- server.tool('openspec_archive_change', 'Archive a completed change proposal', {
11
- changeId: z.string().describe('Change ID to archive'),
12
- skipSpecs: z
13
- .boolean()
14
- .optional()
15
- .describe('Skip merging delta specs into main specs'),
10
+ server.registerTool('openspec_archive_change', {
11
+ description: 'Archive a completed change proposal',
12
+ inputSchema: {
13
+ changeId: z.string().describe('Change ID to archive'),
14
+ skipSpecs: z
15
+ .boolean()
16
+ .optional()
17
+ .describe('Skip merging delta specs into main specs'),
18
+ },
16
19
  }, async ({ changeId, skipSpecs }) => {
17
20
  const result = await cli.archiveChange(changeId, { skipSpecs });
18
21
  if (result.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/server/tools/archive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,GAAgB;IACtE;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,qCAAqC,EACrC;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACrD,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,0CAA0C,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mCAAmC,QAAQ,oBAAoB,MAAM,CAAC,YAAY,EAAE;qBAC3F;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+BAA+B,QAAQ,cAAc,MAAM,CAAC,KAAK,EAAE;qBAC1E;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/server/tools/archive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,GAAgB;IACtE;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,0CAA0C,CAAC;SACxD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mCAAmC,QAAQ,oBAAoB,MAAM,CAAC,YAAY,EAAE;qBAC3F;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+BAA+B,QAAQ,cAAc,MAAM,CAAC,KAAK,EAAE;qBAC1E;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}