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.
- package/dist/agent/AgentRuntime.d.ts +2 -1
- package/dist/agent/AgentRuntime.js +69 -4
- package/dist/agent/AgentRuntime.js.map +1 -1
- package/dist/agent/astParser.d.ts +45 -0
- package/dist/agent/astParser.js +232 -0
- package/dist/agent/astParser.js.map +1 -0
- package/dist/agent/codeSummary.d.ts +2 -2
- package/dist/agent/codeSummary.js +36 -76
- package/dist/agent/codeSummary.js.map +1 -1
- package/dist/agent/executor.d.ts +6 -0
- package/dist/agent/executor.js +55 -20
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/llm.d.ts +1 -1
- package/dist/agent/llm.js +51 -1
- package/dist/agent/llm.js.map +1 -1
- package/dist/agent/llmAdapter.d.ts +1 -1
- package/dist/agent/llmAdapter.js +8 -52
- package/dist/agent/llmAdapter.js.map +1 -1
- package/dist/agent/prompt.js +16 -37
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/protocolV2_2.d.ts +22 -0
- package/dist/agent/protocolV2_2.js +217 -0
- package/dist/agent/protocolV2_2.js.map +1 -0
- package/dist/agent/skills.js +14 -6
- package/dist/agent/skills.js.map +1 -1
- package/dist/commands/handleAIChat.js +2 -2
- package/dist/commands/handleAIChat.js.map +1 -1
- package/dist/commands/handleAICommand.js +1 -1
- package/dist/commands/handleAICommand.js.map +1 -1
- package/dist/core/capabilitySystem.d.ts +1 -1
- package/dist/core/capabilitySystem.js +2 -2
- package/dist/core/capabilitySystem.js.map +1 -1
- package/dist/core/executionRecord.d.ts +2 -1
- package/dist/core/executionRecord.js +3 -1
- package/dist/core/executionRecord.js.map +1 -1
- package/dist/core/kernel/ASTParser.d.ts +86 -0
- package/dist/core/kernel/ASTParser.js +208 -0
- package/dist/core/kernel/ASTParser.js.map +1 -0
- package/dist/core/kernel/AtomicTransactionManager.d.ts +119 -0
- package/dist/core/kernel/AtomicTransactionManager.js +268 -0
- package/dist/core/kernel/AtomicTransactionManager.js.map +1 -0
- package/dist/core/kernel/FastScanner.d.ts +77 -0
- package/dist/core/kernel/FastScanner.js +273 -0
- package/dist/core/kernel/FastScanner.js.map +1 -0
- package/dist/core/kernel/PostCheckVerifier.d.ts +86 -0
- package/dist/core/kernel/PostCheckVerifier.js +182 -0
- package/dist/core/kernel/PostCheckVerifier.js.map +1 -0
- package/dist/core/kernel/XResolver.d.ts +76 -0
- package/dist/core/kernel/XResolver.js +217 -0
- package/dist/core/kernel/XResolver.js.map +1 -0
- package/dist/utils/renderer.d.ts +18 -1
- package/dist/utils/renderer.js +56 -8
- package/dist/utils/renderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ export declare class CapabilitySystem {
|
|
|
10
10
|
loadMergedConfig(): MergedConfig;
|
|
11
11
|
loadCustomModels(): ModelCapabilities[];
|
|
12
12
|
getAllModels(): ModelCapabilities[];
|
|
13
|
-
createAndSaveExecutionRecord(commandName: string, requirement: CapabilityRequirement, matchResult: CapabilityMatchResult, command?: string): string;
|
|
13
|
+
createAndSaveExecutionRecord(commandName: string, requirement: CapabilityRequirement, matchResult: CapabilityMatchResult, command?: string, rawInput?: string, mode?: string): string;
|
|
14
14
|
replayExecution(recordId: string, options: ReplayOptions): Promise<ReplayResult>;
|
|
15
15
|
explainConfig(): string;
|
|
16
16
|
}
|
|
@@ -50,9 +50,9 @@ class CapabilitySystem {
|
|
|
50
50
|
const customModels = this.loadCustomModels();
|
|
51
51
|
return [...this.primaryModels, ...this.fallbackModels, ...customModels];
|
|
52
52
|
}
|
|
53
|
-
createAndSaveExecutionRecord(commandName, requirement, matchResult, command) {
|
|
53
|
+
createAndSaveExecutionRecord(commandName, requirement, matchResult, command, rawInput, mode) {
|
|
54
54
|
const config = this.loadMergedConfig();
|
|
55
|
-
const record = (0, executionRecord_1.createExecutionRecord)(commandName, requirement, config, matchResult, { success: matchResult.selected !== null }, command);
|
|
55
|
+
const record = (0, executionRecord_1.createExecutionRecord)(commandName, requirement, config, matchResult, { success: matchResult.selected !== null }, command, rawInput, mode);
|
|
56
56
|
const filePath = (0, executionStore_1.saveExecutionRecord)(record);
|
|
57
57
|
return record.id;
|
|
58
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilitySystem.js","sourceRoot":"","sources":["../../src/core/capabilitySystem.ts"],"names":[],"mappings":";;;AAAA,iDAKwB;AACxB,+CAMuB;AACvB,uDAG2B;AAC3B,qDAI0B;AAC1B,iDAA2E;AAE3E,MAAa,gBAAgB;IACnB,aAAa,GAAwB,EAAE,CAAC;IACxC,cAAc,GAAwB,EAAE,CAAC;IAEjD;QACE,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAEO,uBAAuB;QAC7B,sBAAsB;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,WAAkC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAA,qCAAsB,EAC3B,aAAa,EACb,IAAI,CAAC,cAAc,EACnB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,8CAA8C;YAC1D,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,MAAM;SACpB,CAAC;QAEF,MAAM,SAAS,GAAG,IAAA,gCAAkB,GAAE,CAAC;QACvC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,0BAAY,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,UAAU,GAAG,IAAA,0BAAY,EAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO,IAAA,0BAAY,EAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;QACd,MAAM,SAAS,GAAG,IAAA,gCAAkB,GAAE,CAAC;QACvC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,0BAAY,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,UAAU,GAAG,IAAA,0BAAY,EAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,IAAI,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,iBAAiB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAA6B,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,aAAa,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,iBAAiB,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAA6B,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1E,CAAC;IAED,4BAA4B,CAC1B,WAAmB,EACnB,WAAkC,EAClC,WAAkC,EAClC,OAAgB;
|
|
1
|
+
{"version":3,"file":"capabilitySystem.js","sourceRoot":"","sources":["../../src/core/capabilitySystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export interface ExecutionMeta {
|
|
|
9
9
|
projectPath: string;
|
|
10
10
|
args?: any;
|
|
11
11
|
rawInput?: string;
|
|
12
|
+
mode?: string;
|
|
12
13
|
replayable?: boolean;
|
|
13
14
|
version?: string;
|
|
14
15
|
}
|
|
@@ -43,6 +44,6 @@ export interface ExecutionRecord {
|
|
|
43
44
|
command?: string;
|
|
44
45
|
}
|
|
45
46
|
export declare function createExecutionId(): string;
|
|
46
|
-
export declare function createExecutionRecord(commandName: string, requirement: CapabilityRequirement, config: MergedConfig, matchResult: any, outcome?: Partial<ExecutionOutcome>, command?: string): ExecutionRecord;
|
|
47
|
+
export declare function createExecutionRecord(commandName: string, requirement: CapabilityRequirement, config: MergedConfig, matchResult: any, outcome?: Partial<ExecutionOutcome>, command?: string, rawInput?: string, mode?: string): ExecutionRecord;
|
|
47
48
|
export declare function serializeExecutionRecord(record: ExecutionRecord): string;
|
|
48
49
|
export declare function deserializeExecutionRecord(json: string): ExecutionRecord;
|
|
@@ -7,7 +7,7 @@ exports.deserializeExecutionRecord = deserializeExecutionRecord;
|
|
|
7
7
|
function createExecutionId() {
|
|
8
8
|
return `exec_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
9
9
|
}
|
|
10
|
-
function createExecutionRecord(commandName, requirement, config, matchResult, outcome = {}, command) {
|
|
10
|
+
function createExecutionRecord(commandName, requirement, config, matchResult, outcome = {}, command, rawInput, mode) {
|
|
11
11
|
const version = require('../../package.json').version;
|
|
12
12
|
return {
|
|
13
13
|
id: createExecutionId(),
|
|
@@ -16,6 +16,8 @@ function createExecutionRecord(commandName, requirement, config, matchResult, ou
|
|
|
16
16
|
timestamp: new Date().toISOString(),
|
|
17
17
|
toolVersion: version,
|
|
18
18
|
projectPath: process.cwd(),
|
|
19
|
+
rawInput,
|
|
20
|
+
mode,
|
|
19
21
|
version,
|
|
20
22
|
replayable: true,
|
|
21
23
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executionRecord.js","sourceRoot":"","sources":["../../src/core/executionRecord.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"executionRecord.js","sourceRoot":"","sources":["../../src/core/executionRecord.ts"],"names":[],"mappings":";;AAmDA,8CAEC;AAED,sDAyCC;AAED,4DAEC;AAED,gEAEC;AArDD,SAAgB,iBAAiB;IAC/B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAgB,qBAAqB,CACnC,WAAmB,EACnB,WAAkC,EAClC,MAAoB,EACpB,WAAgB,EAChB,UAAqC,EAAE,EACvC,OAAgB,EAChB,QAAiB,EACjB,IAAa;IAEb,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;IAEtD,OAAO;QACL,EAAE,EAAE,iBAAiB,EAAE;QACvB,IAAI,EAAE;YACJ,WAAW;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;YAC1B,QAAQ;YACR,IAAI;YACJ,OAAO;YACP,UAAU,EAAE,IAAI;SACjB;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1C,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5C,iBAAiB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,kBAAkB;SAChE;QACD,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE;YACR,eAAe,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;YAC7C,aAAa,EAAE,WAAW,CAAC,QAAQ;YACnC,YAAY,EAAE,WAAW,CAAC,gBAAgB;SAC3C;QACD,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,GAAG,OAAO;SACX;QACD,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAuB;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,0BAA0B,CAAC,IAAY;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced AST Parser for X-Resolver
|
|
3
|
+
*
|
|
4
|
+
* 增强版 AST 解析器,支持:
|
|
5
|
+
* 1. 提取导出符号(函数、类、接口、类型别名)
|
|
6
|
+
* 2. 提取 JSDoc 注释和标签
|
|
7
|
+
* 3. 提供符号的完整元数据(名称、类型、JSDoc、行号等)
|
|
8
|
+
*
|
|
9
|
+
* 使用 TypeScript Compiler API 实现精确解析
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 符号元数据接口
|
|
13
|
+
*/
|
|
14
|
+
export interface SymbolMetadata {
|
|
15
|
+
/** 符号名称 */
|
|
16
|
+
name: string;
|
|
17
|
+
/** 符号类型 */
|
|
18
|
+
kind: string;
|
|
19
|
+
/** JSDoc 注释内容 */
|
|
20
|
+
jsDoc: string;
|
|
21
|
+
/** 起始行号(从1开始) */
|
|
22
|
+
startLine: number;
|
|
23
|
+
/** 是否已导出 */
|
|
24
|
+
isExported: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* AST 解析结果
|
|
28
|
+
*/
|
|
29
|
+
export interface ASTParseResult {
|
|
30
|
+
/** 提取的符号列表 */
|
|
31
|
+
symbols: SymbolMetadata[];
|
|
32
|
+
/** 解析是否成功 */
|
|
33
|
+
success: boolean;
|
|
34
|
+
/** 错误信息(如果失败) */
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 增强版 AST 解析器
|
|
39
|
+
*
|
|
40
|
+
* 为 X-Resolver 提供精确的符号提取能力
|
|
41
|
+
*/
|
|
42
|
+
export declare class EnhancedASTParser {
|
|
43
|
+
/**
|
|
44
|
+
* 从文件中提取导出符号及其 JSDoc
|
|
45
|
+
*
|
|
46
|
+
* @param filePath - 要解析的文件路径
|
|
47
|
+
* @returns 包含符号元数据的解析结果
|
|
48
|
+
*/
|
|
49
|
+
parseFile(filePath: string): Promise<ASTParseResult>;
|
|
50
|
+
/**
|
|
51
|
+
* 从代码字符串中提取导出符号及其 JSDoc
|
|
52
|
+
*
|
|
53
|
+
* @param code - 要解析的代码字符串
|
|
54
|
+
* @param filePath - 文件路径(用于错误消息和行号计算)
|
|
55
|
+
* @returns 包含符号元数据的解析结果
|
|
56
|
+
*/
|
|
57
|
+
parse(code: string, filePath: string): ASTParseResult;
|
|
58
|
+
/**
|
|
59
|
+
* 递归遍历 AST 节点,提取导出符号及其 JSDoc
|
|
60
|
+
*
|
|
61
|
+
* @param node - AST 节点
|
|
62
|
+
* @param symbols - 符号列表(输出参数)
|
|
63
|
+
*/
|
|
64
|
+
private visitAndExtractSymbols;
|
|
65
|
+
/**
|
|
66
|
+
* 从节点提取 JSDoc 注释
|
|
67
|
+
*
|
|
68
|
+
* @param node - AST 节点
|
|
69
|
+
* @returns 提取的 JSDoc 文档字符串
|
|
70
|
+
*/
|
|
71
|
+
private extractJSDoc;
|
|
72
|
+
/**
|
|
73
|
+
* 将 TypeScript 节点类型映射为可读字符串
|
|
74
|
+
*
|
|
75
|
+
* @param kind - TypeScript 语法种类
|
|
76
|
+
* @returns 可读的符号类型字符串
|
|
77
|
+
*/
|
|
78
|
+
private mapNodeKindToString;
|
|
79
|
+
/**
|
|
80
|
+
* 获取文件中所有导出的符号名称(快捷方法)
|
|
81
|
+
*
|
|
82
|
+
* @param filePath - 文件路径
|
|
83
|
+
* @returns 导出符号名称数组
|
|
84
|
+
*/
|
|
85
|
+
getExportedSymbolNames(filePath: string): Promise<string[]>;
|
|
86
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced AST Parser for X-Resolver
|
|
4
|
+
*
|
|
5
|
+
* 增强版 AST 解析器,支持:
|
|
6
|
+
* 1. 提取导出符号(函数、类、接口、类型别名)
|
|
7
|
+
* 2. 提取 JSDoc 注释和标签
|
|
8
|
+
* 3. 提供符号的完整元数据(名称、类型、JSDoc、行号等)
|
|
9
|
+
*
|
|
10
|
+
* 使用 TypeScript Compiler API 实现精确解析
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.EnhancedASTParser = void 0;
|
|
47
|
+
const ts = __importStar(require("typescript"));
|
|
48
|
+
const fs = __importStar(require("fs/promises"));
|
|
49
|
+
/**
|
|
50
|
+
* 增强版 AST 解析器
|
|
51
|
+
*
|
|
52
|
+
* 为 X-Resolver 提供精确的符号提取能力
|
|
53
|
+
*/
|
|
54
|
+
class EnhancedASTParser {
|
|
55
|
+
/**
|
|
56
|
+
* 从文件中提取导出符号及其 JSDoc
|
|
57
|
+
*
|
|
58
|
+
* @param filePath - 要解析的文件路径
|
|
59
|
+
* @returns 包含符号元数据的解析结果
|
|
60
|
+
*/
|
|
61
|
+
async parseFile(filePath) {
|
|
62
|
+
try {
|
|
63
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
64
|
+
return this.parse(content, filePath);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return {
|
|
68
|
+
symbols: [],
|
|
69
|
+
success: false,
|
|
70
|
+
error: error instanceof Error ? error.message : 'Failed to read file'
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 从代码字符串中提取导出符号及其 JSDoc
|
|
76
|
+
*
|
|
77
|
+
* @param code - 要解析的代码字符串
|
|
78
|
+
* @param filePath - 文件路径(用于错误消息和行号计算)
|
|
79
|
+
* @returns 包含符号元数据的解析结果
|
|
80
|
+
*/
|
|
81
|
+
parse(code, filePath) {
|
|
82
|
+
try {
|
|
83
|
+
const sourceFile = ts.createSourceFile(filePath, code, ts.ScriptTarget.Latest, true);
|
|
84
|
+
const symbols = [];
|
|
85
|
+
this.visitAndExtractSymbols(sourceFile, symbols);
|
|
86
|
+
return {
|
|
87
|
+
symbols,
|
|
88
|
+
success: true
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
symbols: [],
|
|
94
|
+
success: false,
|
|
95
|
+
error: error instanceof Error ? error.message : 'Unknown parsing error'
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 递归遍历 AST 节点,提取导出符号及其 JSDoc
|
|
101
|
+
*
|
|
102
|
+
* @param node - AST 节点
|
|
103
|
+
* @param symbols - 符号列表(输出参数)
|
|
104
|
+
*/
|
|
105
|
+
visitAndExtractSymbols(node, symbols) {
|
|
106
|
+
let isExported = false;
|
|
107
|
+
// 检查节点是否有导出修饰符(仅在支持的节点类型上)
|
|
108
|
+
if (ts.canHaveModifiers(node)) {
|
|
109
|
+
const modifiers = ts.getModifiers(node);
|
|
110
|
+
isExported = modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword) ?? false;
|
|
111
|
+
}
|
|
112
|
+
// 提取符号名称和 JSDoc
|
|
113
|
+
let name = '';
|
|
114
|
+
let kind = '';
|
|
115
|
+
if ((ts.isFunctionDeclaration(node) ||
|
|
116
|
+
ts.isClassDeclaration(node) ||
|
|
117
|
+
ts.isInterfaceDeclaration(node) ||
|
|
118
|
+
ts.isTypeAliasDeclaration(node) ||
|
|
119
|
+
ts.isEnumDeclaration(node)) && node.name) {
|
|
120
|
+
name = node.name.text;
|
|
121
|
+
kind = this.mapNodeKindToString(node.kind);
|
|
122
|
+
}
|
|
123
|
+
else if (ts.isVariableStatement(node) && isExported) {
|
|
124
|
+
const declaration = node.declarationList.declarations[0];
|
|
125
|
+
if (declaration && ts.isIdentifier(declaration.name)) {
|
|
126
|
+
name = declaration.name.text;
|
|
127
|
+
kind = 'Variable';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// 如果找到了符号名称,提取其元数据
|
|
131
|
+
if (name) {
|
|
132
|
+
const sourceFile = node.getSourceFile();
|
|
133
|
+
const startLine = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
134
|
+
const jsDoc = this.extractJSDoc(node);
|
|
135
|
+
symbols.push({
|
|
136
|
+
name,
|
|
137
|
+
kind,
|
|
138
|
+
jsDoc,
|
|
139
|
+
startLine,
|
|
140
|
+
isExported
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
// 递归处理子节点
|
|
144
|
+
ts.forEachChild(node, (child) => this.visitAndExtractSymbols(child, symbols));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 从节点提取 JSDoc 注释
|
|
148
|
+
*
|
|
149
|
+
* @param node - AST 节点
|
|
150
|
+
* @returns 提取的 JSDoc 文档字符串
|
|
151
|
+
*/
|
|
152
|
+
extractJSDoc(node) {
|
|
153
|
+
const jsDocNodes = node.jsDoc;
|
|
154
|
+
if (!jsDocNodes || !Array.isArray(jsDocNodes) || jsDocNodes.length === 0) {
|
|
155
|
+
return '';
|
|
156
|
+
}
|
|
157
|
+
const jsDoc = jsDocNodes[0];
|
|
158
|
+
const comment = jsDoc.comment || '';
|
|
159
|
+
const tags = jsDoc.tags?.map((tag) => {
|
|
160
|
+
const tagName = tag.tagName?.text || '';
|
|
161
|
+
const tagComment = tag.comment || '';
|
|
162
|
+
const paramName = tag.name?.text || '';
|
|
163
|
+
const paramText = paramName ? `${tagName} ${paramName}` : tagName;
|
|
164
|
+
return tagComment ? `@${paramText} ${tagComment}` : `@${paramText}`;
|
|
165
|
+
}).join('\n') || '';
|
|
166
|
+
const docText = [comment, tags].filter(Boolean).join('\n').trim();
|
|
167
|
+
return docText;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 将 TypeScript 节点类型映射为可读字符串
|
|
171
|
+
*
|
|
172
|
+
* @param kind - TypeScript 语法种类
|
|
173
|
+
* @returns 可读的符号类型字符串
|
|
174
|
+
*/
|
|
175
|
+
mapNodeKindToString(kind) {
|
|
176
|
+
switch (kind) {
|
|
177
|
+
case ts.SyntaxKind.FunctionDeclaration:
|
|
178
|
+
return 'Function';
|
|
179
|
+
case ts.SyntaxKind.ClassDeclaration:
|
|
180
|
+
return 'Class';
|
|
181
|
+
case ts.SyntaxKind.InterfaceDeclaration:
|
|
182
|
+
return 'Interface';
|
|
183
|
+
case ts.SyntaxKind.TypeAliasDeclaration:
|
|
184
|
+
return 'Type';
|
|
185
|
+
case ts.SyntaxKind.EnumDeclaration:
|
|
186
|
+
return 'Enum';
|
|
187
|
+
case ts.SyntaxKind.VariableStatement:
|
|
188
|
+
return 'Variable';
|
|
189
|
+
default:
|
|
190
|
+
return 'Symbol';
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 获取文件中所有导出的符号名称(快捷方法)
|
|
195
|
+
*
|
|
196
|
+
* @param filePath - 文件路径
|
|
197
|
+
* @returns 导出符号名称数组
|
|
198
|
+
*/
|
|
199
|
+
async getExportedSymbolNames(filePath) {
|
|
200
|
+
const result = await this.parseFile(filePath);
|
|
201
|
+
if (!result.success) {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
return result.symbols.filter(s => s.isExported).map(s => s.name);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.EnhancedASTParser = EnhancedASTParser;
|
|
208
|
+
//# sourceMappingURL=ASTParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ASTParser.js","sourceRoot":"","sources":["../../../src/core/kernel/ASTParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic Transaction Manager for X-Resolver
|
|
3
|
+
*
|
|
4
|
+
* 原子事务管理器 - 确保多文件修改的原子性
|
|
5
|
+
*
|
|
6
|
+
* 核心功能:
|
|
7
|
+
* 1. 开启多文件组合事务
|
|
8
|
+
* 2. 为事务中的文件创建快照
|
|
9
|
+
* 3. 验证并提交事务
|
|
10
|
+
* 4. 失败时全盘回退
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* 事务状态
|
|
14
|
+
*/
|
|
15
|
+
export declare enum TransactionState {
|
|
16
|
+
/** 未开始 */
|
|
17
|
+
IDLE = "idle",
|
|
18
|
+
/** 进行中 */
|
|
19
|
+
ACTIVE = "active",
|
|
20
|
+
/** 已提交 */
|
|
21
|
+
COMMITTED = "committed",
|
|
22
|
+
/** 已回滚 */
|
|
23
|
+
ROLLED_BACK = "rolled_back"
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 事务元数据
|
|
27
|
+
*/
|
|
28
|
+
export interface TransactionMetadata {
|
|
29
|
+
/** 事务 ID */
|
|
30
|
+
id: string;
|
|
31
|
+
/** 事务名称 */
|
|
32
|
+
name: string;
|
|
33
|
+
/** 涉及的文件列表 */
|
|
34
|
+
files: string[];
|
|
35
|
+
/** 事务状态 */
|
|
36
|
+
state: TransactionState;
|
|
37
|
+
/** 创建时间 */
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
/** 快照目录路径 */
|
|
40
|
+
snapshotDir: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 事务提交结果
|
|
44
|
+
*/
|
|
45
|
+
export interface CommitResult {
|
|
46
|
+
/** 是否成功 */
|
|
47
|
+
success: boolean;
|
|
48
|
+
/** 提交的文件数量 */
|
|
49
|
+
filesCommitted: number;
|
|
50
|
+
/** 错误信息(如果失败) */
|
|
51
|
+
error?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 原子事务管理器
|
|
55
|
+
*
|
|
56
|
+
* 管理多文件修改的原子性,确保要么全部成功,要么全部回滚
|
|
57
|
+
*/
|
|
58
|
+
export declare class AtomicTransactionManager {
|
|
59
|
+
private transactions;
|
|
60
|
+
private snapshotBaseDir;
|
|
61
|
+
constructor(snapshotBaseDir?: string);
|
|
62
|
+
/**
|
|
63
|
+
* 生成唯一事务 ID
|
|
64
|
+
*/
|
|
65
|
+
private generateTransactionId;
|
|
66
|
+
/**
|
|
67
|
+
* 开启多文件组合事务
|
|
68
|
+
*
|
|
69
|
+
* @param taskName - 任务名称
|
|
70
|
+
* @param files - 涉及的文件列表
|
|
71
|
+
* @returns 事务 ID
|
|
72
|
+
*/
|
|
73
|
+
startBatch(taskName: string, files: string[]): Promise<string>;
|
|
74
|
+
/**
|
|
75
|
+
* 为单个文件创建快照
|
|
76
|
+
*/
|
|
77
|
+
private createSnapshot;
|
|
78
|
+
/**
|
|
79
|
+
* 提交事务
|
|
80
|
+
*
|
|
81
|
+
* @param transactionId - 事务 ID
|
|
82
|
+
* @returns 提交结果
|
|
83
|
+
*/
|
|
84
|
+
commitBatch(transactionId: string): Promise<CommitResult>;
|
|
85
|
+
/**
|
|
86
|
+
* 回滚事务
|
|
87
|
+
*
|
|
88
|
+
* @param transactionId - 事务 ID
|
|
89
|
+
*/
|
|
90
|
+
abortBatch(transactionId: string): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* 全盘回退到快照状态
|
|
93
|
+
*/
|
|
94
|
+
private rollbackAll;
|
|
95
|
+
/**
|
|
96
|
+
* 清理快照目录
|
|
97
|
+
*/
|
|
98
|
+
private clearSnapshots;
|
|
99
|
+
/**
|
|
100
|
+
* 列出快照目录中的所有文件
|
|
101
|
+
*/
|
|
102
|
+
private listSnapshotFiles;
|
|
103
|
+
/**
|
|
104
|
+
* 获取事务状态
|
|
105
|
+
*/
|
|
106
|
+
getTransactionState(transactionId: string): TransactionState | null;
|
|
107
|
+
/**
|
|
108
|
+
* 清理所有已完成的事务
|
|
109
|
+
*/
|
|
110
|
+
cleanupCompletedTransactions(): Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* 获取活跃事务列表
|
|
113
|
+
*/
|
|
114
|
+
getActiveTransactions(): TransactionMetadata[];
|
|
115
|
+
/**
|
|
116
|
+
* 设置快照基础目录
|
|
117
|
+
*/
|
|
118
|
+
setSnapshotBaseDir(dir: string): void;
|
|
119
|
+
}
|