@minded-ai/mindedjs 1.0.117 → 1.0.118-beta-1
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/agent.js +17 -7
- package/dist/agent.js.map +1 -1
- package/dist/browserTask/README.md +419 -0
- package/dist/browserTask/browserAgent.py +632 -0
- package/dist/browserTask/captcha_isolated.png +0 -0
- package/dist/browserTask/executeBrowserTask.d.ts +3 -0
- package/dist/browserTask/executeBrowserTask.d.ts.map +1 -1
- package/dist/browserTask/executeBrowserTask.js +62 -1
- package/dist/browserTask/executeBrowserTask.js.map +1 -1
- package/dist/browserTask/executeBrowserTask.ts +79 -0
- package/dist/browserTask/requirements.txt +8 -0
- package/dist/browserTask/setup.sh +144 -0
- package/dist/checkpointer/checkpointSaverFactory.js +17 -7
- package/dist/checkpointer/checkpointSaverFactory.js.map +1 -1
- package/dist/cli/index.js +17 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.d.ts.map +1 -1
- package/dist/edges/createDirectEdge.d.ts.map +1 -1
- package/dist/edges/createLogicalRouter.d.ts.map +1 -1
- package/dist/edges/createLogicalRouter.js +17 -7
- package/dist/edges/createLogicalRouter.js.map +1 -1
- package/dist/edges/createPromptRouter.d.ts.map +1 -1
- package/dist/edges/edgeFactory.d.ts.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/interfaces/zendesk.js +17 -7
- package/dist/interfaces/zendesk.js.map +1 -1
- package/dist/internalTools/appActionRunnerTool.d.ts.map +1 -1
- package/dist/internalTools/appActionRunnerTool.js +17 -7
- package/dist/internalTools/appActionRunnerTool.js.map +1 -1
- package/dist/internalTools/documentExtraction/documentExtraction.js +17 -7
- package/dist/internalTools/documentExtraction/documentExtraction.js.map +1 -1
- package/dist/internalTools/libraryActionRunnerTool.d.ts.map +1 -1
- package/dist/internalTools/retell.js +17 -7
- package/dist/internalTools/retell.js.map +1 -1
- package/dist/internalTools/sendPlaceholderMessage.js +17 -7
- package/dist/internalTools/sendPlaceholderMessage.js.map +1 -1
- package/dist/internalTools/timer.js +17 -7
- package/dist/internalTools/timer.js.map +1 -1
- package/dist/llm/createLlmInstance.d.ts.map +1 -1
- package/dist/nodes/addAppToolNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskNode.js +37 -18
- package/dist/nodes/addBrowserTaskNode.js.map +1 -1
- package/dist/nodes/addBrowserTaskRunNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskRunNode.js +27 -16
- package/dist/nodes/addBrowserTaskRunNode.js.map +1 -1
- package/dist/nodes/addHumanInTheLoopNode.d.ts.map +1 -1
- package/dist/nodes/addJumpToNode.d.ts.map +1 -1
- package/dist/nodes/addJunctionNode.d.ts.map +1 -1
- package/dist/nodes/addPromptNode.d.ts.map +1 -1
- package/dist/nodes/addToolNode.d.ts.map +1 -1
- package/dist/nodes/addToolRunNode.d.ts.map +1 -1
- package/dist/nodes/addTriggerNode.d.ts.map +1 -1
- package/dist/nodes/nodeFactory.d.ts.map +1 -1
- package/dist/platform/mindedCheckpointSaver.js +17 -7
- package/dist/platform/mindedCheckpointSaver.js.map +1 -1
- package/dist/platform/mindedConnection.d.ts.map +1 -1
- package/dist/platform/mindedConnection.js +17 -7
- package/dist/platform/mindedConnection.js.map +1 -1
- package/dist/platform/mindedConnectionTypes.d.ts +26 -1
- package/dist/platform/mindedConnectionTypes.d.ts.map +1 -1
- package/dist/platform/mindedConnectionTypes.js +2 -0
- package/dist/platform/mindedConnectionTypes.js.map +1 -1
- package/dist/platform/piiGateway/gateway.js +17 -7
- package/dist/platform/piiGateway/gateway.js.map +1 -1
- package/dist/platform/utils/parseAttachments.d.ts.map +1 -1
- package/dist/playbooks/playbooks.js +17 -7
- package/dist/playbooks/playbooks.js.map +1 -1
- package/dist/toolsLibrary/classifier.d.ts.map +1 -1
- package/dist/toolsLibrary/index.js +17 -7
- package/dist/toolsLibrary/index.js.map +1 -1
- package/dist/toolsLibrary/parseDocument.d.ts +3 -3
- package/dist/types/Flows.types.d.ts +1 -0
- package/dist/types/Flows.types.d.ts.map +1 -1
- package/dist/types/Flows.types.js.map +1 -1
- package/dist/types/LangGraph.types.d.ts.map +1 -1
- package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -1
- package/dist/utils/history.d.ts.map +1 -1
- package/dist/utils/wait.d.ts.map +1 -1
- package/dist/voice/voiceSession.js +17 -7
- package/dist/voice/voiceSession.js.map +1 -1
- package/package.json +1 -1
- package/src/browserTask/executeBrowserTask.ts +84 -0
- package/src/nodes/addBrowserTaskNode.ts +23 -12
- package/src/nodes/addBrowserTaskRunNode.ts +26 -14
- package/src/platform/mindedConnectionTypes.ts +31 -1
- package/src/types/Flows.types.ts +1 -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,80 @@ 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
|
+
): Promise<InvokeBrowserTaskResponse> => {
|
|
260
|
+
logger.debug({
|
|
261
|
+
msg: 'Invoking browser task via socket',
|
|
262
|
+
sessionId,
|
|
263
|
+
taskLength: task.length,
|
|
264
|
+
keepAlive,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
try {
|
|
268
|
+
const response = await mindedConnection.awaitEmit<any, InvokeBrowserTaskResponse>(
|
|
269
|
+
mindedConnectionSocketMessageType.INVOKE_BROWSER_TASK,
|
|
270
|
+
{
|
|
271
|
+
sessionId,
|
|
272
|
+
cdpUrl,
|
|
273
|
+
task,
|
|
274
|
+
keepAlive,
|
|
275
|
+
},
|
|
276
|
+
120000, // 2 minutes timeout
|
|
277
|
+
);
|
|
278
|
+
|
|
279
|
+
if (response.error) {
|
|
280
|
+
logger.error({ msg: 'Failed to invoke browser task', error: response.error });
|
|
281
|
+
throw new Error(response.error);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
logger.debug({
|
|
285
|
+
msg: 'Browser task completed successfully',
|
|
286
|
+
sessionId,
|
|
287
|
+
hasResult: !!response.result,
|
|
288
|
+
stepCount: response.steps?.length || 0,
|
|
289
|
+
recordingCount: response.recordings?.length || 0,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
return response;
|
|
293
|
+
} catch (error) {
|
|
294
|
+
logger.error({ msg: 'Error invoking browser task', error });
|
|
295
|
+
throw error;
|
|
296
|
+
}
|
|
297
|
+
};
|
|
@@ -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 {
|
|
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
|
|
150
|
-
const
|
|
151
|
-
logger.debug({ msg: 'Browser task created', taskId });
|
|
149
|
+
// Create browser session using socket
|
|
150
|
+
const session = await createBrowserSession(node.proxy);
|
|
152
151
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
|
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,10 @@ ${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
|
-
|
|
176
|
-
|
|
184
|
+
sessionId: session.sessionId,
|
|
185
|
+
cdpUrl: session.cdpUrl,
|
|
186
|
+
liveUrl: session.liveViewUrl,
|
|
187
|
+
keepAlive,
|
|
177
188
|
},
|
|
178
189
|
},
|
|
179
190
|
});
|
|
@@ -183,7 +194,7 @@ ${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
|
|
|
183
194
|
type: NodeType.BROWSER_TASK,
|
|
184
195
|
nodeId: node.name,
|
|
185
196
|
nodeDisplayName: node.displayName,
|
|
186
|
-
raw: { taskId, liveUrl:
|
|
197
|
+
raw: { taskId: session.sessionId, liveUrl: session.liveViewUrl, inputParams },
|
|
187
198
|
messageIds: [toolCallingMessage.id!],
|
|
188
199
|
}),
|
|
189
200
|
messages: [toolCallingMessage],
|
|
@@ -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 {
|
|
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 {
|
|
31
|
+
const { prompt, ...inputParams } = toolCall.args;
|
|
32
|
+
const { sessionId, cdpUrl, keepAlive } = toolCallMindedMetadata;
|
|
31
33
|
try {
|
|
32
|
-
if (!
|
|
33
|
-
throw new Error('
|
|
34
|
+
if (!sessionId || !cdpUrl || !prompt) {
|
|
35
|
+
throw new Error('Missing required parameters: sessionId, cdpUrl, or prompt');
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
//
|
|
37
|
-
const
|
|
38
|
-
|
|
38
|
+
// Invoke browser task via socket
|
|
39
|
+
const result = await invokeBrowserTask(sessionId, cdpUrl, prompt, keepAlive);
|
|
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:
|
|
45
|
-
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
|
-
|
|
56
|
-
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:
|
|
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:
|
|
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
|
-
|
|
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,29 @@ 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
|
+
}
|
|
271
|
+
|
|
272
|
+
export interface InvokeBrowserTaskResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
|
|
273
|
+
result?: any;
|
|
274
|
+
steps?: any[];
|
|
275
|
+
recordings?: any[];
|
|
276
|
+
}
|
package/src/types/Flows.types.ts
CHANGED
|
@@ -112,6 +112,7 @@ export interface BrowserTaskNode extends BaseNode {
|
|
|
112
112
|
}[];
|
|
113
113
|
autoTrigger?: boolean;
|
|
114
114
|
defaultPayload?: string;
|
|
115
|
+
proxy?: string; // 2-digit country code like 'IL'
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode | InterfaceTriggerNode;
|