@minded-ai/mindedjs 1.0.117 → 1.0.118-beta-2

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 (88) hide show
  1. package/dist/agent.js +17 -7
  2. package/dist/agent.js.map +1 -1
  3. package/dist/browserTask/README.md +419 -0
  4. package/dist/browserTask/browserAgent.py +632 -0
  5. package/dist/browserTask/captcha_isolated.png +0 -0
  6. package/dist/browserTask/executeBrowserTask.d.ts +5 -0
  7. package/dist/browserTask/executeBrowserTask.d.ts.map +1 -1
  8. package/dist/browserTask/executeBrowserTask.js +64 -1
  9. package/dist/browserTask/executeBrowserTask.js.map +1 -1
  10. package/dist/browserTask/executeBrowserTask.ts +79 -0
  11. package/dist/browserTask/requirements.txt +8 -0
  12. package/dist/browserTask/setup.sh +144 -0
  13. package/dist/checkpointer/checkpointSaverFactory.js +17 -7
  14. package/dist/checkpointer/checkpointSaverFactory.js.map +1 -1
  15. package/dist/cli/index.js +17 -7
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/lambdaHandlerTemplate.d.ts.map +1 -1
  18. package/dist/edges/createDirectEdge.d.ts.map +1 -1
  19. package/dist/edges/createLogicalRouter.d.ts.map +1 -1
  20. package/dist/edges/createLogicalRouter.js +17 -7
  21. package/dist/edges/createLogicalRouter.js.map +1 -1
  22. package/dist/edges/createPromptRouter.d.ts.map +1 -1
  23. package/dist/edges/edgeFactory.d.ts.map +1 -1
  24. package/dist/index.js +17 -7
  25. package/dist/index.js.map +1 -1
  26. package/dist/interfaces/zendesk.js +17 -7
  27. package/dist/interfaces/zendesk.js.map +1 -1
  28. package/dist/internalTools/appActionRunnerTool.d.ts.map +1 -1
  29. package/dist/internalTools/appActionRunnerTool.js +17 -7
  30. package/dist/internalTools/appActionRunnerTool.js.map +1 -1
  31. package/dist/internalTools/documentExtraction/documentExtraction.js +17 -7
  32. package/dist/internalTools/documentExtraction/documentExtraction.js.map +1 -1
  33. package/dist/internalTools/libraryActionRunnerTool.d.ts.map +1 -1
  34. package/dist/internalTools/retell.js +17 -7
  35. package/dist/internalTools/retell.js.map +1 -1
  36. package/dist/internalTools/sendPlaceholderMessage.js +17 -7
  37. package/dist/internalTools/sendPlaceholderMessage.js.map +1 -1
  38. package/dist/internalTools/timer.js +17 -7
  39. package/dist/internalTools/timer.js.map +1 -1
  40. package/dist/llm/createLlmInstance.d.ts.map +1 -1
  41. package/dist/nodes/addAppToolNode.d.ts.map +1 -1
  42. package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -1
  43. package/dist/nodes/addBrowserTaskNode.js +39 -18
  44. package/dist/nodes/addBrowserTaskNode.js.map +1 -1
  45. package/dist/nodes/addBrowserTaskRunNode.d.ts.map +1 -1
  46. package/dist/nodes/addBrowserTaskRunNode.js +27 -16
  47. package/dist/nodes/addBrowserTaskRunNode.js.map +1 -1
  48. package/dist/nodes/addHumanInTheLoopNode.d.ts.map +1 -1
  49. package/dist/nodes/addJumpToNode.d.ts.map +1 -1
  50. package/dist/nodes/addJunctionNode.d.ts.map +1 -1
  51. package/dist/nodes/addPromptNode.d.ts.map +1 -1
  52. package/dist/nodes/addToolNode.d.ts.map +1 -1
  53. package/dist/nodes/addToolRunNode.d.ts.map +1 -1
  54. package/dist/nodes/addTriggerNode.d.ts.map +1 -1
  55. package/dist/nodes/nodeFactory.d.ts.map +1 -1
  56. package/dist/platform/mindedCheckpointSaver.js +17 -7
  57. package/dist/platform/mindedCheckpointSaver.js.map +1 -1
  58. package/dist/platform/mindedConnection.d.ts.map +1 -1
  59. package/dist/platform/mindedConnection.js +17 -7
  60. package/dist/platform/mindedConnection.js.map +1 -1
  61. package/dist/platform/mindedConnectionTypes.d.ts +29 -1
  62. package/dist/platform/mindedConnectionTypes.d.ts.map +1 -1
  63. package/dist/platform/mindedConnectionTypes.js +2 -0
  64. package/dist/platform/mindedConnectionTypes.js.map +1 -1
  65. package/dist/platform/piiGateway/gateway.js +17 -7
  66. package/dist/platform/piiGateway/gateway.js.map +1 -1
  67. package/dist/platform/utils/parseAttachments.d.ts.map +1 -1
  68. package/dist/playbooks/playbooks.js +17 -7
  69. package/dist/playbooks/playbooks.js.map +1 -1
  70. package/dist/toolsLibrary/classifier.d.ts.map +1 -1
  71. package/dist/toolsLibrary/index.js +17 -7
  72. package/dist/toolsLibrary/index.js.map +1 -1
  73. package/dist/toolsLibrary/parseDocument.d.ts +3 -3
  74. package/dist/types/Flows.types.d.ts +4 -0
  75. package/dist/types/Flows.types.d.ts.map +1 -1
  76. package/dist/types/Flows.types.js.map +1 -1
  77. package/dist/types/LangGraph.types.d.ts.map +1 -1
  78. package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -1
  79. package/dist/utils/history.d.ts.map +1 -1
  80. package/dist/utils/wait.d.ts.map +1 -1
  81. package/dist/voice/voiceSession.js +17 -7
  82. package/dist/voice/voiceSession.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/browserTask/executeBrowserTask.ts +87 -0
  85. package/src/nodes/addBrowserTaskNode.ts +25 -12
  86. package/src/nodes/addBrowserTaskRunNode.ts +26 -14
  87. package/src/platform/mindedConnectionTypes.ts +32 -1
  88. package/src/types/Flows.types.ts +2 -0
