@minded-ai/mindedjs 1.0.100 → 1.0.101

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"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"}
@@ -47,5 +47,6 @@ var internalNodesSuffix;
47
47
  (function (internalNodesSuffix) {
48
48
  internalNodesSuffix["HUMAN_IN_THE_LOOP"] = "_humanInTheLoop";
49
49
  internalNodesSuffix["TOOL_RUN"] = "_toolRun";
50
+ internalNodesSuffix["BROWSER_TASK_RUN"] = "_browserTaskRun";
50
51
  })(internalNodesSuffix || (exports.internalNodesSuffix = internalNodesSuffix = {}));
51
52
  //# sourceMappingURL=Flows.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AA4GD,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,2CAAoB,CAAA;AACtB,CAAC,EAFW,mBAAmB,mCAAnB,mBAAmB,QAE9B;AAsBD,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,yCAAiB,CAAA;IACjB,mCAAW,CAAA;AACb,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AAQD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;IACvC,oDAA+B,CAAA;AACjC,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,4DAAqC,CAAA;IACrC,4CAAqB,CAAA;AACvB,CAAC,EAHW,mBAAmB,mCAAnB,mBAAmB,QAG9B"}
1
+ {"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AA4GD,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,2CAAoB,CAAA;AACtB,CAAC,EAFW,mBAAmB,mCAAnB,mBAAmB,QAE9B;AAsBD,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,yCAAiB,CAAA;IACjB,mCAAW,CAAA;AACb,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AAQD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;IACvC,oDAA+B,CAAA;AACjC,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,4DAAqC,CAAA;IACrC,4CAAqB,CAAA;IACrB,2DAAoC,CAAA;AACtC,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"LangGraph.types.d.ts","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAc,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,qBAAqB,GAAI,MAAM,GAAG,GAAG;;;;;;;;EAwC9C,CAAC;AAGL,eAAO,MAAM,eAAe;;;;;;;;EAA0B,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"LangGraph.types.d.ts","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAc,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,qBAAqB,GAAI,MAAM,GAAG,GAAG;;;;;;;;EAyC9C,CAAC;AAGL,eAAO,MAAM,eAAe;;;;;;;;EAA0B,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC"}
@@ -14,6 +14,7 @@ const createStateAnnotation = () => langgraph_1.Annotation.Root({
14
14
  const index = res.findIndex((m) => m.id && m.id === message.id);
15
15
  if (index !== -1) {
16
16
  res[index].content = message.content;
17
+ res[index].additional_kwargs = { ...res[index].additional_kwargs, ...message.additional_kwargs };
17
18
  }
18
19
  }
19
20
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"LangGraph.types.js","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":";;;AACA,oDAAkF;AAClF,+CAAyD;AAElD,MAAM,qBAAqB,GAAG,GAAiB,EAAE,CACtD,sBAAU,CAAC,IAAI,CAAC;IACd,QAAQ,EAAE,IAAA,sBAAU,EAAqB;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;;YACrC,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YAC9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,MAAM,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;oBAChE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;oBACvC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;IACF,MAAM,EAAE,IAAA,sBAAU,EAAS;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAa,CAAA;QAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE,IAAA,sBAAU,EAAqB;QACtC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/B,CAAC;IACF,SAAS,EAAE,IAAA,sBAAU,GAAU;IAC/B,IAAI,EAAE,IAAA,sBAAU,EAA4B;QAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,IAAA,sBAAU,EAAc;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAW,CAAC,IAAI;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;KAC1B,CAAC;IACF,uBAAuB,EAAE,IAAA,sBAAU,EAAgB;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;CACH,CAAC,CAAC;AAxCQ,QAAA,qBAAqB,yBAwC7B;AAEL,gDAAgD;AACnC,QAAA,eAAe,GAAG,IAAA,6BAAqB,GAAE,CAAC"}
1
+ {"version":3,"file":"LangGraph.types.js","sourceRoot":"","sources":["../../src/types/LangGraph.types.ts"],"names":[],"mappings":";;;AACA,oDAAkF;AAClF,+CAAyD;AAElD,MAAM,qBAAqB,GAAG,GAAiB,EAAE,CACtD,sBAAU,CAAC,IAAI,CAAC;IACd,QAAQ,EAAE,IAAA,sBAAU,EAAqB;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;;YACrC,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;YAC9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,MAAA,OAAO,CAAC,iBAAiB,0CAAE,MAAM,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;oBAChE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;wBACjB,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;wBACrC,GAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBACnG,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;IACF,MAAM,EAAE,IAAA,sBAAU,EAAS;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAa,CAAA;QAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,OAAO,EAAE,IAAA,sBAAU,EAAqB;QACtC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/B,CAAC;IACF,SAAS,EAAE,IAAA,sBAAU,GAAU;IAC/B,IAAI,EAAE,IAAA,sBAAU,EAA4B;QAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,IAAA,sBAAU,EAAc;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,yBAAW,CAAC,IAAI;QAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;KAC1B,CAAC;IACF,uBAAuB,EAAE,IAAA,sBAAU,EAAgB;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACrB,CAAC;CACH,CAAC,CAAC;AAzCQ,QAAA,qBAAqB,yBAyC7B;AAEL,gDAAgD;AACnC,QAAA,eAAe,GAAG,IAAA,6BAAqB,GAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minded-ai/mindedjs",
3
- "version": "1.0.100",
3
+ "version": "1.0.101",
4
4
  "description": "MindedJS is a TypeScript library for building agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -66,4 +66,4 @@
66
66
  "uuid": "^11.1.0",
67
67
  "ws": "^8.15.1"
68
68
  }
