@redplanethq/corebrain 2.7.1 → 2.8.0

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 (76) hide show
  1. package/dist/commands/browser/close-session.d.ts +10 -0
  2. package/dist/commands/browser/close-session.d.ts.map +1 -0
  3. package/dist/commands/browser/close-session.js +34 -0
  4. package/dist/commands/browser/close-session.js.map +1 -0
  5. package/dist/commands/browser/close.d.ts +2 -5
  6. package/dist/commands/browser/close.d.ts.map +1 -1
  7. package/dist/commands/browser/close.js +11 -38
  8. package/dist/commands/browser/close.js.map +1 -1
  9. package/dist/commands/browser/command.d.ts +3 -3
  10. package/dist/commands/browser/command.d.ts.map +1 -1
  11. package/dist/commands/browser/command.js +23 -26
  12. package/dist/commands/browser/command.js.map +1 -1
  13. package/dist/commands/browser/create-profile.d.ts +10 -0
  14. package/dist/commands/browser/create-profile.d.ts.map +1 -0
  15. package/dist/commands/browser/create-profile.js +37 -0
  16. package/dist/commands/browser/create-profile.js.map +1 -0
  17. package/dist/commands/browser/create-session.d.ts +4 -2
  18. package/dist/commands/browser/create-session.d.ts.map +1 -1
  19. package/dist/commands/browser/create-session.js +20 -10
  20. package/dist/commands/browser/create-session.js.map +1 -1
  21. package/dist/commands/browser/delete-profile.d.ts +10 -0
  22. package/dist/commands/browser/delete-profile.d.ts.map +1 -0
  23. package/dist/commands/browser/delete-profile.js +44 -0
  24. package/dist/commands/browser/delete-profile.js.map +1 -0
  25. package/dist/commands/browser/delete-session.d.ts.map +1 -1
  26. package/dist/commands/browser/delete-session.js +5 -13
  27. package/dist/commands/browser/delete-session.js.map +1 -1
  28. package/dist/commands/browser/install.d.ts.map +1 -1
  29. package/dist/commands/browser/install.js +18 -29
  30. package/dist/commands/browser/install.js.map +1 -1
  31. package/dist/commands/browser/list-sessions.d.ts.map +1 -1
  32. package/dist/commands/browser/list-sessions.js +8 -5
  33. package/dist/commands/browser/list-sessions.js.map +1 -1
  34. package/dist/commands/browser/open-head.d.ts.map +1 -1
  35. package/dist/commands/browser/open-head.js +21 -23
  36. package/dist/commands/browser/open-head.js.map +1 -1
  37. package/dist/commands/browser/open.d.ts +2 -2
  38. package/dist/commands/browser/open.d.ts.map +1 -1
  39. package/dist/commands/browser/open.js +27 -23
  40. package/dist/commands/browser/open.js.map +1 -1
  41. package/dist/commands/browser/set-browser.js +1 -1
  42. package/dist/commands/browser/set-browser.js.map +1 -1
  43. package/dist/commands/browser/status.d.ts.map +1 -1
  44. package/dist/commands/browser/status.js +23 -20
  45. package/dist/commands/browser/status.js.map +1 -1
  46. package/dist/commands/gateway/config.js +6 -6
  47. package/dist/commands/gateway/config.js.map +1 -1
  48. package/dist/commands/gateway/start.js +2 -2
  49. package/dist/commands/gateway/start.js.map +1 -1
  50. package/dist/server/gateway-client.js +2 -2
  51. package/dist/server/gateway-client.js.map +1 -1
  52. package/dist/server/tools/browser-tools.d.ts +0 -16
  53. package/dist/server/tools/browser-tools.d.ts.map +1 -1
  54. package/dist/server/tools/browser-tools.js +363 -127
  55. package/dist/server/tools/browser-tools.js.map +1 -1
  56. package/dist/tui/chat.d.ts.map +1 -1
  57. package/dist/tui/chat.js +6 -4
  58. package/dist/tui/chat.js.map +1 -1
  59. package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
  60. package/dist/tui/hooks/use-conversation.js +1 -0
  61. package/dist/tui/hooks/use-conversation.js.map +1 -1
  62. package/dist/types/config.d.ts +6 -1
  63. package/dist/types/config.d.ts.map +1 -1
  64. package/dist/utils/browser-config.d.ts +51 -0
  65. package/dist/utils/browser-config.d.ts.map +1 -0
  66. package/dist/utils/browser-config.js +293 -0
  67. package/dist/utils/browser-config.js.map +1 -0
  68. package/dist/utils/browser-manager.d.ts +27 -0
  69. package/dist/utils/browser-manager.d.ts.map +1 -0
  70. package/dist/utils/browser-manager.js +131 -0
  71. package/dist/utils/browser-manager.js.map +1 -0
  72. package/package.json +2 -1
  73. package/dist/utils/agent-browser.d.ts +0 -135
  74. package/dist/utils/agent-browser.d.ts.map +0 -1
  75. package/dist/utils/agent-browser.js +0 -561
  76. package/dist/utils/agent-browser.js.map +0 -1
