yuangs 3.23.0 → 3.26.0

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 (54) hide show
  1. package/dist/agent/AgentRuntime.d.ts +2 -1
  2. package/dist/agent/AgentRuntime.js +69 -4
  3. package/dist/agent/AgentRuntime.js.map +1 -1
  4. package/dist/agent/astParser.d.ts +45 -0
  5. package/dist/agent/astParser.js +232 -0
  6. package/dist/agent/astParser.js.map +1 -0
  7. package/dist/agent/codeSummary.d.ts +2 -2
  8. package/dist/agent/codeSummary.js +36 -76
  9. package/dist/agent/codeSummary.js.map +1 -1
  10. package/dist/agent/executor.d.ts +6 -0
  11. package/dist/agent/executor.js +55 -20
  12. package/dist/agent/executor.js.map +1 -1
  13. package/dist/agent/llm.d.ts +1 -1
  14. package/dist/agent/llm.js +51 -1
  15. package/dist/agent/llm.js.map +1 -1
  16. package/dist/agent/llmAdapter.d.ts +1 -1
  17. package/dist/agent/llmAdapter.js +8 -52
  18. package/dist/agent/llmAdapter.js.map +1 -1
  19. package/dist/agent/prompt.js +16 -37
  20. package/dist/agent/prompt.js.map +1 -1
  21. package/dist/agent/protocolV2_2.d.ts +22 -0
  22. package/dist/agent/protocolV2_2.js +217 -0
  23. package/dist/agent/protocolV2_2.js.map +1 -0
  24. package/dist/agent/skills.js +14 -6
  25. package/dist/agent/skills.js.map +1 -1
  26. package/dist/commands/handleAIChat.js +2 -2
  27. package/dist/commands/handleAIChat.js.map +1 -1
  28. package/dist/commands/handleAICommand.js +1 -1
  29. package/dist/commands/handleAICommand.js.map +1 -1
  30. package/dist/core/capabilitySystem.d.ts +1 -1
  31. package/dist/core/capabilitySystem.js +2 -2
  32. package/dist/core/capabilitySystem.js.map +1 -1
  33. package/dist/core/executionRecord.d.ts +2 -1
  34. package/dist/core/executionRecord.js +3 -1
  35. package/dist/core/executionRecord.js.map +1 -1
  36. package/dist/core/kernel/ASTParser.d.ts +86 -0
  37. package/dist/core/kernel/ASTParser.js +208 -0
  38. package/dist/core/kernel/ASTParser.js.map +1 -0
  39. package/dist/core/kernel/AtomicTransactionManager.d.ts +119 -0
  40. package/dist/core/kernel/AtomicTransactionManager.js +268 -0
  41. package/dist/core/kernel/AtomicTransactionManager.js.map +1 -0
  42. package/dist/core/kernel/FastScanner.d.ts +77 -0
  43. package/dist/core/kernel/FastScanner.js +273 -0
  44. package/dist/core/kernel/FastScanner.js.map +1 -0
  45. package/dist/core/kernel/PostCheckVerifier.d.ts +86 -0
  46. package/dist/core/kernel/PostCheckVerifier.js +182 -0
  47. package/dist/core/kernel/PostCheckVerifier.js.map +1 -0
  48. package/dist/core/kernel/XResolver.d.ts +76 -0
  49. package/dist/core/kernel/XResolver.js +217 -0
  50. package/dist/core/kernel/XResolver.js.map +1 -0
  51. package/dist/utils/renderer.d.ts +18 -1
  52. package/dist/utils/renderer.js +56 -8
  53. package/dist/utils/renderer.js.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Post-Check Verifier for Atomic Transactions
