@redplanethq/corebrain 2.3.7 → 2.5.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 (71) hide show
  1. package/dist/commands/browser/close.d.ts +5 -4
  2. package/dist/commands/browser/close.d.ts.map +1 -1
  3. package/dist/commands/browser/close.js +25 -20
  4. package/dist/commands/browser/close.js.map +1 -1
  5. package/dist/commands/browser/command.d.ts +5 -3
  6. package/dist/commands/browser/command.d.ts.map +1 -1
  7. package/dist/commands/browser/command.js +10 -16
  8. package/dist/commands/browser/command.js.map +1 -1
  9. package/dist/commands/browser/delete-session.d.ts +10 -0
  10. package/dist/commands/browser/delete-session.d.ts.map +1 -0
  11. package/dist/commands/browser/delete-session.js +41 -0
  12. package/dist/commands/browser/delete-session.js.map +1 -0
  13. package/dist/commands/browser/install.d.ts.map +1 -1
  14. package/dist/commands/browser/install.js +41 -9
  15. package/dist/commands/browser/install.js.map +1 -1
  16. package/dist/commands/browser/list-sessions.d.ts +8 -0
  17. package/dist/commands/browser/list-sessions.d.ts.map +1 -0
  18. package/dist/commands/browser/list-sessions.js +46 -0
  19. package/dist/commands/browser/list-sessions.js.map +1 -0
  20. package/dist/commands/browser/open-head.d.ts +8 -0
  21. package/dist/commands/browser/open-head.d.ts.map +1 -0
  22. package/dist/commands/browser/open-head.js +68 -0
  23. package/dist/commands/browser/open-head.js.map +1 -0
  24. package/dist/commands/browser/open.d.ts +3 -3
  25. package/dist/commands/browser/open.d.ts.map +1 -1
  26. package/dist/commands/browser/open.js +18 -25
  27. package/dist/commands/browser/open.js.map +1 -1
  28. package/dist/commands/browser/status.d.ts.map +1 -1
  29. package/dist/commands/browser/status.js +15 -9
  30. package/dist/commands/browser/status.js.map +1 -1
  31. package/dist/commands/coding/start.d.ts.map +1 -1
  32. package/dist/commands/coding/start.js.map +1 -1
  33. package/dist/commands/gateway/config.d.ts.map +1 -1
  34. package/dist/commands/gateway/config.js +19 -25
  35. package/dist/commands/gateway/config.js.map +1 -1
  36. package/dist/commands/gateway/restart.js +1 -1
  37. package/dist/commands/gateway/restart.js.map +1 -1
  38. package/dist/commands/gateway/start.d.ts +8 -0
  39. package/dist/commands/gateway/start.d.ts.map +1 -0
  40. package/dist/commands/gateway/start.js +106 -0
  41. package/dist/commands/gateway/start.js.map +1 -0
  42. package/dist/commands/gateway/status.js +2 -2
  43. package/dist/commands/gateway/status.js.map +1 -1
  44. package/dist/commands/gateway/stop.d.ts +8 -0
  45. package/dist/commands/gateway/stop.d.ts.map +1 -0
  46. package/dist/commands/gateway/stop.js +67 -0
  47. package/dist/commands/gateway/stop.js.map +1 -0
  48. package/dist/server/gateway-client.d.ts.map +1 -1
  49. package/dist/server/gateway-client.js +2 -2
  50. package/dist/server/gateway-client.js.map +1 -1
  51. package/dist/server/tools/browser-tools.d.ts +5 -6
  52. package/dist/server/tools/browser-tools.d.ts.map +1 -1
  53. package/dist/server/tools/browser-tools.js +63 -42
  54. package/dist/server/tools/browser-tools.js.map +1 -1
  55. package/dist/server/tools/coding-tools.d.ts +1 -2
  56. package/dist/server/tools/coding-tools.d.ts.map +1 -1
  57. package/dist/server/tools/coding-tools.js +9 -21
  58. package/dist/server/tools/coding-tools.js.map +1 -1
  59. package/dist/utils/agent-browser.d.ts +8 -26
  60. package/dist/utils/agent-browser.d.ts.map +1 -1
  61. package/dist/utils/agent-browser.js +28 -127
  62. package/dist/utils/agent-browser.js.map +1 -1
  63. package/dist/utils/browser-use.d.ts +57 -0
  64. package/dist/utils/browser-use.d.ts.map +1 -0
  65. package/dist/utils/browser-use.js +212 -0
  66. package/dist/utils/browser-use.js.map +1 -0
  67. package/dist/utils/coding-runner.d.ts +1 -3
  68. package/dist/utils/coding-runner.d.ts.map +1 -1
  69. package/dist/utils/coding-runner.js +7 -35
  70. package/dist/utils/coding-runner.js.map +1 -1
  71. package/package.json +1 -1
