@minded-ai/mindedjs 1.0.96 → 1.0.97
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/browserTask/executeBrowserTask.d.ts +2 -0
- package/dist/browserTask/executeBrowserTask.d.ts.map +1 -0
- package/dist/browserTask/executeBrowserTask.js +38 -0
- package/dist/browserTask/executeBrowserTask.js.map +1 -0
- package/dist/nodes/addAppToolNode.js +2 -2
- package/dist/nodes/addAppToolNode.js.map +1 -1
- package/dist/nodes/addBrowserTaskNode.d.ts +11 -0
- package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -0
- package/dist/nodes/addBrowserTaskNode.js +100 -0
- package/dist/nodes/addBrowserTaskNode.js.map +1 -0
- package/dist/nodes/nodeFactory.d.ts.map +1 -1
- package/dist/nodes/nodeFactory.js +4 -0
- package/dist/nodes/nodeFactory.js.map +1 -1
- package/dist/types/Flows.types.d.ts +9 -2
- package/dist/types/Flows.types.d.ts.map +1 -1
- package/dist/types/Flows.types.js +1 -0
- package/dist/types/Flows.types.js.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/docs/getting-started/installation.md +42 -0
- package/package.json +3 -2
- package/src/browserTask/executeBrowserTask.ts +38 -0
- package/src/nodes/addAppToolNode.ts +2 -2
- package/src/nodes/addBrowserTaskNode.ts +107 -0
- package/src/nodes/nodeFactory.ts +4 -0
- package/src/types/Flows.types.ts +9 -1
- package/src/utils/logger.ts +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeBrowserTask.d.ts","sourceRoot":"","sources":["../../src/browserTask/executeBrowserTask.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAkCvE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeBrowserTask = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
const executeBrowserTask = async (prompt) => {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = (0, child_process_1.spawn)('browser-use', ['-p', prompt], {
|
|
9
|
+
env: {
|
|
10
|
+
...process.env,
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
let output = '';
|
|
14
|
+
// Stream stdout to console and collect it
|
|
15
|
+
child.stdout.on('data', (data) => {
|
|
16
|
+
const chunk = data.toString();
|
|
17
|
+
logger_1.logger.trace({ message: 'Browser task output', output: chunk });
|
|
18
|
+
output += chunk;
|
|
19
|
+
});
|
|
20
|
+
// Stream stderr to console
|
|
21
|
+
child.stderr.on('data', (data) => {
|
|
22
|
+
logger_1.logger.error({ message: 'Browser task error', error: data.toString() });
|
|
23
|
+
});
|
|
24
|
+
child.on('error', (error) => {
|
|
25
|
+
reject(error);
|
|
26
|
+
});
|
|
27
|
+
child.on('close', (code) => {
|
|
28
|
+
if (code !== 0) {
|
|
29
|
+
reject(new Error(`browser-use exited with code ${code}`));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
resolve(output);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
exports.executeBrowserTask = executeBrowserTask;
|
|
38
|
+
//# sourceMappingURL=executeBrowserTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeBrowserTask.js","sourceRoot":"","sources":["../../src/browserTask/executeBrowserTask.ts"],"names":[],"mappings":";;;AAAA,iDAAsC;AACtC,4CAAyC;AAElC,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAE1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACjD,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;aACf;SACF,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,0CAA0C;QAC1C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,eAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,eAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,kBAAkB,sBAkC7B"}
|
|
@@ -60,8 +60,8 @@ const addAppToolNode = async ({ graph, node, llm, agent, }) => {
|
|
|
60
60
|
};
|
|
61
61
|
const toolCallMessage = await tool.invoke(AIToolCallMessage.tool_calls[0]);
|
|
62
62
|
AIToolCallMessage.additional_kwargs = {
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
mindedMetadata: {
|
|
64
|
+
nodeType: Flows_types_1.NodeType.APP_TOOL
|
|
65
65
|
},
|
|
66
66
|
};
|
|
67
67
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addAppToolNode.js","sourceRoot":"","sources":["../../src/nodes/addAppToolNode.ts"],"names":[],"mappings":";;;AAAA,sDAA6D;AAC7D,iDAA8D;AAE9D,uDAAyD;AAIzD,8EAA8E;AAG9E,4CAAyC;AACzC,sDAA0D;AAC1D,8CAAqD;AAE9C,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,KAAK,EACL,IAAI,EACJ,GAAG,EACH,KAAK,GAMN,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;IACxH,MAAM,aAAa,GAAG,IAAA,4CAAsB,EAAC,IAAI,CAAC,WAAY,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAiB,KAAK,EAAE,KAAmC,EAAE,EAAE;QAC3E,eAAM,CAAC,IAAI,CAAC,uBAAuB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzD,MAAM,cAAc,GAAG,KAAK,EAAE,KAA0C,EAAE,EAAE;YAC1E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,OAAO,QAAQ,IAAI,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,IAAA,YAAa,EAAC,cAAc,EAAE;YACzC,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,MAAM,EAAE,aAAa,CAAC,KAAK;SAC5B,CAAC,CAAC;QACH,gDAAgD;QAChD,MAAM,cAAc,GAAG;YACrB,GAAG,KAAK,CAAC,MAAM,EAAE,wCAAwC;SAC1D,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAA,4BAAgB,EAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;QAElF,MAAM,OAAO,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;MAUpE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;UAE7B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iCAAiC;;UAElE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;SAC7B,CAAC;QACN,MAAM,iBAAiB,GAAG,MAAM,GAAG;aAChC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE;YACjB,WAAW,EAAE,IAAI,CAAC,IAAI;SACvB,CAAC;aACD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,wBAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;YACrC,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;YACvC,GAAG,iBAAiB,EAAE,gEAAgE;SACvF,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,iBAAiB,CAAC,iBAAiB,GAAG;YACpC,
|
|
1
|
+
{"version":3,"file":"addAppToolNode.js","sourceRoot":"","sources":["../../src/nodes/addAppToolNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BrowserTaskNode } from '../types/Flows.types';
|
|
2
|
+
import { PreCompiledGraph } from '../types/LangGraph.types';
|
|
3
|
+
import { Agent } from '../agent';
|
|
4
|
+
type AddBrowserTaskNodeParams = {
|
|
5
|
+
graph: PreCompiledGraph;
|
|
6
|
+
node: BrowserTaskNode;
|
|
7
|
+
agent: Agent;
|
|
8
|
+
};
|
|
9
|
+
export declare const addBrowserTaskNode: ({ graph, node, agent }: AddBrowserTaskNodeParams) => Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=addBrowserTaskNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addBrowserTaskNode.d.ts","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAO7E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,wBAAwB,wBAAwB,kBAyFxF,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addBrowserTaskNode = void 0;
|
|
4
|
+
const Flows_types_1 = require("../types/Flows.types");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
const history_1 = require("../utils/history");
|
|
7
|
+
const messages_1 = require("@langchain/core/messages");
|
|
8
|
+
const executeBrowserTask_1 = require("../browserTask/executeBrowserTask");
|
|
9
|
+
const uuid_1 = require("uuid");
|
|
10
|
+
const addBrowserTaskNode = async ({ graph, node, agent }) => {
|
|
11
|
+
const callback = async (state) => {
|
|
12
|
+
logger_1.logger.info({ message: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
|
|
13
|
+
const prompt = `
|
|
14
|
+
# Task instructions:\n${node.prompt}\n\n
|
|
15
|
+
${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
|
|
16
|
+
# Conversation history:\n${state.messages.map((m) => `${m.name}: ${m.content}`).join('\n')}
|
|
17
|
+
`;
|
|
18
|
+
const toolCallId = (0, uuid_1.v4)();
|
|
19
|
+
const toolCallingMessageId = (0, uuid_1.v4)();
|
|
20
|
+
const toolCallingMessage = new messages_1.AIMessage({
|
|
21
|
+
id: toolCallingMessageId,
|
|
22
|
+
content: '',
|
|
23
|
+
tool_calls: [
|
|
24
|
+
{
|
|
25
|
+
id: toolCallId,
|
|
26
|
+
name: 'browser-task',
|
|
27
|
+
args: {
|
|
28
|
+
prompt,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
additional_kwargs: {
|
|
33
|
+
mindedMetadata: {
|
|
34
|
+
nodeType: Flows_types_1.NodeType.BROWSER_TASK,
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
const result = await (0, executeBrowserTask_1.executeBrowserTask)(`Follow the instructions. Any retrieved data should be printed as string and not saved to a file.\n${node.prompt}`);
|
|
40
|
+
await agent.compiledGraph.updateState(agent.getLangraphConfig(state.sessionId), {
|
|
41
|
+
messages: [toolCallingMessage],
|
|
42
|
+
}, node.name);
|
|
43
|
+
logger_1.logger.debug({ message: 'Browser task result', result });
|
|
44
|
+
const toolCall = new messages_1.ToolMessage({
|
|
45
|
+
id: (0, uuid_1.v4)(),
|
|
46
|
+
content: JSON.stringify({
|
|
47
|
+
result: result.split(` Result: `)[1],
|
|
48
|
+
}),
|
|
49
|
+
name: 'browser-task',
|
|
50
|
+
tool_call_id: toolCallId,
|
|
51
|
+
status: 'success',
|
|
52
|
+
additional_kwargs: {
|
|
53
|
+
mindedMetadata: {
|
|
54
|
+
nodeType: Flows_types_1.NodeType.BROWSER_TASK,
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
history: (0, history_1.createHistoryStep)(state.history, {
|
|
60
|
+
type: Flows_types_1.NodeType.BROWSER_TASK,
|
|
61
|
+
nodeId: node.name,
|
|
62
|
+
nodeDisplayName: node.displayName,
|
|
63
|
+
raw: result,
|
|
64
|
+
messageIds: [toolCallingMessageId],
|
|
65
|
+
}),
|
|
66
|
+
messages: [toolCallingMessage, toolCall],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger_1.logger.error(`Error executing browser task node ${node.displayName}: ${error}`);
|
|
71
|
+
const toolCall = new messages_1.ToolMessage({
|
|
72
|
+
id: (0, uuid_1.v4)(),
|
|
73
|
+
content: JSON.stringify({
|
|
74
|
+
error: error instanceof Error ? error.message : error.toString()
|
|
75
|
+
}),
|
|
76
|
+
status: 'error',
|
|
77
|
+
name: 'browser-task',
|
|
78
|
+
tool_call_id: toolCallId,
|
|
79
|
+
additional_kwargs: {
|
|
80
|
+
mindedMetadata: {
|
|
81
|
+
nodeType: Flows_types_1.NodeType.BROWSER_TASK,
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
history: (0, history_1.createHistoryStep)(state.history, {
|
|
87
|
+
type: Flows_types_1.NodeType.BROWSER_TASK,
|
|
88
|
+
nodeId: node.name,
|
|
89
|
+
nodeDisplayName: node.displayName,
|
|
90
|
+
raw: error,
|
|
91
|
+
messageIds: [toolCallingMessageId],
|
|
92
|
+
}),
|
|
93
|
+
messages: [toolCallingMessage, toolCall],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
graph.addNode(node.name, callback);
|
|
98
|
+
};
|
|
99
|
+
exports.addBrowserTaskNode = addBrowserTaskNode;
|
|
100
|
+
//# sourceMappingURL=addBrowserTaskNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addBrowserTaskNode.js","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":";;;AACA,sDAAiE;AAGjE,4CAAyC;AACzC,8CAAqD;AACrD,uDAAkE;AAClE,0EAAuE;AACvE,+BAAoC;AAS7B,MAAM,kBAAkB,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAA4B,EAAE,EAAE;IAC3F,MAAM,QAAQ,GAAiB,KAAK,EAAE,KAAmC,EAAE,EAAE;QAC3E,eAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,+BAA+B,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjG,MAAM,MAAM,GAAG;4BACS,IAAI,CAAC,MAAM;MACjC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;+BACjD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACzF,CAAC;QAEF,MAAM,UAAU,GAAG,IAAA,SAAM,GAAE,CAAC;QAC5B,MAAM,oBAAoB,GAAG,IAAA,SAAM,GAAE,CAAC;QACtC,MAAM,kBAAkB,GAAG,IAAI,oBAAS,CAAC;YACvC,EAAE,EAAE,oBAAoB;YACxB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACV;oBACE,EAAE,EAAE,UAAU;oBACd,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE;wBACJ,MAAM;qBACP;iBACF;aACF;YACD,iBAAiB,EAAE;gBACjB,cAAc,EAAE;oBACd,QAAQ,EAAE,sBAAQ,CAAC,YAAY;iBAChC;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAkB,EAAC,qGAAqG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5J,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBAC9E,QAAQ,EAAE,CAAC,kBAAkB,CAAC;aAC/B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,eAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,sBAAW,CAAC;gBAC/B,EAAE,EAAE,IAAA,SAAM,GAAE;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACrC,CAAC;gBACF,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE,UAAU;gBACxB,MAAM,EAAE,SAAS;gBACjB,iBAAiB,EAAE;oBACjB,cAAc,EAAE;wBACd,QAAQ,EAAE,sBAAQ,CAAC,YAAY;qBAChC;iBACF;aACF,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;oBACrD,IAAI,EAAE,sBAAQ,CAAC,YAAY;oBAC3B,MAAM,EAAE,IAAI,CAAC,IAAI;oBACjB,eAAe,EAAE,IAAI,CAAC,WAAW;oBACjC,GAAG,EAAE,MAAM;oBACX,UAAU,EAAE,CAAC,oBAAoB,CAAC;iBACnC,CAAC;gBACF,QAAQ,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC;aACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC,CAAC;YAChF,MAAM,QAAQ,GAAG,IAAI,sBAAW,CAAC;gBAC/B,EAAE,EAAE,IAAA,SAAM,GAAE;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;iBACjE,CAAC;gBACF,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE,UAAU;gBACxB,iBAAiB,EAAE;oBACjB,cAAc,EAAE;wBACd,QAAQ,EAAE,sBAAQ,CAAC,YAAY;qBAChC;iBACF;aACF,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;oBACrD,IAAI,EAAE,sBAAQ,CAAC,YAAY;oBAC3B,MAAM,EAAE,IAAI,CAAC,IAAI;oBACjB,eAAe,EAAE,IAAI,CAAC,WAAW;oBACjC,GAAG,EAAE,KAAK;oBACV,UAAU,EAAE,CAAC,oBAAoB,CAAC;iBACnC,CAAC;gBACF,QAAQ,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC;aACzC,CAAA;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC,CAAC;AAzFW,QAAA,kBAAkB,sBAyF7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeFactory.d.ts","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"nodeFactory.d.ts","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,eAAO,MAAM,WAAW,GAAI,2CAOzB;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,CAAC,OAAO,YAAY,EAAE,MAAM,OAAO,YAAY,CAAC,CAAC;IACtD,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,KAAK,CAAC;CACd,SA2BA,CAAC"}
|
|
@@ -8,6 +8,7 @@ const addAppToolNode_1 = require("./addAppToolNode");
|
|
|
8
8
|
const addTriggerNode_1 = require("./addTriggerNode");
|
|
9
9
|
const addJumpToNode_1 = require("./addJumpToNode");
|
|
10
10
|
const addJunctionNode_1 = require("./addJunctionNode");
|
|
11
|
+
const addBrowserTaskNode_1 = require("./addBrowserTaskNode");
|
|
11
12
|
const nodeFactory = ({ graph, node, tools, llm, emit, agent, }) => {
|
|
12
13
|
const nodeType = node.type;
|
|
13
14
|
switch (nodeType) {
|
|
@@ -29,6 +30,9 @@ const nodeFactory = ({ graph, node, tools, llm, emit, agent, }) => {
|
|
|
29
30
|
case Flows_types_1.NodeType.JUMP_TO_NODE:
|
|
30
31
|
(0, addJumpToNode_1.addJumpToNode)({ graph, node });
|
|
31
32
|
break;
|
|
33
|
+
case Flows_types_1.NodeType.BROWSER_TASK:
|
|
34
|
+
(0, addBrowserTaskNode_1.addBrowserTaskNode)({ graph, node, agent });
|
|
35
|
+
break;
|
|
32
36
|
default:
|
|
33
37
|
throw new Error(`Unsupported node type: ${nodeType}`);
|
|
34
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeFactory.js","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AAGtD,+CAA4C;AAC5C,mDAAgD;AAGhD,qDAAkD;AAClD,qDAAkD;AAGlD,mDAAgD;AAChD,uDAAoD;
|
|
1
|
+
{"version":3,"file":"nodeFactory.js","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AAGtD,+CAA4C;AAC5C,mDAAgD;AAGhD,qDAAkD;AAClD,qDAAkD;AAGlD,mDAAgD;AAChD,uDAAoD;AACpD,6DAA0D;AAEnD,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,GAQN,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,sBAAQ,CAAC,OAAO;YACnB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,sBAAQ,CAAC,IAAI;YAChB,IAAA,yBAAW,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,iCAAe,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,sBAAQ,CAAC,WAAW;YACvB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,uCAAkB,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC;AAzCW,QAAA,WAAW,eAyCtB"}
|
|
@@ -9,7 +9,8 @@ export declare enum NodeType {
|
|
|
9
9
|
TOOL = "tool",
|
|
10
10
|
APP_TOOL = "appTool",
|
|
11
11
|
PROMPT_NODE = "promptNode",
|
|
12
|
-
JUMP_TO_NODE = "jumpToNode"
|
|
12
|
+
JUMP_TO_NODE = "jumpToNode",
|
|
13
|
+
BROWSER_TASK = "browserTask"
|
|
13
14
|
}
|
|
14
15
|
export declare enum EdgeType {
|
|
15
16
|
LOGICAL_CONDITION = "logicalCondition",
|
|
@@ -50,6 +51,8 @@ export interface AppTriggerNode extends BaseTriggerNode, BaseAppNode {
|
|
|
50
51
|
}
|
|
51
52
|
export interface WebhookTriggerNode extends BaseTriggerNode {
|
|
52
53
|
triggerType: TriggerType.WEBHOOK;
|
|
54
|
+
autoTrigger?: boolean;
|
|
55
|
+
defaultPayload?: string;
|
|
53
56
|
}
|
|
54
57
|
export interface VoiceTriggerNode extends BaseTriggerNode {
|
|
55
58
|
triggerType: TriggerType.VOICE;
|
|
@@ -74,6 +77,10 @@ export interface JumpToNode extends BaseNode {
|
|
|
74
77
|
type: NodeType.JUMP_TO_NODE;
|
|
75
78
|
targetNodeId: string;
|
|
76
79
|
}
|
|
80
|
+
export interface BrowserTaskNode extends BaseNode {
|
|
81
|
+
type: NodeType.BROWSER_TASK;
|
|
82
|
+
prompt: string;
|
|
83
|
+
}
|
|
77
84
|
export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode;
|
|
78
85
|
export interface JunctionNode extends BaseNode {
|
|
79
86
|
type: NodeType.JUNCTION;
|
|
@@ -92,7 +99,7 @@ export interface AppToolNode extends BaseNode, BaseAppNode {
|
|
|
92
99
|
metadata: AppNodeMetadata;
|
|
93
100
|
actionKey: string;
|
|
94
101
|
}
|
|
95
|
-
export type Node = TriggerNode | JunctionNode | ToolNode | AppToolNode | PromptNode | JumpToNode;
|
|
102
|
+
export type Node = TriggerNode | JunctionNode | ToolNode | AppToolNode | PromptNode | JumpToNode | BrowserTaskNode;
|
|
96
103
|
export interface BaseEdge {
|
|
97
104
|
source: string;
|
|
98
105
|
target: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,QAAQ,YAAY;IACpB,WAAW,eAAe;IAC1B,YAAY,eAAe;
|
|
1
|
+
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ var NodeType;
|
|
|
9
9
|
NodeType["APP_TOOL"] = "appTool";
|
|
10
10
|
NodeType["PROMPT_NODE"] = "promptNode";
|
|
11
11
|
NodeType["JUMP_TO_NODE"] = "jumpToNode";
|
|
12
|
+
NodeType["BROWSER_TASK"] = "browserTask";
|
|
12
13
|
})(NodeType || (exports.NodeType = NodeType = {}));
|
|
13
14
|
var EdgeType;
|
|
14
15
|
(function (EdgeType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,
|
|
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;AA2GD,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"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -9,7 +9,7 @@ const dotenv_1 = __importDefault(require("dotenv"));
|
|
|
9
9
|
dotenv_1.default.config();
|
|
10
10
|
// Create a Pino logger with a custom log format
|
|
11
11
|
exports.logger = (0, pino_1.default)({
|
|
12
|
-
level: process.env.LOG_LEVEL || '
|
|
12
|
+
level: process.env.LOG_LEVEL || 'trace',
|
|
13
13
|
base: null,
|
|
14
14
|
transport: {
|
|
15
15
|
target: 'pino-pretty',
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,gDAAgD;AACnC,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC;IACzB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,gDAAgD;AACnC,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC;IACzB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO;IACvC,IAAI,EAAE,IAAI;IACV,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI;YACV,aAAa,EAAE,cAAc;SAC9B;KACF;IACD,UAAU,EAAE;QACV,KAAK,CAAC,KAAK;YACT,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF;CACF,CAAC,CAAC"}
|
|
@@ -35,6 +35,48 @@ pnpm add @minded-ai/mindedjs langchain
|
|
|
35
35
|
{% endtab %}
|
|
36
36
|
{% endtabs %}
|
|
37
37
|
|
|
38
|
+
## Python dependencies
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### 1. Install uv
|
|
42
|
+
|
|
43
|
+
First, install `uv` which includes the `uvx` command:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. Install browser-use cli with uv
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
uv tool install 'browser-use[cli]'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Install Playwright Chromium browser
|
|
56
|
+
|
|
57
|
+
After installing browser-use, you need to install the Chromium browser for Playwright:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
playwright install chromium
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This downloads the Chromium browser that browser-use uses to automate web interactions.
|
|
64
|
+
|
|
65
|
+
### 4. Add uv to PATH
|
|
66
|
+
|
|
67
|
+
After installation, add uv to your PATH:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# For immediate use
|
|
71
|
+
source $HOME/.local/bin/env
|
|
72
|
+
|
|
73
|
+
# For permanent access, add to your shell config:
|
|
74
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc # or ~/.bashrc
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
{% endtab %}
|
|
78
|
+
{% endtabs %}
|
|
79
|
+
|
|
38
80
|
## Next Steps
|
|
39
81
|
|
|
40
82
|
Now that MindedJS is installed:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.97",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"order-refund": "cd examples/orderRefundAgent && nodemon --watch '**/*.ts' --exec 'ts-node' orderRefundAgent.ts",
|
|
22
22
|
"zendesk": "cd examples/zendesk && nodemon --watch '**/*.ts' --exec 'ts-node' zendeskAgent.ts",
|
|
23
23
|
"example-voice": "cd examples/voice && nodemon --watch '**/*.ts' --exec 'ts-node' voiceAgent.ts",
|
|
24
|
+
"example-browser": "cd examples/browserUsingAgent && nodemon --watch '**/*.ts' --exec 'ts-node' browserUsingAgent.ts",
|
|
24
25
|
"lint": "eslint .",
|
|
25
26
|
"lintFix": "eslint --fix .",
|
|
26
27
|
"generateApiDocs": "typedoc src --out docs/api-reference ./src"
|
|
@@ -65,4 +66,4 @@
|
|
|
65
66
|
"uuid": "^11.1.0",
|
|
66
67
|
"ws": "^8.15.1"
|
|
67
68
|
}
|
|
68
|
-
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import { logger } from "../utils/logger";
|
|
3
|
+
|
|
4
|
+
export const executeBrowserTask = async (prompt: string): Promise<string> => {
|
|
5
|
+
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const child = spawn('browser-use', ['-p', prompt], {
|
|
8
|
+
env: {
|
|
9
|
+
...process.env,
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
let output = '';
|
|
13
|
+
|
|
14
|
+
// Stream stdout to console and collect it
|
|
15
|
+
child.stdout.on('data', (data) => {
|
|
16
|
+
const chunk = data.toString();
|
|
17
|
+
logger.trace({ message: 'Browser task output', output: chunk });
|
|
18
|
+
output += chunk;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Stream stderr to console
|
|
22
|
+
child.stderr.on('data', (data) => {
|
|
23
|
+
logger.error({ message: 'Browser task error', error: data.toString() });
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
child.on('error', (error) => {
|
|
27
|
+
reject(error);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
child.on('close', (code) => {
|
|
31
|
+
if (code !== 0) {
|
|
32
|
+
reject(new Error(`browser-use exited with code ${code}`));
|
|
33
|
+
} else {
|
|
34
|
+
resolve(output);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
};
|
|
@@ -75,8 +75,8 @@ export const addAppToolNode = async ({
|
|
|
75
75
|
};
|
|
76
76
|
const toolCallMessage = await tool.invoke(AIToolCallMessage.tool_calls[0]);
|
|
77
77
|
AIToolCallMessage.additional_kwargs = {
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
mindedMetadata: {
|
|
79
|
+
nodeType: NodeType.APP_TOOL
|
|
80
80
|
},
|
|
81
81
|
};
|
|
82
82
|
return {
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { RunnableLike } from '@langchain/core/runnables';
|
|
2
|
+
import { BrowserTaskNode, NodeType } from '../types/Flows.types';
|
|
3
|
+
import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
|
|
4
|
+
import { HistoryStep } from '../types/Agent.types';
|
|
5
|
+
import { logger } from '../utils/logger';
|
|
6
|
+
import { createHistoryStep } from '../utils/history';
|
|
7
|
+
import { AIMessage, ToolMessage } from '@langchain/core/messages';
|
|
8
|
+
import { executeBrowserTask } from '../browserTask/executeBrowserTask';
|
|
9
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
import { Agent } from '../agent';
|
|
11
|
+
|
|
12
|
+
type AddBrowserTaskNodeParams = {
|
|
13
|
+
graph: PreCompiledGraph;
|
|
14
|
+
node: BrowserTaskNode;
|
|
15
|
+
agent: Agent;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskNodeParams) => {
|
|
19
|
+
const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
|
|
20
|
+
logger.info({ message: `Executing browser task node ${node.displayName}`, prompt: node.prompt });
|
|
21
|
+
|
|
22
|
+
const prompt = `
|
|
23
|
+
# Task instructions:\n${node.prompt}\n\n
|
|
24
|
+
${state.memory ? `# Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
|
|
25
|
+
# Conversation history:\n${state.messages.map((m) => `${m.name}: ${m.content}`).join('\n')}
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
const toolCallId = uuidv4();
|
|
29
|
+
const toolCallingMessageId = uuidv4();
|
|
30
|
+
const toolCallingMessage = new AIMessage({
|
|
31
|
+
id: toolCallingMessageId,
|
|
32
|
+
content: '',
|
|
33
|
+
tool_calls: [
|
|
34
|
+
{
|
|
35
|
+
id: toolCallId,
|
|
36
|
+
name: 'browser-task',
|
|
37
|
+
args: {
|
|
38
|
+
prompt,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
additional_kwargs: {
|
|
43
|
+
mindedMetadata: {
|
|
44
|
+
nodeType: NodeType.BROWSER_TASK,
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
const result = await executeBrowserTask(`Follow the instructions. Any retrieved data should be printed as string and not saved to a file.\n${node.prompt}`);
|
|
50
|
+
await agent.compiledGraph.updateState(agent.getLangraphConfig(state.sessionId), {
|
|
51
|
+
messages: [toolCallingMessage],
|
|
52
|
+
}, node.name);
|
|
53
|
+
logger.debug({ message: 'Browser task result', result });
|
|
54
|
+
const toolCall = new ToolMessage({
|
|
55
|
+
id: uuidv4(),
|
|
56
|
+
content: JSON.stringify({
|
|
57
|
+
result: result.split(` Result: `)[1],
|
|
58
|
+
}),
|
|
59
|
+
name: 'browser-task',
|
|
60
|
+
tool_call_id: toolCallId,
|
|
61
|
+
status: 'success',
|
|
62
|
+
additional_kwargs: {
|
|
63
|
+
mindedMetadata: {
|
|
64
|
+
nodeType: NodeType.BROWSER_TASK,
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
history: createHistoryStep<HistoryStep>(state.history, {
|
|
70
|
+
type: NodeType.BROWSER_TASK,
|
|
71
|
+
nodeId: node.name,
|
|
72
|
+
nodeDisplayName: node.displayName,
|
|
73
|
+
raw: result,
|
|
74
|
+
messageIds: [toolCallingMessageId],
|
|
75
|
+
}),
|
|
76
|
+
messages: [toolCallingMessage, toolCall],
|
|
77
|
+
};
|
|
78
|
+
} catch (error: any) {
|
|
79
|
+
logger.error(`Error executing browser task node ${node.displayName}: ${error}`);
|
|
80
|
+
const toolCall = new ToolMessage({
|
|
81
|
+
id: uuidv4(),
|
|
82
|
+
content: JSON.stringify({
|
|
83
|
+
error: error instanceof Error ? error.message : error.toString()
|
|
84
|
+
}),
|
|
85
|
+
status: 'error',
|
|
86
|
+
name: 'browser-task',
|
|
87
|
+
tool_call_id: toolCallId,
|
|
88
|
+
additional_kwargs: {
|
|
89
|
+
mindedMetadata: {
|
|
90
|
+
nodeType: NodeType.BROWSER_TASK,
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
history: createHistoryStep<HistoryStep>(state.history, {
|
|
96
|
+
type: NodeType.BROWSER_TASK,
|
|
97
|
+
nodeId: node.name,
|
|
98
|
+
nodeDisplayName: node.displayName,
|
|
99
|
+
raw: error,
|
|
100
|
+
messageIds: [toolCallingMessageId],
|
|
101
|
+
}),
|
|
102
|
+
messages: [toolCallingMessage, toolCall],
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
graph.addNode(node.name, callback);
|
|
107
|
+
};
|
package/src/nodes/nodeFactory.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { LLMProviders } from '../types/LLM.types';
|
|
|
11
11
|
import { Agent } from '../agent';
|
|
12
12
|
import { addJumpToNode } from './addJumpToNode';
|
|
13
13
|
import { addJunctionNode } from './addJunctionNode';
|
|
14
|
+
import { addBrowserTaskNode } from './addBrowserTaskNode';
|
|
14
15
|
|
|
15
16
|
export const nodeFactory = ({
|
|
16
17
|
graph,
|
|
@@ -47,6 +48,9 @@ export const nodeFactory = ({
|
|
|
47
48
|
case NodeType.JUMP_TO_NODE:
|
|
48
49
|
addJumpToNode({ graph, node });
|
|
49
50
|
break;
|
|
51
|
+
case NodeType.BROWSER_TASK:
|
|
52
|
+
addBrowserTaskNode({ graph, node, agent });
|
|
53
|
+
break;
|
|
50
54
|
default:
|
|
51
55
|
throw new Error(`Unsupported node type: ${nodeType}`);
|
|
52
56
|
}
|
package/src/types/Flows.types.ts
CHANGED
|
@@ -11,6 +11,7 @@ export enum NodeType {
|
|
|
11
11
|
APP_TOOL = 'appTool',
|
|
12
12
|
PROMPT_NODE = 'promptNode',
|
|
13
13
|
JUMP_TO_NODE = 'jumpToNode',
|
|
14
|
+
BROWSER_TASK = 'browserTask',
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export enum EdgeType {
|
|
@@ -58,6 +59,8 @@ export interface AppTriggerNode extends BaseTriggerNode, BaseAppNode {
|
|
|
58
59
|
|
|
59
60
|
export interface WebhookTriggerNode extends BaseTriggerNode {
|
|
60
61
|
triggerType: TriggerType.WEBHOOK;
|
|
62
|
+
autoTrigger?: boolean;
|
|
63
|
+
defaultPayload?: string;
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
export interface VoiceTriggerNode extends BaseTriggerNode {
|
|
@@ -87,6 +90,11 @@ export interface JumpToNode extends BaseNode {
|
|
|
87
90
|
targetNodeId: string;
|
|
88
91
|
}
|
|
89
92
|
|
|
93
|
+
export interface BrowserTaskNode extends BaseNode {
|
|
94
|
+
type: NodeType.BROWSER_TASK;
|
|
95
|
+
prompt: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
90
98
|
export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode;
|
|
91
99
|
|
|
92
100
|
export interface JunctionNode extends BaseNode {
|
|
@@ -109,7 +117,7 @@ export interface AppToolNode extends BaseNode, BaseAppNode {
|
|
|
109
117
|
actionKey: string;
|
|
110
118
|
}
|
|
111
119
|
|
|
112
|
-
export type Node = TriggerNode | JunctionNode | ToolNode | AppToolNode | PromptNode | JumpToNode;
|
|
120
|
+
export type Node = TriggerNode | JunctionNode | ToolNode | AppToolNode | PromptNode | JumpToNode | BrowserTaskNode;
|
|
113
121
|
|
|
114
122
|
export interface BaseEdge {
|
|
115
123
|
source: string;
|
package/src/utils/logger.ts
CHANGED