@cotestdev/ai-runner 0.0.3 → 0.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 (103) hide show
  1. package/dist/ai-runner/src/runner.d.ts +1 -0
  2. package/dist/ai-runner/src/runner.d.ts.map +1 -1
  3. package/dist/ai-runner/src/runner.js +9 -1
  4. package/dist/ai-runner/src/runner.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/runner.ts +11 -1
  7. package/tests/agent/test-heal-agent.spec.ts +1 -1
  8. package/dist/agents/heal-agent.d.ts +0 -30
  9. package/dist/agents/heal-agent.d.ts.map +0 -1
  10. package/dist/agents/heal-agent.js +0 -76
  11. package/dist/agents/heal-agent.js.map +0 -1
  12. package/dist/agents/healer.d.ts +0 -73
  13. package/dist/agents/healer.d.ts.map +0 -1
  14. package/dist/agents/healer.js +0 -538
  15. package/dist/agents/healer.js.map +0 -1
  16. package/dist/agents/tools/form.d.ts +0 -22
  17. package/dist/agents/tools/form.d.ts.map +0 -1
  18. package/dist/agents/tools/form.js +0 -134
  19. package/dist/agents/tools/form.js.map +0 -1
  20. package/dist/agents/tools/index.d.ts +0 -13
  21. package/dist/agents/tools/index.d.ts.map +0 -1
  22. package/dist/agents/tools/index.js +0 -33
  23. package/dist/agents/tools/index.js.map +0 -1
  24. package/dist/agents/tools/navigate.d.ts +0 -22
  25. package/dist/agents/tools/navigate.d.ts.map +0 -1
  26. package/dist/agents/tools/navigate.js +0 -74
  27. package/dist/agents/tools/navigate.js.map +0 -1
  28. package/dist/agents/tools/snapshot.d.ts +0 -22
  29. package/dist/agents/tools/snapshot.d.ts.map +0 -1
  30. package/dist/agents/tools/snapshot.js +0 -110
  31. package/dist/agents/tools/snapshot.js.map +0 -1
  32. package/dist/agents/tools/verify.d.ts +0 -34
  33. package/dist/agents/tools/verify.d.ts.map +0 -1
  34. package/dist/agents/tools/verify.js +0 -169
  35. package/dist/agents/tools/verify.js.map +0 -1
  36. package/dist/agents/tools/wait.d.ts +0 -22
  37. package/dist/agents/tools/wait.d.ts.map +0 -1
  38. package/dist/agents/tools/wait.js +0 -104
  39. package/dist/agents/tools/wait.js.map +0 -1
  40. package/dist/agents/types.d.ts +0 -51
  41. package/dist/agents/types.d.ts.map +0 -1
  42. package/dist/agents/types.js +0 -6
  43. package/dist/agents/types.js.map +0 -1
  44. package/dist/ai-runner/src/examples/test-final.d.ts +0 -6
  45. package/dist/ai-runner/src/examples/test-final.d.ts.map +0 -1
  46. package/dist/ai-runner/src/examples/test-final.js +0 -73
  47. package/dist/ai-runner/src/examples/test-final.js.map +0 -1
  48. package/dist/ai-runner/src/examples/test-simple-tools.d.ts +0 -6
  49. package/dist/ai-runner/src/examples/test-simple-tools.d.ts.map +0 -1
  50. package/dist/ai-runner/src/examples/test-simple-tools.js +0 -149
  51. package/dist/ai-runner/src/examples/test-simple-tools.js.map +0 -1
  52. package/dist/ai-runner/src/examples/test-working.d.ts +0 -5
  53. package/dist/ai-runner/src/examples/test-working.d.ts.map +0 -1
  54. package/dist/ai-runner/src/examples/test-working.js +0 -43
  55. package/dist/ai-runner/src/examples/test-working.js.map +0 -1
  56. package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts +0 -15
  57. package/dist/ai-runner/src/examples/v-test-backend-adapter.d.ts.map +0 -1
  58. package/dist/ai-runner/src/examples/v-test-backend-adapter.js +0 -240
  59. package/dist/ai-runner/src/examples/v-test-backend-adapter.js.map +0 -1
  60. package/dist/core/runner.d.ts +0 -194
  61. package/dist/core/runner.d.ts.map +0 -1
  62. package/dist/core/runner.js +0 -650
  63. package/dist/core/runner.js.map +0 -1
  64. package/dist/index.d.ts +0 -8
  65. package/dist/index.d.ts.map +0 -1
  66. package/dist/index.js +0 -11
  67. package/dist/index.js.map +0 -1
  68. package/dist/types/external.d.ts +0 -6
  69. package/dist/types/external.d.ts.map +0 -1
  70. package/dist/types/external.js +0 -7
  71. package/dist/types/external.js.map +0 -1
  72. package/dist/types/index.d.ts +0 -153
  73. package/dist/types/index.d.ts.map +0 -1
  74. package/dist/types/index.js +0 -26
  75. package/dist/types/index.js.map +0 -1
  76. package/docs/PLAYWRIGHT_MCP_ADAPTER.md +0 -132
  77. package/docs/SCHEMA_EXTRACTION.md +0 -224
  78. package/playwright-report/data/26c3117906b682c9086892b9834f119fdef0ca60.webm +0 -0
  79. package/playwright-report/data/534e0d700217810c792ffbaf34b2d4160992d0ec.md +0 -210
  80. package/playwright-report/data/56a09464231ba6c36c441f95019b40b9238c9da5.zip +0 -0
  81. package/playwright-report/data/9c6ffeb3926521c8a7b610e82e1b29d49e859932.png +0 -0
  82. package/playwright-report/index.html +0 -85
  83. package/playwright-report/trace/assets/codeMirrorModule-Bucv2d7q.js +0 -25
  84. package/playwright-report/trace/assets/defaultSettingsView-BEpdCv1S.js +0 -266
  85. package/playwright-report/trace/codeMirrorModule.C3UTv-Ge.css +0 -1
  86. package/playwright-report/trace/codicon.DCmgc-ay.ttf +0 -0
  87. package/playwright-report/trace/defaultSettingsView.ConWv5KN.css +0 -1
  88. package/playwright-report/trace/index.BxQ34UMZ.js +0 -2
  89. package/playwright-report/trace/index.C4Y3Aw8n.css +0 -1
  90. package/playwright-report/trace/index.html +0 -43
  91. package/playwright-report/trace/manifest.webmanifest +0 -16
  92. package/playwright-report/trace/playwright-logo.svg +0 -9
  93. package/playwright-report/trace/snapshot.html +0 -21
  94. package/playwright-report/trace/sw.bundle.js +0 -3
  95. package/playwright-report/trace/uiMode.BWTwXl41.js +0 -5
  96. package/playwright-report/trace/uiMode.Btcz36p_.css +0 -1
  97. package/playwright-report/trace/uiMode.html +0 -17
  98. package/playwright-report/trace/xtermModule.DYP7pi_n.css +0 -32
  99. package/test-results/.last-run.json +0 -6
  100. package/test-results/tests-agent-test-heal-agent-Register-user-1-chromium/error-context.md +0 -210
  101. package/test-results/tests-agent-test-heal-agent-Register-user-1-chromium/test-failed-1.png +0 -0
  102. package/test-results/tests-agent-test-heal-agent-Register-user-1-chromium/trace.zip +0 -0
  103. package/test-results/tests-agent-test-heal-agent-Register-user-1-chromium/video.webm +0 -0