@@ -1,195 +1,431 @@
1
1
  import zod from 'zod';
2
- import { browserOpen, browserClose, browserCommand, browserGetSessions, browserCloseAll, isBlockedCommand, getMaxSessions, } from '../../utils/agent-browser.js';
2
+ import { getOrLaunchSession, closeSession, closeAllSessions, getLiveSessions, } from '../../utils/browser-manager.js';
3
+ import { getConfiguredProfiles, getConfiguredSessions, getMaxProfiles, getMaxSessions, } from '../../utils/browser-config.js';
4
+ // ============ Helpers ============
5
+ function resolveLocator(page, element, ref) {
6
+ if (ref)
7
+ return page.locator(ref);
8
+ return page.getByText(element, { exact: false });
9
+ }
3
10
  // ============ Zod Schemas ============
4
- export const BrowserOpenSchema = zod.object({
5
- url: zod.string().describe('URL to open'),
6
- sessionName: zod
7
- .string()
8
- .optional()
9
- .default('corebrain')
10
- .describe('Session name (must be pre-configured, default: corebrain)'),
11
- headed: zod.boolean().optional().default(false).describe('Headed session'),
11
+ const SessionParam = zod
12
+ .string()
13
+ .describe('Session name (e.g. create_swiggy_order). Use browser_list_sessions to see available sessions.');
14
+ const NavigateSchema = zod.object({
15
+ url: zod.string().describe('URL to navigate to'),
16
+ session: SessionParam,
17
+ });
18
+ const SnapshotSchema = zod.object({ session: SessionParam });
19
+ const ClickSchema = zod.object({
20
+ element: zod.string().describe('Element description for text lookup'),
21
+ ref: zod.string().optional().describe('CSS/ARIA ref selector (takes priority over element)'),
22
+ session: SessionParam,
23
+ });
24
+ const FillSchema = zod.object({
25
+ element: zod.string().describe('Input element description'),
26
+ value: zod.string().describe('Value to fill'),
27
+ ref: zod.string().optional().describe('CSS/ARIA ref selector'),
28
+ session: SessionParam,
12
29
  });
13
- export const BrowserCloseSchema = zod.object({
14
- sessionName: zod.string().describe('Session name to close'),
30
+ const TypeSchema = zod.object({
31
+ element: zod.string().describe('Element description'),
32
+ text: zod.string().describe('Text to type character by character'),
33
+ ref: zod.string().optional().describe('CSS/ARIA ref selector'),
34
+ session: SessionParam,
15
35
  });
16
- export const BrowserCommandSchema = zod.object({
17
- sessionName: zod.string().describe('Session name to run command on'),
18
- command: zod
19
- .string()
20
- .describe('Command to run (e.g., click, fill, type, screenshot, etc.)'),
21
- args: zod
22
- .array(zod.string())
36
+ const PressKeySchema = zod.object({
37
+ key: zod.string().describe('Key to press (e.g. Enter, Tab, ArrowDown)'),
38
+ session: SessionParam,
39
+ });
40
+ const SelectOptionSchema = zod.object({
41
+ element: zod.string().describe('Select element description'),
42
+ value: zod.string().describe('Option value to select'),
43
+ ref: zod.string().optional().describe('CSS/ARIA ref selector'),
44
+ session: SessionParam,
45
+ });
46
+ const ScreenshotSchema = zod.object({ session: SessionParam });
47
+ const WaitForSchema = zod.object({
48
+ state: zod
49
+ .enum(['load', 'domcontentloaded', 'networkidle'])
23
50
  .optional()
24
- .default([])
25
- .describe('Command arguments'),
51
+ .default('load')
52
+ .describe('Load state to wait for'),
53
+ session: SessionParam,
54
+ });
55
+ const EvaluateSchema = zod.object({
56
+ script: zod.string().describe('JavaScript expression to evaluate in the page context'),
57
+ session: SessionParam,
26
58
  });
27
- export const BrowserGetSessionsSchema = zod.object({});
28
- export const BrowserCloseAllSchema = zod.object({});
59
+ const GoBackSchema = zod.object({ session: SessionParam });
60
+ const GoForwardSchema = zod.object({ session: SessionParam });
61
+ const ScrollSchema = zod.object({
62
+ deltaX: zod.number().optional().default(0).describe('Horizontal scroll amount in pixels'),
63
+ deltaY: zod.number().optional().default(300).describe('Vertical scroll amount in pixels'),
64
+ session: SessionParam,
65
+ });
66
+ const CloseSessionSchema = zod.object({ session: SessionParam });
67
+ const CloseAllSchema = zod.object({});
68
+ const ListSessionsSchema = zod.object({});
29
69
  // ============ JSON Schemas ============
70
+ const sessionProp = {
71
+ type: 'string',
72
+ description: 'Session name (e.g. create_swiggy_order). Use browser_list_sessions to see configured sessions.',
73
+ };
30
74
  const jsonSchemas = {
31
- browser_open: {
75
+ browser_navigate: {
32
76
  type: 'object',
33
77
  properties: {
34
- url: { type: 'string', description: 'URL to open' },
35
- sessionName: {
36
- type: 'string',
37
- description: 'Session name (must be pre-configured). Default: personal. Use browser_list_sessions to see available sessions.',
38
- },
39
- headed: {
40
- type: 'boolean',
41
- description: 'Headed session. Default: false',
42
- },
78
+ url: { type: 'string', description: 'URL to navigate to' },
79
+ session: sessionProp,
43
80
  },
44
- required: ['url'],
81
+ required: ['url', 'session'],
82
+ },
83
+ browser_snapshot: {
84
+ type: 'object',
85
+ properties: { session: sessionProp },
86
+ required: ['session'],
45
87
  },
46
- browser_close: {
88
+ browser_click: {
47
89
  type: 'object',
48
90
  properties: {
49
- sessionName: { type: 'string', description: 'Session name to close' },
91
+ element: { type: 'string', description: 'Element text/description for lookup' },
92
+ ref: { type: 'string', description: 'CSS/ARIA selector (takes priority)' },
93
+ session: sessionProp,
50
94
  },
51
- required: ['sessionName'],
95
+ required: ['element', 'session'],
52
96
  },
53
- browser_command: {
97
+ browser_fill: {
54
98
  type: 'object',
55
99
  properties: {
56
- sessionName: {
57
- type: 'string',
58
- description: 'Session name to run command on',
59
- },
60
- command: {
100
+ element: { type: 'string', description: 'Input element text/description' },
101
+ value: { type: 'string', description: 'Value to fill' },
102
+ ref: { type: 'string', description: 'CSS/ARIA selector (takes priority)' },
103
+ session: sessionProp,
104
+ },
105
+ required: ['element', 'value', 'session'],
106
+ },
107
+ browser_type: {
108
+ type: 'object',
109
+ properties: {
110
+ element: { type: 'string', description: 'Element text/description' },
111
+ text: { type: 'string', description: 'Text to type character by character' },
112
+ ref: { type: 'string', description: 'CSS/ARIA selector (takes priority)' },
113
+ session: sessionProp,
114
+ },
115
+ required: ['element', 'text', 'session'],
116
+ },
117
+ browser_press_key: {
118
+ type: 'object',
119
+ properties: {
120
+ key: { type: 'string', description: 'Key to press (e.g. Enter, Tab, ArrowDown)' },
121
+ session: sessionProp,
122
+ },
123
+ required: ['key', 'session'],
124
+ },
125
+ browser_select_option: {
126
+ type: 'object',
127
+ properties: {
128
+ element: { type: 'string', description: 'Select element text/description' },
129
+ value: { type: 'string', description: 'Option value to select' },
130
+ ref: { type: 'string', description: 'CSS/ARIA selector (takes priority)' },
131
+ session: sessionProp,
132
+ },
133
+ required: ['element', 'value', 'session'],
134
+ },
135
+ browser_screenshot: {
136
+ type: 'object',
137
+ properties: { session: sessionProp },
138
+ required: ['session'],
139
+ },
140
+ browser_wait_for: {
141
+ type: 'object',
142
+ properties: {
143
+ state: {
61
144
  type: 'string',
62
- description: 'Command to run. Available: click, dblclick, fill, type, press, hover, select, check, uncheck, scroll, screenshot, snapshot, eval, get, is, find, wait, mouse, set, tab, frame, back, forward, reload. Blocked: open, close, cookies, storage, network, download, run, session, task, tunnel, state',
63
- },
64
- args: {
65
- type: 'array',
66
- items: { type: 'string' },
67
- description: 'Command arguments (selector, text, etc.)',
145
+ enum: ['load', 'domcontentloaded', 'networkidle'],
146
+ description: 'Load state to wait for (default: load)',
68
147
  },
148
+ session: sessionProp,
69
149
  },
70
- required: ['sessionName', 'command'],
150
+ required: ['session'],
71
151
  },
72
- browser_list_sessions: {
152
+ browser_evaluate: {
153
+ type: 'object',
154
+ properties: {
155
+ script: { type: 'string', description: 'JavaScript expression to evaluate in page context' },
156
+ session: sessionProp,
157
+ },
158
+ required: ['script', 'session'],
159
+ },
160
+ browser_go_back: {
161
+ type: 'object',
162
+ properties: { session: sessionProp },
163
+ required: ['session'],
164
+ },
165
+ browser_go_forward: {
166
+ type: 'object',
167
+ properties: { session: sessionProp },
168
+ required: ['session'],
169
+ },
170
+ browser_scroll: {
171
+ type: 'object',
172
+ properties: {
173
+ deltaX: { type: 'number', description: 'Horizontal scroll pixels (default: 0)' },
174
+ deltaY: { type: 'number', description: 'Vertical scroll pixels (default: 300)' },
175
+ session: sessionProp,
176
+ },
177
+ required: ['session'],
178
+ },
179
+ browser_close_session: {
180
+ type: 'object',
181
+ properties: { session: sessionProp },
182
+ required: ['session'],
183
+ },
184
+ browser_close_all: {
73
185
  type: 'object',
74
186
  properties: {},
75
187
  required: [],
76
- description: 'List all configured browser sessions',
77
188
  },
78
- browser_close_all: {
189
+ browser_list_sessions: {
79
190
  type: 'object',
80
191
  properties: {},
81
192
  required: [],
82
- description: 'Close all configured browser sessions',
83
193
  },
84
194
  };
85
195
  // ============ Tool Definitions ============
86
196
  export const browserTools = [
87
197
  {
88
- name: 'browser_open',
89
- description: 'Open a browser with a URL using a pre-configured session. Use browser_list_sessions to see available sessions.',
90
- inputSchema: jsonSchemas.browser_open,
198
+ name: 'browser_navigate',
199
+ description: 'Navigate to a URL in a named browser session.',
200
+ inputSchema: jsonSchemas.browser_navigate,
91
201
  },
92
202
  {
93
- name: 'browser_close',
94
- description: 'Close a browser for the specified session',
95
- inputSchema: jsonSchemas.browser_close,
203
+ name: 'browser_snapshot',
204
+ description: 'Get an ARIA accessibility snapshot of the current page. Use this before interacting with elements to discover refs.',
205
+ inputSchema: jsonSchemas.browser_snapshot,
96
206
  },
97
207
  {
98
- name: 'browser_command',
99
- description: 'Run a browser command on a session. Commands: click, dblclick, fill, type, press, hover, select, check, uncheck, scroll, screenshot, snapshot, eval, get, is, find, wait, mouse, set, tab, frame, back, forward, reload',
100
- inputSchema: jsonSchemas.browser_command,
208
+ name: 'browser_click',
209
+ description: 'Click an element on the page by text description or ref selector.',
210
+ inputSchema: jsonSchemas.browser_click,
101
211
  },
102
212
  {
103
- name: 'browser_list_sessions',
104
- description: `List all configured browser sessions. Maximum ${getMaxSessions()} sessions allowed.`,
105
- inputSchema: jsonSchemas.browser_list_sessions,
213
+ name: 'browser_fill',
214
+ description: 'Fill an input field with a value (clears existing content first).',
215
+ inputSchema: jsonSchemas.browser_fill,
216
+ },
217
+ {
218
+ name: 'browser_type',
219
+ description: 'Type text into an element character by character (simulates real typing).',
220
+ inputSchema: jsonSchemas.browser_type,
221
+ },
222
+ {
223
+ name: 'browser_press_key',
224
+ description: 'Press a keyboard key (e.g. Enter, Tab, ArrowDown, Escape).',
225
+ inputSchema: jsonSchemas.browser_press_key,
226
+ },
227
+ {
228
+ name: 'browser_select_option',
229
+ description: 'Select an option from a <select> dropdown element.',
230
+ inputSchema: jsonSchemas.browser_select_option,
231
+ },
232
+ {
233
+ name: 'browser_screenshot',
234
+ description: 'Take a screenshot of the current page and return it as base64.',
235
+ inputSchema: jsonSchemas.browser_screenshot,
236
+ },
237
+ {
238
+ name: 'browser_wait_for',
239
+ description: 'Wait for a page load state (load, domcontentloaded, networkidle).',
240
+ inputSchema: jsonSchemas.browser_wait_for,
241
+ },
242
+ {
243
+ name: 'browser_evaluate',
244
+ description: 'Evaluate a JavaScript expression in the page context and return the result.',
245
+ inputSchema: jsonSchemas.browser_evaluate,
246
+ },
247
+ {
248
+ name: 'browser_go_back',
249
+ description: 'Navigate to the previous page in history.',
250
+ inputSchema: jsonSchemas.browser_go_back,
251
+ },
252
+ {
253
+ name: 'browser_go_forward',
254
+ description: 'Navigate to the next page in history.',
255
+ inputSchema: jsonSchemas.browser_go_forward,
256
+ },
257
+ {
258
+ name: 'browser_scroll',
259
+ description: 'Scroll the page by the specified pixel amounts.',
260
+ inputSchema: jsonSchemas.browser_scroll,
261
+ },
262
+ {
263
+ name: 'browser_close_session',
264
+ description: 'Close a running browser session (profile data is preserved on disk).',
265
+ inputSchema: jsonSchemas.browser_close_session,
106
266
  },
107
267
  {
108
268
  name: 'browser_close_all',
109
- description: 'Close all configured browser sessions at once.',
269
+ description: 'Close all running browser sessions.',
110
270
  inputSchema: jsonSchemas.browser_close_all,
111
271
  },
272
+ {
273
+ name: 'browser_list_sessions',
274
+ description: `List all configured sessions with their profiles and live status. Max ${getMaxSessions()} sessions, ${getMaxProfiles()} profiles.`,
275
+ inputSchema: jsonSchemas.browser_list_sessions,
276
+ },
112
277
  ];
113
278
  // ============ Tool Execution ============
114
279
  export async function executeBrowserTool(toolName, params) {
115
280
  try {
116
281
  switch (toolName) {
117
- case 'browser_open': {
118
- const p = BrowserOpenSchema.parse(params);
119
- const r = await browserOpen(p.url, p.sessionName, p.headed);
120
- if (r.code !== 0) {
121
- return { success: false, error: r.stderr || 'Failed to open browser' };
122
- }
282
+ case 'browser_navigate': {
283
+ const p = NavigateSchema.parse(params);
284
+ const { session, error } = await getOrLaunchSession(p.session);
285
+ if (error)
286
+ return { success: false, error };
287
+ const response = await session.page.goto(p.url);
123
288
  return {
124
289
  success: true,
125
290
  result: {
126
- message: `Opened ${p.url} with session "${p.sessionName} headed "${p.headed}"`,
127
- sessionName: p.sessionName,
291
+ url: p.url,
292
+ session: p.session,
293
+ status: response?.status(),
294
+ title: await session.page.title(),
128
295
  },
129
296
  };
130
297
  }
131
- case 'browser_close': {
132
- const p = BrowserCloseSchema.parse(params);
133
- const r = await browserClose(p.sessionName);
134
- if (r.code !== 0) {
135
- return { success: false, error: r.stderr || 'Failed to close browser' };
136
- }
137
- return {
138
- success: true,
139
- result: { message: `Closed browser for session "${p.sessionName}"` },
140
- };
298
+ case 'browser_snapshot': {
299
+ const p = SnapshotSchema.parse(params);
300
+ const { session, error } = await getOrLaunchSession(p.session);
301
+ if (error)
302
+ return { success: false, error };
303
+ const snapshot = await session.page.ariaSnapshot();
304
+ return { success: true, result: { snapshot } };
141
305
  }
142
- case 'browser_command': {
143
- const p = BrowserCommandSchema.parse(params);
144
- // Check if command is blocked before executing
145
- if (isBlockedCommand(p.command)) {
146
- return {
147
- success: false,
148
- error: `Command "${p.command}" is blocked. Use browser_open or browser_close instead for open/close, other blocked commands are not available.`,
149
- };
150
- }
151
- const r = await browserCommand(p.sessionName, p.command, p.args);
152
- if (r.code !== 0) {
153
- return {
154
- success: false,
155
- error: r.stderr || `Failed to run "${p.command}"`,
156
- };
157
- }
158
- return {
159
- success: true,
160
- result: {
161
- message: `Executed "${p.command}" on session "${p.sessionName}"`,
162
- output: r.stdout,
163
- },
164
- };
306
+ case 'browser_click': {
307
+ const p = ClickSchema.parse(params);
308
+ const { session, error } = await getOrLaunchSession(p.session);
309
+ if (error)
310
+ return { success: false, error };
311
+ const locator = resolveLocator(session.page, p.element, p.ref);
312
+ await locator.click();
313
+ return { success: true, result: { message: `Clicked "${p.ref ?? p.element}"` } };
314
+ }
315
+ case 'browser_fill': {
316
+ const p = FillSchema.parse(params);
317
+ const { session, error } = await getOrLaunchSession(p.session);
318
+ if (error)
319
+ return { success: false, error };
320
+ const locator = resolveLocator(session.page, p.element, p.ref);
321
+ await locator.fill(p.value);
322
+ return { success: true, result: { message: `Filled "${p.ref ?? p.element}"` } };
323
+ }
324
+ case 'browser_type': {
325
+ const p = TypeSchema.parse(params);
326
+ const { session, error } = await getOrLaunchSession(p.session);
327
+ if (error)
328
+ return { success: false, error };
329
+ const locator = resolveLocator(session.page, p.element, p.ref);
330
+ await locator.pressSequentially(p.text);
331
+ return { success: true, result: { message: `Typed into "${p.ref ?? p.element}"` } };
332
+ }
333
+ case 'browser_press_key': {
334
+ const p = PressKeySchema.parse(params);
335
+ const { session, error } = await getOrLaunchSession(p.session);
336
+ if (error)
337
+ return { success: false, error };
338
+ await session.page.keyboard.press(p.key);
339
+ return { success: true, result: { message: `Pressed key "${p.key}"` } };
340
+ }
341
+ case 'browser_select_option': {
342
+ const p = SelectOptionSchema.parse(params);
343
+ const { session, error } = await getOrLaunchSession(p.session);
344
+ if (error)
345
+ return { success: false, error };
346
+ const locator = resolveLocator(session.page, p.element, p.ref);
347
+ await locator.selectOption(p.value);
348
+ return { success: true, result: { message: `Selected "${p.value}" in "${p.ref ?? p.element}"` } };
349
+ }
350
+ case 'browser_screenshot': {
351
+ const p = ScreenshotSchema.parse(params);
352
+ const { session, error } = await getOrLaunchSession(p.session);
353
+ if (error)
354
+ return { success: false, error };
355
+ const buffer = await session.page.screenshot();
356
+ return { success: true, result: { screenshot: buffer.toString('base64'), mimeType: 'image/png' } };
357
+ }
358
+ case 'browser_wait_for': {
359
+ const p = WaitForSchema.parse(params);
360
+ const { session, error } = await getOrLaunchSession(p.session);
361
+ if (error)
362
+ return { success: false, error };
363
+ await session.page.waitForLoadState(p.state);
364
+ return { success: true, result: { message: `Waited for "${p.state}"` } };
365
+ }
366
+ case 'browser_evaluate': {
367
+ const p = EvaluateSchema.parse(params);
368
+ const { session, error } = await getOrLaunchSession(p.session);
369
+ if (error)
370
+ return { success: false, error };
371
+ // eslint-disable-next-line no-new-func
372
+ const result = await session.page.evaluate(new Function(`return (${p.script})`));
373
+ return { success: true, result: { value: result } };
374
+ }
375
+ case 'browser_go_back': {
376
+ const p = GoBackSchema.parse(params);
377
+ const { session, error } = await getOrLaunchSession(p.session);
378
+ if (error)
379
+ return { success: false, error };
380
+ await session.page.goBack();
381
+ return { success: true, result: { url: session.page.url() } };
382
+ }
383
+ case 'browser_go_forward': {
384
+ const p = GoForwardSchema.parse(params);
385
+ const { session, error } = await getOrLaunchSession(p.session);
386
+ if (error)
387
+ return { success: false, error };
388
+ await session.page.goForward();
389
+ return { success: true, result: { url: session.page.url() } };
390
+ }
391
+ case 'browser_scroll': {
392
+ const p = ScrollSchema.parse(params);
393
+ const { session, error } = await getOrLaunchSession(p.session);
394
+ if (error)
395
+ return { success: false, error };
396
+ await session.page.mouse.wheel(p.deltaX, p.deltaY);
397
+ return { success: true, result: { message: `Scrolled (${p.deltaX}, ${p.deltaY})` } };
398
+ }
399
+ case 'browser_close_session': {
400
+ const p = CloseSessionSchema.parse(params);
401
+ const r = await closeSession(p.session);
402
+ if (!r.success)
403
+ return { success: false, error: r.error };
404
+ return { success: true, result: { message: `Closed session "${p.session}"` } };
405
+ }
406
+ case 'browser_close_all': {
407
+ CloseAllSchema.parse(params);
408
+ await closeAllSessions();
409
+ return { success: true, result: { message: 'Closed all browser sessions' } };
165
410
  }
166
411
  case 'browser_list_sessions': {
167
- BrowserGetSessionsSchema.parse(params);
168
- const sessions = browserGetSessions();
169
- const maxSessions = getMaxSessions();
412
+ ListSessionsSchema.parse(params);
413
+ const configured = getConfiguredSessions();
414
+ const live = getLiveSessions();
415
+ const profiles = getConfiguredProfiles();
170
416
  return {
171
417
  success: true,
172
418
  result: {
173
- sessions,
174
- count: sessions.length,
175
- maxSessions,
419
+ profiles,
420
+ sessions: configured.map(s => ({
421
+ ...s,
422
+ live: live.includes(s.name),
423
+ })),
424
+ maxProfiles: getMaxProfiles(),
425
+ maxSessions: getMaxSessions(),
176
426
  },
177
427
  };
178
428
  }
179
- case 'browser_close_all': {
180
- BrowserCloseAllSchema.parse(params);
181
- const r = await browserCloseAll();
182
- if (r.code !== 0) {
183
- return {
184
- success: false,
185
- error: r.stderr || 'Failed to close all browsers',
186
- };
187
- }
188
- return {
189
- success: true,
190
- result: { message: 'Closed all browser sessions', details: r.stdout },
191
- };
192
- }
193
429
  default:
194
430
  return { success: false, error: `Unknown tool: ${toolName}` };
195
431
  }
@@ -1 +1 @@
1
- {"version":3,"file":"browser-tools.js","sourceRoot":"","sources":["../../../src/server/tools/browser-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-tools.js","sourceRoot":"","sources":["../../../src/server/tools/browser-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tui/chat.ts"],"names":[],"mappings":"AAuBA,wBAAgB,WAAW,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb,IAAI,CAycN"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tui/chat.ts"],"names":[],"mappings":"AAuBA,wBAAgB,WAAW,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb,IAAI,CA2cN"}
package/dist/tui/chat.js CHANGED
@@ -13,8 +13,8 @@ export function startTuiApp(baseUrl, apiKey, version) {
13
13
  const c = (s) => chalk.hex('#c15e50')(s);
14
14
  const logoRows = [
15
15
  c(' ▄███▄ '),
16
- c(' ▐◉ ◉▌ '),
17
- c(' ▐▄▄▄▄▄▌ '),
16
+ c(' ▐◉███◉▌ '),
17
+ c(' ▐█████▌'),
18
18
  c(' ◉ ◉ '),
19
19
  ];
20
20
  const infoRows = [
@@ -344,8 +344,10 @@ export function startTuiApp(baseUrl, apiKey, version) {
344
344
  }
345
345
  if (matchesKey(data, Key.ctrl('o'))) {
346
346
  if (allToolItems.length > 0) {
347
- const last = allToolItems[allToolItems.length - 1];
348
- last.toggleExpand();
347
+ const anyExpanded = allToolItems.some(item => item.isExpanded);
348
+ for (const item of allToolItems) {
349
+ item.isExpanded = !anyExpanded;
350
+ }
349
351
  tui.requestRender();
350
352
  }
351
353
  return;