69
- }
69
+ }
@@ -1,44 +1,213 @@
1
- import { spawn } from "child_process";
2
- import { logger } from "../utils/logger";
1
+ import { logger } from '../utils/logger';
3
2
 
4
- export const executeBrowserTask = async (prompt: string, model?: string): Promise<string> => {
3
+ // Browser Use Cloud API configuration
4
+ const BROWSER_USE_API_BASE_URL = 'https://api.browser-use.com/api/v1';
5
5
 
6
- return new Promise((resolve, reject) => {
7
- const args = ['-p', prompt];
8
- // Add model flag if provided
9
- if (model) {
10
- args.push('--model', model);
11
- }
6
+ // Types for Browser Use Cloud API
7
+ export interface CloudTaskResponse {
8
+ id: string;
9
+ status: string;
10
+ live_url?: string;
11
+ steps?: any[];
12
+ output?: string;
13
+ }
14
+
15
+ // Browser Use Cloud API methods
16
+ export const createCloudTask = async (prompt: string, model?: string): Promise<string> => {
17
+ const apiKey = process.env.BROWSER_USE_API_KEY;
18
+ if (!apiKey) {
19
+ throw new Error('BROWSER_USE_API_KEY environment variable is required');
20
+ }
21
+
22
+ logger.debug({ msg: 'Creating cloud browser task', prompt: prompt.substring(0, 100) + '...' });
23
+
24
+ const response = await fetch(`${BROWSER_USE_API_BASE_URL}/run-task`, {
25
+ method: 'POST',
26
+ headers: {
27
+ Authorization: `Bearer ${apiKey}`,
28
+ 'Content-Type': 'application/json',
29
+ },
30
+ body: JSON.stringify({
31
+ task: prompt,
32
+ use_proxy: false,
33
+ llm_model: model || 'gpt-4o',
34
+ }),
35
+ });
36
+
37
+ if (!response.ok) {
38
+ logger.error({ msg: 'Failed to create cloud browser task', status: response.status, statusText: response.statusText });
39
+ throw new Error(`Failed to create browser task: ${response.statusText}`);
40
+ }
41
+
42
+ const data = await response.json();
43
+ logger.debug({ msg: 'Cloud browser task created', taskId: data.id });
44
+ return data.id;
45
+ };
46
+
47
+ export const getTaskDetails = async (taskId: string): Promise<CloudTaskResponse> => {
48
+ const apiKey = process.env.BROWSER_USE_API_KEY;
49
+ if (!apiKey) {
50
+ throw new Error('BROWSER_USE_API_KEY environment variable is required');
51
+ }
52
+
53
+ const response = await fetch(`${BROWSER_USE_API_BASE_URL}/task/${taskId}`, {
54
+ headers: {
55
+ Authorization: `Bearer ${apiKey}`,
56
+ },
57
+ });
58
+
59
+ if (!response.ok) {
60
+ logger.error({ msg: 'Failed to get task details', taskId, status: response.status, statusText: response.statusText });
61
+ throw new Error(`Failed to get task details: ${response.statusText}`);
62
+ }
63
+
64
+ return response.json();
65
+ };
66
+
67
+ export const waitForLiveUrl = async (taskId: string, maxWaitTime: number = 30000): Promise<CloudTaskResponse> => {
68
+ const startTime = Date.now();
69
+ const pollInterval = 2000; // 2 seconds
70
+ let pollCount = 0;
71
+
72
+ logger.debug({ msg: 'Starting to poll for live_url', taskId, maxWaitTime, pollInterval });
12
73
 
13
- const child = spawn('browser-use', args, {
14
- env: {
15
- ...process.env,
16
- }
74
+ while (Date.now() - startTime < maxWaitTime) {
75
+ pollCount++;
76
+ const elapsedTime = Date.now() - startTime;
77
+
78
+ logger.trace({
79
+ msg: 'Polling for live_url',
80
+ taskId,
81
+ pollCount,
82
+ elapsedTime,
83
+ remainingTime: maxWaitTime - elapsedTime,
17
84
  });
18
- let output = '';
19
85
 
20
- // Stream stdout to console and collect it
21
- child.stdout.on('data', (data) => {
22
- const chunk = data.toString();
23
- logger.trace({ message: 'Browser task output', output: chunk });
24
- output += chunk;
86
+ const taskDetails = await getTaskDetails(taskId);
87
+
88
+ logger.trace({
89
+ msg: 'Task details received',
90
+ taskId,
91
+ status: taskDetails.status,
92
+ hasLiveUrl: !!taskDetails.live_url,
93
+ pollCount,
25
94
  });
26
95
 
27
- // Stream stderr to console
28
- child.stderr.on('data', (data) => {
29
- logger.error({ message: 'Browser task error', error: data.toString() });
96
+ if (taskDetails.live_url) {
97
+ logger.debug({
98
+ msg: 'Live URL available',
99
+ taskId,
100
+ liveUrl: taskDetails.live_url,
101
+ pollCount,
102
+ totalTime: elapsedTime,
103
+ });
104
+ return taskDetails;
105
+ }
106
+
107
+ if (taskDetails.status === 'failed' || taskDetails.status === 'stopped') {
108
+ logger.error({
109
+ msg: 'Task failed while waiting for live_url',
110
+ taskId,
111
+ status: taskDetails.status,
112
+ pollCount,
113
+ elapsedTime,
114
+ });
115
+ throw new Error(`Task failed with status: ${taskDetails.status}`);
116
+ }
117
+
118
+ logger.trace({
119
+ msg: 'Live URL not yet available, continuing to poll',
120
+ taskId,
121
+ status: taskDetails.status,
122
+ pollCount,
123
+ nextPollIn: pollInterval,
30
124
  });
31
125
 
32
- child.on('error', (error) => {
33
- reject(error);
126
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
127
+ }
128
+
129
+ logger.error({
130
+ msg: 'Timeout waiting for live_url',
131
+ taskId,
132
+ pollCount,
133
+ totalTime: Date.now() - startTime,
134
+ maxWaitTime,
135
+ });
136
+ throw new Error('Timeout waiting for live_url to become available');
137
+ };
138
+
139
+ export const waitForCompletion = async (taskId: string, maxWaitTime: number = 300000): Promise<CloudTaskResponse> => {
140
+ const startTime = Date.now();
141
+ const pollInterval = 3000; // 3 seconds for completion polling
142
+ let pollCount = 0;
143
+
144
+ logger.debug({ msg: 'Starting to poll for task completion', taskId, maxWaitTime, pollInterval });
145
+
146
+ while (Date.now() - startTime < maxWaitTime) {
147
+ pollCount++;
148
+ const elapsedTime = Date.now() - startTime;
149
+
150
+ logger.trace({
151
+ msg: 'Polling for task completion',
152
+ taskId,
153
+ pollCount,
154
+ elapsedTime,
155
+ remainingTime: maxWaitTime - elapsedTime,
34
156
  });
35
157
 
36
- child.on('close', (code) => {
37
- if (code !== 0) {
38
- reject(new Error(`browser-use exited with code ${code}`));
39
- } else {
40
- resolve(output);
41
- }
158
+ const taskDetails = await getTaskDetails(taskId);
159
+
160
+ logger.trace({
161
+ msg: 'Task completion status received',
162
+ taskId,
163
+ status: taskDetails.status,
164
+ pollCount,
165
+ hasOutput: !!taskDetails.output,
166
+ stepCount: taskDetails.steps?.length || 0,
42
167
  });
168
+
169
+ if (taskDetails.status === 'finished') {
170
+ logger.debug({
171
+ msg: 'Task completed successfully',
172
+ taskId,
173
+ pollCount,
174
+ totalTime: elapsedTime,
175
+ stepCount: taskDetails.steps?.length || 0,
176
+ hasOutput: !!taskDetails.output,
177
+ });
178
+ return taskDetails;
179
+ }
180
+
181
+ if (taskDetails.status === 'failed' || taskDetails.status === 'stopped') {
182
+ logger.error({
183
+ msg: 'Task failed during completion polling',
184
+ taskId,
185
+ status: taskDetails.status,
186
+ pollCount,
187
+ elapsedTime,
188
+ stepCount: taskDetails.steps?.length || 0,
189
+ });
190
+ throw new Error(`Task failed with status: ${taskDetails.status}`);
191
+ }
192
+
193
+ logger.trace({
194
+ msg: 'Task still in progress, continuing to poll',
195
+ taskId,
196
+ status: taskDetails.status,
197
+ pollCount,
198
+ stepCount: taskDetails.steps?.length || 0,
199
+ nextPollIn: pollInterval,
200
+ });
201
+
202
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
203
+ }
204
+
205
+ logger.error({
206
+ msg: 'Timeout waiting for task completion',
207
+ taskId,
208
+ pollCount,
209
+ totalTime: Date.now() - startTime,
210
+ maxWaitTime,
43
211
  });
44
- };
212
+ throw new Error('Timeout waiting for task completion');
213
+ };
@@ -1,4 +1,14 @@
1
- import { Edge, EdgeType, Node, PromptConditionEdge, LogicalConditionEdge, StepForwardEdge, NodeType, ToolNode } from '../types/Flows.types';
1
+ import {
2
+ Edge,
3
+ EdgeType,
4
+ Node,
5
+ PromptConditionEdge,
6
+ LogicalConditionEdge,
7
+ StepForwardEdge,
8
+ NodeType,
9
+ ToolNode,
10
+ BrowserTaskNode,
11
+ } from '../types/Flows.types';
2
12
  import { PreCompiledGraph } from '../types/LangGraph.types';
3
13
  import { BaseLanguageModel } from '@langchain/core/language_models/base';
4
14
  import { createPromptRouter } from './createPromptRouter';
@@ -6,6 +16,7 @@ import { createLogicalRouter } from './createLogicalRouter';
6
16
  import { createDirectEdge } from './createDirectEdge';
7
17
  import { addHumanInTheLoopNode, buildHumanInTheLoopNodeName } from '../nodes/addHumanInTheLoopNode';
8
18
  import { addToolRunNode, buildToolRunNodeName } from '../nodes/addToolRunNode';
19
+ import { addBrowserTaskRunNode, buildBrowserTaskRunNodeName } from '../nodes/addBrowserTaskRunNode';
9
20
  import { Tool } from '../types/Tools.types';
10
21
  import { Agent } from '../agent';
11
22
  import { logger } from '../utils/logger';
@@ -92,6 +103,11 @@ export const edgeFactory = ({
92
103
  effectiveSource = buildToolRunNodeName(source);
93
104
  }
94
105
 
106
+ if (originalNode?.type === NodeType.BROWSER_TASK) {
107
+ addBrowserTaskRunNode({ graph, browserTaskNode: originalNode as BrowserTaskNode, attachedToNodeName: source, agent });
108
+ effectiveSource = buildBrowserTaskRunNodeName(source);
109
+ }
110
+
95
111
  // Create and add the combined conditional edge with original node reference
96
112
  const combinedRouter = createCombinedRouter(effectiveSource, edgesBySource, originalNode);
97
113
  graph.addConditionalEdges(effectiveSource as any, combinedRouter);
@@ -4,10 +4,10 @@ import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
4
4
  import { HistoryStep } from '../types/Agent.types';
5
5
  import { logger } from '../utils/logger';
6
6
  import { createHistoryStep } from '../utils/history';
7
- import { AIMessage, ToolMessage } from '@langchain/core/messages';
8
- import { executeBrowserTask } from '../browserTask/executeBrowserTask';
7
+ import { AIMessage } from '@langchain/core/messages';
9
8
  import { v4 as uuidv4 } from 'uuid';
10
9
  import { Agent } from '../agent';
10
+ import { createCloudTask, waitForLiveUrl } from '../browserTask/executeBrowserTask';
11
11
 
12
12
  type AddBrowserTaskNodeParams = {
13
13
  graph: PreCompiledGraph;
@@ -15,9 +15,10 @@ type AddBrowserTaskNodeParams = {
15
15
  agent: Agent;
16
16
  };
17
17
 
18
- export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskNodeParams) => {
18
+ export const addBrowserTaskNode = async ({ graph, node }: AddBrowserTaskNodeParams) => {
19
19
  const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
20
20
  logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
21
+ logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
21
22
 
22
23
  const prompt = `
23
24
  Follow the instructions. Any retrieved data should be printed as string and not saved to a file
@@ -28,74 +29,75 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
28
29
 
29
30
  const toolCallId = uuidv4();
30
31
  const toolCallingMessageId = uuidv4();
31
- const toolCallingMessage = new AIMessage({
32
- id: toolCallingMessageId,
33
- content: '',
34
- tool_calls: [
35
- {
36
- id: toolCallId,
37
- name: 'browser-task',
38
- args: {
39
- prompt,
40
- },
41
- },
42
- ],
43
- additional_kwargs: {
44
- mindedMetadata: {
45
- nodeType: NodeType.BROWSER_TASK,
46
- },
47
- },
48
- });
32
+
49
33
  try {
50
- const result = await executeBrowserTask(node.prompt);
51
- await agent.compiledGraph.updateState(
52
- agent.getLangraphConfig(state.sessionId),
53
- {
54
- messages: [toolCallingMessage],
55
- },
56
- node.name,
34
+ // Create the browser task in the cloud
35
+ const taskId = await createCloudTask(
36
+ `Follow the instructions. Any retrieved data should be printed as string and not saved to a file.\n${node.prompt}`,
37
+ node.model,
57
38
  );
58
- logger.debug({ message: 'Browser task result', result });
59
- const toolCall = new ToolMessage({
60
- id: uuidv4(),
61
- content: JSON.stringify({
62
- result: result.split(` Result: `)[1],
63
- }),
64
- name: 'browser-task',
65
- tool_call_id: toolCallId,
66
- status: 'success',
39
+ logger.debug({ msg: 'Browser task created', taskId });
40
+
41
+ // Wait for live_url to become available
42
+ const taskDetails = await waitForLiveUrl(taskId);
43
+ logger.debug({ msg: 'Live URL available', taskId, liveUrl: taskDetails.live_url });
44
+
45
+ const toolCallingMessage = new AIMessage({
46
+ id: toolCallingMessageId,
47
+ content: '',
48
+ tool_calls: [
49
+ {
50
+ id: toolCallId,
51
+ name: 'browser-task',
52
+ args: {
53
+ prompt,
54
+ taskId,
55
+ },
56
+ },
57
+ ],
67
58
  additional_kwargs: {
68
59
  mindedMetadata: {
69
60
  nodeType: NodeType.BROWSER_TASK,
61
+ taskId,
62
+ liveUrl: taskDetails.live_url,
70
63
  },
71
64
  },
72
65
  });
66
+
73
67
  return {
74
68
  history: createHistoryStep<HistoryStep>(state.history, {
75
69
  type: NodeType.BROWSER_TASK,
76
70
  nodeId: node.name,
77
71
  nodeDisplayName: node.displayName,
78
- raw: result,
72
+ raw: { taskId, liveUrl: taskDetails.live_url },
79
73
  messageIds: [toolCallingMessageId],
80
74
  }),
81
- messages: [toolCallingMessage, toolCall],
75
+ messages: [toolCallingMessage],
82
76
  };
83
77
  } catch (error: any) {
84
- logger.error(`Error executing browser task node ${node.displayName}: ${error}`);
85
- const toolCall = new ToolMessage({
86
- id: uuidv4(),
87
- content: JSON.stringify({
88
- error: error instanceof Error ? error.message : error.toString(),
89
- }),
90
- status: 'error',
91
- name: 'browser-task',
92
- tool_call_id: toolCallId,
78
+ logger.error(`Error creating browser task node ${node.displayName}: ${error}`);
79
+
80
+ const toolCallingMessage = new AIMessage({
81
+ id: toolCallingMessageId,
82
+ content: '',
83
+ tool_calls: [
84
+ {
85
+ id: toolCallId,
86
+ name: 'browser-task',
87
+ args: {
88
+ prompt,
89
+ error: error.message,
90
+ },
91
+ },
92
+ ],
93
93
  additional_kwargs: {
94
94
  mindedMetadata: {
95
95
  nodeType: NodeType.BROWSER_TASK,
96
+ error: error.message,
96
97
  },
97
98
  },
98
99
  });
100
+
99
101
  return {
100
102
  history: createHistoryStep<HistoryStep>(state.history, {
101
103
  type: NodeType.BROWSER_TASK,
@@ -104,7 +106,7 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
104
106
  raw: error,
105
107
  messageIds: [toolCallingMessageId],
106
108
  }),
107
- messages: [toolCallingMessage, toolCall],
109
+ messages: [toolCallingMessage],
108
110
  };
109
111
  }
110
112
  };
@@ -0,0 +1,138 @@
1
+ import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
2
+ import { RunnableLike } from '@langchain/core/runnables';
3
+ import { internalNodesSuffix, NodeType, BrowserTaskNode } from '../types/Flows.types';
4
+ import { ToolMessage, AIMessage } from '@langchain/core/messages';
5
+ import { Agent } from '../agent';
6
+ import { logger } from '../utils/logger';
7
+ import { createHistoryStep } from '../utils/history';
8
+ import { HistoryStep } from '../types/Agent.types';
9
+ import { v4 as uuidv4 } from 'uuid';
10
+ import { waitForCompletion } from '../browserTask/executeBrowserTask';
11
+
12
+ type AddBrowserTaskRunNodeParams = {
13
+ graph: PreCompiledGraph;
14
+ browserTaskNode: BrowserTaskNode;
15
+ attachedToNodeName: string;
16
+ agent: Agent;
17
+ };
18
+
19
+ export const buildBrowserTaskRunNodeName = (nodeName: string) => `${nodeName}${internalNodesSuffix.BROWSER_TASK_RUN}`;
20
+
21
+ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedToNodeName }: AddBrowserTaskRunNodeParams) => {
22
+ const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
23
+ logger.info(`Executing browser task run node for ${browserTaskNode.displayName}`);
24
+
25
+ const toolCallObj = state.messages[state.messages.length - 1] as any;
26
+ if (!toolCallObj.tool_calls) {
27
+ throw new Error('Tool call not found');
28
+ }
29
+
30
+ const toolCall = toolCallObj.tool_calls[0];
31
+ const taskId = toolCall.args.taskId;
32
+
33
+ if (!taskId) {
34
+ throw new Error('Task ID not found in tool call arguments');
35
+ }
36
+
37
+ try {
38
+ // Wait for task completion
39
+ const completedTask = await waitForCompletion(taskId);
40
+ logger.debug({ msg: 'Browser task completed', taskId, output: completedTask.output });
41
+
42
+ // Create tool message with the result
43
+ const toolMessage = new ToolMessage({
44
+ id: uuidv4(),
45
+ content: JSON.stringify({
46
+ result: completedTask.output || 'Task completed successfully',
47
+ steps: completedTask.steps || [],
48
+ }),
49
+ name: 'browser-task',
50
+ tool_call_id: toolCall.id,
51
+ status: 'success',
52
+ additional_kwargs: {
53
+ mindedMetadata: {
54
+ nodeType: NodeType.BROWSER_TASK,
55
+ taskId,
56
+ steps: completedTask.steps,
57
+ },
58
+ },
59
+ });
60
+
61
+ // Update the AI message with steps using the message reducer pattern
62
+ const updatedAIMessage = new AIMessage({
63
+ id: toolCallObj.id,
64
+ content: toolCallObj.content,
65
+ tool_calls: toolCallObj.tool_calls,
66
+ additional_kwargs: {
67
+ ...toolCallObj.additional_kwargs,
68
+ mindedMetadata: {
69
+ ...toolCallObj.additional_kwargs?.mindedMetadata,
70
+ steps: completedTask.steps,
71
+ status: 'completed',
72
+ },
73
+ update: true, // This triggers the message reducer to update the existing message
74
+ },
75
+ });
76
+
77
+ return {
78
+ messages: [toolMessage, updatedAIMessage],
79
+ history: createHistoryStep<HistoryStep>(state.history, {
80
+ type: NodeType.BROWSER_TASK,
81
+ nodeId: browserTaskNode.name,
82
+ nodeDisplayName: browserTaskNode.displayName,
83
+ raw: completedTask,
84
+ messageIds: [],
85
+ }),
86
+ };
87
+ } catch (error: any) {
88
+ logger.error({ msg: 'Error executing browser task run node', error });
89
+
90
+ const errorToolMessage = new ToolMessage({
91
+ id: uuidv4(),
92
+ content: JSON.stringify({
93
+ error: error instanceof Error ? error.message : error.toString(),
94
+ }),
95
+ status: 'error',
96
+ name: 'browser-task',
97
+ tool_call_id: toolCall.id,
98
+ additional_kwargs: {
99
+ mindedMetadata: {
100
+ nodeType: NodeType.BROWSER_TASK,
101
+ taskId,
102
+ error: error.message,
103
+ },
104
+ },
105
+ });
106
+
107
+ // Update the AI message with error status
108
+ const updatedAIMessage = new AIMessage({
109
+ id: toolCallObj.id,
110
+ content: toolCallObj.content,
111
+ tool_calls: toolCallObj.tool_calls,
112
+ additional_kwargs: {
113
+ ...toolCallObj.additional_kwargs,
114
+ mindedMetadata: {
115
+ ...toolCallObj.additional_kwargs?.mindedMetadata,
116
+ status: 'failed',
117
+ error: error.message,
118
+ },
119
+ update: true,
120
+ },
121
+ });
122
+
123
+ return {
124
+ messages: [errorToolMessage, updatedAIMessage],
125
+ history: createHistoryStep<HistoryStep>(state.history, {
126
+ type: NodeType.BROWSER_TASK,
127
+ nodeId: browserTaskNode.name,
128
+ nodeDisplayName: browserTaskNode.displayName,
129
+ raw: error,
130
+ messageIds: [],
131
+ }),
132
+ };
133
+ }
134
+ };
135
+
136
+ graph.addNode(buildBrowserTaskRunNodeName(attachedToNodeName), callback);
137
+ graph.addEdge(attachedToNodeName as any, buildBrowserTaskRunNodeName(attachedToNodeName) as any);
138
+ };
@@ -190,4 +190,5 @@ export enum KnownTriggerNames {
190
190
  export enum internalNodesSuffix {
191
191
  HUMAN_IN_THE_LOOP = '_humanInTheLoop',
192
192
  TOOL_RUN = '_toolRun',
193
+ BROWSER_TASK_RUN = '_browserTaskRun',
193
194
  }
@@ -13,6 +13,7 @@ export const createStateAnnotation = <Memory = any>() =>
13
13
  const index = res.findIndex((m) => m.id && m.id === message.id);
14
14
  if (index !== -1) {
15
15
  res[index].content = message.content;
16
+ res[index].additional_kwargs = { ...res[index].additional_kwargs, ...message.additional_kwargs };
16
17
  }
17
18
  } else {
18
19
  res.push(message);