tianxincode 1.0.2 → 1.0.4

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 (118) hide show
  1. package/README.md +164 -21
  2. package/dist/api/chat.routes.js +14 -8
  3. package/dist/api/chat.routes.js.map +1 -1
  4. package/dist/api/session.routes.js +1 -1
  5. package/dist/api/session.routes.js.map +1 -1
  6. package/dist/cli/commands.js +1 -1
  7. package/dist/cli/commands.js.map +1 -1
  8. package/dist/components/App.d.ts.map +1 -1
  9. package/dist/components/App.js +109 -70
  10. package/dist/components/App.js.map +1 -1
  11. package/dist/modules/ai/ai.service.d.ts.map +1 -1
  12. package/dist/modules/ai/ai.service.js +4 -19
  13. package/dist/modules/ai/ai.service.js.map +1 -1
  14. package/dist/modules/ai/ai.types.d.ts +4 -2
  15. package/dist/modules/ai/ai.types.d.ts.map +1 -1
  16. package/dist/modules/ai/openai.provider.d.ts +2 -124
  17. package/dist/modules/ai/openai.provider.d.ts.map +1 -1
  18. package/dist/modules/ai/openai.provider.js +47 -212
  19. package/dist/modules/ai/openai.provider.js.map +1 -1
  20. package/dist/modules/ai/react/react.parser.d.ts +12 -7
  21. package/dist/modules/ai/react/react.parser.d.ts.map +1 -1
  22. package/dist/modules/ai/react/react.parser.js +170 -83
  23. package/dist/modules/ai/react/react.parser.js.map +1 -1
  24. package/dist/modules/ai/react/react.prompts.d.ts.map +1 -1
  25. package/dist/modules/ai/react/react.prompts.js +23 -33
  26. package/dist/modules/ai/react/react.prompts.js.map +1 -1
  27. package/dist/modules/ai/react/react.types.d.ts +5 -2
  28. package/dist/modules/ai/react/react.types.d.ts.map +1 -1
  29. package/dist/modules/ai/react/react.validator.d.ts +14 -0
  30. package/dist/modules/ai/react/react.validator.d.ts.map +1 -0
  31. package/dist/modules/ai/react/react.validator.js +53 -0
  32. package/dist/modules/ai/react/react.validator.js.map +1 -0
  33. package/dist/modules/ai/react.agent.d.ts +41 -0
  34. package/dist/modules/ai/react.agent.d.ts.map +1 -1
  35. package/dist/modules/ai/react.agent.js +81 -10
  36. package/dist/modules/ai/react.agent.js.map +1 -1
  37. package/dist/modules/ai/summarizer/summarizer.service.d.ts +1 -1
  38. package/dist/modules/ai/summarizer/summarizer.service.d.ts.map +1 -1
  39. package/dist/modules/ai/summarizer/summarizer.service.js +9 -22
  40. package/dist/modules/ai/summarizer/summarizer.service.js.map +1 -1
  41. package/dist/modules/ai/summarizer/summarizer.types.d.ts +1 -1
  42. package/dist/modules/ai/summarizer/summarizer.types.d.ts.map +1 -1
  43. package/dist/modules/db/db.service.js +1 -1
  44. package/dist/modules/db/db.service.js.map +1 -1
  45. package/dist/modules/memory/memory.service.js +1 -1
  46. package/dist/modules/memory/memory.service.js.map +1 -1
  47. package/dist/modules/skill/skill.tool.d.ts.map +1 -1
  48. package/dist/modules/skill/skill.tool.js +1 -0
  49. package/dist/modules/skill/skill.tool.js.map +1 -1
  50. package/dist/modules/skill/skill.txt +20 -2
  51. package/dist/modules/tools/builtin/bash.d.ts.map +1 -1
  52. package/dist/modules/tools/builtin/bash.js +2 -1
  53. package/dist/modules/tools/builtin/bash.js.map +1 -1
  54. package/dist/modules/tools/builtin/bash.txt +30 -42
  55. package/dist/modules/tools/builtin/code_search.d.ts.map +1 -1
  56. package/dist/modules/tools/builtin/code_search.js +1 -0
  57. package/dist/modules/tools/builtin/code_search.js.map +1 -1
  58. package/dist/modules/tools/builtin/code_search.txt +23 -0
  59. package/dist/modules/tools/builtin/edit_file.d.ts.map +1 -1
  60. package/dist/modules/tools/builtin/edit_file.js +44 -8
  61. package/dist/modules/tools/builtin/edit_file.js.map +1 -1
  62. package/dist/modules/tools/builtin/edit_file.txt +56 -5
  63. package/dist/modules/tools/builtin/glob.d.ts.map +1 -1
  64. package/dist/modules/tools/builtin/glob.js +1 -0
  65. package/dist/modules/tools/builtin/glob.js.map +1 -1
  66. package/dist/modules/tools/builtin/glob.txt +23 -0
  67. package/dist/modules/tools/builtin/grep.d.ts.map +1 -1
  68. package/dist/modules/tools/builtin/grep.js +1 -0
  69. package/dist/modules/tools/builtin/grep.js.map +1 -1
  70. package/dist/modules/tools/builtin/grep.txt +25 -0
  71. package/dist/modules/tools/builtin/index.d.ts.map +1 -1
  72. package/dist/modules/tools/builtin/index.js +27 -35
  73. package/dist/modules/tools/builtin/index.js.map +1 -1
  74. package/dist/modules/tools/builtin/lsp.d.ts.map +1 -1
  75. package/dist/modules/tools/builtin/lsp.js +2 -1
  76. package/dist/modules/tools/builtin/lsp.js.map +1 -1
  77. package/dist/modules/tools/builtin/lsp.txt +31 -5
  78. package/dist/modules/tools/builtin/memory.d.ts.map +1 -1
  79. package/dist/modules/tools/builtin/memory.js +1 -0
  80. package/dist/modules/tools/builtin/memory.js.map +1 -1
  81. package/dist/modules/tools/builtin/memory.txt +23 -1
  82. package/dist/modules/tools/builtin/read_file.d.ts.map +1 -1
  83. package/dist/modules/tools/builtin/read_file.js +11 -3
  84. package/dist/modules/tools/builtin/read_file.js.map +1 -1
  85. package/dist/modules/tools/builtin/read_file.txt +25 -2
  86. package/dist/modules/tools/builtin/todo_read.d.ts.map +1 -1
  87. package/dist/modules/tools/builtin/todo_read.js +1 -0
  88. package/dist/modules/tools/builtin/todo_read.js.map +1 -1
  89. package/dist/modules/tools/builtin/todo_read.txt +20 -0
  90. package/dist/modules/tools/builtin/todo_write.d.ts.map +1 -1
  91. package/dist/modules/tools/builtin/todo_write.js +1 -0
  92. package/dist/modules/tools/builtin/todo_write.js.map +1 -1
  93. package/dist/modules/tools/builtin/todo_write.txt +21 -0
  94. package/dist/modules/tools/builtin/web_fetch.d.ts.map +1 -1
  95. package/dist/modules/tools/builtin/web_fetch.js +1 -0
  96. package/dist/modules/tools/builtin/web_fetch.js.map +1 -1
  97. package/dist/modules/tools/builtin/web_fetch.txt +23 -0
  98. package/dist/modules/tools/builtin/web_search.d.ts.map +1 -1
  99. package/dist/modules/tools/builtin/web_search.js +1 -0
  100. package/dist/modules/tools/builtin/web_search.js.map +1 -1
  101. package/dist/modules/tools/builtin/web_search.txt +28 -1
  102. package/dist/modules/tools/builtin/write_file.d.ts.map +1 -1
  103. package/dist/modules/tools/builtin/write_file.js +16 -1
  104. package/dist/modules/tools/builtin/write_file.js.map +1 -1
  105. package/dist/modules/tools/builtin/write_file.txt +50 -1
  106. package/dist/modules/tools/tool.service.d.ts.map +1 -1
  107. package/dist/modules/tools/tool.service.js +3 -0
  108. package/dist/modules/tools/tool.service.js.map +1 -1
  109. package/dist/modules/tools/tool.types.d.ts +1 -0
  110. package/dist/modules/tools/tool.types.d.ts.map +1 -1
  111. package/dist/web/web.service.d.ts.map +1 -1
  112. package/dist/web/web.service.js +8 -5
  113. package/dist/web/web.service.js.map +1 -1
  114. package/package.json +9 -6
  115. package/web/dist/assets/{Layout-Bb76CGAL.js → Layout-Pvn6DBHZ.js} +1 -1
  116. package/web/dist/assets/{index-KTH-myBB.css → index-BnpKQafm.css} +1 -1
  117. package/web/dist/assets/{index-DQRR0ggU.js → index-CEHMSOel.js} +64 -64
  118. package/web/dist/index.html +2 -2