3
+ *
4
+ * 后验证检查器 - 确保代码修改后的工程质量
5
+ *
6
+ * 核心功能:
7
+ * 1. 执行 TypeScript 类型检查
8
+ * 2. 运行自定义验证命令
9
+ * 3. 捕获并结构化错误信息
10
+ * 4. 为 AI 提供可修复的反馈
11
+ */
12
+ /**
13
+ * 验证结果
14
+ */
15
+ export interface VerificationResult {
16
+ /** 验证是否通过 */
17
+ passed: boolean;
18
+ /** 输出日志(标准输出) */
19
+ stdout?: string;
20
+ /** 错误日志(标准错误) */
21
+ stderr?: string;
22
+ /** 完整的错误信息 */
23
+ error?: string;
24
+ /** 验证耗时(毫秒) */
25
+ duration: number;
26
+ }
27
+ /**
28
+ * 验证器配置
29
+ */
30
+ export interface VerifierConfig {
31
+ /** TypeScript 检查命令(默认: npx tsc --noEmit) */
32
+ typeCheckCommand: string;
33
+ /** 自定义验证命令(可选) */
34
+ customCheckCommand?: string;
35
+ /** 工作目录(默认: 当前目录) */
36
+ cwd?: string;
37
+ /** 超时时间(毫秒) */
38
+ timeout?: number;
39
+ }
40
+ /**
41
+ * 后验证检查器
42
+ *
43
+ * 执行编译检查和自定义验证,确保代码修改不会破坏项目
44
+ */
45
+ export declare class PostCheckVerifier {
46
+ private config;
47
+ constructor(config?: Partial<VerifierConfig>);
48
+ /**
49
+ * 执行类型检查
50
+ *
51
+ * @returns 验证结果
52
+ */
53
+ verifyTypeCheck(): Promise<VerificationResult>;
54
+ /**
55
+ * 执行自定义验证
56
+ *
57
+ * @returns 验证结果
58
+ */
59
+ verifyCustomCheck(): Promise<VerificationResult>;
60
+ /**
61
+ * 执行所有验证
62
+ *
63
+ * @returns 验证结果(任何一项失败即整体失败)
64
+ */
65
+ verifyAll(): Promise<VerificationResult>;
66
+ /**
67
+ * 运行单个检查命令
68
+ */
69
+ private runCheck;
70
+ /**
71
+ * 格式化错误信息,便于 AI 理解
72
+ */
73
+ formatErrorForAI(result: VerificationResult): string;
74
+ /**
75
+ * 提取文件路径和行号(用于定位错误)
76
+ */
77
+ extractErrorLocations(result: VerificationResult): Array<{
78
+ file: string;
79
+ line: number;
80
+ message: string;
81
+ }>;
82
+ /**
83
+ * 更新配置
84
+ */
85
+ updateConfig(config: Partial<VerifierConfig>): void;
86
+ }
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * Post-Check Verifier for Atomic Transactions
4
+ *
5
+ * 后验证检查器 - 确保代码修改后的工程质量
6
+ *
7
+ * 核心功能:
8
+ * 1. 执行 TypeScript 类型检查
9
+ * 2. 运行自定义验证命令
10
+ * 3. 捕获并结构化错误信息
11
+ * 4. 为 AI 提供可修复的反馈
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.PostCheckVerifier = void 0;
15
+ const child_process_1 = require("child_process");
16
+ const util_1 = require("util");
17
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
18
+ /**
19
+ * 后验证检查器
20
+ *
21
+ * 执行编译检查和自定义验证,确保代码修改不会破坏项目
22
+ */
23
+ class PostCheckVerifier {
24
+ config;
25
+ constructor(config) {
26
+ this.config = {
27
+ typeCheckCommand: 'npx tsc --noEmit',
28
+ cwd: process.cwd(),
29
+ timeout: 60000,
30
+ ...config
31
+ };
32
+ }
33
+ /**
34
+ * 执行类型检查
35
+ *
36
+ * @returns 验证结果
37
+ */
38
+ async verifyTypeCheck() {
39
+ return this.runCheck(this.config.typeCheckCommand, 'Type Check');
40
+ }
41
+ /**
42
+ * 执行自定义验证
43
+ *
44
+ * @returns 验证结果
45
+ */
46
+ async verifyCustomCheck() {
47
+ if (!this.config.customCheckCommand) {
48
+ return {
49
+ passed: true,
50
+ duration: 0
51
+ };
52
+ }
53
+ return this.runCheck(this.config.customCheckCommand, 'Custom Check');
54
+ }
55
+ /**
56
+ * 执行所有验证
57
+ *
58
+ * @returns 验证结果(任何一项失败即整体失败)
59
+ */
60
+ async verifyAll() {
61
+ const typeCheckResult = await this.verifyTypeCheck();
62
+ if (!typeCheckResult.passed) {
63
+ return {
64
+ ...typeCheckResult,
65
+ error: `Type check failed:\n${typeCheckResult.error}`
66
+ };
67
+ }
68
+ const customCheckResult = await this.verifyCustomCheck();
69
+ if (!customCheckResult.passed) {
70
+ return {
71
+ ...customCheckResult,
72
+ error: `Custom check failed:\n${customCheckResult.error}`
73
+ };
74
+ }
75
+ return {
76
+ passed: true,
77
+ duration: typeCheckResult.duration + customCheckResult.duration
78
+ };
79
+ }
80
+ /**
81
+ * 运行单个检查命令
82
+ */
83
+ async runCheck(command, checkName) {
84
+ const startTime = Date.now();
85
+ try {
86
+ console.log(`\n[Verifier] 🛡️ Executing ${checkName}: ${command}...`);
87
+ const { stdout, stderr } = await execAsync(command, {
88
+ cwd: this.config.cwd,
89
+ timeout: this.config.timeout,
90
+ encoding: 'utf-8'
91
+ });
92
+ const duration = Date.now() - startTime;
93
+ return {
94
+ passed: true,
95
+ stdout,
96
+ stderr,
97
+ duration
98
+ };
99
+ }
100
+ catch (error) {
101
+ const duration = Date.now() - startTime;
102
+ let errorMessage = '';
103
+ if (error.stdout) {
104
+ errorMessage += error.stdout;
105
+ }
106
+ if (error.stderr) {
107
+ if (errorMessage)
108
+ errorMessage += '\n';
109
+ errorMessage += error.stderr;
110
+ }
111
+ if (error.killed && error.signal === 'SIGTERM') {
112
+ errorMessage += '\nCommand timed out';
113
+ }
114
+ if (!errorMessage) {
115
+ errorMessage = error.message || 'Unknown error';
116
+ }
117
+ return {
118
+ passed: false,
119
+ stdout: error.stdout,
120
+ stderr: error.stderr,
121
+ error: errorMessage,
122
+ duration
123
+ };
124
+ }
125
+ }
126
+ /**
127
+ * 格式化错误信息,便于 AI 理解
128
+ */
129
+ formatErrorForAI(result) {
130
+ if (result.passed) {
131
+ return '✅ Verification passed: All checks successful.';
132
+ }
133
+ let formatted = '❌ Verification failed. Please fix the following errors:\n\n';
134
+ if (result.error) {
135
+ const errorLines = result.error.split('\n');
136
+ const relevantLines = errorLines.filter(line => {
137
+ return line.includes('error TS') ||
138
+ line.includes('error ') ||
139
+ line.includes('Error:');
140
+ });
141
+ if (relevantLines.length > 0) {
142
+ formatted += '=== Type Errors ===\n';
143
+ formatted += relevantLines.slice(0, 50).join('\n');
144
+ if (relevantLines.length > 50) {
145
+ formatted += `\n... and ${relevantLines.length - 50} more errors`;
146
+ }
147
+ formatted += '\n\n';
148
+ }
149
+ else {
150
+ formatted += `=== Error Details ===\n${result.error.slice(0, 2000)}\n\n`;
151
+ }
152
+ }
153
+ return formatted;
154
+ }
155
+ /**
156
+ * 提取文件路径和行号(用于定位错误)
157
+ */
158
+ extractErrorLocations(result) {
159
+ if (result.passed || !result.error) {
160
+ return [];
161
+ }
162
+ const locations = [];
163
+ const errorPattern = /([^(:]+)\((\d+),\d+\): (error TS\d+: .+)/g;
164
+ let match;
165
+ while ((match = errorPattern.exec(result.error)) !== null) {
166
+ locations.push({
167
+ file: match[1],
168
+ line: parseInt(match[2], 10),
169
+ message: match[3]
170
+ });
171
+ }
172
+ return locations;
173
+ }
174
+ /**
175
+ * 更新配置
176
+ */
177
+ updateConfig(config) {
178
+ this.config = { ...this.config, ...config };
179
+ }
180
+ }
181
+ exports.PostCheckVerifier = PostCheckVerifier;
182
+ //# sourceMappingURL=PostCheckVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostCheckVerifier.js","sourceRoot":"","sources":["../../../src/core/kernel/PostCheckVerifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * X-Resolver: Cross-File Symbol Dependency Resolver
3
+ *
4
+ * 跨文件符号依赖解析器 - yuangs 的全域感知核心
5
+ *
6
+ * 核心功能:
7
+ * 1. 探测目标文件的所有导出符号(函数、类、接口、类型)
8
+ * 2. 搜索项目中所有引用这些符号的文件
9
+ * 3. 提取相关的代码片段和 JSDoc 文档
10
+ * 4. 为 Agent 提供跨文件上下文感知
11
+ */
12
+ import { EnhancedASTParser, SymbolMetadata } from './ASTParser';
13
+ import { FastScanner } from './FastScanner';
14
+ /**
15
+ * 符号影响分析结果
16
+ */
17
+ export interface SymbolImpact {
18
+ /** 消费者文件路径 */
19
+ filePath: string;
20
+ /** 使用的导出符号列表 */
21
+ symbols: string[];
22
+ /** 相关代码片段(经过智能切片) */
23
+ snippet: string;
24
+ /** 符号的 JSDoc 文档 */
25
+ jsDoc?: string;
26
+ }
27
+ /**
28
+ * X-Resolver 解析结果
29
+ */
30
+ export interface XResolverResult {
31
+ /** 目标文件路径 */
32
+ targetFile: string;
33
+ /** 导出的符号列表 */
34
+ exportedSymbols: SymbolMetadata[];
35
+ /** 受影响的使用者列表 */
36
+ impacts: SymbolImpact[];
37
+ /** 扫描耗时(毫秒) */
38
+ duration: number;
39
+ }
40
+ /**
41
+ * 跨文件符号解析器
42
+ *
43
+ * 为 yuangs Agent 提供跨文件依赖感知能力
44
+ */
45
+ export declare class XResolver {
46
+ private astParser;
47
+ private scanner;
48
+ constructor(astParser?: EnhancedASTParser, scanner?: FastScanner);
49
+ /**
50
+ * 分析目标文件的跨文件影响域
51
+ *
52
+ * @param targetFilePath - 要分析的目标文件路径
53
+ * @returns 跨文件影响分析结果
54
+ */
55
+ getImpactAnalysis(targetFilePath: string): Promise<XResolverResult>;
56
+ /**
57
+ * 从消费者文件中提取相关上下文
58
+ */
59
+ private extractImpactContext;
60
+ /**
61
+ * 提取相关代码片段(智能切片)
62
+ */
63
+ private extractRelevantSnippet;
64
+ /**
65
+ * 聚合符号的 JSDoc
66
+ */
67
+ private getAggregatedJSDoc;
68
+ /**
69
+ * 渲染为 AI 友好的上下文格式
70
+ */
71
+ renderAsAIContext(result: XResolverResult): string;
72
+ /**
73
+ * 快捷方法:仅获取导出符号
74
+ */
75
+ getExportedSymbols(filePath: string): Promise<SymbolMetadata[]>;
76
+ }
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /**
3
+ * X-Resolver: Cross-File Symbol Dependency Resolver
4
+ *
5
+ * 跨文件符号依赖解析器 - yuangs 的全域感知核心
6
+ *
7
+ * 核心功能:
8
+ * 1. 探测目标文件的所有导出符号(函数、类、接口、类型)
9
+ * 2. 搜索项目中所有引用这些符号的文件
10
+ * 3. 提取相关的代码片段和 JSDoc 文档
11
+ * 4. 为 Agent 提供跨文件上下文感知
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.XResolver = void 0;
48
+ const fs = __importStar(require("fs/promises"));
49
+ const path = __importStar(require("path"));
50
+ const ASTParser_1 = require("./ASTParser");
51
+ const FastScanner_1 = require("./FastScanner");
52
+ const ts = __importStar(require("typescript"));
53
+ /**
54
+ * 跨文件符号解析器
55
+ *
56
+ * 为 yuangs Agent 提供跨文件依赖感知能力
57
+ */
58
+ class XResolver {
59
+ astParser;
60
+ scanner;
61
+ constructor(astParser, scanner) {
62
+ this.astParser = astParser || new ASTParser_1.EnhancedASTParser();
63
+ this.scanner = scanner || new FastScanner_1.FastScanner();
64
+ }
65
+ /**
66
+ * 分析目标文件的跨文件影响域
67
+ *
68
+ * @param targetFilePath - 要分析的目标文件路径
69
+ * @returns 跨文件影响分析结果
70
+ */
71
+ async getImpactAnalysis(targetFilePath) {
72
+ const startTime = Date.now();
73
+ const parseResult = await this.astParser.parseFile(targetFilePath);
74
+ if (!parseResult.success) {
75
+ return {
76
+ targetFile: targetFilePath,
77
+ exportedSymbols: [],
78
+ impacts: [],
79
+ duration: Date.now() - startTime
80
+ };
81
+ }
82
+ const exportedSymbols = parseResult.symbols.filter(s => s.isExported);
83
+ if (exportedSymbols.length === 0) {
84
+ return {
85
+ targetFile: targetFilePath,
86
+ exportedSymbols: [],
87
+ impacts: [],
88
+ duration: Date.now() - startTime
89
+ };
90
+ }
91
+ const baseName = path.basename(targetFilePath, path.extname(targetFilePath));
92
+ const scanResult = await this.scanner.findConsumerFiles(baseName, path.dirname(targetFilePath));
93
+ const impacts = [];
94
+ for (const consumerFile of scanResult.consumerFiles) {
95
+ const impact = await this.extractImpactContext(consumerFile, exportedSymbols);
96
+ if (impact) {
97
+ impacts.push(impact);
98
+ }
99
+ }
100
+ return {
101
+ targetFile: targetFilePath,
102
+ exportedSymbols,
103
+ impacts,
104
+ duration: Date.now() - startTime
105
+ };
106
+ }
107
+ /**
108
+ * 从消费者文件中提取相关上下文
109
+ */
110
+ async extractImpactContext(consumerFile, exportedSymbols) {
111
+ try {
112
+ const content = await fs.readFile(consumerFile, 'utf-8');
113
+ const sourceFile = ts.createSourceFile(consumerFile, content, ts.ScriptTarget.Latest, true);
114
+ const usedSymbols = exportedSymbols.filter(sym => content.includes(sym.name));
115
+ if (usedSymbols.length === 0) {
116
+ return null;
117
+ }
118
+ const snippet = this.extractRelevantSnippet(content, sourceFile, usedSymbols);
119
+ const jsDoc = this.getAggregatedJSDoc(usedSymbols);
120
+ return {
121
+ filePath: consumerFile,
122
+ symbols: usedSymbols.map(s => s.name),
123
+ snippet,
124
+ jsDoc
125
+ };
126
+ }
127
+ catch (error) {
128
+ console.warn(`[X-Resolver] Failed to analyze ${consumerFile}: ${error}`);
129
+ return null;
130
+ }
131
+ }
132
+ /**
133
+ * 提取相关代码片段(智能切片)
134
+ */
135
+ extractRelevantSnippet(content, sourceFile, usedSymbols) {
136
+ const lines = content.split('\n');
137
+ const matchedLines = new Set();
138
+ lines.forEach((line, idx) => {
139
+ if (usedSymbols.some(sym => line.includes(sym.name))) {
140
+ for (let i = Math.max(0, idx - 3); i <= Math.min(lines.length - 1, idx + 5); i++) {
141
+ matchedLines.add(i);
142
+ }
143
+ }
144
+ });
145
+ const sortedLines = Array.from(matchedLines).sort((a, b) => a - b);
146
+ let snippet = '';
147
+ for (let i = 0; i < sortedLines.length; i++) {
148
+ const lineNum = sortedLines[i];
149
+ const prevLine = i > 0 ? sortedLines[i - 1] : -1;
150
+ if (lineNum > prevLine + 1) {
151
+ snippet += '\n// ...\n';
152
+ }
153
+ snippet += `${lineNum + 1}: ${lines[lineNum]}\n`;
154
+ }
155
+ return snippet.trim();
156
+ }
157
+ /**
158
+ * 聚合符号的 JSDoc
159
+ */
160
+ getAggregatedJSDoc(symbols) {
161
+ const docs = symbols.filter(s => s.jsDoc).map(s => {
162
+ return `=== ${s.name} (${s.kind}) ===\n${s.jsDoc}`;
163
+ });
164
+ return docs.length > 0 ? docs.join('\n\n') : '';
165
+ }
166
+ /**
167
+ * 渲染为 AI 友好的上下文格式
168
+ */
169
+ renderAsAIContext(result) {
170
+ let context = `\n${'='.repeat(60)}\n`;
171
+ context += `X-RESOLVER: CROSS-FILE DEPENDENCY CONTEXT\n`;
172
+ context += `Target: ${result.targetFile}\n`;
173
+ context += `Exported Symbols: ${result.exportedSymbols.length}\n`;
174
+ context += `Affected Files: ${result.impacts.length}\n`;
175
+ context += `Analysis Time: ${result.duration}ms\n`;
176
+ context += `${'='.repeat(60)}\n\n`;
177
+ if (result.exportedSymbols.length > 0) {
178
+ context += `[EXPORTED SYMBOLS]\n`;
179
+ for (const symbol of result.exportedSymbols) {
180
+ context += `- ${symbol.name} (${symbol.kind}) at line ${symbol.startLine}\n`;
181
+ if (symbol.jsDoc) {
182
+ const shortDoc = symbol.jsDoc.split('\n')[0];
183
+ if (shortDoc) {
184
+ context += ` Doc: ${shortDoc}\n`;
185
+ }
186
+ }
187
+ }
188
+ context += '\n';
189
+ }
190
+ if (result.impacts.length > 0) {
191
+ context += `[AFFECTED FILES]\n\n`;
192
+ for (const impact of result.impacts) {
193
+ context += `<<< EXTERNAL DEPENDENCY REFERENCE >>>\n`;
194
+ context += `File: ${impact.filePath}\n`;
195
+ context += `Role: READ-ONLY (This file consumes symbols from target file)\n`;
196
+ context += `Symbols Used: ${impact.symbols.join(', ')}\n`;
197
+ if (impact.jsDoc) {
198
+ context += `\n--- SYMBOL CONTRACT (JSDoc) ---\n`;
199
+ context += `${impact.jsDoc}\n`;
200
+ }
201
+ context += `\n--- USAGE SNIPPET ---\n`;
202
+ context += `${impact.snippet}\n`;
203
+ context += `<<< END OF REFERENCE >>>\n\n`;
204
+ }
205
+ }
206
+ return context;
207
+ }
208
+ /**
209
+ * 快捷方法:仅获取导出符号
210
+ */
211
+ async getExportedSymbols(filePath) {
212
+ const result = await this.astParser.parseFile(filePath);
213
+ return result.success ? result.symbols.filter(s => s.isExported) : [];
214
+ }
215
+ }
216
+ exports.XResolver = XResolver;
217
+ //# sourceMappingURL=XResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XResolver.js","sourceRoot":"","sources":["../../../src/core/kernel/XResolver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAkC;AAClC,2CAA6B;AAC7B,2CAAgE;AAChE,+CAA4C;AAC5C,+CAAiC;AA8BjC;;;;GAIG;AACH,MAAa,SAAS;IACZ,SAAS,CAAoB;IAC7B,OAAO,CAAc;IAE7B,YAAY,SAA6B,EAAE,OAAqB;QAC9D,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,6BAAiB,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,yBAAW,EAAE,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEnE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,UAAU,EAAE,cAAc;gBAC1B,eAAe,EAAE,EAAE;gBACnB,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,UAAU,EAAE,cAAc;gBAC1B,eAAe,EAAE,EAAE;gBACnB,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAEhG,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YAC9E,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU,EAAE,cAAc;YAC1B,eAAe;YACf,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,YAAoB,EACpB,eAAiC;QAEjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,YAAY,EACZ,OAAO,EACP,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,CACL,CAAC;YAEF,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAEnD,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrC,OAAO;gBACP,KAAK;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,OAAe,EACf,UAAyB,EACzB,WAA6B;QAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QAEvC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACrD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjF,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnE,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjD,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,YAAY,CAAC;YAC1B,CAAC;YAED,OAAO,IAAI,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnD,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAAyB;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChD,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAuB;QACvC,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QACtC,OAAO,IAAI,6CAA6C,CAAC;QACzD,OAAO,IAAI,WAAW,MAAM,CAAC,UAAU,IAAI,CAAC;QAC5C,OAAO,IAAI,qBAAqB,MAAM,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC;QAClE,OAAO,IAAI,mBAAmB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;QACxD,OAAO,IAAI,kBAAkB,MAAM,CAAC,QAAQ,MAAM,CAAC;QACnD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;QAEnC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,sBAAsB,CAAC;YAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC5C,OAAO,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,SAAS,IAAI,CAAC;gBAC7E,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,QAAQ,EAAE,CAAC;wBACb,OAAO,IAAI,UAAU,QAAQ,IAAI,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,sBAAsB,CAAC;YAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,IAAI,yCAAyC,CAAC;gBACrD,OAAO,IAAI,SAAS,MAAM,CAAC,QAAQ,IAAI,CAAC;gBACxC,OAAO,IAAI,iEAAiE,CAAC;gBAC7E,OAAO,IAAI,iBAAiB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAE1D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,IAAI,qCAAqC,CAAC;oBACjD,OAAO,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;gBACjC,CAAC;gBAED,OAAO,IAAI,2BAA2B,CAAC;gBACvC,OAAO,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;gBACjC,OAAO,IAAI,8BAA8B,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;CACF;AAvMD,8BAuMC"}
@@ -1,11 +1,19 @@
1
1
  import { Ora } from 'ora';
2
+ export interface RendererOptions {
3
+ autoFinish?: boolean;
4
+ onChunkCallback?: (chunk: string) => void;
5
+ quietMode?: boolean;
6
+ }
2
7
  export declare class StreamMarkdownRenderer {
3
8
  private fullResponse;
4
9
  private prefix;
5
10
  private isFirstOutput;
6
11
  private spinner;
7
12
  private startTime;
8
- constructor(prefix?: string, spinner?: Ora);
13
+ private quietMode;
14
+ private autoFinish;
15
+ private onChunkCallback;
16
+ constructor(prefix?: string, spinner?: Ora, options?: RendererOptions | boolean);
9
17
  /**
10
18
  * 处理流式数据块
11
19
  */
@@ -18,4 +26,13 @@ export declare class StreamMarkdownRenderer {
18
26
  * 计算文本在终端的可视行数
19
27
  */
20
28
  private getVisualLineCount;
29
+ /**
30
+ * Start chunking mode for Agent Runtime
31
+ * Returns a callback function that Agent can use to send chunks
32
+ */
33
+ startChunking(): (chunk: string) => void;
34
+ /**
35
+ * Check if response appears complete (heuristic)
36
+ */
37
+ private isComplete;
21
38
  }