@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.
Files changed (60) hide show
  1. package/dist/agent.d.ts +8 -1
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +54 -3
  4. package/dist/agent.js.map +1 -1
  5. package/dist/browserTask/cdp.d.ts +23 -0
  6. package/dist/browserTask/cdp.d.ts.map +1 -0
  7. package/dist/browserTask/cdp.js +162 -0
  8. package/dist/browserTask/cdp.js.map +1 -0
  9. package/dist/browserTask/cookieStore.py +108 -0
  10. package/dist/cli/index.js +0 -0
  11. package/dist/cli/runTool.d.ts +2 -0
  12. package/dist/cli/runTool.d.ts.map +1 -0
  13. package/dist/cli/runTool.js +143 -0
  14. package/dist/cli/runTool.js.map +1 -0
  15. package/dist/guidelines/guidelinesManager.d.ts +37 -0
  16. package/dist/guidelines/guidelinesManager.d.ts.map +1 -0
  17. package/dist/guidelines/guidelinesManager.js +172 -0
  18. package/dist/guidelines/guidelinesManager.js.map +1 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +5 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/internalTools/retell.d.ts +12 -0
  24. package/dist/internalTools/retell.d.ts.map +1 -0
  25. package/dist/internalTools/retell.js +54 -0
  26. package/dist/internalTools/retell.js.map +1 -0
  27. package/dist/internalTools/sendPlaceholderMessage.d.ts +14 -0
  28. package/dist/internalTools/sendPlaceholderMessage.d.ts.map +1 -0
  29. package/dist/internalTools/sendPlaceholderMessage.js +61 -0
  30. package/dist/internalTools/sendPlaceholderMessage.js.map +1 -0
  31. package/dist/platform/mindedChatOpenAI.d.ts +5 -0
  32. package/dist/platform/mindedChatOpenAI.d.ts.map +1 -0
  33. package/dist/platform/mindedChatOpenAI.js +23 -0
  34. package/dist/platform/mindedChatOpenAI.js.map +1 -0
  35. package/dist/platform/toolExecutor.d.ts +1 -1
  36. package/dist/platform/toolExecutor.d.ts.map +1 -1
  37. package/dist/platform/toolExecutor.js +3 -5
  38. package/dist/platform/toolExecutor.js.map +1 -1
  39. package/dist/toolsLibrary/withBrowserSession.d.ts +7 -0
  40. package/dist/toolsLibrary/withBrowserSession.d.ts.map +1 -0
  41. package/dist/toolsLibrary/withBrowserSession.js +154 -0
  42. package/dist/toolsLibrary/withBrowserSession.js.map +1 -0
  43. package/dist/utils/extractStateMemoryResponse.d.ts +5 -0
  44. package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -0
  45. package/dist/utils/extractStateMemoryResponse.js +91 -0
  46. package/dist/utils/extractStateMemoryResponse.js.map +1 -0
  47. package/dist/utils/extractToolMemoryResponse.d.ts +4 -0
  48. package/dist/utils/extractToolMemoryResponse.d.ts.map +1 -0
  49. package/dist/utils/extractToolMemoryResponse.js +16 -0
  50. package/dist/utils/extractToolMemoryResponse.js.map +1 -0
  51. package/dist/utils/parseDirectToolExecutionArgs.d.ts +5 -0
  52. package/dist/utils/parseDirectToolExecutionArgs.d.ts.map +1 -0
  53. package/dist/utils/parseDirectToolExecutionArgs.js +30 -0
  54. package/dist/utils/parseDirectToolExecutionArgs.js.map +1 -0
  55. package/package.json +2 -2
  56. package/src/agent.ts +64 -4
  57. package/src/index.ts +2 -1
  58. package/src/platform/toolExecutor.ts +4 -6
  59. package/src/toolsLibrary/withBrowserSession.ts +121 -0
  60. 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
- if (tool.allowExecutionRequests === true) {
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":"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"}
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;IAEnB,CAAC;IAErC;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,KAAuB;QACnC,sDAAsD;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEnB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,OAA6B,EAAE,MAAgC;;QAC/E,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE5D,IAAI,CAAC;YACH,gBAAgB;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,2EAA2E;YAE3E,eAAM,CAAC,KAAK,CAAC;gBACX,GAAG,EAAE,+BAA+B;gBACpC,QAAQ;gBACR,SAAS;gBACT,SAAS,EAAE,CAAC,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,wCAAwC;YACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,mBAAmB;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,GAAG,GAAG;oBACV,GAAG,EAAE,MAAM;oBACX,SAAS,EAAE,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,SAAS,KAAI,IAAI;oBACvC,OAAO,EAAE,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,OAAO,KAAI,IAAI;iBACpC,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,CAAC,OAAO,CAAC;gBACjB,KAAK,EAAE,UAAU;gBACjB,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE3B,eAAM,CAAC,KAAK,CAAC;gBACX,GAAG,EAAE,yCAAyC;gBAC9C,QAAQ;gBACR,eAAe,EAAE,OAAO,GAAG,SAAS;aACrC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAEnD,OAAO;gBACL,KAAK;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC;gBACX,OAAO,EAAE,qCAAqC;gBAC9C,QAAQ;gBACR,GAAG;aACJ,CAAC,CAAC;YAEH,OAAO;gBACL,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAhGD,oCAgGC"}
@@ -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,4 @@
1
+ import { ToolMessage } from '@langchain/core/messages';
2
+ declare const extractToolMemoryResponse: <Memory>(toolMessage: ToolMessage) => Partial<Memory>;
3
+ export default extractToolMemoryResponse;
4
+ //# sourceMappingURL=extractToolMemoryResponse.d.ts.map
@@ -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,5 @@
1
+ export declare function parseDirectToolExecutionArgs(args: string[]): {
2
+ toolName: string;
3
+ params: Record<string, any>;
4
+ };
5
+ //# sourceMappingURL=parseDirectToolExecutionArgs.d.ts.map
@@ -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.27",
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
- 'Add an "llm" section to your minded.json file with provider and model settings.',
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
- if (tool.allowExecutionRequests === true) {
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