test-wuying-agentbay-sdk 0.13.1-beta.20251223203147 → 0.13.1-beta.20251224091333

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/index.cjs CHANGED
@@ -3872,41 +3872,35 @@ _chunk4IPTHWLMcjs.init_cjs_shims.call(void 0, );
3872
3872
 
3873
3873
  // src/agent/agent.ts
3874
3874
  _chunk4IPTHWLMcjs.init_cjs_shims.call(void 0, );
3875
- var _ComputerUseAgent = class _ComputerUseAgent {
3876
- /**
3877
- * Initialize an Computer Agent object.
3878
- *
3879
- * @param session - The Session instance that this Agent belongs to.
3880
- */
3875
+ var _BaseTaskAgent = class _BaseTaskAgent {
3881
3876
  constructor(session) {
3882
3877
  this.session = session;
3883
3878
  }
3879
+ /**
3880
+ * Get the full MCP tool name based on prefix and action.
3881
+ */
3882
+ getToolName(action) {
3883
+ const toolMap = {
3884
+ execute: "execute_task",
3885
+ get_status: "get_task_status",
3886
+ terminate: "terminate_task"
3887
+ };
3888
+ const baseName = toolMap[action] || action;
3889
+ if (this.toolPrefix) {
3890
+ return `${this.toolPrefix}_${baseName}`;
3891
+ }
3892
+ return baseName;
3893
+ }
3884
3894
  /**
3885
3895
  * Execute a specific task described in human language.
3886
- *
3887
- * @param task - Task description in human language.
3888
- * @param maxTryTimes - Maximum number of retry attempts.
3889
- * @returns ExecutionResult containing success status, task output, and error
3890
- * message if any.
3891
- *
3892
- * @example
3893
- * ```typescript
3894
- * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
3895
- * const result = await agentBay.create({ imageId: 'windows_latest' });
3896
- * if (result.success) {
3897
- * const taskResult = await result.session.agent.computer.executeTask(
3898
- * 'Open notepad',
3899
- * 10
3900
- * );
3901
- * console.log(`Task status: ${taskResult.taskStatus}`);
3902
- * await result.session.delete();
3903
- * }
3904
- * ```
3905
3896
  */
3906
3897
  async executeTask(task, maxTryTimes) {
3907
3898
  try {
3908
3899
  const args = { task, max_try_times: maxTryTimes };
3909
- const result = await this.session.callMcpTool("flux_execute_task", args);
3900
+ const result = await this.session.callMcpTool(
3901
+ this.getToolName("execute"),
3902
+ args
3903
+ );
3910
3904
  if (!result.success) {
3911
3905
  return {
3912
3906
  requestId: result.requestId,
@@ -3930,7 +3924,7 @@ var _ComputerUseAgent = class _ComputerUseAgent {
3930
3924
  taskResult: "Invalid execution response."
3931
3925
  };
3932
3926
  }
3933
- const taskId = content.task_id;
3927
+ const taskId = content.taskId || content.task_id;
3934
3928
  if (!taskId) {
3935
3929
  return {
3936
3930
  requestId: result.requestId,
@@ -3955,13 +3949,13 @@ var _ComputerUseAgent = class _ComputerUseAgent {
3955
3949
  };
3956
3950
  }
3957
3951
  switch (query.taskStatus) {
3958
- case "finished":
3952
+ case "completed":
3959
3953
  return {
3960
3954
  requestId: query.requestId,
3961
3955
  success: true,
3962
3956
  errorMessage: "",
3963
3957
  taskId,
3964
- taskStatus: "finished",
3958
+ taskStatus: "completed",
3965
3959
  taskResult: query.taskProduct
3966
3960
  };
3967
3961
  case "failed":
@@ -3973,6 +3967,15 @@ var _ComputerUseAgent = class _ComputerUseAgent {
3973
3967
  taskStatus: "failed",
3974
3968
  taskResult: ""
3975
3969
  };
3970
+ case "cancelled":
3971
+ return {
3972
+ requestId: query.requestId,
3973
+ success: false,
3974
+ errorMessage: query.errorMessage || "Task was cancelled.",
3975
+ taskId,
3976
+ taskStatus: "cancelled",
3977
+ taskResult: ""
3978
+ };
3976
3979
  case "unsupported":
3977
3980
  return {
3978
3981
  requestId: query.requestId,
@@ -4008,32 +4011,20 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4008
4011
  }
4009
4012
  /**
4010
4013
  * Get the status of the task with the given task ID.
4011
- *
4012
- * @param taskId - Task ID
4013
- * @returns QueryResult containing the task status
4014
- *
4015
- * @example
4016
- * ```typescript
4017
- * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
4018
- * const result = await agentBay.create({ imageId: 'windows_latest' });
4019
- * if (result.success) {
4020
- * const taskResult = await result.session.agent.computer.executeTask('Open
4021
- * calculator', 10); const statusResult = await
4022
- * result.session.agent.computer.getTaskStatus(taskResult.taskId);
4023
- * console.log(`Status:
4024
- * ${JSON.parse(statusResult.output).status}`); await result.session.delete();
4025
- * }
4026
- * ```
4027
4014
  */
4028
4015
  async getTaskStatus(taskId) {
4029
4016
  try {
4030
4017
  const args = { task_id: taskId };
4031
- const result = await this.session.callMcpTool("flux_get_task_status", args);
4018
+ const result = await this.session.callMcpTool(
4019
+ this.getToolName("get_status"),
4020
+ args
4021
+ );
4032
4022
  if (!result.success) {
4033
4023
  return {
4034
4024
  requestId: result.requestId,
4035
4025
  success: false,
4036
4026
  errorMessage: result.errorMessage,
4027
+ taskId,
4037
4028
  taskAction: "",
4038
4029
  taskProduct: "",
4039
4030
  taskStatus: "failed"
@@ -4042,19 +4033,27 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4042
4033
  let queryResult;
4043
4034
  try {
4044
4035
  queryResult = JSON.parse(result.data);
4036
+ const contentTaskId = queryResult.taskId || queryResult.task_id || taskId;
4037
+ const taskProduct = queryResult.result || queryResult.product || "";
4038
+ const stream = Array.isArray(queryResult.stream) ? queryResult.stream : void 0;
4039
+ const error = queryResult.error || void 0;
4045
4040
  return {
4046
4041
  requestId: result.requestId,
4047
4042
  success: true,
4048
4043
  errorMessage: "",
4044
+ taskId: contentTaskId,
4049
4045
  taskAction: queryResult.action || "",
4050
- taskProduct: queryResult.product || "",
4051
- taskStatus: queryResult.status || "failed"
4046
+ taskProduct,
4047
+ taskStatus: queryResult.status || "completed",
4048
+ stream,
4049
+ error
4052
4050
  };
4053
4051
  } catch (error) {
4054
4052
  return {
4055
4053
  requestId: result.requestId,
4056
4054
  success: false,
4057
4055
  errorMessage: `Failed to get task status: ${error}`,
4056
+ taskId,
4058
4057
  taskAction: "",
4059
4058
  taskProduct: "",
4060
4059
  taskStatus: "failed"
@@ -4065,6 +4064,7 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4065
4064
  requestId: "",
4066
4065
  success: false,
4067
4066
  errorMessage: `Failed to get task status: ${error}`,
4067
+ taskId,
4068
4068
  taskAction: "",
4069
4069
  taskProduct: "",
4070
4070
  taskStatus: "failed"
@@ -4073,33 +4073,15 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4073
4073
  }
4074
4074
  /**
4075
4075
  * Terminate a task with a specified task ID.
4076
- *
4077
- * @param taskId - The ID of the running task.
4078
- * @returns ExecutionResult containing success status, task output, and
4079
- * error message if any.
4080
- *
4081
- * @example
4082
- * ```typescript
4083
- * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
4084
- * const result = await agentBay.create({ imageId: 'windows_latest' });
4085
- * if (result.success) {
4086
- * const taskResult = await result.session.agent.computer.executeTask(
4087
- * 'Open notepad',
4088
- * 5
4089
- * );
4090
- * const terminateResult = await result.session.agent.computer.terminateTask(
4091
- * taskResult.taskId
4092
- * );
4093
- * console.log(`Terminated: ${terminateResult.taskStatus}`);
4094
- * await result.session.delete();
4095
- * }
4096
- * ```
4097
4076
  */
4098
4077
  async terminateTask(taskId) {
4099
4078
  logDebug("Terminating task");
4100
4079
  try {
4101
4080
  const args = { task_id: taskId };
4102
- const result = await this.session.callMcpTool("flux_terminate_task", args);
4081
+ const result = await this.session.callMcpTool(
4082
+ this.getToolName("terminate"),
4083
+ args
4084
+ );
4103
4085
  let content;
4104
4086
  try {
4105
4087
  content = JSON.parse(result.data);
@@ -4113,8 +4095,8 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4113
4095
  taskResult: ""
4114
4096
  };
4115
4097
  }
4116
- const terminatedTaskId = content.task_id || taskId;
4117
- const status = content.status || "unknown";
4098
+ const terminatedTaskId = content.taskId || content.task_id || taskId;
4099
+ const status = content.status || "cancelling";
4118
4100
  if (result.success) {
4119
4101
  return {
4120
4102
  requestId: result.requestId,
@@ -4145,17 +4127,20 @@ var _ComputerUseAgent = class _ComputerUseAgent {
4145
4127
  }
4146
4128
  }
4147
4129
  };
4130
+ _chunk4IPTHWLMcjs.__name.call(void 0, _BaseTaskAgent, "BaseTaskAgent");
4131
+ var BaseTaskAgent = _BaseTaskAgent;
4132
+ var _ComputerUseAgent = class _ComputerUseAgent extends BaseTaskAgent {
4133
+ constructor() {
4134
+ super(...arguments);
4135
+ this.toolPrefix = "flux";
4136
+ }
4137
+ };
4148
4138
  _chunk4IPTHWLMcjs.__name.call(void 0, _ComputerUseAgent, "ComputerUseAgent");
4149
4139
  var ComputerUseAgent = _ComputerUseAgent;
4150
- var _BrowserUseAgent = class _BrowserUseAgent {
4151
- /**
4152
- * Initialize an Browser Agent object.
4153
- * @description Browser Use Agent is in BETA ⚠️ .
4154
- *
4155
- * @param session - The Session instance that this Agent belongs to.
4156
- */
4157
- constructor(session) {
4158
- this.session = session;
4140
+ var _BrowserUseAgent = class _BrowserUseAgent extends BaseTaskAgent {
4141
+ constructor() {
4142
+ super(...arguments);
4143
+ this.toolPrefix = "browser_use";
4159
4144
  }
4160
4145
  /**
4161
4146
  * Initialize the browser agent with specific options.
@@ -4200,276 +4185,345 @@ var _BrowserUseAgent = class _BrowserUseAgent {
4200
4185
  };
4201
4186
  }
4202
4187
  }
4188
+ };
4189
+ _chunk4IPTHWLMcjs.__name.call(void 0, _BrowserUseAgent, "BrowserUseAgent");
4190
+ var BrowserUseAgent = _BrowserUseAgent;
4191
+ var _MobileUseAgent = class _MobileUseAgent extends BaseTaskAgent {
4192
+ constructor() {
4193
+ super(...arguments);
4194
+ this.toolPrefix = "";
4195
+ }
4203
4196
  /**
4204
- * Execute a specific task described in human language.
4197
+ * Execute a task in human language without waiting for completion
4198
+ * (non-blocking). This is a fire-and-return interface that immediately
4199
+ * provides a task ID. Call getTaskStatus to check the task status.
4205
4200
  *
4206
4201
  * @param task - Task description in human language.
4207
- * @param maxTryTimes - Maximum number of retry attempts.
4208
- * @returns ExecutionResult containing success status, task output, and
4209
- * error message if any.
4202
+ * @param maxSteps - Maximum number of steps (clicks/swipes/etc.) allowed.
4203
+ * Used to prevent infinite loops or excessive resource
4204
+ * consumption. Default is 50.
4205
+ * @param maxStepRetries - Maximum retry times for MCP tool call failures
4206
+ * at SDK level. Used to retry when callMcpTool fails
4207
+ * (e.g., network errors, timeouts). Default is 3.
4208
+ * @returns ExecutionResult containing success status, task ID, task status,
4209
+ * and error message if any.
4210
4210
  *
4211
4211
  * @example
4212
4212
  * ```typescript
4213
4213
  * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
4214
- * const result = await agentBay.create({ imageId: 'linux_latest' });
4214
+ * const result = await agentBay.create({ imageId: 'mobile_latest' });
4215
4215
  * if (result.success) {
4216
- * const taskResult = await result.session.agent.browser.executeTask(
4217
- * 'Navigate to baidu and query the weather of Shanghai',
4218
- * 10
4216
+ * const execResult = await result.session.agent.mobile.executeTask(
4217
+ * 'Open WeChat app', 100, 5
4219
4218
  * );
4220
- * console.log(`Task status: ${taskResult.taskStatus}`);
4219
+ * console.log(`Task ID: ${execResult.taskId}`);
4221
4220
  * await result.session.delete();
4222
4221
  * }
4223
4222
  * ```
4224
4223
  */
4225
- async executeTask(task, maxTryTimes) {
4226
- try {
4227
- const args = { task, max_try_times: maxTryTimes };
4228
- const result = await this.session.callMcpTool("browser_use_execute_task", args);
4229
- if (!result.success) {
4230
- return {
4231
- requestId: result.requestId,
4232
- success: false,
4233
- errorMessage: result.errorMessage,
4234
- taskStatus: "failed",
4235
- taskId: "",
4236
- taskResult: "Task Failed"
4237
- };
4238
- }
4239
- let content;
4224
+ async executeTask(task, maxSteps = 50, maxStepRetries = 3) {
4225
+ const args = {
4226
+ task,
4227
+ max_steps: maxSteps
4228
+ };
4229
+ let lastError;
4230
+ let lastRequestId = "";
4231
+ for (let attempt = 0; attempt < maxStepRetries; attempt++) {
4240
4232
  try {
4241
- content = JSON.parse(result.data);
4242
- } catch (err) {
4243
- return {
4244
- requestId: result.requestId,
4245
- success: false,
4246
- errorMessage: `Failed to parse response: ${err}`,
4247
- taskStatus: "failed",
4248
- taskId: "",
4249
- taskResult: "Invalid execution response."
4250
- };
4251
- }
4252
- const taskId = content.task_id;
4253
- if (!taskId) {
4254
- return {
4255
- requestId: result.requestId,
4256
- success: false,
4257
- errorMessage: "Task ID not found in response",
4258
- taskStatus: "failed",
4259
- taskId: "",
4260
- taskResult: "Invalid task ID."
4261
- };
4262
- }
4263
- let triedTime = 0;
4264
- while (triedTime < maxTryTimes) {
4265
- const query = await this.getTaskStatus(taskId);
4266
- if (!query.success) {
4267
- return {
4268
- requestId: query.requestId,
4269
- success: false,
4270
- errorMessage: query.errorMessage,
4271
- taskStatus: "failed",
4272
- taskId,
4273
- taskResult: ""
4274
- };
4275
- }
4276
- switch (query.taskStatus) {
4277
- case "finished":
4233
+ const result = await this.session.callMcpTool(
4234
+ this.getToolName("execute"),
4235
+ args
4236
+ );
4237
+ lastRequestId = result.requestId;
4238
+ if (result.success) {
4239
+ let content;
4240
+ try {
4241
+ content = JSON.parse(result.data);
4242
+ } catch (err) {
4278
4243
  return {
4279
- requestId: query.requestId,
4280
- success: true,
4281
- errorMessage: "",
4282
- taskId,
4283
- taskStatus: "finished",
4284
- taskResult: query.taskProduct
4244
+ requestId: result.requestId,
4245
+ success: false,
4246
+ errorMessage: `Failed to parse response: ${err}`,
4247
+ taskStatus: "failed",
4248
+ taskId: "",
4249
+ taskResult: "Invalid execution response."
4285
4250
  };
4286
- case "failed":
4251
+ }
4252
+ const taskId = content.taskId || content.task_id;
4253
+ if (!taskId) {
4287
4254
  return {
4288
- requestId: query.requestId,
4255
+ requestId: result.requestId,
4289
4256
  success: false,
4290
- errorMessage: query.errorMessage || "Failed to execute task.",
4291
- taskId,
4257
+ errorMessage: "Task ID not found in response",
4292
4258
  taskStatus: "failed",
4293
- taskResult: ""
4259
+ taskId: "",
4260
+ taskResult: "Invalid task ID."
4294
4261
  };
4295
- case "unsupported":
4262
+ }
4263
+ return {
4264
+ requestId: result.requestId,
4265
+ success: true,
4266
+ errorMessage: "",
4267
+ taskId,
4268
+ taskStatus: "running",
4269
+ taskResult: ""
4270
+ };
4271
+ } else {
4272
+ lastError = result.errorMessage || "Failed to execute task";
4273
+ if (attempt < maxStepRetries - 1) {
4274
+ logDebug(
4275
+ `Attempt ${attempt + 1}/${maxStepRetries} failed, retrying...`
4276
+ );
4277
+ await new Promise((resolve2) => setTimeout(resolve2, 1e3));
4278
+ continue;
4279
+ } else {
4296
4280
  return {
4297
- requestId: query.requestId,
4281
+ requestId: result.requestId,
4298
4282
  success: false,
4299
- errorMessage: query.errorMessage || "Unsupported task.",
4300
- taskId,
4301
- taskStatus: "unsupported",
4302
- taskResult: ""
4283
+ errorMessage: lastError,
4284
+ taskStatus: "failed",
4285
+ taskId: "",
4286
+ taskResult: "Task Failed"
4303
4287
  };
4288
+ }
4289
+ }
4290
+ } catch (error) {
4291
+ lastError = `Failed to execute: ${error}`;
4292
+ if (attempt < maxStepRetries - 1) {
4293
+ logDebug(
4294
+ `Attempt ${attempt + 1}/${maxStepRetries} raised exception, retrying...`
4295
+ );
4296
+ await new Promise((resolve2) => setTimeout(resolve2, 1e3));
4297
+ continue;
4298
+ } else {
4299
+ return {
4300
+ requestId: lastRequestId,
4301
+ success: false,
4302
+ errorMessage: lastError,
4303
+ taskStatus: "failed",
4304
+ taskId: "",
4305
+ taskResult: "Task Failed"
4306
+ };
4304
4307
  }
4305
- logDebug(`Task ${taskId} is still running, please wait for a while.`);
4306
- await new Promise((resolve2) => setTimeout(resolve2, 3e3));
4307
- triedTime++;
4308
4308
  }
4309
- return {
4310
- requestId: result.requestId,
4311
- success: false,
4312
- errorMessage: "Task execution timed out",
4313
- taskStatus: "timeout",
4314
- taskId,
4315
- taskResult: "Task Timed Out"
4316
- };
4317
- } catch (error) {
4318
- return {
4319
- requestId: "",
4320
- success: false,
4321
- errorMessage: `Failed to execute: ${error}`,
4322
- taskStatus: "failed",
4323
- taskId: "",
4324
- taskResult: "Task Failed"
4325
- };
4326
4309
  }
4310
+ return {
4311
+ requestId: lastRequestId,
4312
+ success: false,
4313
+ errorMessage: `Failed after ${maxStepRetries} attempts: ${lastError || "Unknown error"}`,
4314
+ taskStatus: "failed",
4315
+ taskId: "",
4316
+ taskResult: "Task Failed"
4317
+ };
4327
4318
  }
4328
4319
  /**
4329
- * Get the status of the task with the given task ID.
4320
+ * Execute a specific task described in human language synchronously.
4321
+ * This is a synchronous interface that blocks until the task is completed or
4322
+ * an error occurs, or timeout happens. The default polling interval is
4323
+ * 3 seconds.
4330
4324
  *
4331
- * @param taskId - Task ID
4332
- * @returns QueryResult containing the task status
4325
+ * @param task - Task description in human language.
4326
+ * @param maxSteps - Maximum number of steps (clicks/swipes/etc.) allowed.
4327
+ * Used to prevent infinite loops or excessive resource
4328
+ * consumption. Default is 50.
4329
+ * @param maxStepRetries - Maximum retry times for MCP tool call failures
4330
+ * at SDK level. Used to retry when callMcpTool fails
4331
+ * (e.g., network errors, timeouts). Default is 3.
4332
+ * @param maxTryTimes - Maximum number of polling attempts (each 3 seconds).
4333
+ * Used to control how long to wait for task completion.
4334
+ * Default is 300 (about 15 minutes).
4335
+ * @returns ExecutionResult containing success status, task ID, task status,
4336
+ * and error message if any.
4333
4337
  *
4334
4338
  * @example
4335
4339
  * ```typescript
4336
4340
  * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
4337
- * const result = await agentBay.create({ imageId: 'linux_latest' });
4341
+ * const result = await agentBay.create({ imageId: 'mobile_latest' });
4338
4342
  * if (result.success) {
4339
- * const taskResult = await result.session.agent.browser.executeTask(
4340
- * 'Navigate to baidu and query the weather of Shanghai',
4341
- * 10
4343
+ * const execResult = await result.session.agent.mobile.executeTaskAndWait(
4344
+ * 'Open WeChat app', 100, 3, 200
4342
4345
  * );
4343
- * const statusResult = await result.session.agent.browser.getTaskStatus(
4344
- * taskResult.taskId
4345
- * );
4346
- * console.log(`Status: ${statusResult.taskStatus}`);
4346
+ * console.log(`Task result: ${execResult.taskResult}`);
4347
4347
  * await result.session.delete();
4348
4348
  * }
4349
4349
  * ```
4350
4350
  */
4351
- async getTaskStatus(taskId) {
4352
- try {
4353
- const args = { task_id: taskId };
4354
- const result = await this.session.callMcpTool("browser_use_get_task_status", args);
4355
- if (!result.success) {
4356
- return {
4357
- requestId: result.requestId,
4358
- success: false,
4359
- errorMessage: result.errorMessage,
4360
- taskAction: "",
4361
- taskProduct: "",
4362
- taskStatus: "failed"
4363
- };
4364
- }
4365
- let queryResult;
4351
+ async executeTaskAndWait(task, maxSteps = 50, maxStepRetries = 3, maxTryTimes = 300) {
4352
+ const args = {
4353
+ task,
4354
+ max_steps: maxSteps
4355
+ };
4356
+ let taskId;
4357
+ let lastError;
4358
+ let lastRequestId = "";
4359
+ for (let attempt = 0; attempt < maxStepRetries; attempt++) {
4366
4360
  try {
4367
- queryResult = JSON.parse(result.data);
4368
- return {
4369
- requestId: result.requestId,
4370
- success: true,
4371
- errorMessage: "",
4372
- taskAction: queryResult.action || "",
4373
- taskProduct: queryResult.product || "",
4374
- taskStatus: queryResult.status || "failed"
4375
- };
4361
+ const result = await this.session.callMcpTool(
4362
+ this.getToolName("execute"),
4363
+ args
4364
+ );
4365
+ lastRequestId = result.requestId;
4366
+ if (result.success) {
4367
+ let content;
4368
+ try {
4369
+ content = JSON.parse(result.data);
4370
+ } catch (err) {
4371
+ return {
4372
+ requestId: result.requestId,
4373
+ success: false,
4374
+ errorMessage: `Failed to parse response: ${err}`,
4375
+ taskStatus: "failed",
4376
+ taskId: "",
4377
+ taskResult: "Invalid execution response."
4378
+ };
4379
+ }
4380
+ taskId = content.taskId || content.task_id;
4381
+ if (!taskId) {
4382
+ return {
4383
+ requestId: result.requestId,
4384
+ success: false,
4385
+ errorMessage: "Task ID not found in response",
4386
+ taskStatus: "failed",
4387
+ taskId: "",
4388
+ taskResult: "Invalid task ID."
4389
+ };
4390
+ }
4391
+ break;
4392
+ } else {
4393
+ lastError = result.errorMessage || "Failed to execute task";
4394
+ if (attempt < maxStepRetries - 1) {
4395
+ logDebug(
4396
+ `Attempt ${attempt + 1}/${maxStepRetries} failed, retrying...`
4397
+ );
4398
+ await new Promise((resolve2) => setTimeout(resolve2, 1e3));
4399
+ continue;
4400
+ } else {
4401
+ return {
4402
+ requestId: result.requestId,
4403
+ success: false,
4404
+ errorMessage: lastError,
4405
+ taskStatus: "failed",
4406
+ taskId: "",
4407
+ taskResult: "Task Failed"
4408
+ };
4409
+ }
4410
+ }
4376
4411
  } catch (error) {
4377
- return {
4378
- requestId: result.requestId,
4379
- success: false,
4380
- errorMessage: `Failed to get task status: ${error}`,
4381
- taskAction: "",
4382
- taskProduct: "",
4383
- taskStatus: "failed"
4384
- };
4412
+ lastError = `Failed to execute: ${error}`;
4413
+ if (attempt < maxStepRetries - 1) {
4414
+ logDebug(
4415
+ `Attempt ${attempt + 1}/${maxStepRetries} raised exception, retrying...`
4416
+ );
4417
+ await new Promise((resolve2) => setTimeout(resolve2, 1e3));
4418
+ continue;
4419
+ } else {
4420
+ return {
4421
+ requestId: lastRequestId,
4422
+ success: false,
4423
+ errorMessage: lastError,
4424
+ taskStatus: "failed",
4425
+ taskId: "",
4426
+ taskResult: "Task Failed"
4427
+ };
4428
+ }
4385
4429
  }
4386
- } catch (error) {
4430
+ }
4431
+ if (!taskId) {
4387
4432
  return {
4388
- requestId: "",
4433
+ requestId: lastRequestId,
4389
4434
  success: false,
4390
- errorMessage: `Failed to get task status: ${error}`,
4391
- taskAction: "",
4392
- taskProduct: "",
4393
- taskStatus: "failed"
4435
+ errorMessage: `Failed to get task_id after ${maxStepRetries} attempts: ${lastError || "Unknown error"}`,
4436
+ taskStatus: "failed",
4437
+ taskId: "",
4438
+ taskResult: "Task Failed"
4394
4439
  };
4395
4440
  }
4396
- }
4397
- /**
4398
- * Terminate a task with a specified task ID.
4399
- *
4400
- * @param taskId - The ID of the running task.
4401
- * @returns ExecutionResult containing success status, task output, and
4402
- * error message if any.
4403
- *
4404
- * @example
4405
- * ```typescript
4406
- * const agentBay = new AgentBay({ apiKey: 'your_api_key' });
4407
- * const result = await agentBay.create({ imageId: 'linux_latest' });
4408
- * if (result.success) {
4409
- * const taskResult = await result.session.agent.browser.executeTask(
4410
- * 'Navigate to baidu and query the weather of Shanghai',
4411
- * 10
4412
- * );
4413
- * const terminateResult = await result.session.agent.browser.terminateTask(
4414
- * taskResult.taskId
4415
- * );
4416
- * console.log(`Terminated: ${terminateResult.taskStatus}`);
4417
- * await result.session.delete();
4418
- * }
4419
- * ```
4420
- */
4421
- async terminateTask(taskId) {
4422
- logDebug("Terminating task");
4423
- try {
4424
- const args = { task_id: taskId };
4425
- const result = await this.session.callMcpTool("browser_use_terminate_task", args);
4426
- let content;
4427
- try {
4428
- content = JSON.parse(result.data);
4429
- } catch (err) {
4441
+ let triedTime = 0;
4442
+ const processedTimestamps = /* @__PURE__ */ new Set();
4443
+ while (triedTime < maxTryTimes) {
4444
+ const query = await this.getTaskStatus(taskId);
4445
+ if (!query.success) {
4430
4446
  return {
4431
- requestId: result.requestId,
4447
+ requestId: query.requestId,
4432
4448
  success: false,
4433
- errorMessage: `Failed to parse response: ${err}`,
4434
- taskId,
4449
+ errorMessage: query.errorMessage,
4435
4450
  taskStatus: "failed",
4451
+ taskId,
4436
4452
  taskResult: ""
4437
4453
  };
4438
4454
  }
4439
- const terminatedTaskId = content.task_id || taskId;
4440
- const status = content.status || "unknown";
4441
- if (result.success) {
4442
- return {
4443
- requestId: result.requestId,
4444
- success: true,
4445
- errorMessage: "",
4446
- taskId: terminatedTaskId,
4447
- taskStatus: status,
4448
- taskResult: ""
4449
- };
4455
+ if (query.stream) {
4456
+ for (const streamItem of query.stream) {
4457
+ const timestamp = streamItem.timestamp_ms;
4458
+ if (timestamp !== void 0 && !processedTimestamps.has(timestamp)) {
4459
+ processedTimestamps.add(timestamp);
4460
+ const content = streamItem.content || "";
4461
+ const reasoning = streamItem.reasoning || "";
4462
+ if (content) {
4463
+ process.stdout.write(content);
4464
+ }
4465
+ if (reasoning) {
4466
+ }
4467
+ }
4468
+ }
4450
4469
  }
4451
- return {
4452
- requestId: result.requestId,
4453
- success: false,
4454
- errorMessage: result.errorMessage,
4455
- taskId: terminatedTaskId,
4456
- taskStatus: status,
4457
- taskResult: ""
4458
- };
4459
- } catch (error) {
4460
- return {
4461
- requestId: "",
4462
- success: false,
4463
- errorMessage: `Failed to terminate: ${error}`,
4464
- taskId,
4465
- taskStatus: "failed",
4466
- taskResult: ""
4467
- };
4470
+ if (query.error) {
4471
+ }
4472
+ switch (query.taskStatus) {
4473
+ case "completed":
4474
+ return {
4475
+ requestId: query.requestId,
4476
+ success: true,
4477
+ errorMessage: "",
4478
+ taskId,
4479
+ taskStatus: "completed",
4480
+ taskResult: query.taskProduct
4481
+ };
4482
+ case "failed":
4483
+ return {
4484
+ requestId: query.requestId,
4485
+ success: false,
4486
+ errorMessage: query.errorMessage || "Failed to execute task.",
4487
+ taskId,
4488
+ taskStatus: "failed",
4489
+ taskResult: ""
4490
+ };
4491
+ case "cancelled":
4492
+ return {
4493
+ requestId: query.requestId,
4494
+ success: false,
4495
+ errorMessage: query.errorMessage || "Task was cancelled.",
4496
+ taskId,
4497
+ taskStatus: "cancelled",
4498
+ taskResult: ""
4499
+ };
4500
+ case "unsupported":
4501
+ return {
4502
+ requestId: query.requestId,
4503
+ success: false,
4504
+ errorMessage: query.errorMessage || "Unsupported task.",
4505
+ taskId,
4506
+ taskStatus: "unsupported",
4507
+ taskResult: ""
4508
+ };
4509
+ }
4510
+ logDebug(`\u23F3 Task ${taskId} running \u{1F680}: ${query.taskAction}.`);
4511
+ await new Promise((resolve2) => setTimeout(resolve2, 3e3));
4512
+ triedTime++;
4468
4513
  }
4514
+ logDebug("\u26A0\uFE0F task execution timeout!");
4515
+ return {
4516
+ requestId: lastRequestId,
4517
+ success: false,
4518
+ errorMessage: "Task timeout.",
4519
+ taskStatus: "failed",
4520
+ taskId,
4521
+ taskResult: "Task timeout."
4522
+ };
4469
4523
  }
4470
4524
  };
4471
- _chunk4IPTHWLMcjs.__name.call(void 0, _BrowserUseAgent, "BrowserUseAgent");
4472
- var BrowserUseAgent = _BrowserUseAgent;
4525
+ _chunk4IPTHWLMcjs.__name.call(void 0, _MobileUseAgent, "MobileUseAgent");
4526
+ var MobileUseAgent = _MobileUseAgent;
4473
4527
  var _Agent = class _Agent {
4474
4528
  /**
4475
4529
  * Initialize an Agent object.
@@ -4479,6 +4533,7 @@ var _Agent = class _Agent {
4479
4533
  constructor(session) {
4480
4534
  this.computer = new ComputerUseAgent(session);
4481
4535
  this.browser = new BrowserUseAgent(session);
4536
+ this.mobile = new MobileUseAgent(session);
4482
4537
  }
4483
4538
  };
4484
4539
  _chunk4IPTHWLMcjs.__name.call(void 0, _Agent, "Agent");