@@ -1,4 +1,11 @@
1
1
  import { logger } from '../utils/logger';
2
+ import { mindedConnection } from '../platform/mindedConnection';
3
+ import {
4
+ mindedConnectionSocketMessageType,
5
+ CreateBrowserSessionResponse,
6
+ InvokeBrowserTaskResponse,
7
+ CreateBrowserSessionRequest,
8
+ } from '../platform/mindedConnectionTypes';
2
9
 
3
10
  // Browser Use Cloud API configuration
4
11
  const BROWSER_USE_API_BASE_URL = 'https://api.browser-use.com/api/v1';
@@ -211,3 +218,83 @@ export const waitForCompletion = async (taskId: string, maxWaitTime: number = 30
211
218
  });
212
219
  throw new Error('Timeout waiting for task completion');
213
220
  };
221
+
222
+ // Socket-based browser task functions
223
+ export const createBrowserSession = async (proxy?: string): Promise<CreateBrowserSessionResponse> => {
224
+ logger.debug({ msg: 'Creating browser session via socket', proxy });
225
+
226
+ try {
227
+ const response = await mindedConnection.awaitEmit<CreateBrowserSessionRequest, CreateBrowserSessionResponse>(
228
+ mindedConnectionSocketMessageType.CREATE_BROWSER_SESSION,
229
+ {
230
+ type: mindedConnectionSocketMessageType.CREATE_BROWSER_SESSION,
231
+ proxy,
232
+ },
233
+ 30000, // 30 seconds timeout
234
+ );
235
+
236
+ if (response.error) {
237
+ logger.error({ msg: 'Failed to create browser session', error: response.error });
238
+ throw new Error(response.error);
239
+ }
240
+
241
+ logger.debug({
242
+ msg: 'Browser session created successfully',
243
+ sessionId: response.sessionId,
244
+ hasLiveUrl: !!response.liveViewUrl,
245
+ });
246
+
247
+ return response;
248
+ } catch (error) {
249
+ logger.error({ msg: 'Error creating browser session', error });
250
+ throw error;
251
+ }
252
+ };
253
+
254
+ export const invokeBrowserTask = async (
255
+ sessionId: string,
256
+ cdpUrl: string,
257
+ task: string,
258
+ keepAlive?: boolean,
259
+ hooks?: { name: string }[],
260
+ ): Promise<InvokeBrowserTaskResponse> => {
261
+ logger.debug({
262
+ msg: 'Invoking browser task via socket',
263
+ sessionId,
264
+ taskLength: task.length,
265
+ keepAlive,
266
+ hooksCount: hooks?.length || 0,
267
+ });
268
+
269
+ try {
270
+ const response = await mindedConnection.awaitEmit<any, InvokeBrowserTaskResponse>(
271
+ mindedConnectionSocketMessageType.INVOKE_BROWSER_TASK,
272
+ {
273
+ sessionId,
274
+ cdpUrl,
275
+ task,
276
+ keepAlive,
277
+ hooks,
278
+ },
279
+ 120000, // 2 minutes timeout
280
+ );
281
+
282
+ if (response.error) {
283
+ logger.error({ msg: 'Failed to invoke browser task', error: response.error });
284
+ throw new Error(response.error);
285
+ }
286
+
287
+ logger.debug({
288
+ msg: 'Browser task completed successfully',
289
+ sessionId,
290
+ hasResult: !!response.result,
291
+ stepCount: response.steps?.length || 0,
292
+ recordingCount: response.recordings?.length || 0,
293
+ });
294
+
295
+ return response;
296
+ } catch (error) {
297
+ logger.error({ msg: 'Error invoking browser task', error });
298
+ throw error;
299
+ }
300
+ };
@@ -7,7 +7,7 @@ import { createHistoryStep } from '../utils/history';
7
7
  import { AIMessage, SystemMessage } from '@langchain/core/messages';