@@ -1,12 +1,10 @@
1
1
  import { spawn, execSync } from 'node:child_process';
2
- import { existsSync, mkdirSync, rmSync, readdirSync, readFileSync, writeFileSync, } from 'node:fs';
2
+ import { existsSync, mkdirSync, rmSync, readdirSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { getConfigPath } from '../config/paths.js';
5
5
  // Constants - use unified config directory
6
6
  const COREBRAIN_DIR = getConfigPath();
7
7
  const BROWSER_PROFILES_DIR = join(COREBRAIN_DIR, 'browser-profiles');
8
- const SESSIONS_FILE = join(COREBRAIN_DIR, 'browser-sessions.json');
9
- const MAX_SESSIONS = 3;
10
8
  // Blocked commands that cannot be run via browser_command
11
9
  const BLOCKED_COMMANDS = [
12
10
  'open',
@@ -21,58 +19,15 @@ const BLOCKED_COMMANDS = [
21
19
  'state',
22
20
  'download',
23
21
  ];
24
- // ============ Session Management ============
25
- function loadSessions() {
26
- try {
27
- if (!existsSync(SESSIONS_FILE)) {
28
- return [];
29
- }
30
- const data = readFileSync(SESSIONS_FILE, 'utf-8');
31
- return JSON.parse(data);
32
- }
33
- catch {
34
- return [];
35
- }
36
- }
37
- function saveSessions(sessions) {
38
- if (!existsSync(COREBRAIN_DIR)) {
39
- mkdirSync(COREBRAIN_DIR, { recursive: true });
40
- }
41
- writeFileSync(SESSIONS_FILE, JSON.stringify(sessions, null, 2));
42
- }
43
- export function getActiveSessions() {
44
- return loadSessions();
45
- }
46
- export function getSession(sessionName) {
47
- const sessions = loadSessions();
48
- return sessions.find(s => s.sessionName === sessionName);
49
- }
50
- function addSession(session) {
51
- const sessions = loadSessions();
52
- // Remove existing session with same name if any
53
- const filtered = sessions.filter(s => s.sessionName !== session.sessionName);
54
- filtered.push(session);
55
- saveSessions(filtered);
56
- }
57
- function removeSession(sessionName) {
58
- const sessions = loadSessions();
59
- const filtered = sessions.filter(s => s.sessionName !== sessionName);
60
- saveSessions(filtered);
61
- }
62
- export function canCreateSession() {
63
- const sessions = loadSessions();
64
- return {
65
- allowed: sessions.length < MAX_SESSIONS,
66
- count: sessions.length,
67
- };
68
- }
69
22
  // ============ Installation ============
70
23
  /**
71
24
  * Get the agent-browser binary path (cross-platform)
72
25
  */
73
26
  function getAgentBrowserPath() {
74
27
  try {
75
- const command = process.platform === 'win32' ? 'where agent-browser' : 'which agent-browser';
28
+ const command = process.platform === 'win32'
29
+ ? 'where agent-browser'
30
+ : 'which agent-browser';
76
31
  const result = execSync(command, { stdio: 'pipe', encoding: 'utf-8' });
77
32
  const path = result.trim().split('\n')[0]; // Take first result on Windows (where can return multiple)
78
33
  return path || null;
@@ -125,7 +80,7 @@ function runNpmCommand(args) {
125
80
  });
126
81
  }
127
82
  // ============ Core Browser Command Runner ============
128
- async function runAgentBrowserCommand(sessionName, args) {
83
+ async function runAgentBrowserCommand(profile, args) {
129
84
  const binaryPath = getBinaryPath();
130
85
  if (!binaryPath) {
131
86
  return {
@@ -134,8 +89,11 @@ async function runAgentBrowserCommand(sessionName, args) {
134
89
  code: 1,
135
90
  };
136
91
  }
92
+ // Ensure profile directory exists
93
+ const profilePath = ensureProfileExists(profile);
137
94
  return new Promise(resolve => {
138
- const fullArgs = [...args, '--session', sessionName];
95
+ // Use profile path for persistent browser state
96
+ const fullArgs = [...args, '--profile', profilePath];
139
97
  const proc = spawn(binaryPath, fullArgs, {
140
98
  cwd: COREBRAIN_DIR,
141
99
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -217,46 +175,23 @@ export function listProfiles() {
217
175
  export function getProfilesDir() {
218
176
  return BROWSER_PROFILES_DIR;
219
177
  }
220
- // ============ Simplified Browser Tools ============
178
+ export function profileExists(name) {
179
+ const profilePath = join(BROWSER_PROFILES_DIR, name);
180
+ return existsSync(profilePath);
181
+ }
182
+ // ============ Browser Operations ============
221
183
  /**
222
- * Open a browser session with URL
223
- * Creates the corebrain profile if it doesn't exist
224
- * Enforces max 3 concurrent sessions
184
+ * Open a browser with URL using the specified profile
225
185
  */
226
- export async function browserOpen(sessionName, url, profile = 'corebrain') {
227
- // Check session limit
228
- const { allowed, count } = canCreateSession();
229
- const existingSession = getSession(sessionName);
230
- // Allow if session already exists (re-opening) or under limit
231
- if (!existingSession && !allowed) {
232
- return {
233
- stdout: '',
234
- stderr: `Maximum ${MAX_SESSIONS} sessions allowed. Currently running: ${count}. Close a session first.`,
235
- code: 1,
236
- };
237
- }
238
- // Ensure profile directory exists
239
- const profilePath = ensureProfileExists(profile);
240
- const args = ['open', url, '--profile', profilePath];
241
- const result = await runAgentBrowserCommand(sessionName, args);
242
- if (result.code === 0) {
243
- addSession({
244
- sessionName,
245
- profile,
246
- url,
247
- startedAt: new Date().toISOString(),
248
- });
249
- }
250
- return result;
186
+ export async function browserOpen(url, profile = 'default') {
187
+ const args = ['open', url];
188
+ return runAgentBrowserCommand(profile, args);
251
189
  }
252
190
  /**
253
- * Close a browser session
191
+ * Close a browser for the specified profile
254
192
  */
255
- export async function browserClose(sessionName) {
256
- const result = await runAgentBrowserCommand(sessionName, ['close']);
257
- // Remove session regardless of result (it might already be closed)
258
- removeSession(sessionName);
259
- return result;
193
+ export async function browserClose(profile) {
194
+ return runAgentBrowserCommand(profile, ['close']);
260
195
  }
261
196
  /**
262
197
  * Check if a command is blocked
@@ -266,10 +201,10 @@ export function isBlockedCommand(command) {
266
201
  return BLOCKED_COMMANDS.includes(cmd);
267
202
  }
268
203
  /**
269
- * Execute a generic browser command
204
+ * Execute a generic browser command on a profile
270
205
  * Blocks: open, close, cookies, storage, network, trace, highlight, console, errors, state, download
271
206
  */
272
- export async function browserCommand(sessionName, command, args = []) {
207
+ export async function browserCommand(profile, command, args = []) {
273
208
  // Check if command is blocked
274
209
  if (isBlockedCommand(command)) {
275
210
  return {
@@ -278,22 +213,7 @@ export async function browserCommand(sessionName, command, args = []) {
278
213
  code: 1,
279
214
  };
280
215
  }
281
- // Check if session exists
282
- const session = getSession(sessionName);
283
- if (!session) {
284
- return {
285
- stdout: '',
286
- stderr: `Session "${sessionName}" not found. Use browser_open to create a session first.`,
287
- code: 1,
288
- };
289
- }
290
- return runAgentBrowserCommand(sessionName, [command, ...args]);
291
- }
292
- /**
293
- * List all active browser sessions
294
- */
295
- export function browserListSessions() {
296
- return getActiveSessions();
216
+ return runAgentBrowserCommand(profile, [command, ...args]);
297
217
  }
298
218
  /**
299
219
  * Get all available profiles
@@ -302,31 +222,12 @@ export function browserGetProfiles() {
302
222
  return listProfiles();
303
223
  }
304
224
  /**
305
- * Close all active browser sessions
225
+ * Close a browser for the specified profile
306
226
  */
307
227
  export async function browserCloseAll() {
308
- const sessions = loadSessions();
309
- for (const session of sessions) {
310
- try {
311
- await browserClose(session.sessionName);
312
- }
313
- catch {
314
- // Ignore errors when closing individual sessions
315
- }
316
- }
317
- // Clear all sessions
318
- saveSessions([]);
319
- }
320
- // ============ Session Status ============
321
- export async function getSessionStatus(sessionName) {
322
- const result = await runAgentBrowserCommand(sessionName, ['status']);
323
- if (result.code !== 0) {
324
- return 'unknown';
325
- }
326
- const output = result.stdout.toLowerCase();
327
- if (output.includes('running') || output.includes('active')) {
328
- return 'running';
228
+ const profiles = browserGetProfiles();
229
+ for await (const profile of profiles) {
230
+ await runAgentBrowserCommand(profile, ['close']);
329
231
  }
330
- return 'stopped';
331
232
  }
332
233
  //# sourceMappingURL=agent-browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface CommandResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ code: number;
5
+ }
6
+ export declare function clearBinaryPathCache(): void;
7
+ export declare function isBrowserUseInstalled(): Promise<boolean>;
8
+ /**
9
+ * Install browser-use using the official installer
10
+ */
11
+ export declare function installBrowserUse(): Promise<CommandResult>;
12
+ /**
13
+ * Run browser-use doctor to validate installation
14
+ */
15
+ export declare function runBrowserUseDoctor(): Promise<CommandResult>;
16
+ export interface SessionInfo {
17
+ name: string;
18
+ status?: string;
19
+ }
20
+ /**
21
+ * List all available sessions using browser-use sessions command
22
+ */
23
+ export declare function listSessions(): Promise<string[]>;
24
+ /**
25
+ * Check if a session exists
26
+ */
27
+ export declare function sessionExists(name: string): Promise<boolean>;
28
+ /**
29
+ * Open a browser with URL using the specified session
30
+ */
31
+ export declare function browserOpen(url: string, sessionName?: string, headed?: boolean): Promise<CommandResult>;
32
+ /**
33
+ * Close a browser for the specified session
34
+ */
35
+ export declare function browserClose(sessionName: string): Promise<CommandResult>;
36
+ /**
37
+ * Close all browser sessions
38
+ */
39
+ export declare function browserCloseAll(): Promise<CommandResult>;
40
+ /**
41
+ * Check if a command is blocked
42
+ */
43
+ export declare function isBlockedCommand(command: string): boolean;
44
+ /**
45
+ * Execute a generic browser command on a session
46
+ * Blocks: open, close, cookies, storage, network, download, run, session, task, tunnel
47
+ */
48
+ export declare function browserCommand(sessionName: string, command: string, args?: string[]): Promise<CommandResult>;
49
+ /**
50
+ * Get all available sessions
51
+ */
52
+ export declare function browserGetSessions(): Promise<string[]>;
53
+ /**
54
+ * Get server status
55
+ */
56
+ export declare function getServerStatus(): Promise<CommandResult>;
57
+ //# sourceMappingURL=browser-use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-use.d.ts","sourceRoot":"","sources":["../../src/utils/browser-use.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAgCD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAahE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAElE;AAsFD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;AAID;;GAEG;AACH,wBAAsB,WAAW,CAChC,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAAkB,EAC/B,MAAM,GAAE,OAAe,GACrB,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CACjC,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAExB;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,GACjB,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAE9D"}
@@ -0,0 +1,212 @@
1
+ import { spawn, execSync } from 'node:child_process';
2
+ // Constants
3
+ const BINARY_NAME = 'browser-use';
4
+ // Blocked commands that cannot be run via browser_command
5
+ // Updated for browser-use CLI
6
+ const BLOCKED_COMMANDS = [
7
+ 'open',
8
+ 'close',
9
+ 'cookies',
10
+ 'storage',
11
+ 'network',
12
+ 'download',
13
+ 'run', // agent tasks
14
+ 'session', // session management
15
+ 'task', // task commands
16
+ 'tunnel', // tunneling
17
+ ];
18
+ // ============ Installation ============
19
+ /**
20
+ * Get the browser-use binary path (cross-platform)
21
+ */
22
+ function getBrowserUsePath() {
23
+ try {
24
+ const command = process.platform === 'win32'
25
+ ? `where ${BINARY_NAME}`
26
+ : `which ${BINARY_NAME}`;
27
+ const result = execSync(command, { stdio: 'pipe', encoding: 'utf-8' });
28
+ const path = result.trim().split('\n')[0]; // Take first result on Windows (where can return multiple)
29
+ return path || null;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ // Cache the binary path
36
+ let cachedBinaryPath;
37
+ function getBinaryPath() {
38
+ if (cachedBinaryPath === undefined) {
39
+ cachedBinaryPath = getBrowserUsePath();
40
+ }
41
+ return cachedBinaryPath;
42
+ }
43
+ // Clear cache (useful after installation)
44
+ export function clearBinaryPathCache() {
45
+ cachedBinaryPath = undefined;
46
+ }
47
+ export async function isBrowserUseInstalled() {
48
+ return getBinaryPath() !== null;
49
+ }
50
+ /**
51
+ * Install browser-use using the official installer
52
+ */
53
+ export async function installBrowserUse() {
54
+ const isWindows = process.platform === 'win32';
55
+ // Use the official browser-use installer
56
+ const installCommand = isWindows
57
+ ? 'powershell -Command "& {iwr -useb https://browser-use.com/cli/install.ps1 | iex}"'
58
+ : 'curl -fsSL https://browser-use.com/cli/install.sh | bash -s -- --full # All modes';
59
+ const result = await runShellCommand(installCommand);
60
+ // Clear cache so next check finds the newly installed binary
61
+ clearBinaryPathCache();
62
+ return result;
63
+ }
64
+ /**
65
+ * Run browser-use doctor to validate installation
66
+ */
67
+ export async function runBrowserUseDoctor() {
68
+ return runBrowserUseRawCommand(['doctor']);
69
+ }
70
+ function runShellCommand(command) {
71
+ return new Promise(resolve => {
72
+ const proc = spawn(command, [], {
73
+ stdio: ['pipe', 'pipe', 'pipe'],
74
+ shell: true,
75
+ });
76
+ let stdout = '';
77
+ let stderr = '';
78
+ proc.stdout?.on('data', data => {
79
+ stdout += data.toString();
80
+ });
81
+ proc.stderr?.on('data', data => {
82
+ stderr += data.toString();
83
+ });
84
+ proc.on('close', code => {
85
+ resolve({ stdout, stderr, code: code ?? 0 });
86
+ });
87
+ proc.on('error', err => {
88
+ resolve({ stdout, stderr: err.message, code: 1 });
89
+ });
90
+ });
91
+ }
92
+ // ============ Core Browser Command Runner ============
93
+ /**
94
+ * Run a raw browser-use command without session
95
+ */
96
+ async function runBrowserUseRawCommand(args) {
97
+ const binaryPath = getBinaryPath();
98
+ if (!binaryPath) {
99
+ return {
100
+ stdout: '',
101
+ stderr: 'browser-use not found. Run: corebrain browser install',
102
+ code: 1,
103
+ };
104
+ }
105
+ return new Promise(resolve => {
106
+ const proc = spawn(binaryPath, args, {
107
+ stdio: ['pipe', 'pipe', 'pipe'],
108
+ });
109
+ let stdout = '';
110
+ let stderr = '';
111
+ proc.stdout?.on('data', data => {
112
+ stdout += data.toString();
113
+ });
114
+ proc.stderr?.on('data', data => {
115
+ stderr += data.toString();
116
+ });
117
+ proc.on('close', code => {
118
+ resolve({ stdout, stderr, code: code ?? 0 });
119
+ });
120
+ proc.on('error', err => {
121
+ resolve({ stdout, stderr: err.message, code: 1 });
122
+ });
123
+ });
124
+ }
125
+ /**
126
+ * Run a browser-use command with session
127
+ * browser-use --session <name> <command> <args>
128
+ */
129
+ async function runBrowserUseCommand(sessionName, args) {
130
+ // Use --session for persistent session state
131
+ const fullArgs = ['--session', sessionName, ...args];
132
+ return runBrowserUseRawCommand(fullArgs);
133
+ }
134
+ /**
135
+ * List all available sessions using browser-use sessions command
136
+ */
137
+ export async function listSessions() {
138
+ const result = await runBrowserUseRawCommand(['sessions']);
139
+ if (result.code !== 0) {
140
+ return [];
141
+ }
142
+ // Parse output - each line is a session name
143
+ // browser-use sessions outputs one session per line
144
+ const sessions = result.stdout
145
+ .trim()
146
+ .split('\n')
147
+ .map(line => line.trim())
148
+ .filter(line => line.length > 0 && !line.startsWith('No '));
149
+ return sessions;
150
+ }
151
+ /**
152
+ * Check if a session exists
153
+ */
154
+ export async function sessionExists(name) {
155
+ const sessions = await listSessions();
156
+ return sessions.includes(name);
157
+ }
158
+ // ============ Browser Operations ============
159
+ /**
160
+ * Open a browser with URL using the specified session
161
+ */
162
+ export async function browserOpen(url, sessionName = 'default', headed = false) {
163
+ const args = headed ? ['--headed', 'open', url] : ['open', url];
164
+ return runBrowserUseCommand(sessionName, args);
165
+ }
166
+ /**
167
+ * Close a browser for the specified session
168
+ */
169
+ export async function browserClose(sessionName) {
170
+ return runBrowserUseCommand(sessionName, ['close']);
171
+ }
172
+ /**
173
+ * Close all browser sessions
174
+ */
175
+ export async function browserCloseAll() {
176
+ return runBrowserUseRawCommand(['close', '--all']);
177
+ }
178
+ /**
179
+ * Check if a command is blocked
180
+ */
181
+ export function isBlockedCommand(command) {
182
+ const cmd = command.toLowerCase().trim();
183
+ return BLOCKED_COMMANDS.includes(cmd);
184
+ }
185
+ /**
186
+ * Execute a generic browser command on a session
187
+ * Blocks: open, close, cookies, storage, network, download, run, session, task, tunnel
188
+ */
189
+ export async function browserCommand(sessionName, command, args = []) {
190
+ // Check if command is blocked
191
+ if (isBlockedCommand(command)) {
192
+ return {
193
+ stdout: '',
194
+ stderr: `Command "${command}" is blocked. Blocked commands: ${BLOCKED_COMMANDS.join(', ')}`,
195
+ code: 1,
196
+ };
197
+ }
198
+ return runBrowserUseCommand(sessionName, [command, ...args]);
199
+ }
200
+ /**
201
+ * Get all available sessions
202
+ */
203
+ export async function browserGetSessions() {
204
+ return listSessions();
205
+ }
206
+ /**
207
+ * Get server status
208
+ */
209
+ export async function getServerStatus() {
210
+ return runBrowserUseRawCommand(['server', 'status']);
211
+ }
212
+ //# sourceMappingURL=browser-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-use.js","sourceRoot":"","sources":["../../src/utils/browser-use.ts"],"names":[],"mappings":"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"}
@@ -19,15 +19,13 @@ export declare function buildResumeArgs(config: CliBackendConfig, params: {
19
19
  prompt: string;
20
20
  sessionId: string;
21
21
  }): string[];
22
- export type Logger = (message: string) => void;
23
22
  /**
24
23
  * Start an agent process in the background (detached)
25
24
  * Returns immediately, CLI can exit while process continues
26
25
  * Output is written by the agent to its own session files (e.g., Claude Code writes to ~/.claude/projects/)
27
26
  */
28
- export declare function startAgentProcess(sessionId: string, config: CliBackendConfig, args: string[], workingDirectory: string, logger?: Logger): {
27
+ export declare function startAgentProcess(sessionId: string, config: CliBackendConfig, args: string[], workingDirectory: string): {
29
28
  pid: number | undefined;
30
- error?: string;
31
29
  };
32
30
  /**
33
31
  * Check if a process is still running by session ID
@@ -1 +1 @@
1
- {"version":3,"file":"coding-runner.d.ts","sourceRoot":"","sources":["../../src/utils/coding-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAOrD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAOzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GACC,MAAM,EAAE,CAoCV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CAClB,GACC,MAAM,EAAE,CAYV;AAwBD,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACb;IAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAgE3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAM3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAetD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAClD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAUP"}
1
+ {"version":3,"file":"coding-runner.d.ts","sourceRoot":"","sources":["../../src/utils/coding-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAOrD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAOzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GACC,MAAM,EAAE,CAoCV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CAClB,GACC,MAAM,EAAE,CAYV;AAwBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,EAAE,MAAM,GACtB;IAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAgC3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAM3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAetD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAClD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAUP"}
@@ -82,59 +82,31 @@ function ensureLogsDir() {
82
82
  * Returns immediately, CLI can exit while process continues
83
83
  * Output is written by the agent to its own session files (e.g., Claude Code writes to ~/.claude/projects/)
84
84
  */
85
- export function startAgentProcess(sessionId, config, args, workingDirectory, logger) {
86
- const log = logger || (() => { });
87
- log(`SPAWN_START: sessionId=${sessionId}`);
88
- log(`SPAWN_COMMAND: ${config.command}`);
89
- log(`SPAWN_ARGS: ${JSON.stringify(args)}`);
90
- log(`SPAWN_CWD: ${workingDirectory}`);
85
+ export function startAgentProcess(sessionId, config, args, workingDirectory) {
91
86
  // Ensure logs directory exists
92
87
  ensureLogsDir();
93
88
  // Open log files for stdout/stderr (so we can see any errors from the process itself)
94
89
  const stdoutPath = getSessionLogPath(sessionId, 'stdout');
95
90
  const stderrPath = getSessionLogPath(sessionId, 'stderr');
96
- log(`SPAWN_STDOUT_LOG: ${stdoutPath}`);
97
- log(`SPAWN_STDERR_LOG: ${stderrPath}`);
98
91
  const stdoutFd = openSync(stdoutPath, 'w');
99
92
  const stderrFd = openSync(stderrPath, 'w');
100
93
  // Spawn detached process
101
- // Note: shell: false is required to avoid shell metacharacter issues in prompts
102
- // (parentheses, quotes, etc. would otherwise be interpreted by the shell)
103
- let proc;
104
- try {
105
- proc = spawn(config.command, args, {
106
- cwd: workingDirectory,
107
- shell: false,
108
- stdio: ['ignore', stdoutFd, stderrFd],
109
- detached: true,
110
- });
111
- }
112
- catch (err) {
113
- const errorMsg = err instanceof Error ? err.message : String(err);
114
- log(`SPAWN_ERROR: Failed to spawn process: ${errorMsg}`);
115
- return { pid: undefined, error: errorMsg };
116
- }
117
- const pid = proc.pid;
118
- log(`SPAWN_PID: ${pid}`);
119
- // Handle spawn errors
120
- proc.on('error', (err) => {
121
- log(`SPAWN_PROCESS_ERROR: ${err.message}`);
122
- });
123
- // Log when process exits (useful for debugging quick failures)
124
- proc.on('exit', (code, signal) => {
125
- log(`SPAWN_EXIT: pid=${pid} code=${code} signal=${signal}`);
94
+ const proc = spawn(config.command, args, {
95
+ cwd: workingDirectory,
96
+ shell: true,
97
+ stdio: ['ignore', stdoutFd, stderrFd],
98
+ detached: true,
126
99
  });
100
+ const pid = proc.pid;
127
101
  // Store PID in session
128
102
  const session = getSession(sessionId);
129
103
  if (session && pid) {
130
104
  session.pid = pid;
131
105
  session.updatedAt = Date.now();
132
106
  updateSession(session);
133
- log(`SPAWN_SESSION_UPDATED: pid stored in session`);
134
107
  }
135
108
  // Unref so parent can exit
136
109
  proc.unref();
137
- log(`SPAWN_DETACHED: process detached and running`);
138
110
  return { pid };
139
111
  }
140
112
  /**