@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
@@ -0,0 +1,121 @@
1
+ import { Browser, BrowserContext, chromium, Page } from "playwright";
2
+ import { BrowserTaskMode } from "../browserTask/types";
3
+ import { createBrowserSession, destroyBrowserSession } from "../browserTask/executeBrowserTask";
4
+ import { logger } from "../utils/logger";
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { CookieStore } from "../browserTask/CookieStore";
8
+
9
+ // Initialize cookie store
10
+ const cookieStore = new CookieStore(path.join(process.cwd(), 'local_storage', 'cookies'));
11
+
12
+ // Helper function to load cookies for a session
13
+ const loadCookiesForSession = async (context: BrowserContext, sessionId: string): Promise<void> => {
14
+ const stored = await cookieStore.load();
15
+ if (!stored || stored.length === 0) {
16
+ logger.info({ message: 'No stored cookies to load', sessionId });
17
+ return;
18
+ }
19
+
20
+ try {
21
+ await context.addCookies(stored);
22
+ logger.info({ message: 'Loaded cookies into browser session', sessionId, count: stored.length });
23
+ } catch (error) {
24
+ logger.warn({ message: 'Failed to add cookies to context', sessionId, error });
25
+ }
26
+ };
27
+
28
+ // Helper function to save cookies for a session
29
+ const saveCookiesForSession = async (context: BrowserContext, sessionId: string): Promise<void> => {
30
+ try {
31
+ const cookies = await context.cookies();
32
+ if (cookies && cookies.length > 0) {
33
+ await cookieStore.save(cookies);
34
+ logger.info({ message: 'Saved cookies from browser session', sessionId, count: cookies.length });
35
+ } else {
36
+ logger.info({ message: 'No cookies found in browser session', sessionId });
37
+ }
38
+ } catch (error) {
39
+ logger.warn({ message: 'Failed to get/save cookies from session', sessionId, error: JSON.stringify(error) });
40
+ }
41
+ };
42
+
43
+ export const withBrowserSession = async <T>({ sessionId, browserTaskMode }: { sessionId: string, browserTaskMode: BrowserTaskMode }, callback: (page: Page) => Promise<T>): Promise<T> => {
44
+ const { cdpUrl } = await createBrowserSession({ sessionId, browserTaskMode });
45
+ if (!cdpUrl) {
46
+ throw new Error('CDP URL was not provided by the browser session.');
47
+ }
48
+ logger.info({ msg: 'Connecting to CDP', cdpUrl, sessionId });
49
+
50
+ let maxTries = 30;
51
+ let browser: Browser | null = null;
52
+ while (maxTries > 0) {
53
+ try {
54
+ browser = await chromium.connectOverCDP(cdpUrl);
55
+ break;
56
+ } catch (error) {
57
+ logger.warn({ msg: 'Failed to connect to CDP', sessionId, error });
58
+ maxTries--;
59
+ await delay(1000);
60
+ }
61
+ }
62
+ if (!browser) {
63
+ throw new Error('Failed to connect to CDP');
64
+ }
65
+ logger.info({ msg: 'Connected to CDP', cdpUrl, sessionId });
66
+ const context: BrowserContext = browser.contexts()[0] ?? await browser.newContext();
67
+ const page: Page = context.pages()[0] ?? await context.newPage();
68
+ logger.info({ msg: 'Created page', sessionId });
69
+
70
+ // Load cookies for this session (only for local mode, best-effort)
71
+ if (browserTaskMode === BrowserTaskMode.LOCAL) {
72
+ try {
73
+ await loadCookiesForSession(context, sessionId);
74
+ } catch (error) {
75
+ logger.warn({ message: 'Failed to load cookies for session', sessionId, error });
76
+ }
77
+ }
78
+
79
+ try {
80
+ return await callback(page);
81
+ } catch (e) {
82
+ logger.error({ msg: 'Error in browser session callback', sessionId, error: e });
83
+
84
+ // Save screenshot and HTML content for debugging
85
+ try {
86
+ const resultsDir = path.join(process.cwd(), 'rpaTestResults');
87
+ if (!fs.existsSync(resultsDir)) {
88
+ fs.mkdirSync(resultsDir, { recursive: true });
89
+ }
90
+
91
+ const screenshotPath = path.join(resultsDir, `screenshot.jpeg`);
92
+ const htmlPath = path.join(resultsDir, `content.html`);
93
+
94
+ // Take screenshot with 80% quality
95
+ await page.screenshot({ path: screenshotPath, type: 'jpeg', quality: 80 });
96
+ logger.info({ msg: 'Saved error screenshot', path: screenshotPath, sessionId });
97
+
98
+ // Save HTML content
99
+ const htmlContent = await page.content();
100
+ fs.writeFileSync(htmlPath, htmlContent, 'utf8');
101
+ logger.info({ msg: 'Saved error HTML content', path: htmlPath, sessionId });
102
+ } catch (saveError) {
103
+ logger.warn({ msg: 'Failed to save error artifacts', sessionId, error: saveError });
104
+ }
105
+
106
+ throw e;
107
+ } finally {
108
+ // Save cookies before destroying session (only for local mode, best-effort)
109
+ if (browserTaskMode === BrowserTaskMode.LOCAL) {
110
+ try {
111
+ await saveCookiesForSession(context, sessionId);
112
+ } catch (error) {
113
+ logger.warn({ message: 'Failed to save cookies before session destruction', sessionId, error });
114
+ }
115
+ }
116
+
117
+ destroyBrowserSession({ sessionId, localRun: browserTaskMode === BrowserTaskMode.LOCAL, onPrem: browserTaskMode === BrowserTaskMode.ON_PREM }).catch(() => { });
118
+ }
119
+ }
120
+
121
+ const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
@@ -0,0 +1,31 @@
1
+ export function parseDirectToolExecutionArgs(args: string[]): { toolName: string; params: Record<string, any> } {
2
+ if (args.length === 0) {
3
+ throw new Error('Usage: npm run tool <toolName> [key=value ...]');
4
+ }
5
+
6
+ const toolName = args[0];
7
+ const params: Record<string, any> = {};
8
+
9
+ // Parse key=value pairs
10
+ for (let i = 1; i < args.length; i++) {
11
+ const arg = args[i];
12
+ const equalIndex = arg.indexOf('=');
13
+
14
+ if (equalIndex === -1) {
15
+ throw new Error(`Invalid argument format: ${arg}. Expected key=value`);
16
+ }
17
+
18
+ const key = arg.substring(0, equalIndex);
19
+ const rawValue = arg.substring(equalIndex + 1);
20
+
21
+ // Try to parse as JSON (for objects, arrays, booleans, numbers)
22
+ try {
23
+ params[key] = JSON.parse(rawValue);
24
+ } catch {
25
+ // If not valid JSON, treat as string
26
+ params[key] = rawValue;
27
+ }
28
+ }
29
+
30
+ return { toolName, params };
31
+ }