8
8
  import { v4 as uuidv4 } from 'uuid';
9
9
  import { Agent } from '../agent';
10
- import { createCloudTask, waitForLiveUrl } from '../browserTask/executeBrowserTask';
10
+ import { createBrowserSession } from '../browserTask/executeBrowserTask';
11
11
  import { tool as langchainTool } from '@langchain/core/tools';
12
12
  import { z } from 'zod';
13
13
  import { LLMProviders } from '../types/LLM.types';
@@ -146,20 +146,29 @@ ${Object.keys(inputParams).length > 0 ? `# Input parameters:\n${JSON.stringify(i
146
146
  ${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
147
147
  `;
148
148
 
149
- // Create the browser task in the cloud
150
- const taskId = await createCloudTask(fullPrompt, node.model);
151
- logger.debug({ msg: 'Browser task created', taskId });
149
+ // Create browser session using socket
150
+ const session = await createBrowserSession(node.proxy);
152
151
 
153
- // Wait for live_url to become available
154
- const taskDetails = await waitForLiveUrl(taskId);
155
- logger.debug({ msg: 'Live URL available', taskId, liveUrl: taskDetails.live_url });
152
+ if (!session.sessionId || !session.cdpUrl) {
153
+ throw new Error('Failed to create browser session: missing session details');
154
+ }
155
+
156
+ // Determine keepAlive based on NODE_ENV
157
+ const keepAlive = process.env.NODE_ENV !== 'production';
158
+
159
+ logger.debug({
160
+ msg: 'Browser session created',
161
+ sessionId: session.sessionId,
162
+ hasLiveUrl: !!session.liveViewUrl,
163
+ keepAlive,
164
+ nodeEnv: process.env.NODE_ENV,
165
+ });
156
166
 
157
- // Update the tool call with taskId and other metadata
167
+ // Update the tool call with session info and prompt
158
168
  const updatedToolCall = {
159
169
  ...toolCall,
160
170
  args: {
161
171
  ...inputParams,
162
- taskId,
163
172
  prompt: fullPrompt,
164
173
  },
165
174
  };
@@ -172,8 +181,11 @@ ${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
172
181
  mindedMetadata: {
173
182
  nodeType: NodeType.BROWSER_TASK,
174
183
  nodeDisplayName: node.displayName,
175
- taskId,
176
- liveUrl: taskDetails.live_url,
184
+ sessionId: session.sessionId,
185
+ cdpUrl: session.cdpUrl,
186
+ liveUrl: session.liveViewUrl,
187
+ keepAlive,
188
+ hooks: node.hooks || [],
177
189
  },
178
190
  },
179
191
  });