@@ -1,538 +0,0 @@
1
- "use strict";
2
- /**
3
- * Healer - 测试自愈代理
4
- * 使用 LangChain 的 createAgent API 实现 ReAct 循环
5
- *
6
- * 参考:https://www.npmjs.com/package/langchain
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.Healer = void 0;
10
- const langchain_1 = require("langchain");
11
- const anthropic_1 = require("@langchain/anthropic");
12
- const tools_1 = require("@langchain/core/tools");
13
- const tools_2 = require("./tools");
14
- // ============================================================================
15
- // Playwright 工具集(使用标准化工具 + 自定义工具)
16
- // ============================================================================
17
- /**
18
- * 创建 Playwright 工具集
19
- * 使用标准化的 Playwright MCP 转换工具,并添加 Healer 特有的变量管理工具
20
- */
21
- function createPlaywrightTools(page, setVariable, getAllVariables) {
22
- // 获取所有标准化工具
23
- const standardTools = (0, tools_2.getAllTools)(page);
24
- // 添加 set_variable 工具
25
- const setVariableTool = new tools_1.DynamicTool({
26
- name: 'set_variable',
27
- description: 'Set the value of a variable. Input format: variableName,value (comma separated). For example: username,john or url,https://example.com. This tool is used to save data retrieved from the page to variables for later use.',
28
- func: async (input) => {
29
- const parts = input.split(',');
30
- const varName = parts[0].trim();
31
- const varValue = parts.slice(1).join(',').trim();
32
- setVariable(varName, varValue);
33
- return `Variable set: ${varName} = ${varValue}`;
34
- }
35
- });
36
- // 添加 get_variable 工具 - 查看所有变量或获取特定变量
37
- const getVariableTool = new tools_1.DynamicTool({
38
- name: 'get_variable',
39
- description: 'Get all variables or get a specific variable value. To get all variables, use: get_variable or get_variable/all. To get a specific variable, use: get_variable,variableName. This helps you understand what data has been stored.',
40
- func: async (input) => {
41
- if (!input || input.trim() === '' || input.trim() === 'all') {
42
- // 获取所有变量
43
- const allVars = getAllVariables ? getAllVariables() : {};
44
- const varList = Object.keys(allVars).map(key => ` - ${key}: ${JSON.stringify(allVars[key])}`).join('\n');
45
- return `Current variables:\n${varList || ' (no variables set)'}`;
46
- }
47
- else {
48
- // 获取特定变量
49
- const varName = input.trim();
50
- const allVars = getAllVariables ? getAllVariables() : {};
51
- const value = allVars[varName];
52
- return `Variable ${varName}: ${JSON.stringify(value)}`;
53
- }
54
- }
55
- });
56
- return [...standardTools, setVariableTool, getVariableTool];
57
- }
58
- // ============================================================================
59
- // Healer 类
60
- // ============================================================================
61
- class Healer {
62
- constructor(modelConfig, config = {}) {
63
- this.reactSteps = []; // 记录 ReAct 循环的详细步骤
64
- this.modelConfig = modelConfig;
65
- this.maxSteps = config.maxSteps ?? 20;
66
- this.debugMode = config.debugMode ?? false;
67
- this.setVariableCallback = config.setVariable;
68
- this.getAllVariablesCallback = config.getAllVariables;
69
- }
70
- /**
71
- * 默认的 setVariable 方法(当没有提供回调时使用)
72
- */
73
- defaultSetVariable(name, value) {
74
- if (this.debugMode) {
75
- console.log(`[Healer] ⚠️ 没有设置 setVariable 回调,变量 ${name} = ${value} 不会被保存`);
76
- }
77
- }
78
- /**
79
- * 默认的 getAllVariables 方法(当没有提供回调时使用)
80
- */
81
- defaultGetAllVariables() {
82
- if (this.debugMode) {
83
- console.log(`[Healer] ⚠️ 没有设置 getAllVariables 回调,返回空对象`);
84
- }
85
- return {};
86
- }
87
- /**
88
- * 执行自愈(使用 LangChain createAgent API)
89
- */
90
- async execute(state) {
91
- console.log('\n========================================');
92
- console.log('[Healer] 开始执行(使用 langchain createAgent)');
93
- console.log('========================================');
94
- console.log(`[Healer] 模型: ${this.modelConfig.provider}/${this.modelConfig.modelName}`);
95
- console.log(`[Healer] 目标: ${state.objective}`);
96
- console.log(`[Healer] 错误: ${state.error}`);
97
- const page = state.context?.page;
98
- if (!page) {
99
- throw new Error('缺少 page 对象');
100
- }
101
- try {
102
- // 重置步骤记录
103
- this.reactSteps = [];
104
- // 创建 LLM 实例
105
- const llm = this.createLLM();
106
- // 步数计数器(用于在工具返回值中提醒)
107
- let stepCount = 0;
108
- const stepCounter = { count: 0 };
109
- // 创建 Playwright 工具(包装日志输出和步数提醒)
110
- const tools = this.createPlaywrightToolsWithLogging(page, this.setVariableCallback || this.defaultSetVariable.bind(this), this.getAllVariablesCallback || this.defaultGetAllVariables.bind(this), stepCounter, this.maxSteps);
111
- // 使用 createAgent API
112
- const agent = (0, langchain_1.createAgent)({
113
- model: llm,
114
- tools: tools, // Cast to any to bypass duplicate @langchain/core type incompatibility
115
- systemPrompt: this.buildSystemPrompt(state)
116
- }); // Cast entire config to bypass type instantiation issues
117
- console.log(`[Healer] 🚀 开始 ReAct 循环...`);
118
- // 使用 stream 以便实时输出每一步
119
- const inputStream = {
120
- messages: [{
121
- role: 'user',
122
- content: this.buildUserMessage(state)
123
- }]
124
- };
125
- let finalResult = null;
126
- let lastEvent = null;
127
- // 流式执行并实时输出
128
- const stream = await agent.stream(inputStream, {
129
- recursionLimit: 25,
130
- streamMode: 'updates',
131
- });
132
- for await (const event of stream) {
133
- stepCount++;
134
- stepCounter.count = stepCount;
135
- lastEvent = event; // 保存最后一个事件
136
- if (this.debugMode) {
137
- console.log(`\n[Healer] 📊 步骤 ${stepCount}:`);
138
- console.log(`[Healer] 🔍 事件类型:`, Object.keys(event));
139
- console.log(`[Healer] 🔍 事件结构:`, JSON.stringify(event, null, 2).substring(0, 500));
140
- }
141
- // 在 updates 模式下,messages 在不同位置
142
- // 1. AI 思考和工具调用:event.model_request.messages
143
- // 2. 工具执行结果:event.tools.messages
144
- const messages = event.model_request?.messages || event.messages;
145
- const toolMessages = event.tools?.messages;
146
- if (this.debugMode) {
147
- console.log(`[Healer] 🔍 检查 messages:`, messages ? `找到 ${messages.length} 条消息` : '未找到');
148
- console.log(`[Healer] 🔍 检查 tools.messages:`, toolMessages ? `找到 ${toolMessages.length} 条工具消息` : '未找到');
149
- }
150
- // 处理 AI 思考和工具调用
151
- if (messages && Array.isArray(messages)) {
152
- for (const msg of messages) {
153
- if (msg.type === 'ai') {
154
- // AI 消息:content 是 string(思考过程),tool_calls 是数组(工具调用)
155
- if (msg.content && typeof msg.content === 'string') {
156
- // Thought 步骤
157
- console.log(`[Healer] 💭 AI思考: ${msg.content}`);
158
- this.recordThoughtStep(msg.content, stepCount);
159
- }
160
- // 处理工具调用
161
- const aiMsg = msg;
162
- if (aiMsg.tool_calls && Array.isArray(aiMsg.tool_calls)) {
163
- for (const toolCall of aiMsg.tool_calls) {
164
- // Action 步骤
165
- const name = toolCall.name || toolCall.id;
166
- const args = toolCall.args || {};
167
- console.log(`[Healer] 🔧 工具调用: ${name}`);
168
- console.log(`[Healer] 📝 参数:`, JSON.stringify(args, null, 2));
169
- this.recordActionStep(name, args, stepCount);
170
- }
171
- }
172
- }
173
- }
174
- }
175
- // 处理工具执行结果
176
- if (toolMessages && Array.isArray(toolMessages)) {
177
- for (const msg of toolMessages) {
178
- if (msg.type === 'tool') {
179
- // Observation 步骤
180
- const output = msg.content?.toString()?.substring(0, 200) || '(空)';
181
- const success = true; // 如果能收到消息说明执行成功了
182
- console.log(`[Healer] ✅ 工具结果 [${msg.name}]:`, output);
183
- this.recordObservationStep(output, success, stepCount);
184
- }
185
- }
186
- }
187
- }
188
- // 使用最后一个事件作为最终结果(不要重新调用 invoke)
189
- finalResult = lastEvent || { messages: [] };
190
- // 调试:输出 finalResult 结构
191
- if (this.debugMode) {
192
- console.log('\n[Healer] 🔍 finalResult 结构:', JSON.stringify(finalResult, null, 2).substring(0, 1000));
193
- }
194
- // 提取结果
195
- const success = this.isSuccess(finalResult);
196
- const reasoning = this.extractReasoning(finalResult);
197
- const steps = stepCount; // 直接使用记录的步数
198
- console.log(`\n[Healer] 执行${success ? '成功 ✅' : '失败 ❌'}`);
199
- console.log(`[Healer] 总步数: ${steps || stepCount}`);
200
- console.log(`[Healer] 📝 记录了 ${this.reactSteps.length} 个 ReAct 步骤`);
201
- console.log('========================================\n');
202
- return {
203
- success,
204
- reasoning,
205
- steps: steps || stepCount,
206
- updatedVariables: {}, // 变量已通过回调函数设置,这里返回空对象
207
- reactSteps: this.reactSteps // 返回详细的 ReAct 步骤记录
208
- };
209
- }
210
- catch (error) {
211
- console.error(`[Healer] ❌ 执行失败: ${error}`);
212
- return {
213
- success: false,
214
- errorMessage: error.message,
215
- reasoning: `Healer 执行失败: ${error.message}`,
216
- steps: 0,
217
- updatedVariables: {},
218
- reactSteps: this.reactSteps
219
- };
220
- }
221
- }
222
- /**
223
- * 记录 Thought 步骤
224
- */
225
- recordThoughtStep(thought, stepNumber) {
226
- this.reactSteps.push({
227
- stepNumber,
228
- stepType: 'thought',
229
- timestamp: Date.now(),
230
- thought
231
- });
232
- if (this.debugMode) {
233
- console.log(`[Healer] 📝 已记录 Thought 步骤,当前共 ${this.reactSteps.length} 个步骤`);
234
- }
235
- }
236
- /**
237
- * 记录 Action 步骤
238
- */
239
- recordActionStep(toolName, toolInput, stepNumber) {
240
- this.reactSteps.push({
241
- stepNumber,
242
- stepType: 'action',
243
- timestamp: Date.now(),
244
- toolCall: {
245
- name: toolName,
246
- input: toolInput
247
- }
248
- });
249
- if (this.debugMode) {
250
- console.log(`[Healer] 📝 已记录 Action 步骤,当前共 ${this.reactSteps.length} 个步骤`);
251
- }
252
- }
253
- /**
254
- * 记录 Observation 步骤
255
- */
256
- recordObservationStep(output, success, stepNumber) {
257
- this.reactSteps.push({
258
- stepNumber,
259
- stepType: 'observation',
260
- timestamp: Date.now(),
261
- toolResult: {
262
- output,
263
- success
264
- }
265
- });
266
- if (this.debugMode) {
267
- console.log(`[Healer] 📝 已记录 Observation 步骤,当前共 ${this.reactSteps.length} 个步骤`);
268
- }
269
- }
270
- /**
271
- * 创建带日志输出的 Playwright 工具
272
- */
273
- createPlaywrightToolsWithLogging(page, setVariable, getAllVariables, stepCounter, maxSteps) {
274
- const baseTools = createPlaywrightTools(page, setVariable, getAllVariables);
275
- // 包装每个工具以添加日志输出和步数提醒
276
- return baseTools.map(tool => {
277
- const originalFunc = tool.func;
278
- tool.func = async (input) => {
279
- if (this.debugMode) {
280
- console.log(`\n[Healer] 🔧 工具调用: ${tool.name}`);
281
- console.log(`[Healer] 📝 输入: ${input}`);
282
- }
283
- const startTime = Date.now();
284
- const result = await originalFunc.call(tool, input);
285
- const duration = Date.now() - startTime;
286
- if (this.debugMode) {
287
- console.log(`[Healer] ✅ 输出: ${result}`);
288
- console.log(`[Healer] ⏱️ 耗时: ${duration}ms`);
289
- }
290
- // 附加步数信息到结果中
291
- const currentStep = stepCounter.count;
292
- const remainingSteps = Math.max(0, maxSteps - currentStep);
293
- let stepWarning = '';
294
- if (remainingSteps <= 0) {
295
- stepWarning = `\n\n🚨🚨🚨 【紧急警告】:你已经达到最大步数限制 (${maxSteps} 次)!必须立即结束,不能再调用任何工具!🚨🚨🚨`;
296
- }
297
- else if (remainingSteps <= 3) {
298
- stepWarning = `\n\n⚠️⚠️⚠️ 【重要提醒】:你只剩下 ${remainingSteps} 次工具调用机会!请立即完成当前任务,不要再调用新工具!⚠️⚠️⚠️`;
299
- }
300
- else if (currentStep >= 10) {
301
- stepWarning = `\n\n📊 【步数提醒】:已使用 ${currentStep}/${maxSteps} 次,还剩 ${remainingSteps} 次,请加快速度。`;
302
- }
303
- return result + stepWarning;
304
- };
305
- return tool;
306
- });
307
- }
308
- /**
309
- * 创建 LLM 实例
310
- */
311
- createLLM() {
312
- switch (this.modelConfig.provider) {
313
- case 'anthropic':
314
- return new anthropic_1.ChatAnthropic({
315
- apiKey: this.modelConfig.apiKey,
316
- model: this.modelConfig.modelName,
317
- temperature: this.modelConfig.temperature ?? 0,
318
- maxTokens: this.modelConfig.maxTokens ?? 4096
319
- });
320
- case 'openai':
321
- // 需要安装 @langchain/openai
322
- const { ChatOpenAI } = require('@langchain/openai');
323
- return new ChatOpenAI({
324
- apiKey: this.modelConfig.apiKey,
325
- modelName: this.modelConfig.modelName,
326
- temperature: this.modelConfig.temperature ?? 0,
327
- maxTokens: this.modelConfig.maxTokens ?? 4096,
328
- configuration: {
329
- baseURL: this.modelConfig.baseURL
330
- }
331
- });
332
- default:
333
- throw new Error(`不支持的模型提供商: ${this.modelConfig.provider}`);
334
- }
335
- }
336
- /**
337
- * 构建系统提示
338
- */
339
- buildSystemPrompt(state) {
340
- // 获取当前可用变量列表
341
- const allVars = this.getAllVariablesCallback ? this.getAllVariablesCallback() : {};
342
- const variableList = Object.keys(allVars).length > 0
343
- ? Object.keys(allVars).map(v => ` - ${v}: ${JSON.stringify(allVars[v])}`).join('\n')
344
- : ' (no variables set yet)';
345
- return `
346
- You are a Playwright test self-healing expert, skilled at analyzing and fixing errors in browser automation tests.
347
-
348
- ## Available Tools
349
- ### Navigation & Page Control
350
- - browser_navigate(url): Navigate to a URL
351
- - browser_navigate_back(): Navigate back
352
- - browser_navigate_forward(): Navigate forward
353
-
354
- ### Element Interaction
355
- - browser_click(selector): Click on an element (supports multiple selectors, comma-separated)
356
- - browser_fill(json): Fill form fields. Format: {"selector": "css-or-text", "value": "value"}
357
- - browser_set_checked(json): Check/uncheck checkboxes. Format: {"selector": "css-or-text", "checked": true|false}
358
- - browser_select_option(json): Select dropdown option. Format: {"selector": "css-or-text", "value": "option-value"}
359
- - browser_hover(selector): Hover over an element
360
-
361
- ### Waiting & Synchronization
362
- - browser_wait_for_time(ms): Wait for specified time in milliseconds
363
- - browser_wait_for_selector(selector): Wait for element to appear (supports optional timeout: "selector, timeout=5000")
364
- - browser_wait_for_url(pattern): Wait for URL to match pattern
365
-
366
- ### Verification & Inspection
367
- - browser_snapshot(): Get accessibility snapshot of the page
368
- - browser_get_url(): Get current page URL
369
- - browser_get_content(): Get page HTML content
370
- - browser_get_text(selector): Get text content of an element
371
- - browser_screenshot(): Take a screenshot and save it
372
- - browser_verify_text(text): Verify if text is visible on page
373
- - browser_verify_element(selector): Verify if element exists on page
374
-
375
- ### Variable Management (IMPORTANT!)
376
- - set_variable(name,value): Save a variable value for later use. Format: variableName,value
377
- - Example: set_variable(url,https://example.com) or set_variable(username,john)
378
- - get_variable: Get all variables or get a specific variable. Use this to understand what data is already stored.
379
- - To get all variables: get_variable or get_variable/all
380
- - To get specific variable: get_variable,variableName
381
-
382
- ## Current Available Variables
383
- ${variableList}
384
-
385
- ## Variable Handling Best Practices
386
- 1. **Use existing variables**: Before setting new variables, check what's already available using get_variable
387
- 2. **Maintain variable assignments**: If the original code sets variables (like url = page.url()), you MUST reproduce this behavior
388
- 3. **Semantic understanding**: Analyze the original code to understand what each variable represents (e.g., 'url' typically means current page URL)
389
- 4. **Consistency**: Use the same variable names and meanings as in the original code
390
-
391
- ## Workflow
392
- 1. **Check existing variables**: Use get_variable to see what's already stored
393
- 2. **Analyze Error**: Understand the error cause and current state
394
- 3. **Analyze original code**: Look for variable assignments that need to be reproduced
395
- 4. **Select Tool**: Choose appropriate tool based on the error
396
- 5. **Execute & Set Variables**: Call tools and use set_variable to maintain variable assignments
397
- 6. **Evaluate**: Determine if successful, decide next step
398
- 7. **Loop**: Until success or max steps reached
399
-
400
- ## Step Limit (CRITICAL!)
401
- - **Maximum step limit: ${this.maxSteps} steps**
402
- - **When system shows ≤ 3 steps remaining, stop calling new tools immediately**
403
- - **When system shows 0 steps remaining, must end immediately, no more tool calls**
404
- - **Prioritize direct approaches, avoid unnecessary debugging (like frequent screenshots)**
405
- - **Every tool call consumes a step, use them wisely**
406
-
407
- ## Strategy Tips
408
- - Timeout errors: Use browser_wait_for_selector first, then retry
409
- - Element not found: Try multiple selectors or use browser_screenshot to check state
410
- - Selector errors: Try more generic selectors (button, a, input)
411
- - Network delays: Use browser_wait_for_time to wait
412
- - Uncertain state: Use browser_screenshot or browser_get_url to inspect
413
- - **Variable handling**: If original code involves variable assignment, use browser_get_text to get the value, then set_variable(name,value) to save it
414
- - **Efficiency first**: Complete tasks in minimum steps, every step must have clear purpose
415
-
416
- Please use the tools to complete the self-healing task.
417
- `.trim();
418
- }
419
- /**
420
- * 构建用户消息
421
- */
422
- buildUserMessage(state) {
423
- return `
424
- Please help me fix the following test error:
425
-
426
- ## Current Task
427
- ${state.objective}
428
-
429
- ## Error Message
430
- ${state.error}
431
-
432
- ## Original Code
433
- \`\`\`typescript
434
- ${state.originalCode}
435
- \`\`\`
436
-
437
- ## Important Instructions
438
- 1. Check existing variables using get_variable before setting new ones
439
- 2. Analyze the original code to understand what variables are being set (e.g., heal.set(), variable assignments)
440
- 3. Reproduce those variable assignments using set_variable after completing the task
441
- 4. Use semantic understanding to determine what each variable represents
442
-
443
- Please use the provided tools to analyze the problem and attempt to fix it.
444
- `.trim();
445
- }
446
- /**
447
- * 判断是否成功
448
- * TODO: 后续优化成功判断逻辑,支持更多场景
449
- */
450
- isSuccess(result) {
451
- if (!result) {
452
- return false;
453
- }
454
- // 兼容不同的数据结构
455
- let messages;
456
- if (result.model_request && result.model_request.messages) {
457
- // 结构: { model_request: { messages: [...] } }
458
- messages = result.model_request.messages;
459
- }
460
- else if (result.messages) {
461
- // 结构: { messages: [...] }
462
- messages = result.messages;
463
- }
464
- if (!messages || !Array.isArray(messages)) {
465
- return false;
466
- }
467
- const lastMessage = messages[messages.length - 1];
468
- const content = lastMessage.content?.toString() || '';
469
- // 检查是否包含成功关键词
470
- return content.includes('成功') ||
471
- content.toLowerCase().includes('success') ||
472
- !content.includes('失败') && !content.toLowerCase().includes('error');
473
- }
474
- /**
475
- * 提取推理过程
476
- * TODO: 后续优化推理过程提取,支持更详细的分析
477
- */
478
- extractReasoning(result) {
479
- if (!result) {
480
- return '无法提取推理过程';
481
- }
482
- const reasoningParts = [];
483
- // 兼容不同的数据结构
484
- let messages;
485
- if (result.model_request && result.model_request.messages) {
486
- // 结构: { model_request: { messages: [...] } }
487
- messages = result.model_request.messages;
488
- }
489
- else if (result.messages) {
490
- // 结构: { messages: [...] }
491
- messages = result.messages;
492
- }
493
- // 处理工具执行结果(event.tools.messages 结构)
494
- const toolMessages = result.tools?.messages;
495
- if (toolMessages && Array.isArray(toolMessages)) {
496
- for (const msg of toolMessages) {
497
- if (msg.type === 'tool') {
498
- const output = msg.content?.toString()?.substring(0, 300) || '';
499
- reasoningParts.push(`工具结果 [${msg.name}]: ${output}`);
500
- }
501
- }
502
- }
503
- if (messages && Array.isArray(messages)) {
504
- // 收集所有消息内容
505
- const messageTexts = messages.map((msg) => {
506
- const parts = [];
507
- // AI 消息:content 是 string,tool_calls 是数组
508
- if (msg.type === 'ai') {
509
- if (msg.content && typeof msg.content === 'string') {
510
- parts.push(`AI思考: ${msg.content}`);
511
- }
512
- const aiMsg = msg;
513
- if (aiMsg.tool_calls && Array.isArray(aiMsg.tool_calls)) {
514
- for (const toolCall of aiMsg.tool_calls) {
515
- const name = toolCall.name || toolCall.id;
516
- const args = JSON.stringify(toolCall.args || {});
517
- parts.push(`工具调用: ${name}`);
518
- parts.push(`参数: ${args}`);
519
- }
520
- }
521
- }
522
- else if (msg.type === 'tool') {
523
- // 工具执行结果(兼容旧结构)
524
- const output = msg.content?.toString()?.substring(0, 300) || '';
525
- parts.push(`工具结果: ${output}`);
526
- }
527
- return parts.join('\n');
528
- });
529
- reasoningParts.push(...messageTexts);
530
- }
531
- if (reasoningParts.length === 0) {
532
- return '无法提取推理过程';
533
- }
534
- return reasoningParts.filter(Boolean).join('\n\n---\n\n');
535
- }
536
- }
537
- exports.Healer = Healer;
538
- //# sourceMappingURL=healer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"healer.js","sourceRoot":"","sources":["../../src/agents/healer.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * 表单工具 - Form
3
- */
4
- import { DynamicTool } from '@langchain/core/tools';
5
- import type { Page } from 'playwright';
6
- /**
7
- * 创建填写表单工具
8
- */
9
- export declare function createFillFormTool(page: Page): DynamicTool;
10
- /**
11
- * 创建选择选项工具
12
- */
13
- export declare function createSelectOptionTool(page: Page): DynamicTool;
14
- /**
15
- * 创建复选框工具
16
- */
17
- export declare function createSetCheckedTool(page: Page): DynamicTool;
18
- /**
19
- * 表单工具集
20
- */
21
- export declare const formTools: (page: Page) => DynamicTool[];
22
- //# sourceMappingURL=form.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/form.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAoC1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAoC9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAoC5D;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,WAAW,EAIjD,CAAC"}