@@ -1,236 +1,83 @@
1
- /**
2
- * OpenAI Provider 模块
3
- *
4
- * 本模块负责与 OpenAI API (及兼容 API) 进行交互
5
- *
6
- * 核心功能:
7
- * 1. chat() - 发送聊天请求,获取完整响应
8
- * 2. chatStream() - 流式聊天,逐块获取响应
9
- * 3. Tool Calls - 支持 AI 调用工具 (Function Calling)
10
- *
11
- * 支持的 AI 提供商:
12
- * - OpenAI (GPT-4, GPT-3.5)
13
- * - 兼容 OpenAI API 的其他提供商 (如 Anthropic Claude 通过适配器)
14
- * - 自定义 API 端点 (通过 baseUrl 配置)
15
- *
16
- * 使用方式:
17
- * const provider = new OpenAIProvider({
18
- * apiKey: 'your-api-key',
19
- * baseUrl: 'https://api.openai.com/v1',
20
- * defaultModel: 'gpt-4'
21
- * });
22
- *
23
- * const response = await provider.chat([
24
- * { role: 'user', content: '你好' }
25
- * ]);
26
- */
1
+ import OpenAI from 'openai';
27
2
  import { logger } from '../logger/index.js';
28
- /**
29
- * OpenAIProvider 类
30
- *
31
- * 封装与 OpenAI API 的所有交互逻辑
32
- * 使用原生 fetch API 发送请求
33
- *
34
- * API 端点:
35
- * - POST /chat/completions - 聊天完成
36
- *
37
- * 请求格式:
38
- * - model: 模型名称
39
- * - messages: 消息数组
40
- * - temperature: 温度参数 (0-2)
41
- * - max_tokens: 最大 Token 数
42
- * - tools: 工具定义数组 (可选)
43
- * - tool_choice: 工具选择策略 (可选)
44
- * - stream: 是否流式响应 (可选)
45
- */
46
3
  export class OpenAIProvider {
47
- /**
48
- * 构造函数
49
- *
50
- * @param config - 配置对象
51
- *
52
- * baseUrl 默认值说明:
53
- * - OpenAI: https://api.openai.com/v1
54
- * - 本地部署: http://localhost:11434/v1 (Ollama)
55
- * - 自定义: 用户配置的任意兼容 API 地址
56
- */
57
4
  constructor(config) {
58
- this.apiKey = config.apiKey;
59
- this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
5
+ this.client = new OpenAI({
6
+ apiKey: config.apiKey,
7
+ baseURL: config.baseUrl || 'https://api.openai.com/v1',
8
+ defaultHeaders: {
9
+ 'HTTP-Referer': 'https://www.npmjs.com/package/tianxincode',
10
+ 'X-Title': 'txcode',
11
+ 'X-OpenRouter-Title': 'txcode',
12
+ },
13
+ });
60
14
  this.defaultModel = config.defaultModel || 'gpt-4';
61
15
  }
62
- /**
63
- * 发送聊天请求 (非流式)
64
- *
65
- * 将消息数组发送给 AI,获取完整的响应
66
- * 支持 Tool Calls 功能
67
- *
68
- * 执行流程:
69
- * 1. 构建请求体 (model, messages, temperature 等)
70
- * 2. 如果有工具定义,添加到请求体
71
- * 3. 发送 POST 请求到 /chat/completions
72
- * 4. 解析响应,返回 ChatResponse
73
- *
74
- * @param messages - 消息数组,包含角色和内容
75
- * @param options - 可选配置 (temperature, maxTokens, model, tools)
76
- * @returns {Promise<ChatResponse>} AI 响应对象
77
- *
78
- * @example
79
- * const response = await provider.chat([
80
- * { role: 'system', content: '你是一个助手' },
81
- * { role: 'user', content: '你好' }
82
- * ]);
83
- *
84
- * console.log(response.content); // AI 的回复
85
- * console.log(response.usage); // Token 使用量
86
- */
87
16
  async chat(messages, options = {}) {
88
- // ========== 提取配置参数 ==========
89
- // 使用提供的值或默认值
90
- const { temperature = 0.7, // 温度:控制生成随机性,0-2 之间
91
- maxTokens = 2000, // 最大 Token 数
92
- model = this.defaultModel, // 模型名称
93
- tools, // 工具定义数组 (可选)
94
- } = options;
95
- // ========== 构建请求体 ==========
17
+ const { temperature = 0.7, maxTokens = 8192, model = this.defaultModel, tools, } = options;
96
18
  const requestBody = {
97
19
  model,
98
- messages: messages.map(m => this.formatMessage(m)), // 格式化每条消息
20
+ messages: messages.map(m => this.formatMessage(m)),
99
21
  temperature,
100
22
  max_tokens: maxTokens,
101
23
  };
102
- // ========== 添加工具定义 ==========
103
- // 如果提供了工具,AI 可以选择调用工具
104
24
  if (tools && tools.length > 0) {
105
25
  requestBody.tools = tools;
106
- requestBody.tool_choice = 'auto'; // 让 AI 自动决定是否调用工具
26
+ requestBody.tool_choice = 'auto';
107
27
  }
108
- // ========== 发送请求 ==========
109
- // 完整的 API 端点: {baseUrl}/chat/completions
110
- const url = `${this.baseUrl}/chat/completions`;
111
- // 记录请求日志 (调试用)
28
+ const url = `${this.client.baseURL}/chat/completions`;
112
29
  logger.logRequest(url, requestBody);
113
- // 使用 fetch 发送 POST 请求
114
- const response = await fetch(url, {
115
- method: 'POST',
116
- headers: {
117
- 'Content-Type': 'application/json',
118
- Authorization: `Bearer ${this.apiKey}`, // Bearer Token 认证
119
- },
120
- body: JSON.stringify(requestBody),
121
- });
122
- // ========== 错误处理 ==========
123
- if (!response.ok) {
124
- const error = await response.text();
125
- throw new Error(`OpenAI API error: ${response.status} - ${error}`);
126
- }
127
- // ========== 解析响应 ==========
128
- const data = (await response.json());
129
- // 记录响应日志
130
- logger.logResponse(url, data);
131
- // 转换为内部格式并返回
132
- return this.parseResponse(data);
30
+ const response = await this.client.chat.completions.create(requestBody);
31
+ logger.logResponse(url, response);
32
+ return this.parseResponse(response);
133
33
  }
134
- /**
135
- * 流式聊天
136
- *
137
- * 使用 Server-Sent Events (SSE) 流式获取 AI 响应
138
- * 适用于需要实时展示 AI 回复的场景
139
- *
140
- * 实现原理:
141
- * 1. 发送请求时设置 stream: true
142
- * 2. 逐块读取响应体
143
- * 3. 解析每个 SSE 消息块
144
- * 4. yield 每个内容块给调用者
145
- * 5. 直到收到 [DONE] 标记结束
146
- *
147
- * @param messages - 消息数组
148
- * @param options - 可选配置
149
- * @returns {AsyncGenerator<string>} 异步生成器,逐块返回内容
150
- */
151
34
  async *chatStream(messages, options = {}) {
152
35
  const { temperature = 0.7, maxTokens = 2000, model = this.defaultModel, } = options;
153
- // 构建请求体,设置 stream: true
154
- const url = `${this.baseUrl}/chat/completions`;
36
+ const url = `${this.client.baseURL}/chat/completions`;
155
37
  const requestBody = {
156
38
  model,
157
39
  messages: messages.map(m => this.formatMessage(m)),
158
40
  temperature,
159
41
  max_tokens: maxTokens,
160
- stream: true, // 关键:启用流式响应
42
+ stream: true,
161
43
  };
162
44
  logger.logRequest(url, requestBody);
163
- const response = await fetch(url, {
164
- method: 'POST',
165
- headers: {
166
- 'Content-Type': 'application/json',
167
- Authorization: `Bearer ${this.apiKey}`,
168
- },
169
- body: JSON.stringify(requestBody),
170
- });
171
- if (!response.ok) {
172
- throw new Error(`OpenAI API error: ${response.status}`);
173
- }
174
- // ========== 获取响应流 ==========
175
- // response.body 是一个 ReadableStream
176
- const reader = response.body?.getReader();
177
- if (!reader)
45
+ const response = await this.client.chat.completions.create(requestBody);
46
+ if (!response.body) {
178
47
  throw new Error('No response body');
179
- const decoder = new TextDecoder(); // 解码二进制数据
180
- let buffer = ''; // 缓冲区,存储未处理的数据
181
- const streamData = []; // 存储所有响应数据 (日志用)
182
- // ========== 循环读取流数据 ==========
48
+ }
49
+ const reader = response.body.getReader();
50
+ const decoder = new TextDecoder();
51
+ let buffer = '';
183
52
  while (true) {
184
- // 读取一块数据
185
53
  const { done, value } = await reader.read();
186
54
  if (done)
187
- break; // 流已结束
188
- // 解码并追加到缓冲区
55
+ break;
189
56
  buffer += decoder.decode(value, { stream: true });
190
- // 按行分割
191
57
  const lines = buffer.split('\n');
192
- buffer = lines.pop() || ''; // 保留最后一行 (可能不完整)
193
- // ========== 处理每一行 ==========
58
+ buffer = lines.pop() || '';
194
59
  for (const line of lines) {
195
60
  const trimmed = line.trim();
196
- // SSE 格式: data: {...}
197
61
  if (trimmed.startsWith('data: ')) {
198
- const data = trimmed.slice(6); // 去掉 'data: ' 前缀
199
- streamData.push(data);
200
- // ========== 检查结束标记 ==========
201
- if (data === '[DONE]') {
202
- logger.logResponse(url, streamData);
203
- return; // 流式响应结束
204
- }
205
- // ========== 解析并 yield 内容 ==========
62
+ const data = trimmed.slice(6);
63
+ if (data === '[DONE]')
64
+ return;
206
65
  try {
207
66
  const parsed = JSON.parse(data);
208
- // OpenAI 流式响应的格式: choices[0].delta.content
209
67
  const content = parsed.choices?.[0]?.delta?.content;
210
- if (content) {
211
- yield content; // 返回内容块
212
- }
68
+ if (content)
69
+ yield content;
213
70
  }
214
71
  catch { }
215
72
  }
216
73
  }
217
74
  }
218
- logger.logResponse(url, streamData);
219
75
  }
220
- /**
221
- * 格式化消息
222
- *
223
- * 将内部 ChatMessage 格式转换为 OpenAI API 格式
224
- *
225
- * @param message - 内部消息格式
226
- * @returns {Record<string, any>} OpenAPI API 消息格式
227
- */
228
76
  formatMessage(message) {
229
77
  const formatted = {
230
78
  role: message.role,
231
79
  content: message.content,
232
80
  };
233
- // 添加可选字段
234
81
  if (message.name)
235
82
  formatted.name = message.name;
236
83
  if (message.toolCallId)
@@ -239,41 +86,29 @@ export class OpenAIProvider {
239
86
  formatted.tool_calls = message.toolCalls;
240
87
  return formatted;
241
88
  }
242
- /**
243
- * 解析 API 响应
244
- *
245
- * 将 OpenAI API 响应转换为内部 ChatResponse 格式
246
- *
247
- * @param data - OpenAI API 响应数据
248
- * @returns {ChatResponse} 内部响应格式
249
- */
250
- parseResponse(data) {
251
- // 获取第一个 choice (通常只有一个)
252
- const choice = data.choices[0];
89
+ parseResponse(response) {
90
+ const choice = response.choices[0];
253
91
  const message = choice.message;
254
- // 构建响应对象
255
- const response = {
256
- content: message.content || '', // AI 回复内容
257
- finishReason: choice.finish_reason, // 结束原因
258
- usage: data.usage ? {
259
- promptTokens: data.usage.prompt_tokens,
260
- completionTokens: data.usage.completion_tokens,
261
- totalTokens: data.usage.total_tokens,
92
+ const responseData = {
93
+ content: message.content || '',
94
+ finishReason: choice.finish_reason,
95
+ usage: response.usage ? {
96
+ promptTokens: response.usage.prompt_tokens,
97
+ completionTokens: response.usage.completion_tokens,
98
+ totalTokens: response.usage.total_tokens,
262
99
  } : undefined,
263
100
  };
264
- // ========== 处理工具调用 ==========
265
- // 如果 AI 调用了工具,解析工具调用信息
266
101
  if (message.tool_calls && message.tool_calls.length > 0) {
267
- response.toolCalls = message.tool_calls.map((tc) => ({
268
- id: tc.id, // 工具调用 ID
269
- type: 'function', // 调用类型
102
+ responseData.toolCalls = message.tool_calls.map((tc) => ({
103
+ id: tc.id,
104
+ type: 'function',
270
105
  function: {
271
- name: tc.function.name, // 工具名称
272
- arguments: tc.function.arguments, // 工具参数 (JSON 字符串)
106
+ name: tc.function.name,
107
+ arguments: tc.function.arguments,
273
108
  },
274
109
  }));
275
110
  }
276
- return response;
111
+ return responseData;
277
112
  }
278
113
  }
279
114
  //# sourceMappingURL=openai.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../../src/modules/ai/openai.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../../src/modules/ai/openai.provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,OAAO,cAAc;IAGzB,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;YACtD,cAAc,EAAE;gBACd,cAAc,EAAE,2CAA2C;gBAC3D,SAAS,EAAE,QAAQ;gBACnB,oBAAoB,EAAE,QAAQ;aAC/B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC;IACrD,CAAC;IAID,KAAK,CAAC,IAAI,CACR,QAAuB,EACvB,UAAuB,EAAE;QAEzB,MAAM,EACJ,WAAW,GAAG,GAAG,EACjB,SAAS,GAAG,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,YAAY,EACzB,KAAK,GACN,GAAG,OAAO,CAAC;QAEZ,MAAM,WAAW,GAAwB;YACvC,KAAK;YACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAClD,WAAW;YACX,UAAU,EAAE,SAAS;SACtB,CAAC;QAEF,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1B,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;QACnC,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAkB,CAAC,CAAC;QAE/E,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,QAAuB,EACvB,UAAuB,EAAE;QAEzB,MAAM,EACJ,WAAW,GAAG,GAAG,EACjB,SAAS,GAAG,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,YAAY,GAC1B,GAAG,OAAO,CAAC;QAEZ,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC;QACtD,MAAM,WAAW,GAAG;YAClB,KAAK;YACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAClD,WAAW;YACX,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAkB,CAAQ,CAAC;QAEtF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,KAAK,QAAQ;wBAAE,OAAO;oBAC9B,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;wBACpD,IAAI,OAAO;4BAAE,MAAM,OAAO,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAoB;QACxC,MAAM,SAAS,GAAwB;YACrC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAChD,IAAI,OAAO,CAAC,UAAU;YAAE,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;QACpE,IAAI,OAAO,CAAC,SAAS;YAAE,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QAEhE,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,aAAa,CAAC,QAAgD;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,MAAM,YAAY,GAAiB;YACjC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,YAAY,EAAE,MAAM,CAAC,aAAiD;YACtE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;gBAC1C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;gBAClD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;aACzC,CAAC,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;gBAC5D,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,UAAmB;gBACzB,QAAQ,EAAE;oBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;iBACjC;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -20,7 +20,7 @@
20
20
  * <thought>我需要读取文件</thought>
21
21
  * <action>readFile</action>
22
22
  * <action_input>
23
- * <path>/path/to/file</path>
23
+ * <file_path>/path/to/file</file_path>
24
24
  * </action_input>
25
25
  * <keep_context>true</keep_context>
26
26
  * </react>
@@ -29,7 +29,7 @@
29
29
  * <thought>需要创建一个组件</thought>
30
30
  * <action>write_file</action>
31
31
  * <action_input>
32
- * <path>src/Hello.tsx</path>
32
+ * <file_path>src/Hello.tsx</file_path>
33
33
  * <content><![CDATA[import React from 'react';]]></content>
34
34
  * </action_input>
35
35
  * </react>
@@ -40,24 +40,29 @@
40
40
  * ---
41
41
  * ```
42
42
  */
43
- import { ReActStep } from './react.types.js';
43
+ import { ReActStep, ParsedBlock } from './react.types.js';
44
44
  /**
45
45
  * ReActParser 类
46
46
  *
47
47
  * 将 AI 返回的文本解析为结构化的 ReActStep 数组
48
48
  */
49
49
  export declare class ReActParser {
50
- parse(content: string): {
50
+ parse(content: string): Promise<{
51
51
  steps: ReActStep[];
52
52
  finalAnswer: string;
53
- };
53
+ }>;
54
54
  private splitBlocks;
55
55
  /**
56
56
  * 解析 XML 格式的块
57
57
  */
58
- private parseXMLBlock;
58
+ parseXMLBlock(content: string): Promise<ParsedBlock | null>;
59
59
  /**
60
- * 解析 XML 参数节点
60
+ * 用正则表达式解析 XML 格式的块(后备解析器)
61
+ */
62
+ private parseByRegex;
63
+ private extractValue;
64
+ /**
65
+ * 解析 action_input 参数节点
61
66
  */
62
67
  private parseXMLParams;
63
68
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"react.parser.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAE1D;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAwCnE,OAAO,CAAC,WAAW;IAsDnB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,aAAa;IAUrB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO;IAI3C,iBAAiB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;IAO3C,wBAAwB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;CAUnD;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
1
+ {"version":3,"file":"react.parser.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai/react/react.parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAItE;;;;GAIG;AACH,qBAAa,WAAW;IAChB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;YAgDpE,WAAW;IAuDzB;;OAEG;IACU,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA8DxE;;OAEG;IACH,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,aAAa;IAUrB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO;IAI3C,iBAAiB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;IAO3C,wBAAwB,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM;CAUnD;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}