@@ -183,7 +195,7 @@ ${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
183
195
  type: NodeType.BROWSER_TASK,
184
196
  nodeId: node.name,
185
197
  nodeDisplayName: node.displayName,
186
- raw: { taskId, liveUrl: taskDetails.live_url, inputParams },
198
+ raw: { taskId: session.sessionId, liveUrl: session.liveViewUrl, inputParams },
187
199
  messageIds: [toolCallingMessage.id!],
188
200
  }),
189
201
  messages: [toolCallingMessage],
@@ -211,6 +223,7 @@ ${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
211
223
  nodeType: NodeType.BROWSER_TASK,
212
224
  nodeDisplayName: node.displayName,
213
225
  error: error.message,
226
+ hooks: node.hooks || [],
214
227
  },
215
228
  },
216
229
  });
@@ -7,7 +7,7 @@ import { logger } from '../utils/logger';
7
7
  import { createHistoryStep } from '../utils/history';
8
8
  import { HistoryStep } from '../types/Agent.types';
9
9
  import { v4 as uuidv4 } from 'uuid';
10
- import { waitForCompletion } from '../browserTask/executeBrowserTask';
10
+ import { invokeBrowserTask } from '../browserTask/executeBrowserTask';
11
11
 
12
12
  type AddBrowserTaskRunNodeParams = {
13
13
  graph: PreCompiledGraph;
@@ -26,23 +26,33 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
26
26
  if (!toolCallObj.tool_calls) {
27
27
  throw new Error('Tool call not found');
28
28
  }
29
+ const toolCallMindedMetadata = toolCallObj.additional_kwargs?.mindedMetadata;
29
30
  const toolCall = toolCallObj.tool_calls[0];
30
- const { taskId, ...inputParams } = toolCall.args;
31
+ const { prompt, ...inputParams } = toolCall.args;
32
+ const { sessionId, cdpUrl, keepAlive, hooks } = toolCallMindedMetadata;
31
33
  try {
32
- if (!taskId) {
33
- throw new Error('Task ID not found in tool call arguments');
34
+ if (!sessionId || !cdpUrl || !prompt) {
35
+ throw new Error('Missing required parameters: sessionId, cdpUrl, or prompt');
34
36
  }
35
37
 
36
- // Wait for task completion
37
- const completedTask = await waitForCompletion(taskId);
38
- logger.debug({ msg: 'Browser task completed', taskId, output: completedTask.output });
38
+ // Invoke browser task via socket
39
+ const result = await invokeBrowserTask(sessionId, cdpUrl, prompt, keepAlive, hooks);
40
+
41
+ logger.debug({
42
+ msg: 'Browser task completed',
43
+ sessionId,
44
+ hasResult: !!result.result,
45
+ stepCount: result.steps?.length || 0,
46
+ recordingCount: result.recordings?.length || 0,
47
+ });
39
48
 
40
49
  // Create tool message with the result
41
50
  const toolMessage = new ToolMessage({
42
51
  id: uuidv4(),
43
52
  content: JSON.stringify({
44
- result: completedTask.output || 'Task completed successfully',
45
- steps: completedTask.steps || [],
53
+ result: result.result || 'Task completed successfully',
54
+ steps: result.steps || [],
55
+ recordings: result.recordings || [],
46
56
  inputParams: inputParams,
47
57
  }),
48
58
  name: 'browser-task',
@@ -52,8 +62,9 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
52
62
  mindedMetadata: {
53
63
  nodeType: NodeType.BROWSER_TASK,
54
64
  nodeDisplayName: browserTaskNode.displayName,
55
- taskId,
56
- steps: completedTask.steps,
65
+ sessionId,
66
+ steps: result.steps,
67
+ recordings: result.recordings,
57
68
  inputParams: inputParams,
58
69
  },
59
70
  },
@@ -69,7 +80,8 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
69
80
  mindedMetadata: {
70
81
  ...toolCallObj.additional_kwargs?.mindedMetadata,
71
82
  nodeDisplayName: browserTaskNode.displayName,
72
- steps: completedTask.steps,
83
+ steps: result.steps,
84
+ recordings: result.recordings,
73
85
  status: 'completed',
74
86
  },
75
87
  update: true, // This triggers the message reducer to update the existing message
@@ -82,7 +94,7 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
82
94
  type: NodeType.BROWSER_TASK,
83
95
  nodeId: browserTaskNode.name,
84
96
  nodeDisplayName: browserTaskNode.displayName,
85
- raw: completedTask,
97
+ raw: result,
86
98
  messageIds: [],
87
99
  }),
88
100
  };
@@ -102,7 +114,7 @@ export const addBrowserTaskRunNode = async ({ graph, browserTaskNode, attachedTo
102
114
  mindedMetadata: {
103
115
  nodeType: NodeType.BROWSER_TASK,
104
116
  nodeDisplayName: browserTaskNode.displayName,
105
- taskId,
117
+ sessionId,
106
118
  error: error.message,
107
119
  inputParams: inputParams,
108
120
  },
@@ -39,7 +39,9 @@ export enum mindedConnectionSocketMessageType {
39
39
  TIMER_TRIGGER = 'timer-trigger',
40
40
  RETELL_CALL = 'retell-call',
41
41
  RETELL_GET_CALL = 'retell-get-call',
42
- SDK_VERSION_MISMATCH = 'sdk-version-mismatch',
42
+ SDK_VERSION_MISMATCH = 'sdk-version-mismatch', // Browser Task
43
+ CREATE_BROWSER_SESSION = 'create-browser-session',
44
+ INVOKE_BROWSER_TASK = 'invoke-browser-task',
43
45
  }
44
46
 
45
47
  export type mindedConnectionSocketMessageTypeMap = {
@@ -69,6 +71,8 @@ export type mindedConnectionSocketMessageTypeMap = {
69
71
  [mindedConnectionSocketMessageType.RETELL_GET_CALL]: RetellGetCall;
70
72
  [mindedConnectionSocketMessageType.SDK_VERSION_MISMATCH]: SdkVersionMismatchMessage;
71
73
  [mindedConnectionSocketMessageType.UPDATE_STATE]: UpdateStateRequest;
74
+ [mindedConnectionSocketMessageType.CREATE_BROWSER_SESSION]: CreateBrowserSessionRequest;
75
+ [mindedConnectionSocketMessageType.INVOKE_BROWSER_TASK]: InvokeBrowserTaskRequest;
72
76
  };
73
77
 
74
78
  export interface BasemindedConnectionSocketMessage {
@@ -244,3 +248,30 @@ export interface UpdateStateRequest extends BasemindedConnectionSocketMessage {
244
248
  sessionId: string;
245
249
  state: Partial<typeof stateAnnotation.State>;
246
250
  }
251
+
252
+ // Browser Task Messages
253
+ export interface CreateBrowserSessionRequest extends BasemindedConnectionSocketMessage {
254
+ type: mindedConnectionSocketMessageType.CREATE_BROWSER_SESSION;
255
+ proxy?: string; // 2-digit country code like 'IL'
256
+ }
257
+
258
+ export interface CreateBrowserSessionResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
259
+ sessionId?: string;
260
+ cdpUrl?: string;
261
+ liveViewUrl?: string;
262
+ }
263
+
264
+ export interface InvokeBrowserTaskRequest extends BasemindedConnectionSocketMessage {
265
+ type: mindedConnectionSocketMessageType.INVOKE_BROWSER_TASK;
266
+ cdpUrl: string;
267
+ task: string;
268
+ sessionId: string;
269
+ keepAlive?: boolean;
270
+ hooks?: { name: string }[]; // Array of hooks to be passed to the browser-use lambda
271
+ }
272
+
273
+ export interface InvokeBrowserTaskResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
274
+ result?: any;
275
+ steps?: any[];
276
+ recordings?: any[];
277
+ }
@@ -112,6 +112,8 @@ export interface BrowserTaskNode extends BaseNode {
112
112
  }[];
113
113
  autoTrigger?: boolean;
114
114
  defaultPayload?: string;
115
+ proxy?: string; // 2-digit country code like 'IL'
116
+ hooks?: { name: string }[]; // Array of hooks to be passed to the browser-use lambda
115
117
  }
116
118
 
117
119
  export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode | InterfaceTriggerNode;