@minded-ai/mindedjs 2.0.27 → 2.0.28-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.d.ts +8 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +54 -3
- package/dist/agent.js.map +1 -1
- package/dist/browserTask/cdp.d.ts +23 -0
- package/dist/browserTask/cdp.d.ts.map +1 -0
- package/dist/browserTask/cdp.js +162 -0
- package/dist/browserTask/cdp.js.map +1 -0
- package/dist/browserTask/cookieStore.py +108 -0
- package/dist/cli/index.js +0 -0
- package/dist/cli/runTool.d.ts +2 -0
- package/dist/cli/runTool.d.ts.map +1 -0
- package/dist/cli/runTool.js +143 -0
- package/dist/cli/runTool.js.map +1 -0
- package/dist/guidelines/guidelinesManager.d.ts +37 -0
- package/dist/guidelines/guidelinesManager.d.ts.map +1 -0
- package/dist/guidelines/guidelinesManager.js +172 -0
- package/dist/guidelines/guidelinesManager.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/internalTools/retell.d.ts +12 -0
- package/dist/internalTools/retell.d.ts.map +1 -0
- package/dist/internalTools/retell.js +54 -0
- package/dist/internalTools/retell.js.map +1 -0
- package/dist/internalTools/sendPlaceholderMessage.d.ts +14 -0
- package/dist/internalTools/sendPlaceholderMessage.d.ts.map +1 -0
- package/dist/internalTools/sendPlaceholderMessage.js +61 -0
- package/dist/internalTools/sendPlaceholderMessage.js.map +1 -0
- package/dist/platform/mindedChatOpenAI.d.ts +5 -0
- package/dist/platform/mindedChatOpenAI.d.ts.map +1 -0
- package/dist/platform/mindedChatOpenAI.js +23 -0
- package/dist/platform/mindedChatOpenAI.js.map +1 -0
- package/dist/platform/toolExecutor.d.ts +1 -1
- package/dist/platform/toolExecutor.d.ts.map +1 -1
- package/dist/platform/toolExecutor.js +3 -5
- package/dist/platform/toolExecutor.js.map +1 -1
- package/dist/toolsLibrary/withBrowserSession.d.ts +7 -0
- package/dist/toolsLibrary/withBrowserSession.d.ts.map +1 -0
- package/dist/toolsLibrary/withBrowserSession.js +154 -0
- package/dist/toolsLibrary/withBrowserSession.js.map +1 -0
- package/dist/utils/extractStateMemoryResponse.d.ts +5 -0
- package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -0
- package/dist/utils/extractStateMemoryResponse.js +91 -0
- package/dist/utils/extractStateMemoryResponse.js.map +1 -0
- package/dist/utils/extractToolMemoryResponse.d.ts +4 -0
- package/dist/utils/extractToolMemoryResponse.d.ts.map +1 -0
- package/dist/utils/extractToolMemoryResponse.js +16 -0
- package/dist/utils/extractToolMemoryResponse.js.map +1 -0
- package/dist/utils/parseDirectToolExecutionArgs.d.ts +5 -0
- package/dist/utils/parseDirectToolExecutionArgs.d.ts.map +1 -0
- package/dist/utils/parseDirectToolExecutionArgs.js +30 -0
- package/dist/utils/parseDirectToolExecutionArgs.js.map +1 -0
- package/package.json +2 -2
- package/src/agent.ts +64 -4
- package/src/index.ts +2 -1
- package/src/platform/toolExecutor.ts +4 -6
- package/src/toolsLibrary/withBrowserSession.ts +121 -0
- package/src/utils/parseDirectToolExecutionArgs.ts +31 -0
|
@@ -21,22 +21,20 @@ class ToolExecutor {
|
|
|
21
21
|
// Clear existing tools to prevent stale registrations
|
|
22
22
|
this.tools.clear();
|
|
23
23
|
tools.forEach((tool) => {
|
|
24
|
-
|
|
25
|
-
this.tools.set(tool.name, tool);
|
|
26
|
-
}
|
|
24
|
+
this.tools.set(tool.name, tool);
|
|
27
25
|
});
|
|
28
26
|
}
|
|
29
27
|
/**
|
|
30
28
|
* Execute a tool by name with given parameters
|
|
31
29
|
* This is called when browser-use requests tool execution via socket
|
|
32
30
|
*/
|
|
33
|
-
async executeTool(request) {
|
|
31
|
+
async executeTool(request, source) {
|
|
34
32
|
var _a, _b;
|
|
35
33
|
const { toolName, toolParams, sessionId, cdpUrl } = request;
|
|
36
34
|
try {
|
|
37
35
|
// Find the tool
|
|
38
36
|
const tool = this.tools.get(toolName);
|
|
39
|
-
if (!tool) {
|
|
37
|
+
if (!tool || (source === 'browser-use' && !tool.allowExecutionRequests)) {
|
|
40
38
|
throw new Error(`Tool not found: ${toolName}`);
|
|
41
39
|
}
|
|
42
40
|
// We only allow to execute tools that are marked as allowed to be executed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolExecutor.js","sourceRoot":"","sources":["../../src/platform/toolExecutor.ts"],"names":[],"mappings":";;;AAEA,4CAAyC;AAgBzC,MAAa,YAAY;IAGvB,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFxB,UAAK,GAAgC,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"toolExecutor.js","sourceRoot":"","sources":["../../src/platform/toolExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Page } from "playwright";
|
|
2
|
+
import { BrowserTaskMode } from "../browserTask/types";
|
|
3
|
+
export declare const withBrowserSession: <T>({ sessionId, browserTaskMode }: {
|
|
4
|
+
sessionId: string;
|
|
5
|
+
browserTaskMode: BrowserTaskMode;
|
|
6
|
+
}, callback: (page: Page) => Promise<T>) => Promise<T>;
|
|
7
|
+
//# sourceMappingURL=withBrowserSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withBrowserSession.d.ts","sourceRoot":"","sources":["../../src/toolsLibrary/withBrowserSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,IAAI,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAyCvD,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,gCAAgC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CA4EpL,CAAA"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.withBrowserSession = void 0;
|
|
37
|
+
const playwright_1 = require("playwright");
|
|
38
|
+
const types_1 = require("../browserTask/types");
|
|
39
|
+
const executeBrowserTask_1 = require("../browserTask/executeBrowserTask");
|
|
40
|
+
const logger_1 = require("../utils/logger");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const CookieStore_1 = require("../browserTask/CookieStore");
|
|
44
|
+
// Initialize cookie store
|
|
45
|
+
const cookieStore = new CookieStore_1.CookieStore(path.join(process.cwd(), 'local_storage', 'cookies'));
|
|
46
|
+
// Helper function to load cookies for a session
|
|
47
|
+
const loadCookiesForSession = async (context, sessionId) => {
|
|
48
|
+
const stored = await cookieStore.load();
|
|
49
|
+
if (!stored || stored.length === 0) {
|
|
50
|
+
logger_1.logger.info({ message: 'No stored cookies to load', sessionId });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
await context.addCookies(stored);
|
|
55
|
+
logger_1.logger.info({ message: 'Loaded cookies into browser session', sessionId, count: stored.length });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger_1.logger.warn({ message: 'Failed to add cookies to context', sessionId, error });
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
// Helper function to save cookies for a session
|
|
62
|
+
const saveCookiesForSession = async (context, sessionId) => {
|
|
63
|
+
try {
|
|
64
|
+
const cookies = await context.cookies();
|
|
65
|
+
if (cookies && cookies.length > 0) {
|
|
66
|
+
await cookieStore.save(cookies);
|
|
67
|
+
logger_1.logger.info({ message: 'Saved cookies from browser session', sessionId, count: cookies.length });
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
logger_1.logger.info({ message: 'No cookies found in browser session', sessionId });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
logger_1.logger.warn({ message: 'Failed to get/save cookies from session', sessionId, error: JSON.stringify(error) });
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const withBrowserSession = async ({ sessionId, browserTaskMode }, callback) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const { cdpUrl } = await (0, executeBrowserTask_1.createBrowserSession)({ sessionId, browserTaskMode });
|
|
80
|
+
if (!cdpUrl) {
|
|
81
|
+
throw new Error('CDP URL was not provided by the browser session.');
|
|
82
|
+
}
|
|
83
|
+
logger_1.logger.info({ msg: 'Connecting to CDP', cdpUrl, sessionId });
|
|
84
|
+
let maxTries = 30;
|
|
85
|
+
let browser = null;
|
|
86
|
+
while (maxTries > 0) {
|
|
87
|
+
try {
|
|
88
|
+
browser = await playwright_1.chromium.connectOverCDP(cdpUrl);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
logger_1.logger.warn({ msg: 'Failed to connect to CDP', sessionId, error });
|
|
93
|
+
maxTries--;
|
|
94
|
+
await delay(1000);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!browser) {
|
|
98
|
+
throw new Error('Failed to connect to CDP');
|
|
99
|
+
}
|
|
100
|
+
logger_1.logger.info({ msg: 'Connected to CDP', cdpUrl, sessionId });
|
|
101
|
+
const context = (_a = browser.contexts()[0]) !== null && _a !== void 0 ? _a : await browser.newContext();
|
|
102
|
+
const page = (_b = context.pages()[0]) !== null && _b !== void 0 ? _b : await context.newPage();
|
|
103
|
+
logger_1.logger.info({ msg: 'Created page', sessionId });
|
|
104
|
+
// Load cookies for this session (only for local mode, best-effort)
|
|
105
|
+
if (browserTaskMode === types_1.BrowserTaskMode.LOCAL) {
|
|
106
|
+
try {
|
|
107
|
+
await loadCookiesForSession(context, sessionId);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
logger_1.logger.warn({ message: 'Failed to load cookies for session', sessionId, error });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
return await callback(page);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
logger_1.logger.error({ msg: 'Error in browser session callback', sessionId, error: e });
|
|
118
|
+
// Save screenshot and HTML content for debugging
|
|
119
|
+
try {
|
|
120
|
+
const resultsDir = path.join(process.cwd(), 'rpaTestResults');
|
|
121
|
+
if (!fs.existsSync(resultsDir)) {
|
|
122
|
+
fs.mkdirSync(resultsDir, { recursive: true });
|
|
123
|
+
}
|
|
124
|
+
const screenshotPath = path.join(resultsDir, `screenshot.jpeg`);
|
|
125
|
+
const htmlPath = path.join(resultsDir, `content.html`);
|
|
126
|
+
// Take screenshot with 80% quality
|
|
127
|
+
await page.screenshot({ path: screenshotPath, type: 'jpeg', quality: 80 });
|
|
128
|
+
logger_1.logger.info({ msg: 'Saved error screenshot', path: screenshotPath, sessionId });
|
|
129
|
+
// Save HTML content
|
|
130
|
+
const htmlContent = await page.content();
|
|
131
|
+
fs.writeFileSync(htmlPath, htmlContent, 'utf8');
|
|
132
|
+
logger_1.logger.info({ msg: 'Saved error HTML content', path: htmlPath, sessionId });
|
|
133
|
+
}
|
|
134
|
+
catch (saveError) {
|
|
135
|
+
logger_1.logger.warn({ msg: 'Failed to save error artifacts', sessionId, error: saveError });
|
|
136
|
+
}
|
|
137
|
+
throw e;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
// Save cookies before destroying session (only for local mode, best-effort)
|
|
141
|
+
if (browserTaskMode === types_1.BrowserTaskMode.LOCAL) {
|
|
142
|
+
try {
|
|
143
|
+
await saveCookiesForSession(context, sessionId);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
logger_1.logger.warn({ message: 'Failed to save cookies before session destruction', sessionId, error });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
(0, executeBrowserTask_1.destroyBrowserSession)({ sessionId, localRun: browserTaskMode === types_1.BrowserTaskMode.LOCAL, onPrem: browserTaskMode === types_1.BrowserTaskMode.ON_PREM }).catch(() => { });
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
exports.withBrowserSession = withBrowserSession;
|
|
153
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
154
|
+
//# sourceMappingURL=withBrowserSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withBrowserSession.js","sourceRoot":"","sources":["../../src/toolsLibrary/withBrowserSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ToolMessage } from '@langchain/core/messages';
|
|
2
|
+
import { State } from '../types/LangGraph.types';
|
|
3
|
+
declare const extractToolStateResponse: (toolMessage: ToolMessage) => Partial<State>;
|
|
4
|
+
export default extractToolStateResponse;
|
|
5
|
+
//# sourceMappingURL=extractStateMemoryResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractStateMemoryResponse.d.ts","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAA0C,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,QAAA,MAAM,wBAAwB,GAAI,aAAa,WAAW,KAAG,OAAO,CAAC,KAAK,CAazE,CAAC;AA4EF,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const messages_1 = require("@langchain/core/messages");
|
|
4
|
+
const logger_1 = require("./logger");
|
|
5
|
+
const extractToolStateResponse = (toolMessage) => {
|
|
6
|
+
try {
|
|
7
|
+
const parsed = JSON.parse(toolMessage.content);
|
|
8
|
+
if (typeof parsed === 'object' && parsed !== null && 'state' in parsed) {
|
|
9
|
+
if (parsed.state.messages) {
|
|
10
|
+
parsed.state.messages = constructMessagesFromToolMessage(parsed.state.messages);
|
|
11
|
+
}
|
|
12
|
+
return parsed.state;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
logger_1.logger.error({ message: 'Error parsing tool state response', err });
|
|
17
|
+
}
|
|
18
|
+
return {};
|
|
19
|
+
};
|
|
20
|
+
const constructMessagesFromToolMessage = (messages) => {
|
|
21
|
+
if (!Array.isArray(messages)) {
|
|
22
|
+
logger_1.logger.error({ msg: 'Expected messages to be an array', messages });
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return messages
|
|
26
|
+
.map((messageObj) => {
|
|
27
|
+
try {
|
|
28
|
+
// Handle case where message is already a BaseMessage instance
|
|
29
|
+
if (messageObj instanceof messages_1.BaseMessage) {
|
|
30
|
+
return messageObj;
|
|
31
|
+
}
|
|
32
|
+
// Handle case where message is a plain object that needs reconstruction
|
|
33
|
+
const messageType = messageObj.id[2];
|
|
34
|
+
const content = messageObj.kwargs.content || '';
|
|
35
|
+
const id = messageObj.kwargs.id;
|
|
36
|
+
const additionalKwargs = messageObj.additional_kwargs || {};
|
|
37
|
+
switch (messageType) {
|
|
38
|
+
case 'AIMessage':
|
|
39
|
+
return new messages_1.AIMessage({
|
|
40
|
+
content,
|
|
41
|
+
id,
|
|
42
|
+
additional_kwargs: additionalKwargs,
|
|
43
|
+
tool_calls: messageObj.tool_calls || [],
|
|
44
|
+
invalid_tool_calls: messageObj.invalid_tool_calls || [],
|
|
45
|
+
});
|
|
46
|
+
case 'HumanMessage':
|
|
47
|
+
return new messages_1.HumanMessage({
|
|
48
|
+
content,
|
|
49
|
+
id,
|
|
50
|
+
additional_kwargs: additionalKwargs,
|
|
51
|
+
});
|
|
52
|
+
case 'SystemMessage':
|
|
53
|
+
return new messages_1.SystemMessage({
|
|
54
|
+
content,
|
|
55
|
+
id,
|
|
56
|
+
additional_kwargs: additionalKwargs,
|
|
57
|
+
});
|
|
58
|
+
case 'ToolMessage':
|
|
59
|
+
return new messages_1.ToolMessage({
|
|
60
|
+
content,
|
|
61
|
+
id,
|
|
62
|
+
additional_kwargs: additionalKwargs,
|
|
63
|
+
tool_call_id: messageObj.tool_call_id || '',
|
|
64
|
+
});
|
|
65
|
+
default:
|
|
66
|
+
// Default to HumanMessage for unknown types
|
|
67
|
+
logger_1.logger.warn({
|
|
68
|
+
msg: 'Unknown message type, defaulting to HumanMessage',
|
|
69
|
+
messageType,
|
|
70
|
+
messageObj,
|
|
71
|
+
});
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
logger_1.logger.error({
|
|
77
|
+
msg: 'Error reconstructing message',
|
|
78
|
+
err,
|
|
79
|
+
messageObj,
|
|
80
|
+
});
|
|
81
|
+
// Return a fallback HumanMessage in case of error
|
|
82
|
+
return new messages_1.HumanMessage({
|
|
83
|
+
content: messageObj.content || 'Error reconstructing message',
|
|
84
|
+
id: messageObj.id,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
.filter(Boolean);
|
|
89
|
+
};
|
|
90
|
+
exports.default = extractToolStateResponse;
|
|
91
|
+
//# sourceMappingURL=extractStateMemoryResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractStateMemoryResponse.js","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractToolMemoryResponse.d.ts","sourceRoot":"","sources":["../../src/utils/extractToolMemoryResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,QAAA,MAAM,yBAAyB,GAAI,MAAM,EAAE,aAAa,WAAW,KAAG,OAAO,CAAC,MAAM,CAUnF,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const extractToolMemoryResponse = (toolMessage) => {
|
|
4
|
+
try {
|
|
5
|
+
const parsed = JSON.parse(toolMessage.content);
|
|
6
|
+
if (typeof parsed === 'object' && parsed !== null && 'memory' in parsed) {
|
|
7
|
+
return parsed.memory;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.error('Error parsing tool memory response', error);
|
|
12
|
+
}
|
|
13
|
+
return {};
|
|
14
|
+
};
|
|
15
|
+
exports.default = extractToolMemoryResponse;
|
|
16
|
+
//# sourceMappingURL=extractToolMemoryResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractToolMemoryResponse.js","sourceRoot":"","sources":["../../src/utils/extractToolMemoryResponse.ts"],"names":[],"mappings":";;AAEA,MAAM,yBAAyB,GAAG,CAAS,WAAwB,EAAmB,EAAE;IACtF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAiB,CAAC,CAAC;QACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,kBAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseDirectToolExecutionArgs.d.ts","sourceRoot":"","sources":["../../src/utils/parseDirectToolExecutionArgs.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CA8B9G"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDirectToolExecutionArgs = parseDirectToolExecutionArgs;
|
|
4
|
+
function parseDirectToolExecutionArgs(args) {
|
|
5
|
+
if (args.length === 0) {
|
|
6
|
+
throw new Error('Usage: npm run tool <toolName> [key=value ...]');
|
|
7
|
+
}
|
|
8
|
+
const toolName = args[0];
|
|
9
|
+
const params = {};
|
|
10
|
+
// Parse key=value pairs
|
|
11
|
+
for (let i = 1; i < args.length; i++) {
|
|
12
|
+
const arg = args[i];
|
|
13
|
+
const equalIndex = arg.indexOf('=');
|
|
14
|
+
if (equalIndex === -1) {
|
|
15
|
+
throw new Error(`Invalid argument format: ${arg}. Expected key=value`);
|
|
16
|
+
}
|
|
17
|
+
const key = arg.substring(0, equalIndex);
|
|
18
|
+
const rawValue = arg.substring(equalIndex + 1);
|
|
19
|
+
// Try to parse as JSON (for objects, arrays, booleans, numbers)
|
|
20
|
+
try {
|
|
21
|
+
params[key] = JSON.parse(rawValue);
|
|
22
|
+
}
|
|
23
|
+
catch (_a) {
|
|
24
|
+
// If not valid JSON, treat as string
|
|
25
|
+
params[key] = rawValue;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { toolName, params };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=parseDirectToolExecutionArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseDirectToolExecutionArgs.js","sourceRoot":"","sources":["../../src/utils/parseDirectToolExecutionArgs.ts"],"names":[],"mappings":";;AAAA,oEA8BC;AA9BD,SAAgB,4BAA4B,CAAC,IAAc;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,sBAAsB,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAE/C,gEAAgE;QAChE,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,WAAM,CAAC;YACP,qCAAqC;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.28-beta.1",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -72,4 +72,4 @@
|
|
|
72
72
|
"peerDependencies": {
|
|
73
73
|
"playwright": "^1.55.0"
|
|
74
74
|
}
|
|
75
|
-
}
|
|
75
|
+
}
|
package/src/agent.ts
CHANGED
|
@@ -53,6 +53,7 @@ import { destroyBrowserSession } from './browserTask/executeBrowserTask';
|
|
|
53
53
|
import { BrowserTaskMode } from './browserTask/types';
|
|
54
54
|
import { AnalyticsEventName } from './types/Analytics.types';
|
|
55
55
|
import { trackAnalyticsEvent } from './internalTools/analytics';
|
|
56
|
+
import { parseDirectToolExecutionArgs } from './utils/parseDirectToolExecutionArgs';
|
|
56
57
|
import { convertPlatformLLMConfig } from './utils/llmConfigConverter';
|
|
57
58
|
|
|
58
59
|
type CreateAgentParams<Memory> = {
|
|
@@ -177,6 +178,9 @@ export class Agent {
|
|
|
177
178
|
|
|
178
179
|
// Register default analytics handler
|
|
179
180
|
this.registerDefaultAnalyticsHandler();
|
|
181
|
+
|
|
182
|
+
// Check if running in tool execution mode
|
|
183
|
+
this.handleToolExecutionMode();
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
private async init(): Promise<void> {
|
|
@@ -276,7 +280,7 @@ export class Agent {
|
|
|
276
280
|
logger.debug({ msg: '[Agent] Received tool execution request', toolName: request.toolName, sessionId: request.sessionId });
|
|
277
281
|
|
|
278
282
|
try {
|
|
279
|
-
const response = await this.executeTool(request);
|
|
283
|
+
const response = await this.executeTool(request, 'browser-use');
|
|
280
284
|
// Send response back via socket
|
|
281
285
|
return {
|
|
282
286
|
...response,
|
|
@@ -821,7 +825,7 @@ export class Agent {
|
|
|
821
825
|
} else if (runLocally) {
|
|
822
826
|
throw new Error(
|
|
823
827
|
'No LLM configuration found in minded.json. When running locally, you must provide LLM configuration in minded.json. ' +
|
|
824
|
-
|
|
828
|
+
'Add an "llm" section to your minded.json file with provider and model settings.',
|
|
825
829
|
);
|
|
826
830
|
} else {
|
|
827
831
|
throw new Error('No LLM configuration found. Please configure LLM in Organization Settings or add it to minded.json');
|
|
@@ -983,10 +987,10 @@ export class Agent {
|
|
|
983
987
|
* Execute a tool by name with given parameters
|
|
984
988
|
* This is used for standalone tool execution (e.g., from browser-use)
|
|
985
989
|
*/
|
|
986
|
-
async executeTool(request: ToolExecutionRequest): Promise<ToolExecutionResponse> {
|
|
990
|
+
async executeTool(request: ToolExecutionRequest, source: 'browser-use' | 'direct'): Promise<ToolExecutionResponse> {
|
|
987
991
|
await this.waitForInitialization();
|
|
988
992
|
try {
|
|
989
|
-
return await this.toolExecutor.executeTool(request);
|
|
993
|
+
return await this.toolExecutor.executeTool(request, source);
|
|
990
994
|
} catch (err) {
|
|
991
995
|
logger.error({ message: '[Agent] Error executing tool', err });
|
|
992
996
|
return { error: 'Failed to execute tool' };
|
|
@@ -1180,4 +1184,60 @@ export class Agent {
|
|
|
1180
1184
|
this.sigtermHandlerRegistered = true;
|
|
1181
1185
|
logger.debug({ msg: '[Agent] SIGTERM handler registered' });
|
|
1182
1186
|
}
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* Handle tool execution mode when agent is run with 'runTool' argument
|
|
1190
|
+
* This allows running tools directly via: npm run tool <toolName> [params...]
|
|
1191
|
+
*
|
|
1192
|
+
* @private
|
|
1193
|
+
*/
|
|
1194
|
+
private async handleToolExecutionMode(): Promise<void> {
|
|
1195
|
+
if (!process.argv.includes('runTool')) {
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
try {
|
|
1200
|
+
await this.waitForInitialization();
|
|
1201
|
+
|
|
1202
|
+
const toolArgIndex = process.argv.indexOf('runTool');
|
|
1203
|
+
const toolArgs = process.argv.slice(toolArgIndex + 1);
|
|
1204
|
+
|
|
1205
|
+
const { toolName, params } = parseDirectToolExecutionArgs(toolArgs);
|
|
1206
|
+
|
|
1207
|
+
logger.info({
|
|
1208
|
+
message: '[runTool] Executing tool',
|
|
1209
|
+
toolName,
|
|
1210
|
+
params,
|
|
1211
|
+
});
|
|
1212
|
+
|
|
1213
|
+
const result = await this.executeTool({
|
|
1214
|
+
toolName,
|
|
1215
|
+
toolParams: params,
|
|
1216
|
+
sessionId: uuidv4(),
|
|
1217
|
+
requestId: uuidv4()
|
|
1218
|
+
}, 'direct');
|
|
1219
|
+
|
|
1220
|
+
if (result.error) {
|
|
1221
|
+
logger.error({
|
|
1222
|
+
message: '[runTool] Tool execution failed',
|
|
1223
|
+
error: result.error,
|
|
1224
|
+
});
|
|
1225
|
+
process.exit(1);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
logger.info({
|
|
1229
|
+
message: '[runTool] Tool execution completed',
|
|
1230
|
+
result: result.result,
|
|
1231
|
+
state: result.state,
|
|
1232
|
+
});
|
|
1233
|
+
|
|
1234
|
+
process.exit(0);
|
|
1235
|
+
} catch (err) {
|
|
1236
|
+
logger.error({
|
|
1237
|
+
message: '[runTool] Error executing tool',
|
|
1238
|
+
err,
|
|
1239
|
+
});
|
|
1240
|
+
process.exit(1);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1183
1243
|
}
|
package/src/index.ts
CHANGED
|
@@ -107,5 +107,6 @@ export { AnalyticsEventName } from './types/Analytics.types';
|
|
|
107
107
|
export type { AnalyticsEvent } from './types/Analytics.types';
|
|
108
108
|
|
|
109
109
|
export { createBrowserSession, destroyBrowserSession } from './browserTask/executeBrowserTask';
|
|
110
|
-
|
|
110
|
+
export { withBrowserSession } from './toolsLibrary/withBrowserSession';
|
|
111
|
+
export { BrowserTaskMode } from './browserTask/types';
|
|
111
112
|
export { LLMDebugCallbackHandler } from './debugging';
|
|
@@ -19,7 +19,7 @@ export interface ToolExecutionResponse {
|
|
|
19
19
|
export class ToolExecutor {
|
|
20
20
|
private tools: Map<string, Tool<any, any>> = new Map();
|
|
21
21
|
|
|
22
|
-
constructor(private agent: Agent) {}
|
|
22
|
+
constructor(private agent: Agent) { }
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Clear all registered tools
|
|
@@ -37,9 +37,7 @@ export class ToolExecutor {
|
|
|
37
37
|
this.tools.clear();
|
|
38
38
|
|
|
39
39
|
tools.forEach((tool) => {
|
|
40
|
-
|
|
41
|
-
this.tools.set(tool.name, tool);
|
|
42
|
-
}
|
|
40
|
+
this.tools.set(tool.name, tool);
|
|
43
41
|
});
|
|
44
42
|
}
|
|
45
43
|
|
|
@@ -47,13 +45,13 @@ export class ToolExecutor {
|
|
|
47
45
|
* Execute a tool by name with given parameters
|
|
48
46
|
* This is called when browser-use requests tool execution via socket
|
|
49
47
|
*/
|
|
50
|
-
async executeTool(request: ToolExecutionRequest): Promise<ToolExecutionResponse> {
|
|
48
|
+
async executeTool(request: ToolExecutionRequest, source: 'browser-use' | 'direct'): Promise<ToolExecutionResponse> {
|
|
51
49
|
const { toolName, toolParams, sessionId, cdpUrl } = request;
|
|
52
50
|
|
|
53
51
|
try {
|
|
54
52
|
// Find the tool
|
|
55
53
|
const tool = this.tools.get(toolName);
|
|
56
|
-
if (!tool) {
|
|
54
|
+
if (!tool || (source === 'browser-use' && !tool.allowExecutionRequests)) {
|
|
57
55
|
throw new Error(`Tool not found: ${toolName}`);
|
|
58
56
|
}
|
|
59
57
|
|